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: