;Prijimac 4-kanaloveho DO ;kodovani delkou mezery. ;1,2MHz ; 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 PRODLEVA=R22 ;prodleva do dalsi reakce .DEF BITY=R23 ;pocitadlo bitu .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,0b00010000 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,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 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 ;Práh délky zákmitu BRLO ZAKMIT CPI REG,64 ;Práh délky dlouhé mezery / mezery mezi snímky 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 ;Práh krátké / 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 PRODLEVA,0 LDI REG,0 OUT TCNT0,REG LDI REG,0b00110000 ;povoli uspani (sleep) a nastavi mod power down OUT MCUCR,REG RETI PRIJEM: CPI PRODLEVA,0 BRNE NEREAGUJ IN REG,PORT ANDI VYST,0b00001111 CPI VYST,0b00000011 BREQ TL0 CPI VYST,0b00000110 BREQ TL1 CPI VYST,0b00001001 BREQ TL2 CPI VYST,0b00001100 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: NEREAGUJ: LDI PRODLEVA,1 RET