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: