; Vysilac dalkoveho ovladani ATtiny24 / 24V / 24A ; CPU 1 MHz ; fo = 37 kHz (CPU / 27) ; DANYK ; http://danyk.cz/avr_do3.html .NOLIST .INCLUDE "tn24def.inc" .LIST .DEF REG=R16 ;pracovni registr .DEF REG2=R17 ;pracovni registr 2 .DEF CYKLY=R18 ;pocitadlo cyklu .DEF CEK=R19 ;cekaci registr .DEF CEK2=R20 ;cekaci registr 2 .DEF REG3=R21 ;pracovni registr 3 .DEF PRED=R22 ;predchozi stav .DEF PRED2=R23 ;predchozi stav 2 .EQU SMER=DDRA .EQU PORT=PORTA .EQU PINY=PINA ;vstupy .EQU SMER2=DDRB .EQU PORT2=PORTB .EQU PINY2=PINB ;vstupy .CSEG ;kodový segment .ORG 0 RJMP START .ORG PCI0addr RJMP TLACITKA_0_9 .ORG PCI1addr RJMP TLACITKA_0_9 START: LDI REG,LOW(RAMEND) OUT SPL,REG ;nastavi port 1 LDI REG,0b00000000 OUT SMER,REG LDI REG,0b11111111 OUT PORT,REG ;nastavi port 2 LDI REG,0b100 OUT SMER2,REG LDI REG,0b011 OUT PORT2,REG LDI REG,0b00110000 ; povoli preruseni PCINT OUT GIMSK,REG ; LDI REG,0b11111111 ; povoli preruseni PCINT OUT PCMSK0,REG ; LDI REG,0b00000011 ; povoli preruseni PCINT OUT PCMSK1,REG ; LDI REG,0b00110000 ;povoli uspani (sleep) a nastavi mod power down OUT MCUCR,REG ;vypne analog. komparator - neni nikdy vyuzit (setri energii) LDI REG,0b10000000 OUT ACSR,REG ;vypne dalsi veci: citace, USI, USART (setri energii) LDI REG,0b00001111 OUT PRR,REG CLR PRED CLR PRED2 SEI SMYCKA: SLEEP RJMP SMYCKA ;Tlacitko 0-7, 8-9 TLACITKA_0_9: IN REG,PINY IN REG2,PINY2 ORI REG2,0b11111100 LDI REG3,0b11111111 CP REG,REG3 CPC REG2,REG3 BRNE STISKNUTO CLR PRED CLR PRED2 LDI REG3,0b011 OUT PORT2,REG3 RETI STISKNUTO: CP REG,PRED CPC REG2,PRED2 MOVW PRED,REG ;ulozeni predch. stavu REG do PRED a REG2 do PRED2 BREQ STEJNE RCALL VYSILEJ RJMP TLACITKA_0_9 STEJNE: RCALL OPAKUJ RJMP TLACITKA_0_9 ;Opakuje OPAKUJ: LDI CYKLY,2 OPAKUJ_DAL: RCALL KRATKA_1 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 DEC CYKLY BRNE OPAKUJ_DAL RET ;Vysila s pouzitim inverzniho kontrolniho kodu ;Kodovani delkou mezery ;Zacina se MSB VYSILEJ: LDI CYKLY,2 VYSILEJ_DAL: RCALL KRATKA_1 SBRC REG2,1 RCALL KRATKA_0 SBRS REG2,1 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG2,0 RCALL KRATKA_0 SBRS REG2,0 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,7 RCALL KRATKA_0 SBRS REG,7 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,6 RCALL KRATKA_0 SBRS REG,6 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,5 RCALL KRATKA_0 SBRS REG,5 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,4 RCALL KRATKA_0 SBRS REG,4 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,3 RCALL KRATKA_0 SBRS REG,3 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,2 RCALL KRATKA_0 SBRS REG,2 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,1 RCALL KRATKA_0 SBRS REG,1 RCALL DLOUHA_0 RCALL KRATKA_1 SBRC REG,0 RCALL KRATKA_0 SBRS REG,0 RCALL DLOUHA_0 ; tady zacina kontrolni RCALL KRATKA_1 ; tady zacina kontrolni SBRS REG2,1 RCALL KRATKA_0 SBRC REG2,1 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG2,0 RCALL KRATKA_0 SBRC REG2,0 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,7 RCALL KRATKA_0 SBRC REG,7 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,6 RCALL KRATKA_0 SBRC REG,6 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,5 RCALL KRATKA_0 SBRC REG,5 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,4 RCALL KRATKA_0 SBRC REG,4 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,3 RCALL KRATKA_0 SBRC REG,3 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,2 RCALL KRATKA_0 SBRC REG,2 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,1 RCALL KRATKA_0 SBRC REG,1 RCALL DLOUHA_0 RCALL KRATKA_1 SBRS REG,0 RCALL KRATKA_0 SBRC REG,0 RCALL DLOUHA_0 RCALL KRATKA_1 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 DEC CYKLY BREQ DOVYSILEJ RJMP VYSILEJ_DAL DOVYSILEJ: RET ;Krátká mezera KRATKA_0: LDI CEK,16 CEKEJ_K0: LDI CEK2,8 CEKEJ_K0A: DEC CEK2 BRNE CEKEJ_K0A DEC CEK BRNE CEKEJ_K0 RET ;Dlouhá mezera DLOUHA_0: LDI CEK,64 CEKEJ_D0: LDI CEK2,8 CEKEJ_D0A: DEC CEK2 BRNE CEKEJ_D0A DEC CEK BRNE CEKEJ_D0 RET ;Krátký impulz KRATKA_1: LDI CEK,16 CEKEJ_K1: LDI REG3,0b111 OUT PORT2,REG3 NOP LDI CEK2,2 CEKEJ_K1A: DEC CEK2 BRNE CEKEJ_K1A LDI REG3,0b011 OUT PORT2,REG3 NOP LDI CEK2,4 CEKEJ_K1B: DEC CEK2 BRNE CEKEJ_K1B DEC CEK BRNE CEKEJ_K1 RET