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