📄 ss84b0337a.s
字号:
$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 + -