star 发表于 2012-8-21 17:58:57

单片机普通I/O口做串口模拟接收 zhuan

2400波特率,关键是对时序的模拟,
;*****************接收子程序*****************************************
RXD   
       BCF    STATUS,RP0         ;Bank 0
       MOVLW08H
       MOVWFCOUNT1               ;读8次
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
RX1    CALL   DEL417               ;417uS延时
       BTFSSGPIO,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               ;完了,判断数据/地址?
       BTFSSGPIO,0               ;读bit
       GOTO   RX4                  ;为0时跳到RX4
       BSF    STATUS,C             ;置C=1
       GOTO   RX5
RX4    BCF    STATUS,C             ;置C=0
RX5   ;CALL   DEL417            
       BTFSSGPIO,0               ;判断是否有停止位出现
       GOTO   RX5                  ;为0继续查寻
                                 ;为1时返回继续
       RETURN                      ;返回
;****************************************************************************                                                
;**************发送子程序****************************************************
TXD    BCF    STATUS,RP0       ;Bank 0            
       MOVLW08H
       MOVWFCOUNT1         ;发8次
       BSF    GPIO,2         ;使MAX487处于发送状态
       BCF    GPIO,1         ;发送起始位
TXD1   CALL   DEL417         ;417uS延时
       RRF    TX_SUBF          ;右移
       BTFSSSTATUS,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
       BTFSSSIGN_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
       MOVLW03H            ;把"000011"送入GPIO口
       MOVWFGPIO             ;使能MAX487处于接收状态
       CALL   DEL417
       RETURN                  ;返回
页: [1]
查看完整版本: 单片机普通I/O口做串口模拟接收 zhuan