📄 cap1p3.asm
字号:
clr c
mov a,09h
subb a,#5bh
mov a,08h
subb a,#00h
jc fm_dptr_ini
jmp ini_CZJLZZ ;跳转,初始化称重记录指针
fm_dptr_ini:
mov 08h,#00h
mov 09h,#5bh
mov r0,#08h
mov r2, #2
mov addr_h,#00h
mov addr_l,#59h
lcall write_block ;将fm24c64的指针初始化为005bh,保存在59h,5ah单元
ini_CZJLZZ:
mov r0,#08h ;判断'称重记录'存贮指针的值若=00h,or,0ffh,or,<0657h
mov r2,#2 ;则赋值0657h
mov addr_h,#06h
mov addr_l,#55h
lcall fm_read_block
mov a,08h
jnz ini_CZJLZZ0
mov a,09h
jnz ini_CZJLZZ0 ;=00?
jmp ini_CZJLZZ2
ini_CZJLZZ0:
mov a,08h
cpl a
jnz ini_CZJLZZ1
mov a,09h
cpl a
jnz ini_CZJLZZ1
jmp ini_CZJLZZ2 ;=ffh?
ini_CZJLZZ1:
clr c
mov a,09h
subb a,#57h
mov a,08h
subb a,#06h
jc ini_CZJLZZ2
jmp ini_data1 ;跳转,初始化其他寄存器
ini_CZJLZZ2:
mov 08h,#06h
mov 09h,#57h
mov r0,#08h
mov r2, #2
mov addr_h,#06h
mov addr_l,#55h
lcall write_block ;将fm24c64的指针初始化为0657h,保存在0655h,0656h单元
ini_data1:
mov r0,#08h
mov r1,#100
clr a
clear_weigh:
mov @r0,a
inc r0
djnz r1,clear_weigh
clr f_wdhz
clr f_stable
clr f_start_send
clr f_soft_bt
clr f_stb_led
clr flag.0
clr flag.1 ;sd2003 using flag
clr rs0
clr rs1
clr f_compare
mov 2eh,a
setb p_cal ;重量标定位
mov time_0a,#2
mov m_filter_rc,#3
mov p2,#0ffh
;zlg7290 data ini
CLR KEYON ;有键按下的标志位清零
;给显示缓冲区初始化赋值0
; MOV R0,#DISP_BUF ;取显示缓冲区地址
; MOV A,#1fH ;赋初值
; MOV R1,#06H ;循环6次
;WRDISP_BUF:
; MOV @R0,A ;将值送入显示缓冲区
; INC R0 ;地址加1
; DJNZ R1,WRDISP_BUF ;循环6次了吗?
mov m_date_time,a
mov weigh_num,#6
mov time_1b,#100
;--------
mov r0,#08h ;判断'分度值'存贮指针的值若=0ffh
mov r2,#3 ;则赋值00h
mov addr_h,#00h
mov addr_l,#0eh
lcall fm_read_block
mov a,08h
cpl a
jnz ini_data_ret
mov 08h,#02h
mov a,09h
cpl a
jnz ini_data_ret
mov 09h,#00h
mov a,0ah
cpl a
jnz ini_data_ret
mov 0ah,#01h
mov r0,#08h
mov r2, #3
mov addr_h,#00h
mov addr_l,#0eh
lcall write_block
mov m_dp_position,#0
mov r0,#m_dp_position
mov r2,#1
mov addr_h,#00h
mov addr_l,#16h ;根据分度值的小数点位置来确定称重数据的小数点位置
lcall write_block ;小数点位置值写入FM24c64的16h单元
ini_data_ret:
ret
;------------------------------------------
StatusLed_testself: ;状态指示灯自检
clr a
mov dptr,#software_ver
movc a,@a+dptr
setb acc.7
mov disp_buf+1,a
inc dptr
clr a
movc a,@a+dptr
mov disp_buf,a
mov disp_buf+2,#1fh
mov disp_buf+3,#18h
mov disp_buf+4,#0eh
mov disp_buf+5,#1ah ;显示"UEr x.x",软件版本号
lcall disp_sub
mov r7,#0b0h
mov r6,#5
status_led_loop:
mov mtd,#01h
mov mtd+1,r7
lcall sendcmd
lcall delay20ms
inc r7
djnz r6,status_led_loop ;去皮,毛重,净重,零位,稳定指示灯亮
lcall long_delay
mov r7,#30h
mov r6,#5
status_led_loop1:
mov mtd,#01h
mov mtd+1,r7
lcall sendcmd
lcall delay20ms
inc r7
djnz r6,status_led_loop1 ;去皮,毛重,净重,零位,稳定指示灯灭
ret
;------------------------------------------
baud_set:
mov r0,#08h ;读取波特率的设定值
mov r2,#1
mov addr_h,#00h
mov addr_l,#29h
lcall fm_read_block
mov a,08h
cjne a,#0,bt_600
MOV TH1,#0D0H
MOV TL1,#0D0H ;600 11.0592M
jmp baud_set_ret
bt_600:
cjne a,#1,bt_900
MOV TH1,#0E0H
MOV TL1,#0E0H ;900 11.0592M
jmp baud_set_ret
bt_900:
cjne a,#2,bt_1200
MOV TH1,#0E8H
MOV TL1,#0E8H ;1200 11.0592M
jmp baud_set_ret
bt_1200:
cjne a,#3,bt_1800
MOV TH1,#0F0H
MOV TL1,#0F0H ;1800 11.0592M
jmp baud_set_ret
bt_1800:
cjne a,#4,bt2400
MOV TH1,#0F4H
MOV TL1,#0F4H ;2400 11.0592M
jmp baud_set_ret
bt2400:
cjne a,#5,bt3600
MOV TH1,#0F8H
MOV TL1,#0F8H ;3600 11.0592M
jmp baud_set_ret
bt3600:
cjne a,#6,bt4800
MOV TH1,#0FAH
MOV TL1,#0FAH ;4800 11.0592M
jmp baud_set_ret
bt4800:
cjne a,#7,bt9600
MOV TH1,#0FDH
MOV TL1,#0FDH ;9600 11.0592M
jmp baud_set_ret
bt9600:
MOV TH1,#0E8H
MOV TL1,#0E8H ;1200 11.0592M
baud_set_ret:
ret
;------------------------------------------
ini_system_parameter:
mov addr_h,#00h
mov addr_l,#0ah
mov r0,#f_function0
mov r2,#1
lcall fm_read_block
mov addr_h,#00h
mov addr_l,#22h
mov r0,#50h
mov r2,#2
lcall fm_read_block
mov a,50h
cjne a,#1,wdhz_not
mov a,51h
cjne a,#1,wdhz_not
setb f_wdhz
jmp ini_sys_c
wdhz_not:
clr f_wdhz
ini_sys_c:
mov addr_h,#00h
mov addr_l,#0eh
mov r0,#m_divid_value
mov r2,#22
lcall fm_read_block
mov a,m_DigitalFilter
cjne a,#0,m_DigitalFilter_0
mov m_DigitalFilter,#4
jmp ini_system_parameter_ret
m_DigitalFilter_0:
cjne a,#1,m_DigitalFilter_1
mov m_DigitalFilter,#6
jmp ini_system_parameter_ret
m_DigitalFilter_1:
cjne a,#2,m_DigitalFilter_2
mov m_DigitalFilter,#8
jmp ini_system_parameter_ret
m_DigitalFilter_2:
cjne a,#3,m_DigitalFilter_3
mov m_DigitalFilter,#10
jmp ini_system_parameter_ret
m_DigitalFilter_3:
cjne a,#4,m_DigitalFilter_4
mov m_DigitalFilter,#12
jmp ini_system_parameter_ret
m_DigitalFilter_4:
cjne a,#5,m_DigitalFilter_5
mov m_DigitalFilter,#14
jmp ini_system_parameter_ret
m_DigitalFilter_5:
mov m_DigitalFilter,#6
ini_system_parameter_ret:
ret
;------------------------------------------
add_addr20: ;地址递加20
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
inc dptr
ret
;------------------------------------------
get_weight_scale:
clr a
mov r0,a
mov r1,a
mov r4,a
mov r5,m_code_max0
mov r6,m_code_max1
mov r7,m_code_max2 ;最大外码除以分度数
mov r2,m_divid_number0
mov r3,m_divid_number1
lcall L00D1H_DIV
clr a
mov r0,a
mov r1,a
mov r2,a
mov r3,#2
lcall L00D1H_DIV
mov c_weight_scale,r7
ret
;------------------------------------------
time0_int: ;time0 int time 10ms
mov th0,#c_time0
push acc
push psw
t0_loop:
mov a,time_0a
jz t0_ret
dec time_0a
t0_ret:
pop psw
pop acc
reti
;------------------------------------------
;time1_int: ;time1 int time 10ms
; mov th1,#c_time1
; push acc
; push psw
;
; mov a,time_1a
; jz time1_ret
; dec time_1a
;time1_ret:
; pop psw
; pop acc
; reti
;---------------------------------------------------------------------------------
int0_int: ;ext int0 for check if have keyboard pressed
push psw
push acc
push r0
push r1
push r2
push r3
clr ex0 ;int0 disable
nop
nop
nop
lcall rd_key_value
setb ex0 ;int0 enable
nop
pop r3
pop r2
pop r1
pop r0
pop acc
pop psw
reti
;---------------------------------------------------------------------------------
;when open the machine go into long delay for waiting for the machine to level off
long_delay: ;DELAY 300MS
MOV r5,#240
LD0: MOV r6,#250 ;5*250*240
LD1: NOP
NOP
NOP
DJNZ r6,LD1
DJNZ r5,LD0
RET
long_delay0: ;DELAY 75MS
MOV r5,#20
LD4: MOV r6,#250 ;5*250*240
LD6: NOP
NOP
NOP
DJNZ r6,LD6
DJNZ r5,LD4
RET
;------------------------------------------------
delay20ms:
mov time_0a,#2
delay_loop:
mov a,time_0a
jnz delay_loop
mov time_0a,#2
ret
;-------------------------------
delay500ms:
mov time_0a,#50
delay_loop0:
mov a,time_0a
jnz delay_loop
mov time_0a,#2
ret
;----------------------------------------------------
;clear_RAM: ;clear all the internal RAM
; mov r0,#0ffh
; clr a
;clr_RAM_loop:
; mov @r0,a0
; djnz r0,clr_RAM_loop
; ret
;-------------------------------------------------------
sbuf_int:
jnb f_start_send,sbuf_int_ret
clr ea
mov r0,#08h
mov b,#17
sbuf_int0:
mov a,@r0
mov sbuf,a
jnb ti,$
clr ti
inc r0
djnz b,sbuf_int0
clr f_start_send
sbuf_int_ret0:
setb ea
sbuf_int_ret:
ret
;-------------------------------------------------------
get_sbuf_data_ret0:
clr f_start_send
jmp get_sbuf_data_ret
get_sbuf_data:
jnb f_rd_data,get_sbuf_data_ret0
mov a,m_dp_position
add a,#2ah
mov 09h,a ;状态A:小数点位置
mov a,#30h
mov c,f_stable
mov acc.3,c ;状态B:动态标志位0=稳定,1=不稳定
mov c,f_weight_over
mov acc.2,c ;状态B:超载标志位0=正常,1=超载
jb f_gross,get_sbuf_data0
jb f_sign,get_sbuf_data0
clr acc.1 ;状态B:正负数标志位0=正数
jmp get_sbuf_data1
get_sbuf_data0:
setb acc.1 ;状态B:正负数标志位1=负数
get_sbuf_data1:
mov 10h,a
mov a,m_tare_count
mov c,acc.0
mov a,10h
mov acc.0,c
mov 0ah,a ;状态B
mov 0bh,#20h ;状态C
mov a,disp_buf+5
add a,#30h
mov 0ch,a
mov a,disp_buf+4
add a,#30h
mov 0dh,a
mov a,disp_buf+3
add a,#30h
mov 0eh,a
mov a,disp_buf+2
add a,#30h
mov 0fh,a
mov a,disp_buf+1
add a,#30h
mov 10h,a
mov a,disp_buf
add a,#30h
mov 11h,a ;显示值
mov r5,m_tare_0
mov r6,m_tare_1
mov r7,m_tare_2
lcall BTD0
mov a,r6
swap a
anl a,#0fh
add a,#30h
mov 12h,a
mov a,r6
anl a,#0fh
add a,#30h
mov 13h,a
mov a,r5
swap a
anl a,#0fh
add a,#30h
mov 14h,a
mov a,r5
anl a,#0fh
add a,#30h
mov 15h,a
mov a,r4
swap a
anl a,#0fh
add a,#30h
mov 16h,a
mov a,r4
anl a,#0fh
add a,#30h
mov 17h,a ;皮重值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -