; Prijimac 4-kanaloveho DO pro povely. ; kodovani delkou mezery. ; 1,2MHz interni oscilator ; vytvoril: DANYK ; http://danyk.cz .NOLIST .INCLUDE "tn13def.inc" .LIST .DEF REG=R16 ;pracovni registr .DEF REG2=R17 ;pracovni registr 2 .DEF STAV=R18 ;registr stavu vstupu .DEF VYST=R19 ;registr vystupu .DEF VYST_2=R20 ;registr predchoziho vystupu .DEF VYST_3=R21 ;registr predpred... vystupu .DEF BITY=R22 ;pocitadlo bitu .EQU SMER=DDRB ;rizeni smeru .EQU PORT=PORTB ;port .EQU PINY=PINB ;port .CSEG ;kodovy 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,0b00010000 OUT PORT,REG ; NASTAVENI CASOVACU LDI REG,0b00000010 ; nastavi citac na nulovani pri dosazeni porovnavane... OUT TCCR0A,REG ; ...hodnoty (tzv. CTC), OC0 nevyuzit LDI REG,0b00000011 ; preddeleni 64 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 SEI SMYCKA: SLEEP RJMP SMYCKA SIGNAL: IN STAV,PINY COM STAV ;invertuje vstupni signal (prijimac ma v klidu log1) ;Sestupna hrana SBRC STAV,4 RJMP NE_10 LDI REG,0 OUT TCNT0,REG NE_10: ;Nabezna hrana SBRS STAV,4 RJMP NE_01 IN REG,TCNT0 CPI REG,4 ;Prah delky zakmitu BRLO ZAKMIT CPI REG,64 ;Prah delky dlouhe mezery / mezery mezi snimky BRLO NE_KONEC_SNIMKU RCALL KONTROLA MOV VYST_3,VYST_2 MOV VYST_2,VYST NE_KONEC_SNIMKU: LSL VYST INC BITY IN REG,TCNT0 CPI REG,16 ;Prah kratke / dlouhe mezery BRLO KRATKA_M INC VYST KRATKA_M: ZAKMIT: NE_01: LDI REG,0b00100000 ;povoli uspani (sleep) a nastavi mod idle OUT MCUCR,REG RETI ;kontrola spravnosti prenosu KONTROLA: ANDI VYST,0b00001111 CPI BITY,5 ;nesedi-li pocet bitu, zahodi kod BRNE SPATNE_BITY CP VYST_2,VYST ;nejsou-li 3 po sobe jdouci kody stejne, nereaguje BRNE RUZNE_KODY CP VYST_3,VYST ;nejsou-li 3 po sobe jdouci kody stejne, nereaguje BRNE RUZNE_KODY RCALL PRIJEM RUZNE_KODY: CLR BITY RET SPATNE_BITY: CLR VYST CLR BITY RET CAS_VYPRSEL: RCALL KONTROLA LDI VYST,0 LDI VYST_2,1 LDI VYST_3,2 LDI REG,0b00010000 OUT PORT,REG LDI REG,0 OUT TCNT0,REG LDI REG,0b00110000 ;povoli uspani (sleep) a nastavi mod power down OUT MCUCR,REG RETI PRIJEM: ANDI VYST,0b00001111 CPI VYST,0b00000011 BREQ TL0 CPI VYST,0b00000110 BREQ TL1 CPI VYST,0b00001001 BREQ TL2 CPI VYST,0b00001100 BREQ TL3 RJMP KONEC_TL TL0: SBI PORT,0 CBI PORT,1 CBI PORT,2 CBI PORT,3 RJMP KONEC_TL TL1: CBI PORT,0 SBI PORT,1 CBI PORT,2 CBI PORT,3 RJMP KONEC_TL TL2: CBI PORT,0 CBI PORT,1 SBI PORT,2 CBI PORT,3 RJMP KONEC_TL TL3: CBI PORT,0 CBI PORT,1 CBI PORT,2 SBI PORT,3 RJMP KONEC_TL KONEC_TL: RET