[code="asm"]
;實(shí)驗(yàn)?zāi)康模菏煜SART通信
;通過“串口調(diào)試助手”協(xié)助工作,波特率設(shè)置為19200
;串口調(diào)試助手發(fā)送數(shù)據(jù)給877,877收到后再轉(zhuǎn)發(fā)回串口助手
;硬件要求:撥碼開關(guān)S7全置ON,其他撥碼開關(guān)置OFF
#INCLUDE<P16F877A.INC> ;調(diào)用芯片頭文件,省去特殊寄存器等的定義
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;調(diào)試模式關(guān)閉,寫保護(hù),一半ROM可在線改寫,EEPROM加密,低壓編程關(guān)閉,掉電檢測(cè)關(guān)閉,上電延時(shí)開,看門狗關(guān),4M晶振HS振蕩
VAL_US EQU .249 ;短延時(shí)定時(shí)參數(shù)
VAL_MS EQU .200 ;長(zhǎng)延時(shí)定時(shí)參數(shù)
COUNT EQU 25H
COUNT_MS EQU 26H
ORG 00H
NOP
GOTO MAIN
ORG 04H ;中斷入口地址
BTFSS PIR1,RCIF ;判斷是否是串口接收中斷
GOTO EXIT ;否,轉(zhuǎn)中斷結(jié)束程序
MOVF RCREG,0 ;讀取接收寄存器的數(shù)據(jù)
MOVWF TXREG ;保存到發(fā)送寄存器,隨后發(fā)送出去
EXIT
RETFIE
MAIN
USART
BANKSEL TRISC ;選擇體1
BSF TRISC,7 ;斷開RC模塊與USART TX引腳的聯(lián)系
BSF TRISC,6 ;斷開RC模塊與USART RX引腳的聯(lián)系
MOVLW 0CH ;裝載波特率發(fā)生器,為19.2kbd
MOVWF SPBRG
MOVLW 24H ;勢(shì)能USART,設(shè)置波特率發(fā)生器為高速方式
MOVWF TXSTA
BSF PIE1,RCIE ;使能接收中斷
CLRF STATUS ;返回體0
MOVLW 90H
MOVWF RCSTA ;使能USART連續(xù)接收
BSF INTCON,GIE ;使能全局中斷使能位
BSF INTCON,PEIE ;使能外設(shè)中斷使能位
USART_1
CALL DELAY_MS ;調(diào)用2次延時(shí)程序
CALL DELAY_MS
GOTO USART_1 ;返回!
;*************************200ms延時(shí)程序***********************
DELAY_MS
MOVLW VAL_MS
MOVWF COUNT_MS
LOOP_MS
CALL DELAY_US
DECFSZ COUNT_MS,1
GOTO LOOP_MS
RETURN
;*************************100us延時(shí)程序***********************
DELAY_US
MOVLW VAL_US
MOVWF COUNT
LOOP_US
NOP
DECFSZ COUNT,1
GOTO LOOP_US
RETURN
DELAY_S
MOVLW 0FFH
MOVWF 50H
CALL DELAY_MS
DECFSZ 50H,1
GOTO $-2
RETURN
END
[/code]