⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twt_rs.asm

📁 485通讯的水表程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;****************************************************************************************
;****************************************************************************************
;****************************************************************************************

		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 + -