;*********************************************************************
; 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