⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cap1p3.asm

📁 用AD7799做的电子汽车衡称重显示控制仪表程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		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 + -