Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def ResCnt=R21 //ðåãèñòð ïîä ñ÷åò÷èê ñáðîñîâ
.def IRcnt=R22 //ðåãèñòð ïîä ñ÷åò÷èê IR
.dseg
Digit: .byte 1
.cseg //îáîçíà÷àåò íà÷àëî ïðîãðàììíîãî ñåãìåíòà
.org 0 //çàäàåò íà÷àëüíûé àäðåñ.  äàííîì ñëó÷àå îí = 0
rjmp Reset ;âåêòîðà ïðåðûâàíèé
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP
;Reset:
;INT_0:
INT_1:
Timer1_capt1:
;Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
reti
Reset: ldi Temp1,0
ldi Temp2,0
ldi IRcnt,0
l_res: ;êîìàíäó èíêðåìåíòà ÷åðåç çàäåðæêó. Òîãäà ëîæíûå ñðàáàòûâàíèÿ, ïðîìåæóòîê ìåæäó êîòîðûìè ìåíüøå âðåìåíè çàäåðæêè, íå ïðèâåäóò ê èíêðåìåíòó ñ÷åò÷èêà…
; dec Temp1
; brne l_res
; dec Temp2
; brne l_res
Pause: ; ldi Temp1,0
; ldi Temp2,0
; dec Temp1
; brne Pause
; dec Temp2
; brne Pause
inc ResCnt
ldi Temp,0b11111111 ;;ïðèñâîåíèå êîíñòàíòû (Íàñòðàèâàåì ïîðò Â íà âûâîä)
out DDRB,Temp
ldi Temp,0b01110000 ;íàñòðîéêà ïîðòîâ
out DDRD,Temp
ldi Temp,0b01110000 ;èíèöèàëèçàöèÿ ÈÊ ïðè¸ìíèêà
out PortD,Temp
PauseIR: ldi Temp1,0
ldi Temp2,0
;dec Temp1
;brne PauseIR
;dec Temp2
;brne PauseIR
ldi Temp,0b01000000 ;èíèöèàëèçàöèÿ
out GIFR,Temp
ldi Temp,0b10000000 ;Ãëîáàëüíîå ðàçðåøåíèå ïðåðûâàíèÿ
out SREG,Temp
ldi Temp,0b01000000 ;Ðàçðåøåíèå ïðåðûâàíèÿ
out GIMSK,Temp
ldi Temp,0b00000010 ;ïðåðûâàíèå ïî ëîã 0 (HL)
out MCUCR,Temp
ldi Temp,0b01000000 ;ðàçðåøèòü ïðåðûâàíèå êîìïàðàòîðà
out TIMSK,Temp
ldi Temp,0b00000101 ;òàêòîâûé ñèãíàë = CK/1024
out TCCR1B,Temp
ldi Temp,0x27 ;èíèöèàëèçàöèÿ êîìïàðàòîðà
out OCR1AH,Temp
ldi Temp,0x10
out OCR1AL,Temp
ldi Temp,0 ;îáíóëåíèå òàéìåðà
out TCNT1H,Temp
out TCNT1L,Temp
;****************************************************
; ÈÍÈÖÈÀËÈÇÀÖÈß
;****************************************************
init:
ldi Temp1,RamEnd ;óñòàíîâêà óêàçàòåëÿ ñòåêà
out SPL,Temp1
;cli
SelectMode: // Âûáîð ðåæèìà ðàáîòû 1/2/3 - Íîðìà/Ýêîíîì/Âûêëþ÷åí
andi ResCnt,0b00000011 ;îòñå÷êà ëèøíèõ ðàçðÿäîâ ñ÷. ñáðîñîâ
cpi ResCnt,0 ;ñðàâíåíèå ñ÷åò÷èêà ñáðîñîâ ñ êîíñò.
brne Test1 ;åñëè íå ðàâíî - ñëåä. ïðîâåðêà
rjmp Normal
Test1:
cpi ResCnt,1 ;ñðàâíåíèå ñ÷åò÷èêà ñáðîñîâ ñ êîíñò.
brne Test2 ;åñëè íå ðàâíî - ñëåä. ïðîâåðêà
rjmp Sleeep
Test2:
cpi ResCnt,2 ;ñðàâíåíèå ñ÷åò÷èêà ñáðîñîâ ñ êîíñò.
brne Test3 ;åñëè íå ðàâíî - ñëåä. ïðîâåðêà
rjmp Counter
Test3:
cpi ResCnt,3 ;ñðàâíåíèå ñ÷åò÷èêà ñáðîñîâ ñ êîíñò.
brne SelectMode ;åñëè íå ðàâíî - ñëåä. ïðîâåðêà
rjmp Off
INT_0:
ldi Temp1,0
;ldi Temp,0 ;îáíóëåíèå òàéìåðà
;out TCNT1H,Temp
;out TCNT1L,Temp
inc IRcnt
;cpi IRcnt, 2
mov Temp1, IRcnt
;rcall Decoder
out PortB,IRcnt
rjmp expectation
Timer1_comp1:
ldi Temp,0b00000000 ;8.
out PortB,Temp
reti
Normal:
ldi Temp,0b11011000 ;Cèíõðî
out PortB,Temp
rjmp expectation
Sleeep:
ldi Temp,0b11010000 ;C.èíõðî Ýêîíîì
out PortB,Temp
rjmp expectation
Off:
ldi Temp,0b01000000 ;Quit
out PortB,Temp
rjmp expectation
;****************************************************
; ÎÆÈÄÀÍÈÅ, ãëàâíàÿ ÷àñòü ïðîãè
;****************************************************
expectation: rjmp expectation
Counter:
ldi Temp,0b00101001 ;Hàñòðîéêà
out PortB,Temp
sei ;ðàçðåøèòü ïðåðûâàíèÿ
ldi Temp,0b11101001 ;Hàñòðîéêà
out PortB,Temp
rjmp Counter
;*********************************************************
Decoder:
;ïðåîáðàçîâàíèå äâîè÷íîãî ÷èñëà
;â êîä 7-ñåãìåíòíîãî èíäèêàòîðà
ldi ZL,Low(DcMatrix*2) ;èíèöèàëèçàöèÿ ìàññèâà
ldi ZH,High(DcMatrix*2)
ldi Temp2,0 ;ïðèáàâëåíèå ïåðåìåííîé
add ZL,Temp1 ;ê 0-ìó àäðåñó ìàññèâà
adc ZH,Temp2
lpm ;çàãðóçêà çíà÷åíèÿ
mov Temp1,r0
ret
DcMatrix:
;ìàññèâ - òàáëèöà èñòèííîñòè äåêîäåðà
; bgdchefa bgdchefa
.db 0b10110111,0b10001000 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9
;*********************************************************