#include "c:\miniIDE\hcs12.inc" tbuf equ 0 ; tbuf offset from top of stack org $1000 tbuf0 ds 16 org $2000 movb #$56,tbuf0 ; identifier V1 movb #$3C,tbuf0+1 ; " movb #$40,tbuf0+2 ; " movb #$34,tbuf0+4 ; data "3" movb #$2E,tbuf0+5 ; data "." movb #$35,tbuf0+6 ; data "5" movb #$20,tbuf0+7 ; data " " movb #$56,tbuf0+8 ; data "V" movb #5,tbuf0+12 ; data length (=5) movb #0,tbuf0+13 ; set transmit buffer priority to highest ldx #tbuf0 jsr snd2can1 ; call subroutine to perform the actual transmission rts swi snd2can1 pshy pshb leas -1,sp ; allocate one byte for local variable sloop1 brset CAN1TFLG,$01,tb0 ; is transmit buffer 0 empty? brset CAN1TFLG,$02,tb1 ; is transmit buffer 1 empty? brset CAN1TFLG,$04,tb2 ; is transmit buffer 2 empty? bra sloop1 ; if necessary wait until one buffer is empty tb0 movb #0,tbuf,sp ; mark transmit buffer 0 empty bra tcopy tb1 movb #1,tbuf,sp ; mark transmit buffer 1 empty bra tcopy tb2 movb #2,tbuf,sp ; mark transmit buffer 2 empty tcopy movb CAN1TFLG,CAN1TBSEL ; make the empty transmit buffer accessible ldy #CAN1TIDR0 ; set y to point to the start of the transmit buffer ldab #7 ; always copy 7 words (count placed in B) cploop movw 2,x+,2,y+ dbne b,cploop ldab tbuf,sp cmpb #0 beq istb0 cmpb #1 beq istb1 movb #$04,CAN1TFLG ; mark buffer 2 ready for transmission bra dcopy istb0 movb #$01,CAN1TFLG ; mark buffer 0 ready for transmission bra dcopy istb1 movb #$02,CAN1TFLG ; mark buffer 1 ready for transmission dcopy leas 1,sp ; deallocate local variables pulb puly rts end