Setting up a 16F87x

Tony Nixon [sales at picnpoke.com] of ICmicro's  says:

        Title "Your Program"
;
        list P = 16F877
;
        include "P16f877.inc"
;
; ------------------
; CONFIGURATION FUSE
; ------------------
;
        __CONFIG _CP_OFF & _WRT_ENABLE_ON & _RC_OSC & _WDT_ON & _PWRTE_OFF &
_BODEN_ON & _LVP_ON & _CPD_OFF & _DEBUG_OFF
;
; CRYSTAL SPEED = 4000000Hz
;
        CBLOCK 0x20

dataL

        ENDC
;
; -------------
; PROGRAM START
; -------------
;
        org 0x0000              ; startup = 0000h
;
Start   movlw 0x00              ; setup ports
        movwf PORTA
        movlw 0x00
        movwf PORTB
        movlw 0x40
        movwf PORTC
        movlw 0x00
        movwf PORTD
        movlw 0x00
        movwf PORTE
        bsf STATUS,RP0          ; RAM Page 1
        movlw 0x00
        movwf TRISA
        movlw 0x00
        movwf TRISB
        movlw 0x80
        movwf TRISC
        movlw 0xFF
        movwf TRISD
        movlw 0xFF
        movwf TRISE
;
; -------------------------
; SET ANALOG/DIGITAL INPUTS
; -------------------------
;
        movlw 0x06              ; all digital
        movwf ADCON1
;
; ------------------------------------
; SET BAUD RATE TO COMMUNICATE WITH PC
; ------------------------------------
; Boot Baud Rate = 19200, No Parity, 1 Stop Bit
;
        movlw 0x0C              ; 19200 baud
        movwf SPBRG
        movlw b'00100100'       ; brgh = high (2)
        movwf TXSTA             ; enable Async Transmission, set brgh
        movlw b'10010000'       ; enable Async Reception
        bcf STATUS,RP0          ; RAM Page 0
        movwf RCSTA
;
; ------------------------------------
; PROVIDE A SETTLING TIME FOR START UP
; ------------------------------------
;
        clrf dataL
settle  decfsz dataL,F
        goto settle
;
        movf RCREG,W
        movf RCREG,W
        movf RCREG,W            ; flush receive buffer

Loop    call Receive            ; wait for a char
        movwf TXREG             ; echo data back to sender
        goto Loop
;
; ----------------------------
; RECEIVE CHARACTER FROM RS232
; ----------------------------
; This routine does not return until a character is received.
;
Receive btfss PIR1,RCIF         ; (5) check for received data
        goto Receive
;
        movf RCREG,W
        return
;
; ------------------------------------
; WAIT UNTIL RS232 IS FINISHED SENDING
; ------------------------------------
;
TransWt bsf STATUS,RP0
WtHere  btfss TXSTA,TRMT                ; (1) transmission is complete if hi
        goto WtHere
;
        clrf STATUS             ; RAM Page 0
        return
;
;
        end

See:

Questions:

Comments: