|
@@ -35,8 +35,8 @@
|
|
|
.def msrH = r15
|
|
|
.def temp = r16 ; ðàáî÷àÿ ïåðåìåííàÿ
|
|
|
.def tmp1 = r17
|
|
|
-.def cnt1 = r18 ; ðàáî÷èé ñ÷¸ò÷èê
|
|
|
-.def cnt2 = r19 ; ñ÷¸ò÷èê öèêëîâ ÀÖÏ
|
|
|
+.def cnt1 = r18 ; ðàáî÷èé ñ÷¸ò÷èê, ñ÷¸ò÷èê öèêëîâ ÀÖÏ
|
|
|
+.def cnt2 = r19 ; ñ÷¸ò÷èê öèêëîâ Led_Out
|
|
|
.def LEDN = r20
|
|
|
; r21
|
|
|
; r22
|
|
@@ -68,8 +68,9 @@
|
|
|
.equ SCK = 0
|
|
|
.equ DATA = 1
|
|
|
.equ LOCK = 2
|
|
|
-.equ T1DIVL = 0x8F
|
|
|
-.equ T1DIVH = 0xFD ; 0x10000-8MHz/64/200Hz
|
|
|
+;.equ T1DIVL = 0x8F
|
|
|
+;.equ T1DIVH = 0xFD ; 0x10000-8MHz/64/200Hz
|
|
|
+.equ T0DIV = 0x83 ; 0x100-8MHz/256/250Hz
|
|
|
.equ VREF = 500 ; îïîðíîå íàïðÿæåíèå * 10 ìÂ
|
|
|
.equ SPH = 0x3e
|
|
|
.equ DOT_BIT = 5 ; bit5 -- òî÷êà
|
|
@@ -119,10 +120,10 @@ Buffer: .byte 2*BuffSize
|
|
|
reti;jmp TIM1_CAPT ; Timer1 Capture Handler
|
|
|
reti;jmp TIM1_COMPA ; Timer1 Compare A Handler
|
|
|
reti;jmp TIM1_COMPB ; Timer1 Compare B Handler
|
|
|
- rjmp TIM1_OVF ; Timer1 Overflow Handler
|
|
|
+ reti;jmp TIM1_OVF ; Timer1 Overflow Handler
|
|
|
reti;jmp TIM0_COMPA ; Timer0 Compare A Handler
|
|
|
reti;jmp TIM0_COMPB ; Timer0 Compare B Handler
|
|
|
- reti;jmp TIM0_OVF ; Timer0 Overflow Handler
|
|
|
+ rjmp TIM0_OVF ; Timer0 Overflow Handler
|
|
|
reti;jmp ANA_COMP ; Analog Comparator Handler
|
|
|
rjmp ADCC ; ADC Conversion Handler
|
|
|
; rjmp EE_RDY ; EEPROM Ready Handler
|
|
@@ -136,25 +137,38 @@ RESET:
|
|
|
out SPH,temp
|
|
|
ldi temp,low(RAMEND)
|
|
|
out SPL,temp; Set Stack Pointer to top of RAM
|
|
|
-; âûêë. àíàëîã, êîìïàðàòîð
|
|
|
+
|
|
|
+;;; âûêë. àíàëîã, êîìïàðàòîð
|
|
|
ldi temp,1<<ACD
|
|
|
out ACSR,temp
|
|
|
-; íàñòðîèì ÀÖÏ. îïîðà - Vcc, êàíàë 1, íåïðåðûâíîå ïðåîáðàçîâàíèå. temp=0b00100010
|
|
|
+
|
|
|
+;;; íàñòðîèì ÀÖÏ. îïîðà - Vcc, êàíàë 1, íåïðåðûâíîå ïðåîáðàçîâàíèå. temp=0b00100010
|
|
|
ldi temp,1<<MUX0
|
|
|
out ADMUX,temp
|
|
|
ldi temp,(1<<ADEN)|(1<<ADSC)|(6<<ADPS0)
|
|
|
out ADCSRA,temp
|
|
|
-; timer1 - ÷àñòîòà 200 ãö, ïðè òàêòîâîé 8ÌÃö, ïðåñêàëåð=64
|
|
|
- ldi temp,(3<<CS10)
|
|
|
- out TCCR1B,temp
|
|
|
- ldi temp,T1DIVH
|
|
|
- out TCNT1H,temp
|
|
|
- ldi temp,T1DIVL
|
|
|
- out TCNT1L,temp ; çàïóñòèëè òàéìåð 1
|
|
|
+
|
|
|
+;;; òàéìåð0 èíòåðâàëû â 4 ìñåê (250 Hz). ïðåñêàëåð = 256
|
|
|
+ ldi temp,(1<<CS02)
|
|
|
+ out TCCR0B,temp
|
|
|
+ ldi temp,T0DIV
|
|
|
+ out TCNT0,temp ; çàïóñòèëè òàéìåð
|
|
|
+; ïðåðûâàíèÿ îò òàéìåðîâ
|
|
|
+ ldi temp,(1<<TOIE0)
|
|
|
+ out TIMSK0,temp ; ðàçðåøèì ïðåðûâàíèå ïî ïåðåïîëíåíèþ
|
|
|
+
|
|
|
+;; timer1 - ÷àñòîòà 200 ãö, ïðè òàêòîâîé 8ÌÃö, ïðåñêàëåð=64
|
|
|
+; ldi temp,(3<<CS10)
|
|
|
+; out TCCR1B,temp
|
|
|
+; ldi temp,T1DIVH
|
|
|
+; out TCNT1H,temp
|
|
|
+; ldi temp,T1DIVL
|
|
|
+; out TCNT1L,temp ; çàïóñòèëè òàéìåð 1
|
|
|
; ðàçðåøàåì ïðåðûâàíèå îò òàéìåðà
|
|
|
- ldi temp,1<<TOIE1
|
|
|
- out TIMSK1,temp
|
|
|
-; init
|
|
|
+; ldi temp,1<<TOIE1
|
|
|
+; out TIMSK1,temp
|
|
|
+
|
|
|
+;;; init
|
|
|
ldi LEDN,0b11101111 ; ïåðâûé èíäèêàòîð
|
|
|
ldi temp,IND_LA
|
|
|
out DISP_DDR,temp
|
|
@@ -170,7 +184,8 @@ RESET:
|
|
|
mov LED4,temp
|
|
|
ldi bAddr,low(Buffer)
|
|
|
clr bIdx
|
|
|
-; Enable interrupts
|
|
|
+
|
|
|
+;;; Enable interrupts
|
|
|
sei
|
|
|
;******************************
|
|
|
;;;;; Îñíîâíàÿ ïðîãðàììà
|
|
@@ -178,14 +193,16 @@ BEGIN:
|
|
|
;;; çàïóñêàåì èçìåðåíèÿ è ïðåîáðàçîâàíèÿ
|
|
|
clr msrL
|
|
|
clr msrH ; î÷èñòèëè õðàíèëèùå ðåçóëüòàòà
|
|
|
- ldi cnt2,16 ; çàãðóçèëè ñ÷¸ò÷èê èçìåðåíèé
|
|
|
+ ldi cnt1,16 ; çàãðóçèëè ñ÷¸ò÷èê èçìåðåíèé
|
|
|
sbi ADCSRA,ADATE ; çàïóñê free running mode
|
|
|
sbi ADCSRA,ADIE ; ðàçðåøàåì ïðåðûâàíèÿ îò ÀÖÏ
|
|
|
sbi ADCSRA,ADSC ; çàïóñê íîâ. ïðåîáðàçîâàíèÿ
|
|
|
+
|
|
|
ML1:
|
|
|
; rjmp PC+1 ; nop x 2 -- 1 world 2 takta. èëè sleep?
|
|
|
- rcall WAIT_IRQ
|
|
|
- tst cnt2 ; ãîíÿåì ïóñòîé öèêë ïîêà áóäóò ïðîèñõîäèòü 16 èçìåðåíèé
|
|
|
+ rcall WAIT_IRQ ; îäèí öèêë èçìåðåíèÿ, ÅÌÍÈÏ áîëüøå 100 ìêñ...
|
|
|
+ tst cnt1 ; ãîíÿåì ïóñòîé öèêë ïîêà áóäóò ïðîèñõîäèòü 16 èçìåðåíèé
|
|
|
+
|
|
|
brne ML1
|
|
|
cbi ADCSRA,ADIE ; çàïðåùàåì ïðåðûâàíèÿ îò ÀÖÏ
|
|
|
cbi ADCSRA,ADATE ; stop free running mode
|
|
@@ -294,6 +311,7 @@ MakeDigit2:
|
|
|
rcall OUT_NIBBL ; íèááë 0, ñîòûå
|
|
|
|
|
|
;;; Êîíåö öèêëà
|
|
|
+ rcall WAIT_IRQ
|
|
|
rjmp BEGIN
|
|
|
|
|
|
;******************************
|
|
@@ -309,21 +327,6 @@ WAIT_IRQ:
|
|
|
out MCUCR,temp ; ñî ñíà
|
|
|
ret
|
|
|
|
|
|
-;******************************
|
|
|
-; âûäà¸ò â ïîðò 8 áèò èç temp, ïîðòèò cnt1
|
|
|
-LEDOUT:
|
|
|
- ldi cnt1,8 ; ñ÷åò÷èê áèò
|
|
|
-LO1: cbi SER_PORT,SCK ; SCK=0
|
|
|
- lsl temp ; ñòàðøèé áèò â ïåðåíîñ
|
|
|
- brcc LO0 ; åñëè â ïåðåíîñå 0 — ïåðåéòè
|
|
|
- sbi SER_PORT,DATA ; âûäàëè 1
|
|
|
- rjmp LOE
|
|
|
-LO0: cbi SER_PORT,DATA ; âûäàëè 0
|
|
|
-LOE: sbi SER_PORT,SCK ; SCK=1, ñäâèã äàííûõ
|
|
|
- dec cnt1
|
|
|
- brne LO1
|
|
|
- ret
|
|
|
-
|
|
|
;******************************
|
|
|
;** ïåðåâîäèì ìëàäøèé íèááë temp â êîä äëÿ 7-ñãì èíä è êëàä¸ì åãî â îçó ïî àäð X
|
|
|
OUT_NIBBL:
|
|
@@ -393,13 +396,14 @@ bBCDx_3:ld temp,-Z ;get (Z) with pre-decrement
|
|
|
;;;;; Îáðàáîò÷èêè ïðåðûâàíèé
|
|
|
|
|
|
;******************************
|
|
|
-; Timer1 Overflow Handler
|
|
|
-TIM1_OVF:
|
|
|
+; Timer0 Overflow Handler
|
|
|
+TIM0_OVF:
|
|
|
; âûâîäèì äàííûå íà 7-ìè ñåãìåíòíûå èíäèêàòîðû
|
|
|
-; îòñ÷èòûâàåì 100 ìñåê èíòåðâàë äëÿ çàïóñêà èçìåðåíèé
|
|
|
PUSHF
|
|
|
|
|
|
-T1L1:
|
|
|
+ ldi temp,T0DIV
|
|
|
+ out TCNT0,temp ; ïåðåçàïóñòèëè òàéìåð 0
|
|
|
+
|
|
|
;***************************
|
|
|
; âûâîä íà èíäèêàòîð î÷åðåäíîé öèôðû
|
|
|
in temp,DISP_PORT
|
|
@@ -407,22 +411,30 @@ T1L1:
|
|
|
out DISP_PORT,temp ; ïîãàñèëè âñå èíäèêàòîðû
|
|
|
cbi SER_PORT,LOCK ; ïîäãòîâèëè çàù¸ëêó
|
|
|
ld temp,Y+ ; â òåìï - òåêóùàÿ öèôðà, àäðåñ=+1
|
|
|
- rcall LEDOUT ; âûïèõíóëè î÷åðåäíîé áàéò â ðåãèñòð
|
|
|
+
|
|
|
+;;; âûïèõíåì î÷åðåäíîé áàéò â ðåãèñòð
|
|
|
+ ldi cnt2,8 ; ñ÷åò÷èê áèò
|
|
|
+LO1: cbi SER_PORT,SCK ; SCK=0
|
|
|
+ lsl temp ; ñòàðøèé áèò â ïåðåíîñ
|
|
|
+ brcc LO0 ; åñëè â ïåðåíîñå 0 — ïåðåéòè
|
|
|
+ sbi SER_PORT,DATA ; âûäàëè 1
|
|
|
+ rjmp LOE
|
|
|
+LO0: cbi SER_PORT,DATA ; âûäàëè 0
|
|
|
+LOE: sbi SER_PORT,SCK ; SCK=1, ñäâèã äàííûõ
|
|
|
+ dec cnt2
|
|
|
+ brne LO1
|
|
|
+
|
|
|
sbi SER_PORT,LOCK ; èç 0 â 1 -- çàù¸ëêèâàíèå äàííûõ â ðåãèñòðå
|
|
|
in temp,DISP_PORT
|
|
|
ori temp,IND_LA
|
|
|
and temp,LEDN
|
|
|
out DISP_PORT,temp ; âêëþ÷àåì î÷åðåäíîé èíäèêàòîð
|
|
|
lsl LEDN ; ñäâèíóëè - ñëåäóþùèé èíäèêàòîð
|
|
|
- brlo T1L2 ; âûøëè çà ãðàíèöû? ïðîâåðêà
|
|
|
+ brlo T0L2 ; âûøëè çà ãðàíèöû? ïðîâåðêà
|
|
|
ldi LEDN,0b11101111 ; äà, çàãðóæàåì íà÷àëüíîå çíà÷åíèå
|
|
|
ldi YL,AtLED1 ; çàãðóæàåì àäðåñ 1-ãî èíäèêàòîðà
|
|
|
-T1L2:
|
|
|
- ldi temp,T1DIVH
|
|
|
- out TCNT1H,temp
|
|
|
- ldi temp,T1DIVL
|
|
|
- out TCNT1L,temp ; ïåðåçàïóñòèëè òàéìåð 1
|
|
|
|
|
|
+T0L2:
|
|
|
POPF
|
|
|
reti
|
|
|
|
|
@@ -435,7 +447,7 @@ ADCC:
|
|
|
add msrL,temp
|
|
|
in temp,ADCH
|
|
|
adc msrH,temp
|
|
|
- dec cnt2
|
|
|
+ dec cnt1
|
|
|
reti
|
|
|
|
|
|
;***************************
|
|
@@ -465,13 +477,13 @@ TIM1_COMPA: ; Timer1 Compare A Handler
|
|
|
TIM1_COMPB: ; Timer1 Compare B Handler
|
|
|
reti
|
|
|
|
|
|
-TIM0_COMPA: ; Timer0 Compare A Handler
|
|
|
+TIM1_OVF: ; Timer1 Overflow Handler
|
|
|
reti
|
|
|
|
|
|
-TIM0_COMPB: ; Timer0 Compare B Handler
|
|
|
+TIM0_COMPA: ; Timer0 Compare A Handler
|
|
|
reti
|
|
|
|
|
|
-TIM0_OVF: ; Timer0 Overflow Handler
|
|
|
+TIM0_COMPB: ; Timer0 Compare B Handler
|
|
|
reti
|
|
|
|
|
|
ANA_COMP: ; Analog Comparator Handler
|