* RECEIVER PROGRAM FRAGMENT *********************************** * Transfers the received serial data * into content of the register WORD. **************************************************** *nolist $include "std-j1a.asm" *list org MOR ;pos.edge Ext.Interrupt fcb $24 ; on pA0 - pA3 enable *I/O PORTS data equ 0 ;prtA Data Input pin RedLED equ 7 ;prtA red LED output pin *............................... *Specific equates WF equ 0 ;Word processing flag F1 equ 1 ;signal presense flag WDF equ 3 ;watch-dog flag * VARIABLES org RAM W rmb 1 ;pulse width counter T rmb 1 ;time (0.5 ms) counter wdc rmb 1 ;watch-dog counter flag rmb 1 ;flag register num rmb 1 ;register to form word reg rmb 1 ;temporary word register. mem rmb 1 ;memory register WORD rmb 1 ;final received word register. * INITIALIZATION org ROM init rsp ;reset stack pointer to $ff lda #$f0 ;pA0 - pA3 as input sta ddrA ;pA4 - pA7 as output jsr in_set ;go to initial set bset IRQE,ISCR ;ExtInt enable bset TOIE,TSCR ;TOF interrupt enable cli ;interrupt enable m0 brset WDF,flag,m1 ;WDF=1? No data-in? brset WF,flag,m0 ;WF=1? wait for word end m1 jsr in_set bra m0 ******************************************************* in_set clr prtA ;set red LED on clrx ;start to clear a0 clr RAM,x ; 8 variables in RAM incx cpx #8T blo a0 rts ;return from in_set ******************************************************** TOFint inc wdc tst wdc ;wdc / 0 ? bne t0 bset WDF,flag ;1 -> WDF t0 bset TOFR,TSCR ;TOF reset rti ;return from TOFint .page * EXTERNAL INTERRUPT SUBROUTINE ExtInt: clr T clr W e0 brset data,prtA,e1 ;High level ? brclr WF,flag,e2 ;WF=0? lda W cmp #1 ;W=1? beq log0 cmp #3 ;W=3? beq log1 bclr WF,flag ;0 -> WF bra e3 e1 inc T lda T cmp #55T bne e0 clr T inc W bra e0 e2 lda W cmp #2 ;W=2? bne e3 bset WF,flag ;1 -> WF lda #$fe ;0 -> 0-bit of num sta num bra e3 log0 lda reg ;put 0 into given bit of and num ;reg. without changing sta reg ;of the rest of its bits. bra e4 log1 lda num ;put 1 into given bit of sta mem ;reg. without changing and reg ;of the rest of its bits com mem eor mem sta reg e4 sec ;1 -> Carry bit rol num ;go to the next bit bcs e3 ;is it NOT the last bit? bclr WF,flag ;0 -> WF word process flag bclr WDF,flag ;0 -> WDF watch-dog flag clr wdc ;0 -> watch-dog counter lda reg sta WORD ;data word is completed! bset RedLED,prtA ;red LED off e3 bset IRQR,ISCR ;IRQ reset rti ;return from ExtInt ********************************************* un rti ;return from unused interrupts org VECTORS fdb TOFint ;Timer Interrupt unused fdb ExtInt ;External Interrupt address fdb un ;SWI unused fdb init ;set restart address .end .nolist