單片機代理商深圳英銳恩分享PIC16F877單片機 Boot-Loader 使用范例程式。
LIST P=16f877
include
LoopVar1 EQU 0x20
LoopVar2 EQU 0x21
org 0x100
goto Prog_Main
Vector
org 0x104
goto ISRs
Delay
clrf LoopVar1
clrf LoopVar2
Delay2
nop
nop
nop
nop
nop
nop
decfsz LoopVar2,F
goto Delay2
decfsz LoopVar1,F
goto Delay2
return
ISRs ;
nop
retfie
end
boot877。。。。。。。。。。。。。。。。。。。。。。。。。。。
;************************************************
;* 876UART3.ASM *
;************************************************
list p=16f877
#include
;********************************************************************
w_temp EQU 0x71
status_temp EQU 0x72
pclath_temp EQU 0x73
USART_Ptr EQU 0x74
Temp1 EQU H'75' ; The Registers for Boot Load !!
Temp2 EQU H'76'
F_ADDRH EQU H'77'
F_ADDRL EQU H'78'
F_DATAH EQU H'79'
F_DATAL EQU H'7a'
F_Cntr EQU H'7b'
;************************************************************************
;***************************************************************************
ORG 0X004
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,W
movwf pclath_temp
clrf PCLATH ; !! Clear PCLATH , will set all Table to First 256 word !!
movlw B'10101000'
movwf TXSTA
bsf PIE1,RCIE
BANKSEL RCSTA
movlw B'10110000'
movwf RCSTA
bcf CTS_CTRL ; Enable receive from PC
bsf INTCON,GIE
bsf INTCON,PEIE
movlw BUF_OF_RECEIVE
movwf FSR
movlw (OK_String-Wait_String)
call USART_Message
goto 0x100
;*****************************************************************************************
;**** The Message Table contain the characters of each information !!
;*****************************************************************************************
Msg_Table:
addwf PCL,F
Wait_String: DT "Ready",0x0d,0x0a
Unknow_String: DT "Unknow?",0x0d,0x0a
OK_String: DT "OK",0x0d,0x0a
Reset_String: DT "Reset",0x0d,0x0a
;*****************************************************************************************
;************ End of Message !! **************************************************
;*****************************************************************************************
Boot_Main:
bcf INTCON,GIE ; Disable Receive Interrupt
BANKSEL PIR1
Wait_HEX_Line:
btfss PIR1,RCIF
goto Wait_HEX_Line
movf RCREG,W
xorlw ':'
btfss STATUS,Z
goto Wait_HEX_Line
movlw 0xa0 ; Initial The Buffer Address !!
movwf FSR
movlw ':'
movwf INDF
incf FSR,F
Wait_RCIF2
btfss PIR1,RCIF
goto Wait_RCIF2
movf RCREG,W
movwf INDF
incf FSR,F
xorlw 0x0d
btfsc STATUS,Z
goto Line_OK
goto Wait_RCIF2
;************************************************************************************
;**** For Intel HEX format
;**** :BBAAAATTHHHH ........HHCC
;**** Where BB the two digit Byte Number BB/2 is the total word of this line
;**** AAAA Address
;**** TT Record Type
;**** HH The Data
;**** CC The Checksum of the data bytes of this line
;**** !! Ignor the first 256 byte of .HEX file
;*************************************************************************************
Line_OK
bsf CTS_CTRL ; Inhibit Transmit
movlw 0x0a
movwf INDF
movlw 0xa1
movwf FSR