http://www.microchip.com/forums/m221431.aspxLIST p=16F628a
#include
__config 0x2118
X1 equ 0x30
X2 equ 0x31
X3 equ 0x32
org 0x0000
start
goto initialize
org h'0004' ;interrupt vector location
retfie
;************************
;INITIALIZATION ROUTINE *
;************************
initialize
;initialize ports and registers
movlw 0x07
movwf CMCON ;turn comparators off
bcf STATUS,RP0
gie01 bcf INTCON,GIE ;turn gie off
btfsc INTCON,GIE
goto gie01
clrf PIR1 ;clear peripheral flags
clrf PORTA ;clear all i/o registers...
clrf PORTB
bsf STATUS,RP0
movlw b'00011111'
movwf TRISA
movlw b'00000110' ; RB1 = RX input, RB2=TX output
movwf TRISB
clrf INTCON
clrf PIE1 ; no interrupt
;uart specific initialization
;txsta=Transmit STAtus and control register.
bcf TXSTA,TX9 ; <6> 0 select 8 bit mode
bsf TXSTA,TXEN ; <5> 1 enable transmit function
bcf TXSTA,SYNC ; <4> 0 asynchronous mode.
bsf TXSTA,BRGH ; <2> 0 disable high baud rate generator !!!
xtal_freq = d'4000000' ;crystal frequency in Hertz.
baudrate = d'115200' ;desired baudrate.
spbrg_value = (xtal_freq/(baudrate*d'16'))-1
movlw spbrg_value ;set baud rate generator value
movwf SPBRG
bcf STATUS,RP0
;more uart specific initialization
;rcsta=ReCeive STAtus and control register
bsf RCSTA,SPEN ; 7 spen 1=rx/tx set for serial uart mode
bcf RCSTA,RX9 ; 6 rc8/9 0=8 bit mode
bcf RCSTA,SREN ; 5 sren 0=don't care in uart mode
bsf RCSTA,CREN ; 4 cren 1=enable constant reception
bcf RCSTA,FERR ; 2 ferr input framing error bit. 1=error
bcf RCSTA,RX9D ; 0 rx9d input (9th data bit). ignore.
movf RCREG,w ;clear uart receiver
movf RCREG,w
movf RCREG,w
movlw 0
movwf TXREG ;send out dummy character
; to get transmit flag valid!
;************************
; main programme *
;************************
main
loop
btfss PORTA, 2 ;test if input device is ringing
call ON1
goto loop
ON1
movlw 'A'
call transmitw ;send W to the UART transmitter
bsf PORTB, 6 ;turn on RB2
call Delay ;this waits for a while!
bcf PORTB, 6 ;turn off RB2
call Delay
goto loop
;*************************************************
;* TRANSMIT Routines *
;*************************************************
transmitw
btfss PIR1,TXIF
goto transmitw ;wait for transmitter interrupt flag
movwf TXREG ;load data to be sent...
return
;transmitted data is in W
;********************
;* Delay Routines *
;********************
Delay movlw d'2'
movwf X3
B3 movlw d'255'
movwf X2
B2 movlw d'255'
movwf X1
B1 decfsz X1,f
goto B1
decfsz X2,f
goto B2
decfsz X3,f
goto B3
return
end