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

📄 ss84b0337a.s

📁 普通三项表程序,基于NEC78F9232芯片的汇编程序
💻 S
📖 第 1 页 / 共 5 页
字号:
RegDataH			EQU	UARTBuffer+18

RegDataM			EQU	UARTBuffer+19

RegDataL			EQU	UARTBuffer+20
WrtMesChipFrameCS		EQU	UARTBuffer+21
WrtMesChipFrameEND	EQU	UARTBuffer+22
			
DATA02	     		DSEG    SADDRP

Universal_Buf1:		DS	2
Universal_Buf2:		DS	2
Universal_Buf3:		DS	2


WordAddress:		DS	2
WordAddressL		EQU	WordAddress
WordAddressH		EQU	WordAddress+1

PULSEMIN_CNT:		DS	2
KWHPOINT:			DS	2
BREAKPOINT:			DS	2
CURRENTPOINT:		DS	2

PULSE_GAP:			DS	2

IRRTBuffer:			DS	2
IRRTBufferL			EQU	IRRTBuffer
IRRTBufferH			EQU	IRRTBuffer+1


TIMEERR_CNT:		DS	2
SecondAcc:			DS	2

OprRsltReg0:		DS	2
OprRsltReg0_L		EQU	OprRsltReg0
OprRsltReg0_H		EQU	OprRsltReg0+1
OprRsltReg1:		DS	2
OprRsltReg1_L		EQU	OprRsltReg1
OprRsltReg1_H		EQU	OprRsltReg1+1

I2CPointer			EQU	OprRsltReg0			;I2C指针,与乘除法共用RAM
I2CPointer1			EQU	OprRsltReg1

CURRENTVALUE:		DS	2
CURRENTVALUE_L		EQU	CURRENTVALUE
CURRENTVALUE_H		EQU	CURRENTVALUE+1

DATA03	     		BSEG   
B_PULSEOK			DBIT
B_PULSEAVAIL		DBIT
B_EE10msFlag		DBIT
B_IRSTART			DBIT
B_SEVENTY			DBIT
B_CHECKSUMB			DBIT
B_PALOW			DBIT
B_PULSEGAPOK		DBIT
B_TimeOutFlag_15ms	DBIT
B_LCDFLAG			DBIT
B_RVPKWH			DBIT
B_TimeOutFlag_100ms	DBIT
B_KWHCHAN			DBIT
B_TIMEEVEN			DBIT
B_TM80INT			DBIT
B_MAINLOOP			DBIT
B_CURRENTNOTAVAIL		DBIT
B_VOLTAGEBREAKAVAIL	DBIT
B_CLRKWHFLAG		DBIT
B_UPFLAG			DBIT
B_DetectVlowlv		DBIT
B_CommuChannelFlag	DBIT
B_LCDCLOSE			DBIT
B_FLASHLCD_Curr		DBIT
B_FLASHLCD_LCD		DBIT
B_SJCLR			DBIT
B_DATASAVE			DBIT
B_KWHINT			DBIT
B_TIMEERR			DBIT
B_IRUPL			DBIT
B_POWERSAVE			DBIT
B_TIMESET			DBIT
B_AckEnable			DBIT
B_CheckAdjData		DBIT
B_OptAtZeroEn		DBIT
B_CHUCHANG			DBIT
B_ClrSvPwFlagEn		DBIT
B_KWHErr			DBIT
B_AtMainLoop		DBIT
B_PowerDown			DBIT
B_AdjDataErr		DBIT
;B_LowVol			DBIT
B_COMMHEADFLAG		DBIT
B_COMMHEADFLAG1		DBIT
B_BaudRateEn		DBIT			;波特率修改使能
;============================================================================
;子程序调用表地址定义区
;============================================================================
TAddr_ReadI2C		EQU	40H
TAddr_ReadSPI		EQU	42H
TAddr_READ_KWH		EQU	44H
TAddr_READTIME_JUD1	EQU	46H
TAddr_READ_24CX		EQU	48H
TAddr_RdDataWithBkUp	EQU	4AH

;TAddr_WRITEOVER_TIME	EQU	4CH
TAddr_Delay1		EQU	4CH

;TAddr_WRITE_ERRRECORD	EQU	4EH
TAddr_BCD_HEX_SUB		EQU	4EH

TAddr_READ_TIMEBUF	EQU	50H

TAddr_WRITE_24CX		EQU	52H
TAddr_WtDataWithBkUp	EQU	54H
TAddr_WriteI2C		EQU	56H
TAddr_WRITE_PRGRECORD	EQU	58H               
TAddr_Delay  		EQU	5AH              
TAddr_Multiply		EQU	5CH
TAddr_BCDADJ		EQU	5EH
TAddr_BCD_HEX		EQU	60H
TAddr_CHECK_DATABCD	EQU	62H
TAddr_LCDINI		EQU	64H
TAddr_IssueStartCdt	EQU	66H
TAddr_IssueStopCdt	EQU	68H
TAddr_ClrSCLMode		EQU	6AH
TAddr_SetSCLMode		EQU	6CH
TAddr_SendByteViaI2C	EQU	6EH
TAddr_Sendbyte		EQU	70H
TAddr_DISP_DATA		EQU	72H
TAddr_DATA_SSTRAN		EQU	74H
TAddr_TRAN_DATA		EQU	76H

TAddr_ROR4BIT		EQU	78H

TAddr_CALC_CHECKSUM	EQU	7AH

TAddr_JUDGE_MAX		EQU	7CH

TAddr_TEMP_BUFCLR		EQU	7EH


;============================================================================
;		EEPROM  Address Definition
;============================================================================

EKWH			EQU	0000H					;当前正向有功总电量
RVPKWH		EQU	0010H					;反向总电量
EMETERNUM		EQU	0020H					;表号
POWERLOWDAY		EQU	0030H					;停显天数
BREAKVALUE		EQU	0040H					;断相阀值
LCDMODE		EQU	0050H					;显示方式
EPOWERPARA		EQU	0060H					;掉电时需保存的参数
ClockAdjData	EQU	0070H					;时钟校准数据
ECHUCHANG		EQU	0080H					;出厂状态标识
EPASSWORD		EQU	0090H					;高级密码
EPASSWORD1		EQU	00A0H					;低级密码
COPYDATY		EQU	00B0H					;抄表日
COMMRATE		EQU	00B8H					;波特率设置
RVPKWHTIME		EQU	00C0H					;反向电量累计时间
BREAKTIME		EQU	00D0H					;断相累计时间
BREAKKWHALL		EQU	00E0H					;断相累计电量
TimeAdj_Range	EQU	00F0H					;广播校时设置范围

EKWH_BkUp		EQU	0100H					;当前正向有功总电量备份(加5AH)
RVPKWH_BkUp		EQU	0110H					;反向总电量备份(加5AH)
EMETERNUM_BkUp	EQU	0120H					;表号备份(加5AH)
POWERLOWDAY_BkUp	EQU	0130H					;停显天数备份(加5AH)
BREAKVALUE_BkUp	EQU	0140H					;断相阀值备份(加5AH)
LCDMODE_BkUp	EQU	0150H					;显示方式备份(加5AH)
EPOWERPARA_BkUp	EQU	0160H					;掉电时需保存的参数备份(加5AH)
ClockAdjData_BkUp	EQU	0170H					;时钟校准数据备份(加5AH)
ECHUCHANG_BkUp	EQU	0180H					;出厂状态标识备份(加5AH)
EPASSWORD_BkUp	EQU	0190H					;高级密码备份(加5AH)
EPASSWORD1_BkUp	EQU	01A0H					;低级密码备份(加5AH)
COPYDATY_BkUp	EQU	01B0H					;抄表日备份(加5AH)
COMMRATE_BkUp	EQU	01B8H					;波特率设置备份(加5AH)
RVPKWHTIME_BkUp	EQU	01C0H					;反向电量累计时间备份(加5AH)
BREAKTIME_BkUp	EQU	01D0H					;断相累计时间备份(加5AH)
BREAKKWHALL_BkUp	EQU	01E0H					;断相累计电量备份(加5AH)
TimeAdj_Rg_BkUp	EQU	01F0H					;广播校时设置范围备份(加5AH)


DJXULANG		EQU	0200H					;当前需量

SYXULANG		EQU	0210H					;上月需量

SSXULANG		EQU	0220H					;上上月需量

XULANGTIME		EQU	0206H					;最大需量时间

SXULANGTIME		EQU	0216H					;上月需量时间

SSXULANGTIME	EQU	0226H					;上上月需量时间

NEARRVPKWH1		EQU	0230H					;最近1次反向电量

NEARRVPKWH2		EQU	0240H					;最近2次反向电量

NEARRVPKWH3		EQU	0250H					;最近3次反向电量
				
RVPSTARTTIME1	EQU	0236H					;最近1次反向电量起始时间	

RVPSTARTTIME2	EQU	0246H					;最近2次反向电量起始时间

RVPSTARTTIME3	EQU	0256H					;最近3次反向电量起始时间
								
SETDAYBEFORE1	EQU	0260H					;年月日设置前一次日期

SETDAYBEFORE2	EQU	0270H					;年月日设置前二次日期

SETDAYBEFORE3	EQU	0280H					;年月日设置前三次日期

HOURBEFORE1		EQU	0290H					;时分秒设置前一次日期

HOURBEFORE2		EQU	02A0H					;时分秒设置前二次日期

HOURBEFORE3		EQU	02B0H					;时分秒设置前三次日期

SETDAYNEAR1		EQU	02C0H					;最近一次年月日设置时刻

SETDAYNEAR2		EQU	02D0H					;最近二次年月日设置时刻

SETDAYNEAR3		EQU	02E0H					;最近三次年月日设置时刻

SETHOURNEAR1	EQU	02F0H					;最近一次时分秒设置时刻

SETHOURNEAR2	EQU	0300H					;最近二次时分秒设置时刻

SETHOURNEAR3	EQU	0310H					;最近三次时分秒设置时刻

PRORECORD1		EQU	0320H					;最近一次编程记录
NEARPROTIME		EQU	0322H					;最近编程时间

PRORECORD2		EQU	0330H					;最近二次编程记录

PRORECORD3		EQU	0340H					;最近三次编程记录

AddrAndFlag		EQU	0400H					;地址和标志
AddrAndFlag_BkUp	EQU	0500H					;地址和标志备份(加5AH)

AdjData_BkUp2	EQU	0600H					;校表数据备份2
AdjData_BkUp3	EQU	0700H					;校表数据备份3
			
HOSTORYKWH		EQU	0800H					;历史电量

BREAKXULANG		EQU	0900H					;断相记录

CURRENTNOT		EQU	0A00H					;电流反极性记录

DQDianLiang		EQU	0B00H					;当前电量小数部分

FXDianLiang		EQU	0C00H					;反向电量小数部分

;---------------------------------------------------------------------------------
;校表数据

;04
E2_ADDRLC		EQU	0ACH					;6页
;0600H

E2_ADDRLE		EQU	0AEH					;7页
;0700H
;----------------------------------------------------------------------------------
;TIME
TIME_ADDRH		EQU	64H
SECONDS		EQU	0000H
MINUTES		EQU	0010H
WEEKS			EQU	0030H
DATES			EQU	0040H
OFFSET		EQU	0070H


;const 


;******************与电流规格有关的常数***********************************
Meterconst		EQU	0010H
EMeterconst0	EQU	00H						
EMeterconst1	EQU	16H
EMeterconst2	EQU	00H	

PULSENUM		EQU	43
PULSETCIRCLE	EQU	116

KWMeterconst	EQU	64

BasicIB		EQU	5				;电流规格:10(40)A
BasicIB0		EQU	0A000H
;************************************************************************
BreakVulae		EQU	187
BasicIBBER		EQU	0332H						;1Ib%
BasicIBPer1		EQU	029H						;0.5%
BasicIPer1		EQU	01080H
NBasicIPer1		EQU	0ef80H
BasicPPer1		EQU	01a6H
NBasicPPer1		EQU	0fe60H


POWERVALUEL		EQU	0FF00H
CURRENTZERO		EQU	19H
KWHLOOP_LEN		EQU	0BH
BREAKLOOP_LEN	EQU	0AH
CURRENTLOOP_LEN	EQU	0AH

;-------------------------------------------------------------------------------------------
V_RESET         	CSEG    AT      0000H
			DW      START
		 	DW      RSet					;02

		 
Velt			CSEG 	AT	0006H    				;sets vector address of intp0
;		
			DW  	RSet
      		 
Vep0			CSEG	AT	0008H
			DW     Second_pule           
		
Vep1			CSEG	AT	000AH
		 	DW	RSet

Vinttmh1		CSEG	AT	000CH
			DW      RSet

V_ReceEnd		CSEG   AT	000EH
			DW     Tm00_int
		 
V_SendEnd		CSEG   AT	0010H
			DW     RSet

V_Watch		 CSEG   AT	0012H
			DW	Ad_int



V_INTP2		CSEG	AT	0016H
			DW	KeyP2_int

V_TM1			CSEG   AT	0018H
			DW	RSet	
			;DW      RSet
V_TM2			CSEG   AT	001AH
			DW	Tm80_int	
			;DW      RSet
V_TM5			CSEG   AT	001CH
			DW	RSet	

V_KR			CSEG 	AT 	001EH           
			DW      Ser6_int
			;DW      RSet
V_AD			CSEG	AT	0020H
			DW      RSet	 



TEMP1		 	CSEG	AT	0022H
;---------------------------------------------------------------------------------																
MonthsTable:
			DB	00H
			DB	031H				;1月
			DB	028H 				;2月     		
       		DB	031H				;3月
       		DB	030H				;4月
       		DB	031H				;5月
       		DB	030H				;6月
       		DB	031H				;7月
       		DB	031H				;8月
       		DB	030H				;9月
       		DB	031H				;10月
       		DB	030H				;11月
       		DB	031H				;12月			

;---------------------------------------------------------------------------------
LCDCODE:
       	
			DB	10111110B			;0
			DB	00000110B			;1
			DB	01111100B			;2
			DB	01011110B			;3	
			DB	11000110B			;4
			DB	11011010B			;5
			DB	11111010B			;6
			DB	00001110B			;7
			DB	11111110B			;8
			DB	11011110B			;9       
       		DB	0EEh,0F2h,70H,076H,0F8H,0E8H


SubRt_Table		CSEG	AT	0040H

			DW	ReadI2C			;40H
			DW	ReadSPI			;42H
			DW	READ_KWH			;44H
			DW	READTIME_JUD1		;46H
			DW	READ_24CX			;48H
			DW	RdDataWithBkUp		;4AH
			
			;DW	WRITEOVER_TIME		;4CH
			DW	Delay1			;4CH
			
			;DW	WRITE_ERRRECORD		;4EH
			DW	BCD_HEX_SUB			;4EH
			
			;DW	WRITE_7022REG		;50H			
			DW	READ_TIMEBUF		;50H	
					
			DW	WRITE_24CX			;52H
			DW	WtDataWithBkUp		;54H
			DW	WriteI2C			;56H
			DW	WRITE_PRGRECORD		;58H               
			DW	Delay  			;5AH              
			DW	Multiply			;5CH
			DW	BCDADJ			;5EH
			DW	BCD_HEX			;60H
			DW	CHECK_DATABCD		;62H
			DW	LCDINI			;64H
			DW	IssueStartCdt		;66H
			DW	IssueStopCdt		;68H
			DW	ClrSCLMode			;6AH
			DW	SetSCLMode			;6CH
			DW	SendByteViaI2C		;6EH
			DW	Sendbyte			;70H
			DW	DISP_DATA			;72H
			DW	DATA_SSTRAN			;74H
			DW	TRAN_DATA			;76H
			
			;DW	COM_CHECKSUM		;78H			
			DW	ROR4BIT			;78H
			
			DW	CALC_CHECKSUM		;7AH
			
			DW	JUDGE_MAX			;7CH			
			;DW	TEMP_DATACMP		;7CH
			
			DW	TEMP_BUFCLR			;7EH
			
                
OPTIONBYTE     	CSEG AT 0080H
OPB:     		DB      9cH        
PRB:     		DB      0A3H                 

main             CSEG	at	0082H

START:
Initialize:
;IniSP
                  DI
                  AX=#StackPointer
                  SP=AX
                  
			;PCC=#00H
			;PPCC=#00H	
			CALL	!SetUpRegister
			RSTXD=1
			;RESETMmode=0
			RESETM=0
			
;------------------------------------------------------------------------------
			LOCAL_CNT=#24				
StartUpDelay:  			
			CALLT	[TAddr_Delay1]
			WDTE=#0ACH
			DBNZ	LOCAL_CNT,$StartUpDelay	
		
;------------------------------------------------------------------------------
		
			
;ClearRAM				
			
			LOCAL_CNT=#221					;Counter代表地址FE32H
			HL=#0FE23H
			CALLT	[TAddr_TEMP_BUFCLR]
			
			MINUTE_CNTL=#30
			StClkCounter=#10
					
WAKEUP_START:			  

			CALL	!SetUpRegister			
				
                                
;-----------------------初始化定时器-------------------------------------------------------------		
			TCE80=0
			TMC80=#00
			CR80=#125
			TCE80=1
			TMMK80=0	
			
										
                	EI 							;开中断
                	
                	               			                  	              	              	
;----------------------初始化显示----------------------------------------------              	                	               							
			;Timer_BackLightCtl=#0
			;LCDCTRL=1
			
			JUDGE7022BYTE3=#0
			
			LCDCOM=#48H
			CALLT	[TAddr_LCDINI]
			LCDCOM=#70H
			CALLT	[TAddr_LCDINI]
			CALL !LCDAllON
			
			AX=#LCDMODE								
			WordAddress=AX
			I2CRdWtCounter=#1
			DE=#I2CRT_Buffer
			CALLT	[TAddr_RdDataWithBkUp]			
			LCDMODE_BYTE=TEMP_BUF00(A)	
			if_bit(B_CHECKSUMB)						
				LCDMODE_BYTE=#1
			endif
			
			
;---------------------判断是否掉电--------------------------------------------------------------------						
			if_bit(LVIF)		
				T1SEC_COUNT=#0
				B_TurnKeyValidSts=1
				CALL 	!READ_POWERPARA		;读记录指针
				BR 	!RdKWHAndSetReg
			endif			

⌨️ 快捷键说明

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