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

📄 ss84b0337a.s

📁 普通三项表程序,基于NEC78F9232芯片的汇编程序
💻 S
📖 第 1 页 / 共 5 页
字号:
$PROCESSOR(F9234)

;****************************************************************************************************************
;省局版本
;1、	更改时间: 	2006.03.06
;	更改内容:	1)将版本号由52改为74;
;			2)原程序运行时电表运行状态字中功率反向标志位不能清零,将清该标志的指令移到适当的位置;
;			3) 修改了在抄表日的小时为0点时会廷时一分钟转存的问题;
;			4) 修改读写E2偶有出错的问题;
;			5) 防飞微调.
;
;2、	更改时间: 2006.04.23
;	更改内容:	
;			1)更改文件名和版本号;
;			2)将延时子程序delay1的延时长度增加至43ms;
;			3)修改上电延时1S的程序;
;			4)上电写校表数据前调用delay1两次;
;			5)调整7022复位引脚的控制时序。
;
;3、	更改时间: 	2006.8.20
;	更改内容:	1)更改文件名和版本号;
;			2)修改停电期间判断关闭显示和进入死机状态的流程	
;			3)停电状态下检测红外唤醒信号时红外接收管改为开启400ms
;
;4、	更改时间: 	2008.5.8
;	更改内容:	1)更改文件名和版本号;
;			2)修改脉冲常数,(为什么要计算电流阀值)
;			3)表底度厂内可设
;			4)波特率可设置
;****************************************************************************************************************
;------------------------------------------------------------
;端口定义
;------------------------------------------------------------
;P0
SPICSIM		EQU	P0.0
SPICLKIM		EQU	P0.1
SPISDOIM		EQU	P0.2			;该引脚对应7022的SPI输入口DIN
SPISDIIM		EQU	P0.3			;该引脚对应7022的SPI输出口DOUT

;P2
BATCHK		EQU	P2.0
CLRWD			EQU	P2.1
TXLED			EQU	P2.2
COMMIN		EQU	P2.3

;P3
INTA			EQU	P3.0
TURNKEY		EQU	P3.1
SIGM			EQU	P3.2
RESETM		EQU	P3.3
RESETP		EQU	P3.4

;P4
KWHPulse		EQU	P4.0			;脉冲输入口,原来是P3.4
IRPOWER		EQU	P4.1
IRTXD			EQU	P4.2
RSTXD			EQU	P4.3
RSRXD			EQU	P4.4
IRRXD			EQU	P4.5
SCL24C		EQU	P4.6
SCLCLOCK		EQU	P4.7

;P12
LCDPOWER		EQU	P12.0
SCLLCD		EQU	P12.1
SDAall		EQU	P12.2
PRGKEY		EQU	P12.3

;P13
LCDCTRL		EQU	P13.0			;only output

;------------------------------------------------------------
;端口模式位定义
;------------------------------------------------------------
;PM0
SPICSIMmode		EQU	PM0.0
SPICLKIMmode	EQU	PM0.1
SPISDOIMmode	EQU	PM0.2
SPISDIIMmode	EQU	PM0.3		

;PM2
BATmodeCHK		EQU	PM2.0
CLRWDmode		EQU	PM2.1
TXmodeLED		EQU	PM2.2
COMmodeMIN		EQU	PM2.3

;PM3
INTAmode		EQU	PM3.0
TURNmodeKEY		EQU	PM3.1
SIGMmode		EQU	PM3.2
RESETMmode		EQU	PM3.3
RESETPmode		EQU	PM3.4

;PM4
KWHPulsemode	EQU	PM4.0
IRPOWERmode		EQU	PM4.1
IRmodeTXD		EQU	PM4.2
RSmodeTXD		EQU	PM4.3
RSmodeRXD		EQU	PM4.4
IRmodeRXD		EQU	PM4.5
SCLmode24C		EQU	PM4.6
SCLmodeCLOCK	EQU	PM4.7

;PM12
LCDmodePower	EQU	PM12.0
SCLmodeLCD		EQU	PM12.1
SDAmodeCOM		EQU	PM12.2
PRGmodeKEY		EQU	PM12.3

;-------------------------------------------------------------------------

;堆栈指针SP 从0FE00H到0FE20H共32
Data00       		DSEG    	AT	 0FE00H

StackDeep:      		DS      	34
StackPointer   		EQU		StackDeep+34

LOCAL_CNT			EQU		0FE22H
DATA01       		DSEG    	AT	 0FE23H

LOCAL_CNT2:			DS	1

MeterRunStsWord:		DS	1
B_ActivePowerDir		EQU	MeterRunStsWord.4
B_BatteryVolt		EQU	MeterRunStsWord.2
B_ZDXLAccMode		EQU	MeterRunStsWord.1
B_ReadMeterMode		EQU	MeterRunStsWord.0

PowerNetStsWord:		DS	1
B_PhaseC_Break		EQU	PowerNetStsWord.2
B_PhaseB_Break		EQU	PowerNetStsWord.1
B_PhaseA_Break		EQU	PowerNetStsWord.0

WarmStsWord:		DS	1
B_HardwareSta		EQU	WarmStsWord.0
B_BatOweSta			EQU	WarmStsWord.1
B_ActivePowerDir1		EQU	WarmStsWord.2
B_ComreverseSta		EQU	WarmStsWord.3
B_BatBally			EQU	WarmStsWord.4
B_PraError			EQU	WarmStsWord.5
B_TimeCrystal		EQU	WarmStsWord.6
B_MemoryError		EQU	WarmStsWord.7

DelayCounter:		DS	1

;Waken_Counter:		DS	1
		
I2CDeviceInd:		DS	1
SPI_CNT:			DS	1
REG_7022:			DS	1
SPIBitInd:			DS	1

Counter_AdjDataErr:	DS	1

I2CRdWtCounter:		DS	1
I2CRdWtCounterBACK:	DS	1

RdWtStartCounter:		DS	1
PASSWORDERR_CNT:		DS	1


I2CRT_Buffer:		DS	19				;I2C发送/接收缓冲区
TEMP_BUF00			EQU	I2CRT_Buffer
TEMP_BUF01			EQU	I2CRT_Buffer+1
TEMP_BUF02			EQU	I2CRT_Buffer+2
TEMP_BUF03			EQU	I2CRT_Buffer+3
TEMP_BUF04			EQU	I2CRT_Buffer+4
TEMP_BUF05			EQU	I2CRT_Buffer+5

TEMP_BUF06			EQU	I2CRT_Buffer+6
TEMP_BUF07			EQU	I2CRT_Buffer+7
TEMP_BUF08			EQU	I2CRT_Buffer+8
TEMP_BUF09			EQU	I2CRT_Buffer+9
TEMP_BUF0A			EQU	I2CRT_Buffer+10
TEMP_BUF0B			EQU	I2CRT_Buffer+11

TEMP_BUF0C			EQU	I2CRT_Buffer+12
TEMP_BUF0D			EQU	I2CRT_Buffer+13
TEMP_BUF0E			EQU	I2CRT_Buffer+14
TEMP_BUF0F			EQU	I2CRT_Buffer+15
TEMP_BUF0G			EQU	I2CRT_Buffer+16
TEMP_BUF0H			EQU	I2CRT_Buffer+17
TEMP_BUF0I			EQU	I2CRT_Buffer+18
			
I2CRT_SubBuffer0		EQU	I2CRT_Buffer+6
I2CRT_SubBuffer00		EQU	I2CRT_Buffer+6
I2CRT_SubBuffer01		EQU	I2CRT_Buffer+7
I2CRT_SubBuffer02		EQU	I2CRT_Buffer+8
I2CRT_SubBuffer03		EQU	I2CRT_Buffer+9
I2CRT_SubBuffer04		EQU	I2CRT_Buffer+10
I2CRT_SubBuffer05		EQU	I2CRT_Buffer+11

I2CRT_SubBuffer1		EQU	I2CRT_Buffer+12
I2CRT_SubBuffer10		EQU	I2CRT_Buffer+12
I2CRT_SubBuffer11		EQU	I2CRT_Buffer+13
I2CRT_SubBuffer12		EQU	I2CRT_Buffer+14
I2CRT_SubBuffer13		EQU	I2CRT_Buffer+15
I2CRT_SubBuffer14		EQU	I2CRT_Buffer+16
I2CRT_SubBuffer15		EQU	I2CRT_Buffer+17
I2CRT_SubBuffer16		EQU	I2CRT_Buffer+18


LocalVar:			DS	12
LocalVar0			EQU	LocalVar
LocalVar1			EQU	LocalVar+1
LocalVar2			EQU	LocalVar+2
LocalVar3			EQU	LocalVar+3
LocalVar4			EQU	LocalVar+4
LocalVar5			EQU	LocalVar+5
LocalVar6			EQU	LocalVar+6
LocalVar7			EQU	LocalVar+7
LocalVar8			EQU	LocalVar+8
LocalVar9			EQU	LocalVar+9
LocalVar10			EQU	LocalVar+10
LocalVar11			EQU	LocalVar+11


Seg1_2			EQU	I2CRT_Buffer		;复用做LCD显示数据缓冲区时各字节的定义
Seg3_4			EQU	I2CRT_Buffer+1
Disp_Minus_1		EQU	Seg3_4.0
Number_1			EQU	I2CRT_Buffer+1
Seg5_6			EQU	I2CRT_Buffer+2
Disp_Drop_5			EQU	Seg5_6.0
Number_2			EQU	I2CRT_Buffer+2
Seg7_8			EQU	I2CRT_Buffer+3
Disp_Sym_Ia			EQU	Seg7_8.0
Number_3			EQU	I2CRT_Buffer+3
Seg9_10			EQU	I2CRT_Buffer+4
Disp_Drop_1			EQU	Seg9_10.0
Number_4			EQU	I2CRT_Buffer+4
Seg11_12			EQU	I2CRT_Buffer+5
Disp_dangqian		EQU	Seg11_12.7	
Disp_shang			EQU	Seg11_12.6
Disp_shangyue		EQU	Seg11_12.5
Disp_xu			EQU	Seg11_12.4
Disp_ya			EQU	Seg11_12.3
Disp_Drop_3			EQU	Seg11_12.2
Disp_liang			EQU	Seg11_12.1
Disp_dian			EQU	Seg11_12.0
Seg13_14			EQU	I2CRT_Buffer+6
Disp_liu			EQU	Seg13_14.7
Disp_shijian		EQU	Seg13_14.6
Disp_juhao			EQU	Seg13_14.5
Disp_nixiangxu		EQU	Seg13_14.4
Disp_Sym_V			EQU	Seg13_14.2
Disp_Sym_A1			EQU	Seg13_14.1
Disp_Sym_h			EQU	Seg13_14.0
Seg15_16			EQU	I2CRT_Buffer+7
Disp_Sym_kw			EQU	Seg15_16.0
Number_8			EQU	I2CRT_Buffer+7
Seg17_18			EQU	I2CRT_Buffer+8
Disp_Drop_4			EQU	Seg17_18.0
Number_7			EQU	I2CRT_Buffer+8
Seg19_20			EQU	I2CRT_Buffer+9
Disp_Drop_2			EQU	Seg19_20.0
Number_6			EQU	I2CRT_Buffer+9
Seg21_22			EQU	I2CRT_Buffer+10
Disp_Drop_6			EQU	Seg21_22.0
Number_5			EQU	I2CRT_Buffer+10


;*******************************************
;Seg 1、2、23、24状态的暂存变量的位定义
;*******************************************
TEMP_SEG1_2:		DS	1
Disp_Sym_Ic			EQU	TEMP_SEG1_2.7	
Disp_Minus_3		EQU	TEMP_SEG1_2.6
Disp_Sym_Ib			EQU	TEMP_SEG1_2.5
Disp_Minus_2		EQU	TEMP_SEG1_2.4
Disp_Sym_A2			EQU	TEMP_SEG1_2.3
Disp_Sym_B			EQU	TEMP_SEG1_2.2
Disp_Sym_C			EQU	TEMP_SEG1_2.1
Disp_Sym_K1			EQU	TEMP_SEG1_2.0

Temp_Seg23_24:		DS	1
Disp_Sym_K6			EQU	Temp_Seg23_24.7
Disp_Sym_K5			EQU	Temp_Seg23_24.6
Disp_Sym_K7			EQU	Temp_Seg23_24.5
Disp_Sym_imp		EQU	Temp_Seg23_24.4
Disp_Sym_K4			EQU	Temp_Seg23_24.3
Disp_Sym_Uc			EQU	Temp_Seg23_24.2
Disp_Sym_Ub			EQU	Temp_Seg23_24.1
Disp_Sym_Ua			EQU	Temp_Seg23_24.0


KWH_BUF:			DS	4				
KWH_BUF0			EQU	KWH_BUF
KWH_BUF1			EQU	KWH_BUF+1
KWH_BUF2			EQU	KWH_BUF+2
KWH_BUF3			EQU	KWH_BUF+3


DEMAND_DATA:		DS	4				
DEMAND_DATAL		EQU	DEMAND_DATA
DEMAND_DATAM		EQU	DEMAND_DATA+1
DEMAND_DATAH		EQU	DEMAND_DATA+2
DEMAND_DATAHH		EQU	DEMAND_DATA+3




;SPI
SPIDATA:			DS	4			
SPIDATAH			EQU	SPIDATA
SPIDATAM			EQU	SPIDATA+1			;停电激活复用
SPIDATAL			EQU	SPIDATA+2
SPICMD			EQU	SPIDATA+3			;停电激活复用

B_SPIDATAFLAG		EQU	SPIDATAH.7			;停电激活复用
B_VOLTAGEREVERSE		EQU	SPIDATAL.3
B_CURRENTREVERSE		EQU	SPIDATAL.4
B_KWHMODE			EQU	SPIDATAL.0

ERR7022_BUF:		DS	1

PSW_Temp:			DS	1

Second_Temp:		DS	1

DOTH_POINT:			DS	1

LCDCOM:			DS	1

TIMER_PULSECNT:		DS	1

LCDMODE_BYTE:		DS	1

SENDDELAY_45MS:		DS	1

CLRKWHFLAG_BYTE:		DS	1

SECOND_CNT1:		DS	1
SECOND_CNT2:		DS	1
HALFDAY_CNT:		DS	1

IRDATA_CNT:			DS	1
TIMER_IRUPH:		DS	1

COUN60S_CNT:		DS	1
TIMER_IRUP1S:		DS	1

PULSE_CNT:			DS	1

PULSE_ION1:			DS	1
PULSE_ION2:			DS	1
PULSE_IO1:			DS	1
PULSE_IO2:			DS	1

T1SEC_COUNT:		DS	1
MINUTE_CNTL:		DS	1
BREAKXUVALUE:		DS	1
;DEMAND_PULSE:		DS	1

BackLight10SCunt:		DS	1

KeyScanCounter:		DS	1
KeyRegister0:		DS	1
B_TurnKeySts_Temp		EQU	KeyRegister0.0	;轮显键暂存状态
B_PrgKeySts_Temp		EQU	KeyRegister0.1	;编程键暂存状态
KeyRegister1:		DS	1
B_TurnKeyValidSts		EQU	KeyRegister1.0	;轮显键有效状态
B_PrgKeyValidSts		EQU	KeyRegister1.1	;编程键有效状态
B_PressTurnKey		EQU	KeyRegister1.6	;轮显键按下标志
B_PressPrgKey		EQU	KeyRegister1.7	;编程键按下标志

LCDDispCounter:		DS	1

Timer_BackLightCtl:	DS	1
Timer_CommuLEDCtl:	DS	1
TEMER_COMMUSYM:		DS	1
StClkCounter:		DS	1
Timer_PrgKeyCtl:		DS	1
Timer_LCD:			DS	1
Timer_100ms:		DS	1
Timer_15ms:			DS	1
EE10msCounter:		DS	1		
;TIMER_10MIN:		DS	1		
			
;UART收发子程序变量
FrameRTCounter:		DS    1				;帧收发计数器,用于在收发数据帧时进行计数
UartTranLen:		DS	1
COMTIME_COUNT:		DS	1
IRBitRTCounter:		DS	1
Timer_IRRT:			DS	1
TIME10S_PULSE:		DS	1

I2CBitCounter:		DS	1


;---------------------------------------------------------------------------------------------------
Universal_Buffer:		DS	7
JUDGE7022Counter:		DS	6				;该区域需和Universal_Buffer连续,上电初始化读取参数备份时会临时占用									
JUDGE7022Counter0		EQU	JUDGE7022Counter
JUDGE7022Counter1		EQU	JUDGE7022Counter+1
JUDGE7022Counter2		EQU	JUDGE7022Counter+2
JUDGE7022Counter3		EQU	JUDGE7022Counter+3
JUDGE7022Counter4		EQU	JUDGE7022Counter+4
JUDGE7022Counter5		EQU	JUDGE7022Counter+5
;----------------------------------------------------------------------------------------------------

JUDGE7022BYTE1:		DS	1
B_RVPFLAGA_Curr		EQU	JUDGE7022BYTE1.0
B_RVPFLAGB_Curr		EQU	JUDGE7022BYTE1.1
B_RVPFLAGC_Curr		EQU	JUDGE7022BYTE1.2
B_BREAKXUA_Curr		EQU	JUDGE7022BYTE1.3
B_BREAKXUB_Curr		EQU	JUDGE7022BYTE1.4
B_BREAKXUC_Curr		EQU	JUDGE7022BYTE1.5

JUDGE7022BYTE2:		DS	1
B_RVPFLAGA_Temp		EQU	JUDGE7022BYTE2.0
B_RVPFLAGB_Temp		EQU	JUDGE7022BYTE2.1
B_RVPFLAGC_Temp		EQU	JUDGE7022BYTE2.2
B_BREAKXUA_Temp		EQU	JUDGE7022BYTE2.3
B_BREAKXUB_Temp		EQU	JUDGE7022BYTE2.4
B_BREAKXUC_Temp		EQU	JUDGE7022BYTE2.5

JUDGE7022BYTE3:		DS	1
B_RVPFLAGA_Valid		EQU	JUDGE7022BYTE3.0
B_RVPFLAGB_Valid		EQU	JUDGE7022BYTE3.1
B_RVPFLAGC_Valid		EQU	JUDGE7022BYTE3.2
B_BREAKXUA_Valid		EQU	JUDGE7022BYTE3.3
B_BREAKXUB_Valid		EQU	JUDGE7022BYTE3.4
B_BREAKXUC_Valid		EQU	JUDGE7022BYTE3.5

JUDGE7022BYTE4:		DS	1
B_COMREVERSE_Curr		EQU	JUDGE7022BYTE4.0
B_RVPKWH_Curr		EQU	JUDGE7022BYTE4.1

B_COMREVERSE_LCD		EQU	JUDGE7022BYTE4.4
B_RVPKWH_LCD		EQU	JUDGE7022BYTE4.5

JUDGE7022BYTE6:		DS	1
B_DISAPCVBYTEA		EQU	JUDGE7022BYTE6.0
B_DISAPCVBYTEB		EQU	JUDGE7022BYTE6.1
B_DISAPCVBYTEC		EQU	JUDGE7022BYTE6.2


ParaOf7022VldFlag:	DS	1
JUDGE7022BYTE5:		DS	1
REVERSE_CNT:		DS	1

DISAPCURRBYTE:		DS	1
B_DISAPCURA_Curr		EQU	DISAPCURRBYTE.0	
B_DISAPCURB_Curr		EQU	DISAPCURRBYTE.1
B_DISAPCURC_Curr		EQU	DISAPCURRBYTE.2

B_DISAPCURA_LCD		EQU	DISAPCURRBYTE.0	
B_DISAPCURB_LCD		EQU	DISAPCURRBYTE.1
B_DISAPCURC_LCD		EQU	DISAPCURRBYTE.2

TIMER_RVPKWH:		DS	1
WORKER_CNT:			DS	1

Flag0:			DS	1
B_ParityCheck		EQU	Flag0.0				;红外收发奇偶校验位
B_I2CTimerOut		EQU	Flag0.2
B_AckError			EQU	Flag0.3
B_LastByteRcv		EQU	Flag0.4
B_RdWrFail			EQU	Flag0.5
B_OPERATE04			EQU	Flag0.6
B_PrgEnable			EQU	Flag0.7

COMM_FLAG:			DS	1
B_FrameHeadSuited		EQU	COMM_FLAG.0
B_FrameRecInd		EQU	COMM_FLAG.1
B_FrameValid		EQU	COMM_FLAG.2
B_FrameSend			EQU	COMM_FLAG.3
B_FrameSendEnable		EQU	COMM_FLAG.4
B_SendByteViaIREn		EQU	COMM_FLAG.5								
B_IRTranEn			EQU	COMM_FLAG.6					
B_IRRecvEn			EQU	COMM_FLAG.7

CommuErrWord:		DS	1
B_PKERR			EQU	CommuErrWord.3			;PROGRAM KEY ERROR
B_PWDERR			EQU	CommuErrWord.2			;PASSWORD ERROR
B_DIERR			EQU	CommuErrWord.1			;DATA INDENTIFY ERROR
B_DATERR			EQU	CommuErrWord.0

WRITE_CYCLE:		DS	1
ALARM_NUM:			DS	1

Universal_Buf0:		DS	2
LeadByte1			EQU	Universal_Buf0			;前导字节FEH的存放区,应放在缓冲区前
LeadByte2			EQU	Universal_Buf0+1	
UARTBuffer:			DS	35					;UART收发缓冲区
FrameStartFlag1         EQU	UARTBuffer 
UARTBuffer0         	EQU	UARTBuffer  
A0         			EQU	UARTBuffer+1
UARTBuffer1			EQU	UARTBuffer+1
A1         			EQU	UARTBuffer+2
UARTBuffer2			EQU	UARTBuffer+2
A2         			EQU	UARTBuffer+3
UARTBuffer3			EQU	UARTBuffer+3
A3         			EQU	UARTBuffer+4
A4         			EQU	UARTBuffer+5
A5         			EQU	UARTBuffer+6
FrameStartFlag2         EQU	UARTBuffer+7
ControlCode			EQU	UARTBuffer+8
DataLength			EQU	UARTBuffer+9
PA0				EQU	UARTBuffer+10
DataArea			EQU	UARTBuffer+10		
DI0				EQU	UARTBuffer+10
CorrectAckFrameCS		EQU	UARTBuffer+10
DI1				EQU	UARTBuffer+11
PS0				EQU	UARTBuffer+11
CorrecrrtAckFrameEnd	EQU	UARTBuffer+11
ReadCoectData		EQU	UARTBuffer+11
N1				EQU	UARTBuffer+12
PS1				EQU	UARTBuffer+12
N2				EQU	UARTBuffer+13
PS2				EQU	UARTBuffer+13
N3				EQU	UARTBuffer+14
PAn				EQU	UARTBuffer+14
N4				EQU	UARTBuffer+15
PN0				EQU	UARTBuffer+15
RegAddress			EQU	UARTBuffer+16
WriteData			EQU	UARTBuffer+16
PN1				EQU	UARTBuffer+16
N5				EQU	UARTBuffer+16
RegDataLength		EQU	UARTBuffer+17
PN2				EQU	UARTBuffer+17

⌨️ 快捷键说明

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