📄 test.txt
字号:
#INCLUDE HT46R72D-1.INC
DATA .SECTION 'DATA'
SCL EQU PB0
SDA EQU PB2
BCD_DATA1 DB ? ;BCD 和 DISPLSY 参数
BCD_DATA2 DB ?
BCD_DATA3 DB ?
BCD_DATA4 DB ?
TAB_DATA1 DB ?
TAB_DATA2 DB ?
TAB_DATA3 DB ?
TAB_DATA4 DB ?
ZHAN_CHUN DB ?
DELAY_LOOP1 DB ?
DELAY_LOOP2 DB ?
COUNT DB ?
CAL_FLAG DB ? ; 标定标志
FLAG DB ?
FLAG0 EQU FLAG.0 ;按键标志
FLAG1 EQU FLAG.1 ;闪烁显示标志
FLAG2 EQU FLAG.2
FLAG3 EQU FLAG.3 ;是否显示小数点、KG、LB
FLAG4 EQU FLAG.4 ;是显示KG、LB?
FLAG5 EQU FLAG.5 ;ZERO_CHECK 执行标志
FLAG6 EQU FLAG.6
FLAG7 EQU FLAG.7
BCD_NEIMAL DB ? ;BCD子程序的入口参数
BCD_NEIMAH DB ?
BCD_RAM0 DB ?
BCD_RAM1 DB ?
BCD_RAM2 DB ?
ACC_RAM DB ?
STATUS_RAM DB ?
NEIMAL DB ? ;TIMER1的值
NEIMAH DB ?
KEY_RAM1 DB ?
KEY_RAM2 DB ?
DIV_B1 DB ? ; = MULL_C
DIV_B2 DB ? ; = MULH_C
DIV_B3 DB ? ; = MULL_B
DIV_B4 DB ? ; = MULH_B
DIVH DB ?
DIVL DB ?
DIV_S1 DB ?
DIV_S2 DB ?
DIV_S3 DB ?
DIV_S4 DB ?
DIV_Y1 DB ?
DIV_Y2 DB ?
DIV_Y3 DB ?
DIV_Y4 DB ?
;DIV_B4 DB ?
;DIV_B3 DB ?
;DIV_B2 DB ?
;DIV_B1 DB ?
MUL_RAM1 DB ?
MUL_RAM2 DB ?
MUL_RAM3 DB ?
MUL_RAM4 DB ?
MUL_RAM5 DB ?
MUL_RAM6 DB ?
AutoToZeroValue DB ?
D_WEIGHTH DB ?
D_WEIGHTL DB ?
D_WEIGHT0H DB ?
D_WEIGHT0L DB ?
D_MinWeight DB ?
D_MaxWeightH DB ?
D_MaxWeightL DB ?
CALCONST1L DB ?
CALCONST1H DB ?
ZeroStableValue DB ?
LOOP DB ? ;开机归零稳定次数
SUML DB ?
SUMH DB ?
SUMHH DB ?
SUM_LOOP DB ?
AVEH DB ?
AVEL DB ?
HT24_ADDR DB ? ;通用地址
HT24_ADDR1 DB ? ;具体地址
HT24_LOOP DB ?
HT24_RWDATA DB ?
ZERO_H DB ? ;零点追踪参数
ZERO_L DB ?
WEIGHT_H DB ?
WEIGHT_L DB ?
CALDOT1H DB ?
CALDOT1L DB ?
;开机归零时间
ToZeroTime DB ? ;称重待机时间
AutoOffTime DB ? ;TIMERO 溢出次数
CountTime DB ?
Count0Time DB ? ;称重 重量变化范围 决定关机计时器的 开关
AutoOffRange DB ?
ToZeroRang DB ?
stable_count DB ?
sysflag DB ?
CMP_H DB ?
CMP_L DB ?
CMP1_H DB ?
CMP1_L DB ?
DUI1_H DB ?
DUI1_L DB ?
DUI2_H DB ?
DUI2_L DB ?
DUI3_H DB ?
DUI3_L DB ?
DUI4_L DB ?
DUI4_H DB ?
min_lock db ?
D_TMR1LCnt EQU 0B8H ;15000次,(120mS) 60MS
D_TMR1HCnt EQU 088H
NEWCNT1 EQU 06H
NEWCNT2 EQU 0AH
SUM_LOOP_CNT EQU 02H
CODE .SECTION 'CODE'
ORG 00H
JMP START
ORG 004H
RETI
ORG 008H
JMP IntTimer0
ORG 00CH
RETI
ORG 010H
RETI
ORG 020H
START:
;************************************************************************
;初始化
CLR BP
CLR PAC
CLR PA
SET PAC
;CLR PA1
CLR FLAG
CLR DELAY_LOOP1
CLR DELAY_LOOP2
CLR COUNT
CLR BCD_NEIMAH
CLR BCD_NEIMAL
CLR BCD_DATA1
CLR BCD_DATA2
CLR BCD_DATA3
CLR BCD_DATA4
CLR SUMHH
CLR SUMH
CLR SUML
CLR AVEH
CLR AVEL
CLR ZERO_H
CLR ZERO_L
CLR DUI1_H
CLR DUI1_L
CLR DUI2_H
CLR DUI2_L
CLR DUI3_H
CLR DUI3_L
CLR DUI4_H
CLR DUI4_L
CLR SUM_LOOP
CLR LOOP
set bp.0 ;置位bp.0修改显示内存
mov a, 40h
mov mp1, a
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
inc mp1
clr r1
clr bp.0
mov a,0ffh
mov Count0Time, a
clr pac.0
set pa0
CLR STABLE_COUNT
CLR SYSFLAG
MOV A, 77H ;initial cal_flag
MOV CAL_FLAG, A
;MOV A, 09H
;MOV WDTC, A
MOV A, 06H ; TIMER0 初始化 (038h) 8ms
MOV TMR0, A
MOV A, 87H
MOV TMR0C, A
;MOV A, 0EFH ; TIMER1 初始化
;MOV TMR1L, A
;MOV A, 0CEH
;MOV TMR1H, A
MOV A, 81H ;2分频
MOV TMR1C, A
MOV A, 05H ;中断控制初始化
MOV INTC0, A
MOV A, 00H
MOV INTC1, A
MOV A, 5FH ;CHARGE PUMP 初始化
MOV CHPRC, A
MOV A, 04H ;断路器时钟 初始化
MOV ADCD, A
MOV A, 41H ;//充电
MOV ADCR, A
CALL LONG_DELAY
CALL READ_PARAMENTS
set pbc
clr pbc1
set pb1
MOV A, D_TMR1LCnt
MOV TMR1L, A
MOV A, D_TMR1HCnt
MOV TMR1H, A
SET ADDISCH0 ;充电
CLR ADDISCH1
SET T1ON ;启动定时器1
CLR T1F
L_Main:
CLR WDT
;主程序/读ADC输出处理
L_MainADC:
L_MainADC_Init:
MOV A, 00h
MOV NEIMAH, A
MOV NEIMAL, A
L_MainADCCharge: ;充电
CLR TMR1L
CLR TMR1H
CLR WDT
SNZ T1F ;是否够70mS?
JMP $-2
L_MainADCDischarge:
clr t1on
CLR ADDISCH0 ;放电
SET ADDISCH1
MOV A, 10000010B ;2分频改为4分频
MOV TMR1C, A
SET T1ON ;开定时器1
CLR T1F
CLR WDT
SZ ADCMP0 ;斜线升到顶,就为1,降到底就为0
JMP $-2
CLR T1ON ;关定时器1
MOV A, 10000001B ;4分频改为2分频
MOV TMR1C, A
MOV A, TMR1H
MOV NEIMAH, A
MOV A, TMR1L
MOV NEIMAL, A
MOV A, D_TMR1LCnt
MOV TMR1L, A
MOV A, D_TMR1HCnt
MOV TMR1H, A
SET ADDISCH0 ;充电
CLR ADDISCH1
SET T1ON ;开定时器1
CLR T1F
;.............................
;????????????????????????????????????????????????????????????????????????
;************************************************************************
;放电TIMER1值的处理
DUI_LIE:
MOV A, NEIMAH
MOV CMP1_H, A
MOV A, NEIMAL
MOV CMP1_L, A
MOV A, SUMH
MOV CMP_H, A
MOV A, SUML
MOV CMP_L, A
CALL JUE_DUI_ZHI
SZ CMP_H
JMP DUI_LIE_CHU ; 不入队列
MOV A, CMP_L
SUB A, NEWCNT1
SZ C
JMP DUI_LIE_CHU
DUI_LIE_RU:
CLR SUM_LOOP
MOV A, DUI3_L
MOV DUI4_L, A
MOV A, DUI2_L
MOV DUI3_L, A
MOV A, DUI1_L
MOV DUI2_L, A
MOV A, DUI3_H
MOV DUI4_H, A
MOV A, DUI2_H
MOV DUI3_H, A
MOV A, DUI1_H
MOV DUI2_H, A
MOV A, NEIMAH
MOV DUI1_H, A
MOV A, NEIMAL
MOV DUI1_L, A
MOV A, DUI1_L
MOV SUML, A
MOV A, DUI1_H
MOV SUMH, A
MOV A, DUI2_L
ADDM A, SUML
MOV A, DUI2_H
ADCM A, SUMH
CLR ACC
ADCM A, SUMHH
MOV A, DUI3_L
ADDM A, SUML
MOV A, DUI3_H
ADCM A, SUMH
CLR ACC
ADCM A, SUMHH
MOV A, DUI4_L
ADDM A, SUML
MOV A, DUI4_H
ADCM A, SUMH
CLR ACC
ADCM A, SUMHH
CLR C
RRC SUMHH
RRC SUMH
RRC SUML
CLR C
RRC SUMHH
RRC SUMH
RRC SUML
MOV A, SUMH
MOV AVEH, A
MOV A, SUML
MOV AVEL, A
CLR C
RRC AVEH
RRC AVEL
CLR C
RRC AVEH
RRC AVEL
;CLR C
;RRC AVEH
;RRC AVEL
JMP DUI_LIE_1
DUI_LIE_CHU:
MOV A, SUM_LOOP
SUB A, SUM_LOOP_CNT ;
SZ ACC
JMP DUI_LIE_0
JMP DUI_LIE_RU
DUI_LIE_0:
INC SUM_LOOP
DUI_LIE_1:
;MOV A, AVEH
;MOV BCD_NEIMAH, A
;MOV A, AVEL
;MOV BCD_NEIMAL, A
;CALL BCD1
;CALL DISPLAY
;JMP L_MAIN
;*************************************************************************
CLR PAC5 ;低压提示
SET PA5
SET PAC4
SZ PA4
JMP POWER_ENOUGH
SET BP.0
MOV A, 40H
MOV MP1, A
SET R1.3
CLR BP.0
JMP GG
POWER_ENOUGH:
SET BP.0
MOV A, 40H
MOV MP1, A
CLR R1.3
CLR BP.0
GG:
;CLR PA5
;*************************************************************************
CALL KEY
;*************************************************************************
;标定
BIAO_DING:
SZ CAL_FLAG.0 ;第一次标定键标志
JMP BI0
CLR FLAG3 ;不显示小数点 kg lb
CLR WDT
MOV A, AVEH
MOV ZERO_H, A
MOV BCD_NEIMAH, A
MOV A, AVEL
MOV ZERO_L, A
MOV BCD_NEIMAL, A
CALL BCD1
CALL DISPLAY
JMP L_MAIN
BI0:
SZ CAL_FLAG.1 ;第二次标定键标志
JMP BI2
SET FLAG3 ;显示小数点 kg lb
SZ FLAG1 ;闪烁显示标志
JMP BI1
SET FLAG1
CLR WDT
MOV A, AVEH
MOV WEIGHT_H, A
MOV A, AVEL
MOV WEIGHT_L, A
;SET FLAG4 ;显示KG 或 LB
MOV A, CALCONST1H
MOV BCD_NEIMAH, A ;显示要加载的重量
MOV A, CALCONST1L
MOV BCD_NEIMAL, A
CALL BCD1
CALL DISPLAY
JMP L_MAIN
BI1:
CLR FLAG1
MOV A, 20H ;无显示
MOV BCD_DATA1, A
MOV BCD_DATA2, A
MOV BCD_DATA3, A
MOV BCD_DATA4, A
CALL DISPLAY
JMP L_MAIN
BI2:
SZ CAL_FLAG.2
JMP BI5
MOV A, WEIGHT_L ;WEIGHT_L - ZERO_L
SUB A, ZERO_L ;WEIGHT_H - ZERO_H
SZ C
JMP BI3
DEC WEIGHT_H
MOV A, 0FFH
SUB A, ZERO_L
INC ACC
ADD A, WEIGHT_L
MOV CALDOT1L, A
JMP BI4
BI3:
MOV CALDOT1L, A
BI4:
MOV A, WEIGHT_H
SUB A, ZERO_H
MOV CALDOT1H, A
RL CAL_FLAG
MOV A, 01H
MOV HT24_ADDR1, A
MOV A, ZERO_H
MOV HT24_RWDATA, A
CALL WRITE
CALL LONG_DELAY
MOV A, 00H
MOV HT24_ADDR1, A
MOV A, ZERO_L
MOV HT24_RWDATA, A
CALL WRITE
CALL LONG_DELAY
MOV A, 03H
MOV HT24_ADDR1, A
MOV A, CALDOT1H
MOV HT24_RWDATA, A
CALL WRITE
CALL LONG_DELAY
MOV A, 02H
MOV HT24_ADDR1, A
MOV A, CALDOT1L
MOV HT24_RWDATA, A
CALL WRITE
CALL LONG_DELAY
clr flag3 ;不显示小数点 kg lb
;call display ;??????????????
MOV A, 0BH ;display "pass"
MOV BCD_DATA4, A
MOV A, 0CH
MOV BCD_DATA3, A
MOV A, 0DH
MOV BCD_DATA2, A
MOV A, 0EH
MOV BCD_DATA1, A
CALL DISPLAY
mov a, 0DFh
mov count, a
delay1:
clr wdt
call long_delay
sdz count
jmp delay1
sz flag5
jmp haha
clr pb1 ;发关机命令,上电就标定,标定完成后关机
BI5:
;JMP L_MAIN
;***************************************************************************
SZ FLAG5 ;标定成功后,返回到称重状态
JMP HAHA
CALL ZERO_CHECK
HAHA:
CALL ZERO_VERIFY
CALL CALCULATE
JMP L_MAIN
;*************************************************************************
CALCULATE: ;出口参数为d值
MOV A, AVEH
MOV CMP1_H, A
MOV A, AVEL
MOV CMP1_L, A
MOV A, ZERO_H
MOV CMP_H, A
MOV A, ZERO_L
MOV CMP_L, A
CALL JUE_DUI_ZHI
MOV A, CMP_H
MOV DIV_B4, A
MOV A, CMP_L
MOV DIV_B3, A
MOV A, CalConst1H
MOV DIV_B2, A
MOV A, CalConst1L
MOV DIV_B1, A
CALL MUL
MOV A, MUL_RAM4
MOV DIV_B4, A
MOV A, MUL_RAM3
MOV DIV_B3, A
MOV A, MUL_RAM2
MOV DIV_B2, A
MOV A, MUL_RAM1
MOV DIV_B1, A
MOV A, CALDOT1H
MOV DIVH, A
MOV A, CALDOT1L
MOV DIVL, A
CALL DIV
MOV A, DIV_S2
MOV D_WEIGHTH, A
;MOV BCD_NEIMAH, A
MOV A, DIV_S1
MOV D_WEIGHTL, A
;MOV BCD_NEIMAL, A
;CALL BCD1
;CALL DISPLAY
;JMP L_MAIN
RET
;**************************************************************************
;JMP L_MAIN
;*************************************************************************
ZERO_VERIFY PROC
SZ FLAG7 ;flag7=1 执行
JMP VERIFY0
RET
VERIFY0:
CLR BCD_DATA1 ;显示0.0
CLR BCD_DATA2
MOV A, 20H
MOV BCD_DATA3, A
MOV BCD_DATA4, A
CALL DISPLAY
SET FLAG3 ; 显示小数点、KG 或 LB
MOV A, AVEH
MOV CMP1_H, A
MOV A, AVEL
MOV CMP1_L, A
MOV A, ZERO_H
MOV CMP_H, A
MOV A, ZERO_L
MOV CMP_L, A
CALL JUE_DUI_ZHI
SZ CMP_H
JMP DA_LING_PIAO
MOV A, CMP_L
SUB A, AutoToZeroValue ; AutoToZeroValue 为内码值
SZ C
JMP DA_LING_PIAO
XIAO_LING_PIAO:
CLR FLAG2
MOV A, AVEH ;零漂范围内 刷新零点内码值
MOV ZERO_H, A
MOV A, AVEL
MOV ZERO_L, A ;(只要显示0。0 就打开计时器 时间到就睡眠)
JMP Timer0On
DA_LING_PIAO:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -