IR_RX | ldab | #$03 | |
REC_Z2 | ldaa | _DPRB | potrebno je nastavit kateri port bo vhod |
rora | |||
rol | SAMP | ||
decb | |||
beq | REC_SF | ||
ldaa | #DELAY | izracunaj konstanto za zakasnitev 0.15ms | |
REC_Z1 | deca | ||
bne | REC_Z1 | ta kos vzorci vhodni signal v 3 tockah | |
|
bra | REC_Z2 | |
REC_SF | ldaa | REC_CNT | kaj je slucajno v teku sprejemanje znaka |
bne | REC_NAD | ce je skocimo na sprejem | |
*ker ne sprejemamo pregledamo ce ni to slucajno start bit
*in ce je ugotovimo kateri vzorec je najbolj na sredini intervala *tako, da bodo podatki kar najbolj zanesljivo vzorceni *in sinhronizirani glede na start bit |
|||
ldaa | SAMP | ||
beq | REC_INC | ||
cmpa | #$01 | ||
beq | REC_INC | ||
cmpa | #$04 | ||
beq | REC_CLR | ||
bra | RX_RTS | ||
REC_CLR | clra | ||
bra | REC_ST | ||
REC_INC | inca | ||
REC_ST | staa | ST_BIT | |
ldaa | #DOLZINA | dolzina paketa brez start bita; 8+stevilo stop bitov | |
staa | REC_CNT | ||
bra | RX_RTS | ||
*poteka sprejem in zato moramo odcitati ustrezen vzorec in ga prilepiti
k
*ze sprejetim bitom podatka. Podatke sprejemano po vrsti od MSB do LSB *in zato ji pomikamo levo v sprejemni register (REC_CHR). V ST_BIT je *shranjeno kateri bit je pravi vzorec za vzeti |
|||
REC_NAD | ldaa | ST_BIT | |
REC_SH1 | beq | REC_NAP | vzorec shiftamo da dobimo na LSB pravi vzorec |
lsr | SAMP | signala | |
deca | |||
bra | REC_SH1 | ||
REC_NAP | ldaa | REC_CNT | |
cmpa | #STBITI | stevilo stop bitov v paketu | |
ble | REC_SB | ||
lsr | SAMP | tu bite prekladamo iz vzorca v | |
rol | REC_CHR | sprejemni register | |
dec | REC_CNT | ||
bra | RX_RTS | ||
*tu stejemo stop bite. Ce se med stop biti pojavi kaka nicla sprejem
*prekinemo, ker je prislo do napake v prenosu |
|||
REC_SB | lsr | SAMP | |
bcc | REC_ERR | prislo do napake. prekini sprejem | |
dec | REC_CNT | ||
bne | RX_RTS | ||
ldaa | REC_CHR | ||
staa | SPREJETO | ||
bra | RX_RTS | ||
REC_ERR | clr | REC_CNT | |
RX_RTS | rts |