?? pic_232.asm
字號(hào):
;=========================================================
;RS232通訊程序!波特率=9600bit/s (2003-1-17)
;原理:發(fā)送時(shí),通過(guò)使數(shù)據(jù)發(fā)送端為低電平并保持s秒(9600波特
;率時(shí)為104μs)來(lái)發(fā)送起始位。隨后每s秒鐘通過(guò)置位或清零發(fā)送端
;把數(shù)據(jù)發(fā)送出去,再發(fā)送停止位(1).這里的s是指一位所持續(xù)
;的時(shí)間(s=1/波特率);接收時(shí),數(shù)據(jù)接收端如果檢測(cè)到起始位(0),
;則在大約1.5s秒(9600波特率時(shí)為156μs)后檢測(cè)第一位數(shù)據(jù)位,
;隨后每s秒鐘檢測(cè)一次其它的數(shù)據(jù)位(總共8位)!
;注意:時(shí)間要精確,發(fā)送要有停止位!
;===========================================================
LIST P=16F84
INCLUDE <PICREG.H>
;***********************端口定義***************************
RXD_PORT EQU B_RB5 ;接收端口!
TXD_PORT EQU B_RB4 ;發(fā)送端口!
;***********************寄存器定義*************************
;BUF_TXRX:發(fā)送接收二級(jí)緩沖區(qū)! BUF_DATA:發(fā)送接收一級(jí)緩沖區(qū)!
CBLOCK 0CH
TEMP,BUF_TXRX,BUF_DATA,COUNT_DATA,DEL_TEMP
ENDC
;**********************************************************
ORG 0000H
GOTO INITA
;**********************************************************
S_SENT GOTO SENT
S_ACCE GOTO ACCEPT
;**********************************************************
SENT BCF PORTB,TXD_PORT
MOVLW 08H
MOVWF COUNT_DATA
MOVF BUF_DATA,TOW
MOVWF BUF_TXRX
SNEXT_BIT MOVLW 1FH ;延時(shí):1*104us!
CALL DEL_BIT
BTFSS BUF_TXRX,B_LSB
BCF PORTB,TXD_PORT
BTFSC BUF_TXRX,B_LSB
BSF PORTB,TXD_PORT
DECFSZ COUNT_DATA,SAME
GOTO SNEXT_HEAD
MOVLW 1FH ;(最后一位)延時(shí):1*104us!
CALL DEL_BIT
BSF PORTB,TXD_PORT ;發(fā)送停止位!
MOVLW 1FH ;停止位延時(shí):1*104us!
CALL DEL_BIT
RETLW 0
SNEXT_HEAD RRF BUF_TXRX,SAME
GOTO SNEXT_BIT
ACCEPT CLRF BUF_TXRX
MOVLW 08H
MOVWF COUNT_DATA
MOVLW 31H ;延時(shí):1.5*104us!
CALL DEL_BIT
ANEXT_BIT BTFSS PORTB,RXD_PORT
BCF BUF_TXRX,B_MSB
BTFSC PORTB,RXD_PORT
BSF BUF_TXRX,B_MSB
DECFSZ COUNT_DATA,SAME
GOTO ANEXT_HEAD
RETLW 0
ANEXT_HEAD RRF BUF_TXRX,SAME
MOVLW 1FH ;延時(shí):1*104us!
CALL DEL_BIT
GOTO ANEXT_BIT
INITA CLRWDT
MOVLW 00H
TRIS PORTA
MOVLW 20H
TRIS PORTB
MAIN MOVLW 20H
TRIS PORTB
BTFSC PORTB,RXD_PORT
GOTO MAIN
CALL S_ACCE
MOVF BUF_TXRX,TOW
MOVWF BUF_DATA
ADDLW 01H
MOVWF BUF_DATA
CALL S_SENT
HALTL CLRWDT
GOTO MAIN
GOTO HALTL
DEL_BIT MOVWF DEL_TEMP ;延時(shí):x*3+2
DELAY1 DECFSZ DEL_TEMP,SAME
GOTO DELAY1
RETLW 0
;**********************************************************
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -