; Prijimac 4-kanaloveho radioveho dalkoveho ovladani ; kodovani delkou pulzu ; ATtiny13A / 13 / 13V, 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=0b1001001 ; ------------------------------------------------------------------ .DEF VYST1_P=R12 ;predchozi stav prijimace bitu .DEF VYST2_P=R13 ;predchozi stav prijimace bitu 2 .DEF VYST1=R14 ;posuvny registr prijimace bitu .DEF VYST2=R15 ;posuvny registr prijimace bitu 2 .DEF REG=R16 ;pracovni registr .DEF REG2=R17 ;pracovni registr 2 .DEF STAV=R18 ;registr stavu vstupu .DEF PRODLEVA=R19 ;prodleva do dalsi reakce .DEF KOPIE1=R20 ;kopie vystupu .DEF KOPIE2=R21 ;kopie vystupu 2 .DEF BITY=R22 ;pocitadlo bitu .DEF ZALOHA=R23 ;zalohuje casomiru .DEF PRETEK=R24 ;pretekani casovace .EQU SMER=DDRB ;rizeni smeru .EQU PORT=PORTB ;port .EQU PINY=PINB ;port .CSEG ;kodový segment .ORG 0 RJMP START .ORG PCI0addr RJMP SIGNAL .ORG OC0Aaddr RJMP CAS_VYPRSEL START: LDI REG,LOW(RAMEND) OUT SPL,REG ;nastavi portB LDI REG,0b00001111 OUT SMER,REG LDI REG,0b00000000 OUT PORT,REG ; NASTAVENI CASOVACU LDI REG,0b00000010 ; nastavi čítač na nulovani pri dosazeni porovnavane... OUT TCCR0A,REG ; ...hodnoty (tzv. CTC), OC0 nevyuzit LDI REG,0b00000010 ; preddeleni 8 OUT TCCR0B,REG ; LDI REG,255 ; nastavi porovnavanou hodnotu OUT OCR0A,REG ; LDI REG,0b00000100 ; povoli preruseni OCIE0A OUT TIMSK0,REG ; LDI REG,0b00100000 ; povoli preruseni PCINT OUT GIMSK,REG ; LDI REG,0b00010000 ; povoli preruseni PCINT na 4 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 CLR BITY SEI SMYCKA: SLEEP RJMP SMYCKA SIGNAL: IN STAV,PINY SBRS STAV,4 RJMP SESTUPNA ; Nabezna hrana _- !!!!!!!!!!!!!! ; ------------------------------------------------------------------ IN ZALOHA,TCNT0 CLR REG OUT TCNT0,REG CPI ZALOHA,64 BRLO KONEC_HRAN RCALL KONTROLA RJMP KONEC_HRAN ; Sestupna hrana -_ !!!!!!!!!!!!! ; ------------------------------------------------------------------ SESTUPNA: IN REG,TCNT0 CPI REG,8 ;Prah delky zakmitu / kratkeho pulzu BRLO ZAKMIT CLR REG2 OUT TCNT0,REG2 CPI REG,128 ;Prah delky dlouheho pulzu / prilis dlouheho pulzu BRLO NE_KONEC_SNIMKU CLR VYST1 CLR VYST2 CLR BITY RJMP KONEC_HRAN NE_KONEC_SNIMKU: LSL VYST1 ROL VYST2 INC BITY CPI REG,32 ;Prah kratkeho pulzu / dlouheho pulzu BRLO KRATKY_P INC VYST1 KRATKY_P: ZAKMIT_KONEC: KONEC_HRAN: LDI REG,0b00100000 ;povoli uspani (sleep) a nastavi mod idle OUT MCUCR,REG RETI ZAKMIT: ADD REG,ZALOHA OUT TCNT0,REG RJMP ZAKMIT_KONEC CAS_VYPRSEL: ;kontrola spravnosti prenosu RCALL KONTROLA INC PRETEK CPI PRETEK,40 BRLO VYPRSENI_NE CLR PRETEK CLR PRODLEVA LDI REG,0b00110000 ;povoli uspani (sleep) a nastavi mod power down OUT MCUCR,REG VYPRSENI_NE: RETI KONTROLA: CPI BITY,16 ;nesedi-li pocet bitu, zahodi kod BRLO CHYBA_BITY CP VYST1_P,VYST1 ;nejsou-li 2 po sobe jdouci kody stejne, nereaguje CPC VYST2_P,VYST2 BRNE CHYBA_RUZNE RCALL PRIJEM CHYBA_BITY: CLR VYST1 CLR VYST2 CHYBA_RUZNE: MOVW VYST1_P,VYST1 CLR BITY RET PRIJEM: CPI PRODLEVA,0 BRNE NEREAGUJ ;kontrola ID zarizeni MOV REG,VYST1 LSR REG CPI REG,ID BRNE NEREAGUJ MOVW REG,VYST1 ANDI REG,0b11111110 ;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 ;porovna paritni bit MOV REG2,VYST1 ANDI REG2,1 CP REG2,REG BRNE NEREAGUJ ;porovna inverzi MOV REG,VYST2 MOV REG2,VYST2 SWAP REG2 COM REG2 CP REG,REG2 BRNE NEREAGUJ MOV KOPIE1,VYST2 ANDI KOPIE1,0b00001111 IN REG,PORT CPI KOPIE1,0b00000001 BREQ TL0 CPI KOPIE1,0b00000010 BREQ TL1 CPI KOPIE1,0b00000100 BREQ TL2 CPI KOPIE1,0b00001000 BREQ TL3 RJMP NEREAGUJ TL0: SBRC REG,0 CBI PORT,0 SBRS REG,0 SBI PORT,0 RJMP KONEC_TL TL1: SBRC REG,1 CBI PORT,1 SBRS REG,1 SBI PORT,1 RJMP KONEC_TL TL2: SBRC REG,2 CBI PORT,2 SBRS REG,2 SBI PORT,2 RJMP KONEC_TL TL3: SBRC REG,3 CBI PORT,3 SBRS REG,3 SBI PORT,3 RJMP KONEC_TL KONEC_TL: LDI PRODLEVA,1 NEREAGUJ: RET