*********************************** * TRANSMITTER PROGRAM FRAGMENT * *********************************** * Generates the sequence of start pulse and 8-bit word * of data according to the content of register REG. *************************************************** *nolist $include "std-j1a.asm" *list * I/O PORTS data_out equ 7 ;prtA *..................... * VARIABLES org RAM REG rmb 1 ;output data register num rmb 1 ;bit test register * INITIALIZATION org MOR fcb $00 org ROM init rsp ;reset stack pointer to $ff lda #$80 ; pA7 as output sta ddrA clr prtA clr REG clr num *......................... * DATA TRANSMISSION SUBROUTINE ldx #125T ;start pulse (1.25ms) jsr pulse lda #$01 ;0-bit test prepare sta num w1 lda REG ;is tested bit = 0? and num beq w2 ldx #175T ;logic1 pulse (1.75ms) jsr pulse w3 clc ;0 -> C-carry bit lsl num ;go to next tested bit bcc w1 ;is it NOT a last bit? rts ;return from DATA TRANSMISSION w2 ldx #75T ;log0 pulse (0.75ms) jsr pulse bra w3 *********************************************** dly01x lda #2 ;Delay =0.01*x [ms] rep0 decA bne rep0 decx bne dly01x rts ;return from dly01x ************************************************* pulse bset data_out,prtA ; width = x jsr dly01x bclr data_out,prtA ldx #64T jsr dly01x rts ;return from pulse ************************************************* un rti ;return from unused interrupts org VECTORS fdb un ;Timer Interrupt unused fdb un ;External Interrupt unused fdb un ;SWI unused fdb init ;set restart address .end .nolist