; Vysilac 4-kanaloveho radioveho dalkoveho ovladani ; Modulace sirkou pulzu ; CPU 1,2 MHz ; DANYK ; http://danyk.cz/avr_rdo.html .NOLIST .INCLUDE "tn13def.inc" .LIST ; --- !!! ZDE SE NASTAVUJE 7-bitove ID zarizeni !!! ---------------- .EQU ID=0b1001010 ; ------------------------------------------------------------------ ;.DEF POS3=R13 ;posuvne registry .DEF POS1=R14 ;posuvne registry .DEF POS2=R15 ;posuvne registry .DEF REG=R16 ;pracovni registr .DEF REG2=R17 ;pracovni registr 2 .DEF CYKLY=R18 ;pocitadlo vysilacich cyklu .DEF BITY=R19 ;pocitadlo odeslanych bitu .DEF DATA1=R20 ;data .DEF DATA2=R21 ;data ;.DEF DATA3=R22 ;data .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 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: IN REG2,PINY ANDI REG2,0b00001111 CPI REG2,0b00001111 BREQ NENE RCALL ZAKODUJ RJMP TLACITKO NENE: LDI REG,0b00001111 OUT PORT,REG RETI ZAKODUJ: ; zakodovani dat (stav tlacitek v REG2 ... 0-0-0-0-TL4-TL3-TL2-TL1) ;vytvori inverzi MOV DATA2,REG2 SWAP DATA2 COM REG2 ANDI REG2,0b00001111 OR DATA2,REG2 LDI REG,ID LSL REG MOV DATA1,REG ;spocita paritni bit (REG) z dolni pulky REG2 a z REG EOR REG2,REG SWAP REG EOR REG2,REG MOV REG,REG2 LSR REG2 LSR REG2 EOR REG,REG2 MOV REG2,REG LSR REG2 EOR REG,REG2 ANDI REG,1 ;prida paritni bit OR DATA1,REG RCALL VYSILEJ RET ;Vysila s pouzitim inverzniho kontrolniho kodu ;Kodovani delkou pulzu (dlouhy = 1) ;Zacina se MSB VYSILEJ: LDI CYKLY,5 ;pocet vzorku v jednom vysilacim impulzu VYSILEJ_DAL: MOVW POS1,DATA1 ;MOV POS3,DATA3 LDI BITY,16 DALSI_BIT: SBRS POS2,7 RCALL KRATKA_1 SBRC POS2,7 RCALL DLOUHA_1 RCALL KRATKA_0 LSL POS1 ROL POS2 ;ROL POS3 DEC BITY BRNE DALSI_BIT RCALL KRATKA_0 RCALL KRATKA_0 RCALL KRATKA_0 RCALL KRATKA_0 DEC CYKLY BREQ DOVYSILEJ RJMP VYSILEJ_DAL DOVYSILEJ: RET ;Krátká mezera KRATKA_0: LDI REG,80 ;x 2,5us CEKEJ_K0: DEC REG BRNE CEKEJ_K0 RET ;Krátký impulz KRATKA_1: SBI PORT,4 LDI REG,40 ;x 2,5us CEKEJ_K1: DEC REG BRNE CEKEJ_K1 CBI PORT,4 RET ;Dlouhý impulz DLOUHA_1: SBI PORT,4 LDI REG,160 ;x 2,5us CEKEJ_D1: DEC REG BRNE CEKEJ_D1 CBI PORT,4 RET