📄 twt_rs.asm
字号:
;****************************************************************************************
;****************************************************************************************
;****************************************************************************************
LIST P=16C57
#INCLUDE <WATER.H>
#INCLUDE <P16C5X.INC>
;****************************************************************************************
;****************************************************************************************
;****************************************************************************************
ORG 7FFH
GOTO MAIN
ORG 0000H
;****************************************************************************************
;0 页
MAIN
BTFSS STATUS,4
GOTO WAKE_SLEEP ;直接进入程序运行
WAKE_SLEEP
CLRF STATUS
MOVLW B'11110001' ;IO口初始化
MOVWF PORTA
MOVLW B'00000111'
MOVWF PORTB
MOVLW B'11110101' ;IO口初始化
TRIS PORTA
MOVLW B'00000111'
TRIS PORTB
MOVLW 00H
MOVWF PORTC
TRIS PORTC
MOVLW 40H ;清所有寄存器
MOVWF BUF00
MOVLW 10H
MOVWF FSR
CLRF INDF
INCF FSR
BSF FSR,4
DECFSZ BUF00,1
GOTO $-4
WATER_TONGXUN_COM
BSF STATUS,PA0
BCF STATUS,PA1
GOTO WATER_TONGXUN
;****************************************************************************************
;****************************************************************************************
;****************************************************************************************
ORG 200H
;****************************************************************************************
;****************************************************************************************
;子程序文件名:RXD1
;实现功能:接收一位子程序
;版本:
;作者:
;日期:
;测试人员:
;测试日期:
;测试文件:
;修改说明:
;程序所属区块:PA0/PA1=01
;入口参数:
;
;出口参数:
; COUNT1
;
;影响的局部寄存器:COUNT0/COUNT1
;影响的全局寄存器:
;堆栈深度:
;执行时间:
;调用的程序:
;特殊说明:
;1位数据的时间为833.3us,分成16份,每份52us,取7、8、9三个时间段364us/52us/52us/365us
;时钟频率为455k,每条指令8.7us
;****************************************************************************************
RXD1
MOVLW .10
MOVWF COUNT0
RX0
DECFSZ COUNT0,1
GOTO RX0
CLRF COUNT1
BTFSC PORTA,T485_RX ;接收一位数据时的第1次
INCF COUNT1,1
GOTO $+1
GOTO $+1
GOTO $+1
BTFSC PORTA,T485_RX ;接收一位数据时的第2次
INCF COUNT1,1
GOTO $+1
GOTO $+1
GOTO $+1
BTFSC PORTA,T485_RX ;接收一位数据时的第3次
INCF COUNT1,1
RRF COUNT1,0
ANDLW 01H
MOVWF COUNT1
MOVLW .10
MOVWF COUNT0
RX3
DECFSZ COUNT0,1
GOTO RX3
RETLW 0
;****************************************************************************************
;子程序文件名:RXD8
;实现功能:接收一个字节子程序
;版本:
;作者:
;日期:
;测试人员:
;测试日期:
;测试文件:
;修改说明:
;程序所属区块:PA0/PA1=01
;入口参数:
;
;出口参数:
;BUF02 接收数据缓冲 BUF03 数据偶校验判断寄存器
;BUF04 一个数据的位数
;影响的局部寄存器:COUNT0/COUNT1
;影响的全局寄存器:
;堆栈深度:
;执行时间:
;调用的程序:
;特殊说明:
;****************************************************************************************
RXD8
CALL RXD1
BTFSC COUNT1,0
RETLW 1
GOTO $+1
GOTO $+1
GOTO $+1
CLRF BUF02
CLRF BUF03
MOVLW 08H
MOVWF BUF04
DE_X0
RRF BUF02,1
BCF BUF02,7
CALL RXD1
MOVF COUNT1,0
ADDWF BUF03,1
RRF COUNT1,1
RRF COUNT1,0
ANDLW 80H
ADDWF BUF02,1
DECFSZ BUF04,1
GOTO DE_X0
CALL RXD1
MOVF BUF03,0
XORWF COUNT1,1
BTFSC COUNT1,0
RETLW 1
;BTFSS PORTA,T485_RX
;GOTO $-1
RETLW 0
;****************************************************************************************
;子程序文件名:DONE_CS
;实现功能:计算校验和
;版本:
;作者:
;日期:
;测试人员:
;测试日期:
;测试文件:
;修改说明:
;程序所属区块:PA0/PA1=01
;入口参数:
; BUF06/IR_DATA0~IR_DATAF
;出口参数:
; COUNT1
;
;影响的局部寄存器:COUNT0/FSR
;影响的全局寄存器:
;堆栈深度:
;执行时间:
;调用的程序:
;特殊说明:
;****************************************************************************************
DONE_CS
MOVLW 02H
SUBWF BUF06,0 ;确定所有数据的个数
MOVWF COUNT0
CLRF COUNT1
MOVLW IR_DATA0
MOVWF FSR
DONE_CS_LOOP
MOVF INDF,0
ADDWF COUNT1
INCF FSR
BSF FSR,4
DECFSZ COUNT0
GOTO DONE_CS_LOOP ;计算校验和
RETLW 0
;****************************************************************************************
;子程序文件名:FSR_ZHUANHUAN
;实现功能:
;版本:
;作者:
;日期:
;测试人员:
;测试日期:
;测试文件:
;修改说明:
;程序所属区块:PA0/PA1=01
;入口参数:
;
;出口参数:
;
;
;影响的局部寄存器:
;影响的全局寄存器:
;堆栈深度:
;执行时间:
;调用的程序:
;特殊说明:
;****************************************************************************************
FSR_ZHUANHUAN
MOVWF FSR
MOVF INDF,0
MOVWF BUF02
FSR_ZHUANHUAN_5
INCF FSR
MOVF INDF,0
MOVWF BUF03
FSR_ZHUANHUAN_4
INCF FSR
MOVF INDF,0
MOVWF BUF04
FSR_ZHUANHUAN_3
INCF FSR
MOVF INDF,0
MOVWF BUF05
FSR_ZHUANHUAN_2
INCF FSR
MOVF INDF,0
MOVWF BUF06
FSR_ZHUANHUAN_1
INCF FSR
MOVF INDF,0
MOVWF BUF07
RETLW 0
;**************************************************************************************
WATER_TONGXUN ;开始通讯检测
MOVLW 50H
MOVWF FSR
MOVF T485_STATUS,1
BTFSC STATUS,Z
GOTO $+4
BCF STATUS,PA0
BSF STATUS,PA1
GOTO T485_TRANT ;485发送
MOVLW B'11110001'
TRIS PORTA
GOTO $+1
BCF PORTA,T485_RE
BCF PORTA,T485_DE
MOVLW .50
MOVWF COUNT0
BTFSS PORTA,T485_RX
;GOTO T485_REVICE1
GOTO T485_RECEIVE2
DECFSZ COUNT0
GOTO $-3
GOTO NOT_TX_DATA ;非法通信
T485_REVICE1
MOVLW .50
MOVWF COUNT0
BTFSC PORTA,T485_RX
GOTO T485_RECEIVE2
DECFSZ COUNT0
GOTO $-3
GOTO NOT_TX_DATA ;非法通信
T485_REVICE3
MOVLW 50H
MOVWF FSR
MOVLW 05H
MOVWF T485_CNT0
CLRF T485_CNT1
BTFSS PORTA,T485_RX
GOTO T485_RECEIVE2
DECFSZ T485_CNT1,1
GOTO $-3
DECFSZ T485_CNT0,1
GOTO $-6
GOTO NOT_TX_DATA ;非法通信
;****************************************************************************************
T485_RECEIVE2
CALL RXD8
ANDLW 0FFH
BTFSS STATUS,Z
GOTO T485_REVICE3
MOVLW 0FEH
SUBWF BUF02,0
BTFSS STATUS,Z
GOTO T485_REVICE3
MOVLW 50H
MOVWF FSR
MOVLW 05H
MOVWF T485_CNT0
CLRF T485_CNT1
BTFSS PORTA,T485_RX
GOTO T485_REVIVE_68H
DECFSZ T485_CNT1,1
GOTO $-3
DECFSZ T485_CNT0,1
GOTO $-6
GOTO NOT_TX_DATA ;非法通信
T485_REVIVE_68H
CALL RXD8
ANDLW 0FFH
BTFSS STATUS,Z
GOTO T485_REVICE3
MOVLW IR_DATA0
MOVWF FSR
CLRF BUF05
CLRF BUF06
MOVLW 68H
SUBWF BUF02,1
BTFSS STATUS,Z
GOTO T485_REVICE3
MOVWF INDF
INCF BUF05,1
;****************************************************************************************
T485_REVIVE5
MOVLW 50H
MOVWF FSR
MOVLW 05H
MOVWF T485_CNT0
CLRF T485_CNT1
BTFSS PORTA,T485_RX
GOTO T485_REVIVE4
DECFSZ T485_CNT1,1
GOTO $-3
DECFSZ T485_CNT0,1
GOTO $-6
GOTO NOT_TX_DATA ;非法通信
;****************************************************************************************
T485_REVIVE4
CALL RXD8
ANDLW 0FFH
BTFSS STATUS,Z
GOTO T485_REVIVE5
MOVLW IR_DATA0
ADDWF BUF05,0
MOVWF FSR
BSF FSR,4
MOVF BUF02,0
MOVWF INDF
INCF BUF05,1
MOVLW .8
SUBWF BUF05,0
BTFSS STATUS,Z
GOTO T485_REVIVE6
MOVLW 68H
SUBWF BUF02,0
BTFSS STATUS,Z
GOTO NOT_TX_DATA ;非法通信
T485_REVIVE6
MOVLW 0AH
SUBWF BUF05,0
BTFSS STATUS,Z
GOTO T485_REVIVE7
MOVLW 0CH
ADDWF BUF02,0
MOVWF BUF06
T485_REVIVE7
MOVF BUF06,0
SUBWF BUF05,0
BTFSS STATUS,Z
GOTO T485_REVIVE5
;****************************************************************************************
;判断校验和
MOVLW IR_DATA0-1
ADDWF BUF05,0
MOVWF FSR
BSF FSR,4
MOVLW 16H
XORWF INDF,0
BTFSS STATUS,Z
GOTO NOT_TX_DATA
CALL DONE_CS
MOVF INDF,0
SUBWF COUNT1
BTFSS STATUS,Z
GOTO NOT_TX_DATA ;非法通信
;****************************************************************************************
;所有数据减33H
MOVLW IR_DATA0+09H
MOVWF FSR
BSF FSR,4
MOVF INDF,0
BTFSC STATUS,Z
GOTO CHECK_BIAOHAO
MOVWF COUNT0
MOVLW IR_DATA0+0AH
MOVWF FSR
BSF FSR,4
DEC33H MOVLW 0CDH ;发数据加33H,而接收数据减33H
ADDWF INDF
INCF FSR
BSF FSR,4
DECFSZ COUNT0
GOTO DEC33H
;****************************************************************************************
CHECK_BIAOHAO ;核对表号
MOVLW ID00
CALL FSR_ZHUANHUAN
MOVLW IR_DATA0+01H
MOVWF FSR
MOVF BUF02,0
SUBWF IR_DATA0+01H,0
BTFSC STATUS,Z
GOTO $+5
MOVLW 0AAH
SUBWF IR_DATA0+01H,0
BTFSS STATUS,Z
GOTO CHECK_GUANBO
MOVF BUF03,0
SUBWF IR_DATA0+02H,0
BTFSC STATUS,Z
GOTO $+5
MOVLW 0AAH
SUBWF IR_DATA0+02H,0
BTFSS STATUS,Z
GOTO CHECK_GUANBO
MOVF BUF04,0
SUBWF IR_DATA0+03H,0
BTFSC STATUS,Z
GOTO $+5
MOVLW 0AAH
SUBWF IR_DATA0+03H,0
BTFSS STATUS,Z
GOTO CHECK_GUANBO
MOVF BUF05,0
SUBWF IR_DATA0+04H,0
BTFSC STATUS,Z
GOTO $+5
MOVLW 0AAH
SUBWF IR_DATA0+04H,0
BTFSS STATUS,Z
GOTO CHECK_GUANBO
MOVF BUF06,0
SUBWF IR_DATA0+05H,0
BTFSC STATUS,Z
GOTO $+5
MOVLW 0AAH
SUBWF IR_DATA0+05H,0
BTFSS STATUS,Z
GOTO CHECK_GUANBO
MOVF BUF07,0
SUBWF IR_DATA0+06H,0
BTFSC STATUS,Z
GOTO $+5
MOVLW 0AAH
SUBWF IR_DATA0+06H,0
BTFSS STATUS,Z
GOTO CHECK_GUANBO
GOTO CHECK_ID_BIAOSHI
CHECK_GUANBO
BTFSC STATUS,C
GOTO NOT_TX_DATA ;非法通信
MOVLW IR_DATA0+01H
MOVWF FSR
MOVLW 06H
MOVWF COUNT0
CHECK_GUANBO_LOOP
MOVLW 99H
SUBWF INDF,0
BTFSS STATUS,Z
GOTO NOT_TX_DATA ;非法通信
INCF FSR
BSF FSR,4
DECFSZ COUNT0
GOTO CHECK_GUANBO_LOOP
;****************************************************************************************
;广播读表地址
MOVLW IR_DATA0+08H
MOVWF FSR
MOVF IR_DATA0+09H,1
BTFSS STATUS,Z
GOTO NOT_TX_DATA ;非法通信
MOVLW 0DH
SUBWF IR_DATA0+08H,0
BTFSS STATUS,Z
GOTO GUANBO_12H
MOVLW ID00
CALL FSR_ZHUANHUAN
MOVLW IR_DATA0
MOVWF FSR
MOVF BUF02,0
MOVWF IR_DATA0+1H
MOVF BUF03,0
MOVWF IR_DATA0+2H
MOVF BUF04,0
MOVWF IR_DATA0+3H
MOVF BUF05,0
MOVWF IR_DATA0+4H
MOVF BUF06,0
MOVWF IR_DATA0+5H
MOVF BUF07,0
MOVWF IR_DATA0+6H
MOVLW IR_DATA0+08H
MOVWF FSR
MOVF BUF02,0
MOVWF IR_DATA0+0AH
MOVF BUF03,0
MOVWF IR_DATA0+0BH
MOVF BUF04,0
MOVWF IR_DATA0+10H
MOVF BUF05,0
MOVWF IR_DATA0+11H
MOVF BUF06,0
MOVWF IR_DATA0+12H
MOVF BUF07,0
MOVWF IR_DATA0+13H
MOVLW 06H
BCF STATUS,PA0
BSF STATUS,PA1
GOTO FILL_HUANCHONG
GUANBO_12H
MOVLW 12H
SUBWF IR_DATA0+08H,0
BTFSS STATUS,Z
GOTO NOT_TX_DATA ;非法通信
GOTO NOT_TX_DATA ;非法通信
;****************************************************************************************
CHECK_ID_BIAOSHI
MOVLW IR_DATA8 ;70H
MOVWF FSR
MOVLW 01H
SUBWF IR_DATA8,0
BTFSC STATUS,Z
GOTO READ_DA_PAGE1 ;读数据命令
MOVLW 04H
SUBWF IR_DATA8,0
BTFSC STATUS,Z
GOTO WRITE_DA_PAGE1 ;写数据命令
MOVLW 0FH
SUBWF IR_DATA8,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -