PIC Specific RS232 routine

by Tony Nixon


This code is written for a 16C74, but it should still work.

One difference with the 16F877 is the RCSTA register which has a ADDEN bit, but this is disabled on powerup.

; enable ASYNC TX/RX
;
; BAUD RATE SETTINGS
; 38400 - spbrg = 25, brgh = 1
; 19200 - spbrg = 12, brgh = 0
; 9600  - spbrg = 25, brgh = 0
;
          movlw b'01xxxxxx'
          movwf portc
          bsf status,rp0
          movlw b'10xxxxxx'   ; x = depends on your application
          movwf trisC

          movlw d'12'         ; 19200 baud
          movwf spbrg
          movlw b'00100000'    ; brgh = low
          ; movlw b'00100100'   ; brgh = high
          movwf txsta         ; enable Async Transmission, set brgh
          bcf status,rp0      ; ram page 0
          movlw b'10010000'
          movwf rcsta         ; enable Async Reception
          movf rcreg,w        ; flush receive buffer
          movf rcreg,w        ; maybe not needed
          movf rcreg,w

;
; Perhaps put a powerup settling time delay here
;


; program start
; receive a character and echo it back

Loop
          call Receive          ; -> RxHold

          movf RxHold,w
          movwf txreg

          goto Loop
;
; ----------------------------
; RECEIVE CHARACTER FROM RS232
; ----------------------------
; This routine does not return until a character is received.

Receive   nop
          btfss pir1,rcif     ; (5) check for received data
          goto Receive

          movf rcreg,w
          movwf RxHold        ; tempstore data
          return

-- Best regards

Tony

http://www.bubblesoftonline.com
mailto:sales@picnpoke.com

see also:

  1. http://www.infosite.com/%7Ejkeyzer/piclist/2000/Feb/1374.html