;********************************************************************* ; Serial routine for baud rate of 9600 N81 ; Oscilator must be 3.6854 Mhz ; Enter this routine with your data in DATA_OUT. ; Don't forget that the oscilator 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 FINNISHED 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