📄 test.txt
字号:
SZ D_WEIGHTH
JMP DA_LIANG_CHENG
MOV A, D_WEIGHTL
SUB A, D_MINWEIGHT
SZ C
JMP DA_LIANG_CHENG
JMP XIAO_LIANG_CHENG
XIAO_LIANG_CHENG: ;只要在小量程内 就打开计时器
CLR FLAG2
JMP Timer0On
DA_LIANG_CHENG:
MOV A, D_MAXWEIGHTH
SUB A, D_WEIGHTH ;判断是否超最大量程
SZ C
JMP NEXT0
JMP OVER_MAX
NEXT0:
SZ ACC
JMP NEXT1
MOV A, D_MAXWEIGHTL
SUB A, D_WEIGHTL
SZ C
JMP NEXT1
JMP OVER_MAX
NEXT1:
sz flag4 ;单位转换标志
jmp next2
jmp next3
next2: ;lb
mov a, d_weighth
mov div_b2, a
mov a, d_weightl
mov div_b1, a
mov a, 08h
mov div_b4, a
mov a, 9dh
mov div_b3, 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, 03h
mov divh, a
mov a, 0e8h
mov divl, a
call div
mov a, div_s2
mov d_weighth, a
mov a, div_s1
mov d_weightl, a
next3: ;kg
MOV A, D_WEIGHTH
MOV BCD_NEIMAH, A
MOV A, D_WEIGHTL
MOV BCD_NEIMAL, A
CALL BCD1
CALL DISPLAY
SwitchToTimer0: ;当变化超过 AutoOffRange 个d后 就清零
MOV A, D_WEIGHTH ;关机计数器
MOV CMP1_H, A
MOV A, D_WEIGHTL
MOV CMP1_L, A
MOV A, D_WEIGHT0H
MOV CMP_H, A
MOV A, D_WEIGHT0L
MOV CMP_L, A
CALL JUE_DUI_ZHI
SZ CMP_H
JMP Timer0Off
MOV A, CMP_L
SUB A, AutoOffRange
SZ C
JMP Timer0Off
mov a, d_weightl
sub a, min_lock
sz c
jmp stbilize_judge
sz d_weighth
jmp stbilize_judge
clr stable_count
jmp Timer0On
stbilize_judge:
sz flag2 ;称重稳定标志
jmp Timer0On
inc stable_count
mov a, stable_count ;判断稳定否?
sub a, 064h
sz acc
ret
set flag2 ;FLAG2置位 称重稳定
clr stable_count
SET BP.0 ;点亮锁定标志
MOV A, 40H
MOV MP1, A
SET R1.0
CLR BP.0
Timer0On: ;称重时 此时开始锁定
clr wdt ;或当重量小于小量程时 开始锁定
SET T0ON
sz CountTime
jmp suo_ding
jmp sleep
suo_ding:
sz flag2
jmp Timer0On
RET
sleep:
clr t0on
clr flag2 ;清稳定标志
MOV A, AutoOffTime ;界面锁定到关机的时间,唤醒后用
MOV CountTime, A
MOV A, 0FFH
MOV Count0Time, A
clr pa0 ;关背光
SET WDTOSC0
CLR WDTOSC1
clr pb1
CLR WDTOSC0
SET WDTOSC1
set pa0 ;唤醒后 打开背光
MOV A, 60H ;唤醒延时,保持称重稳定
MOV COUNT, A
DELAY2:
CALL LONG_DELAY
SDZ COUNT
JMP DELAY2
SET BP.0 ;关闭锁定标志
MOV A, 40H
MOV MP1, A
CLR R1.0
CLR BP.0
ret
Timer0Off:
clr stable_count ;变化超过autooffrange后 重新计时
CLR T0ON
MOV A, AutoOffTime
MOV CountTime, A
MOV A, 0FFH
MOV Count0Time, A
MOV A, D_WEIGHTH ; 刷新当前称重值
MOV D_WEIGHT0H, A
MOV A, D_WEIGHTL
MOV D_WEIGHT0L, A
RET
OVER_MAX:
clr flag3
mov a, 0Fh ;display "over"
mov bcd_data4, a
mov a, 10h
mov bcd_data3, a
mov a, 11h
mov bcd_data2, a
mov a, 12h
mov bcd_data1, a
call display
ret
ZERO_VERIFY ENDP
;**********************************************************************
ZERO_CHECK:
SZ FLAG5 ;ZERO——CHECK 执行标志
RET
;CALL READ_PARAMENTS
MOV A, ToZeroTime ;开机回零时间
MOV CountTime, A
MOV A, 0FFH
MOV Count0Time, A
CHECK0:
SET T0ON ;一进入该程序 就打开 TIMER0
MOV A, D_WEIGHTH
MOV CMP1_H, A
MOV A, D_WEIGHTL ;d 比较
MOV CMP1_L, A
MOV A, D_WEIGHT0H
MOV CMP_H, A
MOV A, D_WEIGHT0L
MOV CMP_L, A
CALL JUE_DUI_ZHI
SZ CMP_H
JMP DA_LING_WEN
MOV A, CMP_L
SUB A, ZEROSTABLEVALUE ;零点稳定是通过d值的比较
SZ C
JMP DA_LING_WEN
XIAO_LING_WEN:
INC LOOP
MOV A, LOOP
SUB A, 0BH
SZ ACC
JMP TimeSearch
JMP ToZeroFinish
TimeSearch:
SZ CountTime
RET
;HALT
JMP ToZeroError
ToZeroFinish:
clr t0on
SET FLAG5 ;ZERO——CHECK 执行标志 不再执行
SET FLAG7 ;ZERO——VERIFY 执行标志 设立执行标志
MOV A, 0FFH
MOV Count0Time, A
mov a, autoofftime ;零点稳定成功后,赋值 CountTime
mov counttime, a ;COUNTTIME 称重带机时间
;并且 进行
CALL CALCULATE ;当前零点和标定的零点比较
SZ DIV_S2 ;其范围为 ToZeroRange
JMP ToZeroError ;超过归零范围
MOV A, DIV_S1
SUB A, ToZeroRang ; ToZeroValue 为称重值
SZ C
JMP ToZeroError
MOV A, AVEH ;归零成功,当前秤台上的物重在归零范围内
MOV ZERO_H, A ;刷新零点
MOV A, AVEL
MOV ZERO_L, A
RET
DA_LING_WEN:
CLR LOOP
MOV A, D_WEIGHTH ;刷新d值
MOV D_WEIGHT0H, A
MOV A, D_WEIGHTL
MOV D_WEIGHT0L, A
JMP TimeSearch
ToZeroError:
clr t0on
MOV A, 0AH
MOV BCD_DATA4, A
MOV BCD_DATA3, A
MOV BCD_DATA2, A
MOV BCD_DATA1, A
CALL DISPLAY
mov a, 0FFh
mov CountTime, a
CHECK1:
clr wdt
CALL SHORT_DELAY
DEC CountTime
SZ CountTime
JMP CHECK1
;发关机命令
SET WDTOSC0
CLR WDTOSC1
clr pb1
RET
;**********************************************************************
;计时器TIMER0中断
IntTimer0:
MOV ACC_RAM, A
MOV A, STATUS
MOV STATUS_RAM, A
SZ Count0Time
JMP IN0
DEC CountTime
MOV A, 0FFH
MOV Count0Time, A
IN0:
DEC Count0Time
MOV A, STATUS_RAM
MOV STATUS, A
MOV A, ACC_RAM
RETI
;**********************************************************************
;按键扫描
KEY PROC
SZ PA.2
JMP KK0
MOV A, 01H
MOV KEY_RAM1, A
JMP KK
KK0:
SZ PA.3
JMP KK1
MOV A, 02H
MOV KEY_RAM1, A
JMP KK
KK1:
SZ pb3
JMP KK2
MOV A, 04H
MOV KEY_RAM1, A
JMP KK
KK2:
sz flag6
jmp kk10
CLR KEY_RAM1
CLR KEY_RAM2
CLR FLAG0
clr sysflag
RET
KK:
MOV A, KEY_RAM1
SUB A, KEY_RAM2
SZ ACC
JMP KK3 ;第一次扫描到
SZ FLAG0
jmp kk4 ;第N次扫描到
SET FLAG0 ;第二次扫描到
MOV A, KEY_RAM2
SUB A, 01H
SZ ACC
JMP KK5
RL CAL_FLAG ;CALL BIAO_DING
ret
KK5:
MOV A, KEY_RAM2
SUB A, 02H
SZ ACC
JMP KK6
SZ FLAG4 ;单位转换标志
JMP KK7
SET FLAG4
ret
KK7:
CLR FLAG4
RET
KK6:
MOV A, KEY_RAM2
SUB A, 04H
SZ ACC
JMP KK8
set flag6
inc sysflag
mov a,sysflag
sub a, 50
sz acc
ret
SET WDTOSC0 ;关闭看门狗, 否则复位重起机
CLR WDTOSC1
clr pb1 ;可发关机命令
kk9:
sz pb3 ;去皮键已松开, 去皮
jmp kk10
ret
kk10:
clr flag6
MOV A, AVEH ;去皮
MOV ZERO_H, A ;刷新零点
MOV A, AVEL
MOV ZERO_L, A
MOV A, AutoOffTime ;从新计时
MOV CountTime, A
MOV A, 0FFH
MOV Count0Time, A
ret
KK3:
MOV A, KEY_RAM1 ;第一次扫描到
MOV KEY_RAM2, A
RET
kk4:
mov a, key_ram1 ;第N次扫描到
sub a, 04h
sz acc
ret
jmp kk6
KK8:
CLR KEY_RAM1 ;误动作
CLR KEY_RAM2
CLR FLAG0
clr sysflag
RET
KEY ENDP
;************************************************************************
;*******************************************
;HT24LC02的写
;入口参数: HT24_ADDR1, HT24_RWDATA
WRITE PROC
CLR PBC
SET PB
NOP
nop
nop
nop
nop
CLR SDA
NOP
NOP
nop
nop
nop
nop
CLR SCL
MOV A, 0A0H
MOV HT24_ADDR, A
MOV A, 08H
MOV HT24_LOOP, A
WR0: ;写通用地址 1010 000 0
SZ HT24_ADDR.7
JMP WR1
CLR SDA
JMP WR2
WR1:
SET SDA
WR2:
SET SCL
NOP
NOP
nop
nop
nop
nop
CLR SCL
RL HT24_ADDR
DEC HT24_LOOP
SZ HT24_LOOP
JMP WR3
JMP WR4
WR3:
;RL HT24_ADDR
JMP WR0
WR4:
SET PBC.2
SET SCL
WR44:
SZ SDA
JMP WR44
CLR SCL
CLR PBC.2
;写具体地址 HT24_ADDR1
MOV A, 08H
MOV HT24_LOOP, A
WR5:
SZ HT24_ADDR1.7
JMP WR6
CLR SDA
JMP WR7
WR6:
SET SDA
WR7:
SET SCL
NOP
NOP
nop
nop
nop
nop
CLR SCL
RL HT24_ADDR1
DEC HT24_LOOP
SZ HT24_LOOP
JMP WR8
JMP WR9
WR8:
;RL HT24_ADDR1
JMP WR5
WR9:
SET PBC.2
SET SCL
WR10:
SZ SDA
JMP WR10
CLR SCL
CLR PBC.2
MOV A, 08H
MOV HT24_LOOP, A
WR11:
SZ HT24_RWDATA.7
JMP WR12
CLR SDA
JMP WR13
WR12:
SET SDA
WR13:
SET SCL
NOP
NOP
nop
nop
nop
nop
CLR SCL
RL HT24_RWDATA
;SDZ HT24_LOOP
DEC HT24_LOOP
SZ HT24_LOOP
JMP WR14
JMP WR15
WR14:
;RL HT24_RWDATA
JMP WR11
WR15:
SET PBC.2
SET SCL
WR16:
SZ SDA
JMP WR16
CLR SCL
CLR PBC.2
CLR SDA
SET SCL
NOP
NOP
nop
nop
nop
nop
SET SDA
RET
WRITE ENDP
;**********************************
;HT24LC02的读
;入口参数: HT24_ADDR1 出口参数: HT24_RWDATA
READ PROC
CLR PBC
SET PB
NOP
nop
nop
nop
nop
CLR SDA
NOP
NOP
nop
nop
nop
nop
CLR SCL
MOV A, 0A0H
MOV HT24_ADDR, A
MOV A, 08H
MOV HT24_LOOP, A
RE0: ;写通用地址 1010 000 0
SZ HT24_ADDR.7
JMP RE1
CLR SDA
JMP RE2
RE1:
SET SDA
RE2:
SET SCL
NOP
NOP
nop
nop
nop
nop
CLR SCL
;SDZ HT24_LOOP
DEC HT24_LOOP
SZ HT24_LOOP
JMP RE3
JMP RE4
RE3:
RL HT24_ADDR
JMP RE0
RE4:
SET PBC.2
SET SCL
NOP
RE5:
SZ SDA
JMP RE5
CLR SCL
CLR PBC.2
MOV A,08H
MOV HT24_LOOP, A
RE6: ;写具体地址 HT24_ADDR1
SZ HT24_ADDR1.7
JMP RE7
CLR SDA
JMP RE8
RE7:
SET SDA
RE8:
SET SCL
NOP
NOP
nop
nop
nop
nop
CLR SCL
;SDZ HT24_LOOP
DEC HT24_LOOP
SZ HT24_LOOP
JMP RE9
JMP RE10
RE9:
RL HT24_ADDR1
JMP RE6
RE10:
SET PBC.2
SET SCL
NOP
RE11:
SZ SDA
JMP RE11
CLR SCL
CLR PBC.2
NOP
nop
nop
nop
nop
SET SDA
SET SCL
NOP
NOP
nop
nop
nop
nop
CLR SDA
NOP
NOP
nop
nop
nop
nop
CLR SCL
MOV A, 0A1H
MOV HT24_ADDR, A
MOV A, 08H ;写读命令 1010 000 1
MOV HT24_LOOP, A
RE12:
SZ HT24_ADDR.7
JMP RE13
CLR SDA
JMP RE14
RE13:
SET SDA
RE14:
SET SCL
NOP
NOP
nop
nop
nop
nop
CLR SCL
DEC HT24_LOOP
SZ HT24_LOOP
JMP RE15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -