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

📄 fl_date_chk.asm

📁 基于PL3000芯片的单相复费率多功能电表的应用程序。
💻 ASM
字号:
;************************************************************
;文档类型: 原代码 
;项目编号: 
;文档编号: 
;修订版本: v1.0
;生成日期: 2004.12.2
;文档作者: li
;审    核: 
;************************************************************
;相关文档: 费率时段判别
;文档编号      说明 
;************************************************************
;修订版本: 
;修订版本: 
;************************************************************
$INCLUDE	(RAML128.INC)
$INCLUDE	(RAMH128.INC)
$INCLUDE	(PL3200.INC)
$INCLUDE	(24ADDR.INC)
$INCLUDE	(IO.INC)

NAME		FL_DATE_CHK
CODE_REG	SEGMENT	CODE
RSEG		CODE_REG
PUBLIC          FL_DATE_CHK
;*******************************;调用子程序情况:
EXTRN   CODE(RD_FL)
;*************************************************************************
;费率时段判别,共有8个可设时段,如果前面时段有一个为无效,后面时段将不判.
;费率时段应该递增,不能跨0点 OUT ==FL_NUM_JS
;*************************************************************************
;*************************************************************************
;费率时段判别,共有8个可设时段,如果前面时段有一个为无效,后面时段将不判.
;费率时段应该递增,不能跨0点 OUT ==FL_NUM_JS  
;如果当前时间大于等于费率N的时间,则FL_NUM_JS=当前费率值,如果小于则退出
;R5=每包数据的费率数:4个
;R6=共2包费率数数据
;2004.6.25: 读取费率表时考虑当前执行的 费率表数
;*************************************************************************
FL_DATE_CHK:    MOV	EXT_ADR,#83H	;读时,时钟
		MOV	A,EXT_DAT
		MOV     R0,#HOUR
		MOV     @R0,A
		MOV	FL_NUM_JS,#4		;默认谷时段
		MOV	FL_NUM_JS_BAK,#5CH
		                	;检查第一个时段的时分情况
		MOV     A,#0    
		CALL    RD_FL
		MOV	A,RD_BUF0	;第1时段费率号
		JNZ	FL_NOW_TIME_CHK	;费率号为0,直接默认费率4
FL_CHK_RET:	RET

FL_NOW_TIME_CHK:   ;检查当前时间是否小于第一个时段的时间
                MOV	A,RD_BUF0		;第1时段费率号
		MOV	FL_NUM_JS,A	
		ADD	A,#'X'
		MOV	FL_NUM_JS_BAK,A

		MOV     R0,#HOUR
		MOV     A,@R0
		CLR     C
		SUBB	A,RD_BUF2        ;2004.6.15,时小于,运行最后一个费率 
		JC      NOW_HOUR_LESS
		JNZ     FL_NOW_DATE_CHK   ;时不等时,直接比较时段

		MOV     R0,#MINUTE
                MOV     A,@R0
		CLR     C
		SUBB	A,RD_BUF1        ;2004.6.15,时相等,比较分钟
		JC      NOW_HOUR_LESS    ;2004.6.15,分钟小时,应该执行最后一个时段
                JMP     FL_NOW_DATE_CHK
                
NOW_HOUR_LESS:  ;当前时间小于第一个时段,应该执行最后一个时段,将时置25H
		MOV     R0,#HOUR
		MOV     @R0,#25H
		
FL_NOW_DATE_CHK:MOV     R6,#7

FL_NOW_X:       CLR     C
	        MOV     A,#8
                SUBB    A,R6
                MOV     B,#4
                MUL     AB 	     	 
		CALL    RD_FL
FL_DATE_CHK0:	
		MOV	A,RD_BUF0		;第N时段费率号
		JZ	FL_DATE_CHK_RET	;费率号为0,无效		
;RD_BUF2;第N费率时段(时)
		MOV     R0,#HOUR
		MOV     A,@R0
		CLR	C
		SUBB    A,RD_BUF2         ;时比较
		JC      FL_DATE_CHK_RET   ;时小于,执行上一个时段
		JNZ     CHK_NEXT_FL_HOUR   ;时大于,执行本时段

		MOV     R0,#MINUTE
                MOV     A,@R0
		CLR     C
		SUBB	A,RD_BUF1        ;2004.6.15,时相等,比较分钟
		JC      FL_DATE_CHK_RET  ;分小,执行上一个时段
CHK_NEXT_FL_HOUR:		
CHK_NEXT_FL_MIN:		
		MOV	A,RD_BUF0		;第N费率号
		MOV	FL_NUM_JS,A	;第N费率号
		ADD	A,#'X'
		MOV	FL_NUM_JS_BAK,A	;第N费率号BAK				
		DJNZ    R6,FL_NOW_X   
FL_DATE_CHK_RET:
		RET
		END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -