Техника микропроцессорных систем в коммутации. Проектирование микропроцессорных систем на базе микроконтроллеров AVR фирмы Atmel. Горохин В.Н. - 39 стр.

UptoLike

Составители: 

77
Ɂɚɞɚɧɢɟ ɤ ɥɚɛɨɪɚɬɨɪɧɨɣ ɪɚɛɨɬɟ
ɂɡɭɱɢɬɶ ɩɪɨɝɪɚɦɦɭ Lb7.asm ɢ ɮɚɣɥ ɩɪɨɟɤɬɚ Lb_7.prj. Ɉɬɥɚɞɢɬɶ ɩɪɨɝɪɚɦɦɭ
ɜ ɫɪɟɞɟ VMLab, ɩɨɞɤɥɸɱɢɜ ɧɟɨɛɯɨɞɢɦɭɸ ɩɟɪɢɮɟɪɢɸ ɤ ɦɢɤɪɨɤɨɧɬɪɨɥɥɟɪɭ
AVR – ɢɫɬɨɱɧɢɤɢ ɫɢɧɭɫɨɢɞɚɥɶɧɨɝɨ ɧɚɩɪɹɠɟɧɢɹ. ɉɪɨɝɪɚɦɦɚ ɫɪɚɜɧɢɜɚɟɬ ɚɧɚɥɨ-
ɝɨɜɵɟ ɧɚɩɪɹɠɟɧɢɹ ɧɚ ɤɨɧɬɚɤɬɚɯ PB2 ɢ PB3, ɧɚ ɤɨɬɨɪɵɟ ɩɨɞɚɸɬɫɹ ɫɢɝɧɚɥɵ ɨɬ
ɝɟɧɟɪɚɬɨɪɨɜ ɫɢɧɭɫɨɢɞɚɥɶɧɵɯ ɫɢɝɧɚɥɨɜ ɫ ɪɚɡɧɨɣ ɱɚɫɬɨɬɨɣ. ȼɢɡɭɚɥɶɧɨ ɩɪɨɫɦɚɬ-
ɪɢɜɚɟɬɫɹ ɫɢɝɧɚɥ ɫ ɜɵɯɨɞɚ ɚɧɚɥɨɝɨɜɨɝɨ ɤɨɦɩɚɪɚɬɨɪɚ. ɇɚ ɪɢɫ. 30 ɩɪɟɞɫɬɚɜɥɟɧɵ
ɪɟɡɭɥɶɬɚɬɵ ɦɨɞɟɥɢɪɨɜɚɧɢɹ ɩɪɨɝɪɚɦɦɵ ɭɩɪɚɜɥɟɧɢɹ ɚɧɚɥɨɝɨɜɵɦ ɩɪɟɨɛɪɚɡɨɜɚɬɟ-
ɥɟɦ ɩɨ ɩɪɟɪɵɜɚɧɢɹɦ.
Ɋɢɫ.30. Ɋɟɡɭɥɶɬɚɬɵ ɦɨɞɟɥɢɪɨɜɚɧɢɹ ɩɪɨɝɪɚɦɦɵ
ɭɩɪɚɜɥɟɧɢɹ ɚɧɚɥɨɝɨɜɵɦ ɤɨɦɩɚɪɚɬɨɪɨɦ
Ɏɚɣɥ Lɚb_7.prj
.MICRO "ATmega16"
.PROGRAM "Lab7.asm" ; Atmel application note
.TRACE ; Activate micro trace
.clock 1meg
; ɩɨɞɤɥɸɱɟɧɵ ɞɜɚ ɝɟɧɟɪɚɬɨɪɚ ɫɢɧɭɫɚ ɧɟɡɧɚɱɢɬɟɥɶɧɨ ɨɬɥɢɱɧɵɟ
; ɩɨ ɱɚɫɬɨɬɟ (V1, and V2) ɤ PB2 ɢ PB3.
; ɋɢɝɧɚɥ «AC0» (Analog Compator Out) ɪɟɚɥɶɧɨ ɧɟ ɢɦɟɟɬɫɹ
; ɧɚ ɤɨɧɬɚɤɬɚɯ ɦɢɤɪɨɤɨɧɬɪɨɥɥɟɪɚ AVR, ɧɨ ɟɝɨ ɫɨɫɬɨɹɧɢɟ
78
; ɦɨɠɧɨ ɩɪɨɫɦɨɬɪɟɬɶ ɧɚ ɦɨɧɢɬɨɪɟ ɢɧɫɬɪɭɦɟɧɬɚ «Scope»
V1 PB2 VSS SIN(2.5 2.5 10K)
V2 PB3 VSS SIN(2.5 2.5 11K)
.plot v(pb2) v(pb3) v(aco)
Ɏɚɣɥ Lab7.asm
;* ɉɪɨɝɪɚɦɦɚ ɢɫɩɨɥɶɡɭɟɬ ɚɧɚɥɨɝɨɜɵɣ ɤɨɦɩɚɪɚɬɨɪ ɦɢɤɪɨɤɨɧɬɪɨɥɥɟɪɚ
;* – ɨɠɢɞɚɧɢɟ ɩɨ ɩɨɥɨɠɢɬɟɥɶɧɨɦɭ ɩɟɪɟɩɚɞɭ ɜɵɯɨɞɚ ɤɨɦɩɚɪɚɬɨɪɚ
;* – ɨɠɢɞɚɧɢɟ ɩɨ ɩɨɥɨɠɢɬɟɥɶɧɨɦɭ ɩɟɪɟɩɚɞɭ ɮɥɚɝɚ ɩɪɟɪɵɜɚɧɢɹ
;* – Enable interrupt on comparator output toggle. The interrupt routine
;* – ɢɧɤɪɟɦɟɧɬ 16-ɪɚɡɪɹɞɧɨɝɨ ɫɱɟɬɱɢɤɚ ter counter each time it is executed
.include "C:\vmlab\include\m16def.inc"
.def temp =r16 ;temporary storage register
.def cntL =r17 ;ɪɟɝɢɫɬɪ ɫɱɟɬɚ ɦɥɚɞɲɟɝɨ ɛɚɣɬɚ
.def cntH =r18 ;ɪɟɝɢɫɬɪ ɫɱɟɬɚ ɫɬɚɪɲɟɝɨ ɛɚɣɬɚ
;* ɂɧɢɰɢɚɥɢɡɚɰɢɹ ɜɟɤɬɨɪɨɜ ɩɪɟɪɵɜɚɧɢɣ
rjmp RESET ;ȼ ɧɚɱɚɥɨ ɩɪɨɝɪɚɦɦɵ
.org ACIaddr
rjmp ANA_COMP ;ȼ ɩɨɞɩɪɨɝɪɚɦɦɭ ɨɛɪɚɛɨɬɤɢ ɩɪɟɪɵɜɚɧɢɹ ɨɬ AC
;******** ɉɨɞɩɪɨɝɪɚɦɦɚ ɨɛɪɚɛɨɬɤɢ ɩɪɟɪɵɜɚɧɢɹ ɨɬ AC*********************
;* ɗɬɚ ɩɨɞɩɪɨɝɪɚɦɦɚ ɭɜɟɥɢɱɢɜɚɟɬ ɫɨɞɟɪɠɢɦɨɟ 16-ɪɚɡɪɹɞɧɨɝɨ ɫɱɟɬɱɢɤɚ
;* ɜɫɹɤɢɣ ɪɚɡ, ɤɨɝɞɚ ɜɨɡɧɢɤɚɟɬ ɩɪɟɪɵɜɚɧɢɟ ɩɨ ɚɧɚɥɨɝɨɜɨɦɭ ɤɨɦɩɚɪɚɬɨɪɭ
;*******************************************************************
.def ac_tmp =r0 ;ɜɪɟɦɟɧɧɵɣ ɪɟɝɢɫɬɪ ɯɪɚɧɟɧɢɹ ɞɥɹ SREG
ANA_COMP:
in ac_tmp,SREG ;ɡɚɩɨɦɢɧɚɧɢɟ SREG
subi cntL,low(–1)
sbci cntH,high(–1) ;ɢɧɤɪɟɦɟɧɬ 16-ɪɚɡɪɹɞɧɨɝɨ ɫɱɟɬɱɢɤɚ cnt(H,L)=cnt(H,L)–(–1)
out SREG,ac_tmp ;ɜɨɫɫɬɚɧɨɜɥɟɧɢɟ SREG
reti ; ɜɨɡɜɪɚɬ ɢɡ ɩɪɟɪɵɜɚɧɢɣ
;******************* Ɉɫɧɨɜɧɚɹ ɩɪɨɝɪɚɦɦɚ *****************************
RESET:
;***** ɂɧɢɰɢɚɥɢɡɚɰɢɹ ɫɬɟɤɚ
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,high(RAMEND)
out SPH,temp
;***************** «ɨɠɢɞɚɧɢɟ_edge1»
;* ɗɬɚ ɱɚɫɬɶ ɨɫɭɳɟɫɬɜɥɹɟɬ ɨɠɢɞɚɧɢɟ (ɡɚɞɟɪɠɤɭ), ɩɨɤɚ ɜɵɯɨɞ ɤɨɦɩɚɪɚɬɨɪɚ
;* (ACO–bit ɜ ACSR) ɧɟ ɫɬɚɧɟɬ ɪɚɜɧɵɦ 1.
;* extremely short pulses can be missed, since the program runs three clock
;* cycles between each time the comparator is checked. Another disadvantage
;* is that the program has to wait for the output to be come negative first,