;Vysilac ; CPU 1,2 MHz ; f 37 500 Hz ; vytvoril: DANYK ; http://danyk.cz .NOLIST .INCLUDE "tn13def.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 .EQU SMER=DDRB ;rizeni smeru .EQU PORT=PORTB ;port .EQU PINY=PINB ;port .CSEG ;kodový segment .ORG 0 RJMP START .ORG PCI0addr RJMP TLACITKO START: ;nastavi portB LDI REG,0b00010000 OUT SMER,REG LDI REG,0b00001111 OUT PORT,REG ; NASTAVENI CASOVACU ;LDI REG,0b00000000 ; nastavi čítač na nulovani pri dosazeni porovnavane... ;OUT TCCR0A,REG ; ...hodnoty (tzv. CTC), OC0 nevyuzit, preddeleni 256 ;LDI REG,37 ; nastavi porovnavanou hodnotu (multiplex cca 100Hz) ;OUT OCR0A,REG ; ;LDI REG,0b00000000 ; povoli preruseni obou citacu ;OUT TIMSK0,REG ; (bit 0 povoli citac0A, bit 6 povoli citac1A) LDI REG,0b00100000 ; povoli preruseni PCINT OUT GIMSK,REG ; LDI REG,0b00001111 ; povoli preruseni PCINT na 0,1,2,3 OUT PCMSK,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 SEI SMYCKA: SLEEP RJMP SMYCKA TLACITKO: ZNOVA: IN REG2,PINY ANDI REG2,0b00001111 CPI REG2,0b00000111 BREQ TL3 CPI REG2,0b00001011 BREQ TL2 CPI REG2,0b00001101 BREQ TL1 CPI REG2,0b00001110 BREQ TL0 RJMP NENE ;Zakoduje tlacitko (dvoubitove kodovani) TL0: LDI REG2,0b00000000 RJMP TL_ZAKOD TL1: LDI REG2,0b00000001 RJMP TL_ZAKOD TL2: LDI REG2,0b00000010 RJMP TL_ZAKOD TL3: LDI REG2,0b00000011 RJMP TL_ZAKOD TL_ZAKOD: RCALL VYSILEJ RJMP ZNOVA NENE: LDI REG,0b00001111 OUT PORT,REG RETI ;Vysila s pouzitim inverzniho kontrolniho kodu ;Kodovani delkou mezery ;Zacina se MSB VYSILEJ: LDI CYKLY,6 VYSILEJ_DAL: RCALL KRATKA_1 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 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 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 RCALL DLOUHA_0 DEC CYKLY BRNE VYSILEJ_DAL RET ;Krátká mezera KRATKA_0: LDI CEK,16 CEKEJ_K0: NOP NOP LDI CEK2,9 CEKEJ_K0A: DEC CEK2 BRNE CEKEJ_K0A DEC CEK BRNE CEKEJ_K0 RET ;Dlouhá mezera DLOUHA_0: LDI CEK,64 CEKEJ_D0: NOP NOP LDI CEK2,9 CEKEJ_D0A: DEC CEK2 BRNE CEKEJ_D0A DEC CEK BRNE CEKEJ_D0 RET ;Krátký impulz KRATKA_1: LDI CEK,16 CEKEJ_K1: LDI REG,0b00011111 OUT PORT,REG LDI CEK2,3 CEKEJ_K1A: DEC CEK2 BRNE CEKEJ_K1A LDI REG,0b00001111 OUT PORT,REG ;NOP NOP LDI CEK2,5 CEKEJ_K1B: DEC CEK2 BRNE CEKEJ_K1B DEC CEK BRNE CEKEJ_K1 RET