RXD BCF STATUS,RP0 ;Bank 0 MOVLW 08H MOVWF COUNT1 ;读8次 NOP NOP NOP NOP NOP NOP NOP RX1 CALL DEL417 ;417uS延时 BTFSS GPIO,0 ;读bit GOTO RX2 ;为0时跳到RX2 BSF STATUS,C ;置C=1 RRF RX_SUBF ;右移 GOTO RX3 RX2 BCF STATUS,C ;置C=0 RRF RX_SUBF ;右移 RX3 DECFSZ COUNT1 ;1个字节是否读完? GOTO RX1 ;否,继续读 CALL DEL417 ;完了,判断数据/地址? BTFSS GPIO,0 ;读bit GOTO RX4 ;为0时跳到RX4 BSF STATUS,C ;置C=1 GOTO RX5 RX4 BCF STATUS,C ;置C=0 RX5 ;CALL DEL417 BTFSS GPIO,0 ;判断是否有停止位出现 GOTO RX5 ;为0继续查寻 ;为1时返回继续 RETURN ;返回 ;**************************************************************************** ;**************发送子程序**************************************************** TXD BCF STATUS,RP0 ;Bank 0 MOVLW 08H MOVWF COUNT1 ;发8次 BSF GPIO,2 ;使MAX487处于发送状态 BCF GPIO,1 ;发送起始位 TXD1 CALL DEL417 ;417uS延时 RRF TX_SUBF ;右移 BTFSS STATUS,C ;判断=1? GOTO TXD2 ;C=0时,跳到TXD2 BSF GPIO,1 ;C为1时,置GP1=1 GOTO TXD3 TXD2 BCF GPIO,1 ;C为0时,置GP1=0 TXD3 DECFSZ COUNT1 ;1个字节是否读完? GOTO TXD1 ;未完,继续到TXD1 CALL DEL417 BTFSS SIGN_R,0 ;判断=1? GOTO TXD4 ;数据/地址位=0时,跳到TXD4 BSF GPIO,1 ;数据/地址位=1时,置GP1=1 GOTO TXD5 TXD4 BCF GPIO,1 ;数据/地址位=0时,置GP1=0 TXD5 CALL DEL417 BSF GPIO,1 ;发送停止位 CLRF TX_SUBF MOVLW 03H ;把"000011"送入GPIO口 MOVWF GPIO ;使能MAX487处于接收状态 CALL DEL417 RETURN ;返回