Mám přijímač dálkové ovládání. Přijme signál, nastaví port a po restartu už to nejde. Musím znovu přeprogramovat procík... Nevím co to tam může způsobovat...
.NOLIST
.INCLUDE "tn25def.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=R25 ;prodleva do dalsi reakce ;zmena z R19 !!!!!!!!!!!!!!!!
.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,0b00001000 ; tady jsem zmenil z 00001111 staci mi jen pinb4 !!!!!
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 TIMSK,REG ; tady jsem to zmenil !!!!!!!!!!!!!!! z timsk0
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