;*********************************************************************
; Serial routine for baud rate of 9600 N81
; Oscillator must be 3.6854 Mhz
; Enter this routine with your data in DATA_OUT.
; Don't forget that the oscillator in the PIC must be
; set to XT not HS
;*********************************************************************
#DEFINE TXPIN PORTC,6 ;TRANSMIT PIN
SERIAL_OUT:
MOVLW .8
;8 BITS
MOVWF COUNTER
;TO COUNTER
STRT_BIT:
BCF PORTC,6
;SET TX PIN
MOVLW .16
;DELAY TIME
CALL MDELAY ;This delay is just for the steady state of the bus
BTFSC DATA_OUT,0 ;TEST THE LSB
GOTO SET_DATA
;SET IT
GOTO CLEAR_DATA ;CLEAR IT
SET_DATA:
NOP
;TIMING ADJUSTMENT
BSF PORTC,6
;SET THE DATA
GOTO CONTINUE
;CARRY ON
CLEAR_DATA:
BCF PORTC,6
;SET THE DATA
GOTO CONTINUE
;CARRY ON
CONTINUE:
MOVLW .16
;DELAY TIME
CALL MDELAY
;
DECFSZ COUNTER,F ;DECREMENT THE COUNTER
GOTO PROCEED
;CARRY ON IF NOT FINISHED
NOP
NOP
NOP
NOP
GOTO STP_BIT
;STOP BIT
PROCEED:
RRF DATA_OUT
;ROTATE THE DATA RIGHT
BTFSC DATA_OUT,0 ;TEST THE LSB
GOTO SET_DATA
;SET IT
GOTO CLEAR_DATA
;CLEAR IT
STP_BIT:
BCF PORTC,6
;CLEAR THE DATA
MOVLW .17
;DELAY TIME
CALL MDELAY
;DELAY
NOP
NOP
NOP
NOP
NOP
BSF PORTC,6
;END OT TX
SP: MOVLW .18
;DELAY TIME
CALL MDELAY
;WAIT FOR A TIME
RETURN
;RETURN FROM ROUTINE