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

📄 pl80.asm

📁 上载的源程序是一款加油机源程序,它已在产品上使用并已经通过了测试.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	Pop 05H
	Pop 04H
	Pop 03H
	Pop 02H
	Ljmp Key_01

Blink_Figure:
	Push 02H
	Push 03H
	Push 04H
	Push 05H

	mov r1,Right1
	mov @r1,#0FH

	mov a,R3
	swap a
	orl a,R2
	swap a
	mov r1,#datas1_7
	mov @r1,a

	mov a,R5
	swap a
	orl a,R4
	swap a
	mov r1,#datas1_6
	mov @r1,a

	Lcall Display

	Pop 05H
	Pop 04H
	Pop 03H
	Pop 02H
	Ljmp Key_01

	;/////////-----------\\\\\\\\\\
Save_UP:
	;Saving Unit_Price...
	mov a,R3
	swap a
	orl a,R2
	mov EEPROM_ADDRESS_H,#00H
	mov EEPROM_ADDRESS_L,#23H
	mov EEPROM_Data,a
	Lcall Write_EEPROM

	mov a,R5
	swap a
	orl a,R4
	mov EEPROM_ADDRESS_H,#00H
	mov EEPROM_ADDRESS_L,#24H
	mov EEPROM_Data,a
	Lcall Write_EEPROM

	;Full Dash in Display side1.
	mov R0,#Datas1_0
blnk_dash:
	mov @R0,#0AAH
	Inc R0
	Cjne R0,#0F8H,blnk_dash

	Lcall Display

	Lcall Delay1000

	Ljmp Keyexit

	;/////////-----------\\\\\\\\\\
wait_to_Unpress_2:
	Lcall Keycheck
	mov r1,#Keyboard
	mov a,@r1
	anl A,#00111000B
	cjne a,#0,wait_to_Unpress_2
	Ret

;========== Rutin ===========
Parameter_Loading:
	;This Rutin , Sets Parameters In Flash-Memory By Default Values.
	;After Adjusting , It will Return To Main Program.
	Lcall AllBlank
	mov r1,#datas1_0
	mov @r1,#0AEH	;"P-" Character
	mov r1,#Datas1_1
	mov @r1,#0FDH	;"L " Character
	Lcall display

	mov DPL,#5FH
	mov DPH,#10H
Loop_PL:
	Inc Dptr
	mov a,#00H
	movc a,@A+DPTR
	mov EEPROM_ADDRESS_H,#00H
	mov EEPROM_ADDRESS_L,a
	Inc Dptr
	mov a,#00H
	movc a,@A+DPTR
	mov EEPROM_Data,a
	Lcall Write_EEPROM

	mov a,DPL
	cjne a,#87H,Loop_PL

good_save:
	mov EEPROM_ADDRESS_H,#00H
	mov EEPROM_ADDRESS_L,#00H
	mov EEPROM_Data,#01H
	Lcall Write_EEPROM

	Lcall delay1000

	mov r1,#datas1_0
	mov @r1,#0FFH	;"  " Character
	mov r1,#datas1_1
	mov @r1,#0EFH	;" P" Character
	mov r1,#Datas1_2
	mov @r1,#0DAH	;"-L" Character

	Lcall display

	;Wait Until Unpress Keyboard...
wait_to_Unpress_1:
	Lcall Keycheck
	mov r1,#Keyboard
	mov a,@r1
	anl A,#00111000B
	cjne a,#0,wait_to_Unpress_1

	;Check Power-Fail...
	setb PF
	jnb pf,PF_Not_PL
	Ljmp Show_Ro

PF_Not_PL:
	Lcall delay1000

	Ljmp Keyexit

;========== Rutin ===========
Parameter_Setting:
	;This Rutin , Sets Parameters In Flash-Memory.
	;After Adjusting , Counter Should Be Turn-Off.
	;After Entering This Rutin, You Will NEVER Go Back!

	;Preparing Screen...
	Lcall Allblank
	mov r1,#Datas1_0
	mov @r1,#0AEH
	;Preparing P-01 Value...
	mov EEPROM_ADDRESS_H,#00H
	mov EEPROM_ADDRESS_L,#01H
	Lcall Read_EEPROM
	mov A,EEPROM_Data
	Swap a
	mov r1,#Datas1_5
	mov @r1,a
	;Preparing P-01 Title...
	mov r1,#Datas1_1
	mov @r1,#10H
	Lcall display

	Lcall Wait_to_unpress

Parloop0:
	mov R6,#01H
Parloop:
	;Preparing Parameter-Title...
	mov r1,#DataS1_1
	mov a,R6
	swap a
	mov @r1,a

	;Preparing Parameter-Value...
	;Getting Decimal number from Hex Number.
	mov a,R6
	mov R5,a
	anl 05H,#0FH
	anl a,#0f0H
	swap a
	mov b,#10
	Mul ab
	add a,R5

	mov EEPROM_ADDRESS_H,#00H
	mov EEPROM_ADDRESS_L,a
	Lcall Read_EEPROM
	mov A,EEPROM_Data
	Swap a
	mov r1,#Datas1_5
	mov @r1,a

	Lcall display
Key1:
	;Check Power-Fail...
	setb PF
	jnb pf,PF_Not
	Ljmp Show_Ro

PF_NOT:
	;Check Key M,+
	Push 06
	Lcall Keycheck
	Pop 06
	mov r1,#Keyboard
	mov a,@r1
	anl A,#00111000B
	RR a
	RR a
	RR a
	cjne a,#1,nxt1	;M pressed
	Lcall wait_to_Unpress
	Ljmp Next_par
nxt1:
	cjne a,#2,Key1	;+ Pressed
	Lcall wait_to_Unpress
	;Jmp Next_value

Next_value:
	mov r1,#datas1_5
	mov a,@r1
	swap a
	Inc a
	add a,#00H
	DA a
Check_Max:
Par01:
	Cjne R6,#01H,Par02
	Cjne a,#32H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par02:
	Cjne R6,#02H,Par03
	Cjne a,#00H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par03:
	Cjne R6,#03H,Par04
	Cjne a,#00H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par04:
	Cjne R6,#04H,Par05
	Cjne a,#04H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par05:
	Cjne R6,#05H,Par06
	Cjne a,#03H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par06:
	Cjne R6,#06H,Par07
	Cjne a,#03H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par07:
	Cjne R6,#07H,Par08
	Cjne a,#03H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par08:
	Cjne R6,#08H,Par09
	Cjne a,#00H,Disp_value
	mov a,#01H
	Sjmp Disp_value

Par09:
	Cjne R6,#09H,Key1_0
	Cjne a,#09H,Disp_value
	mov a,#01H
	;Sjmp Disp_value

Disp_Value:
	mov r1,#Datas1_5
	swap a
	mov @r1,a
	Lcall display
	;Ljmp Key1
Key1_0:
	Ljmp Key1



Next_par:
	;Writing Current Parameter in Flash Memory...
	mov r1,#datas1_1
	mov a,@r1
	swap a

	;Getting Decimal number from Hex Number.
	mov R5,a
	anl 05H,#0FH
	anl a,#0f0H
	swap a
	mov b,#10
	Mul ab
	add a,R5

	mov EEPROM_ADDRESS_H,#00H
	mov EEPROM_ADDRESS_L,a
	mov r1,#datas1_5
	mov a,@r1
	swap a
	mov EEPROM_Data,a
	Lcall Write_EEPROM

	;Next parameter...
	Inc R6
	cjne R6,#0AH,parloop_1
	Ljmp Parloop0
parloop_1:
	Ljmp Parloop

	;/////////////----------\\\\\\\\\\\\\\
wait_to_Unpress:
	Push 06
	Lcall Keycheck
	Pop 06
	mov r1,#Keyboard
	mov a,@r1
	anl A,#00111000B
	cjne a,#0,wait_to_Unpress
	Ret

;========== Rutin ===========
AllFull:
	;Full of "8" in Display-Memories
	mov R0,#Datas1_0
blnk0:
	mov @R0,#88H
	Inc R0
	Cjne R0,#0F8H,blnk0
	Ret

;========== Rutin ===========
AllBlank:
	;Full of Blank in Display-Memories
	mov R0,#Datas1_0
blnk1:
	mov @R0,#0FFH
	Inc R0
	Cjne R0,#0F8H,blnk1
	Ret

;========== Rutin ===========
Splash:
	;Read Serial,Date of Product from Flash Memory...
	;Then Display " + Program No

	mov R4,#0F9H
	mov R1,#Datas1_0
Read1:
	mov EEPROM_ADDRESS_H,#1FH
	mov EEPROM_ADDRESS_L,R4
	Lcall Read_EEPROM
	mov A,EEPROM_Data
	swap a
	mov @r1,a
	Inc R1
	Inc R4
	Cjne R1,#Datas1_6,ttt1
	Inc R1
ttt1:
	cjne R4,#0FFH,Read1
	mov r1,#Datas1_6
	mov @r1,#0DEH	;Means "PL"
	mov r1,#Datas1_7
	mov @r1,#08H	;Means "80" , Attention: This is Version of Software.

	lcall display

	Ret

;========== Rutin ===========
Cash_2_Liter:
	;This Rutin Makes Liter according to Cash Value which Preset.
	;Input:TP_H,TP_M,TP_L.
	;Output:Liter_H,Liter_M,Liter_L.
	;Uses:Acc,R1,R0,Calculate(Rutin).

	;Total Price...
	mov r1,#TP_L
	mov a,@r1
	mov r1,#BCD_BUFFER_1
	mov @r1,a

	mov r1,#TP_M
	mov a,@r1
	mov r1,#BCD_BUFFER_2
	mov @r1,a

	mov r1,#TP_H
	mov a,@r1
	mov r1,#BCD_BUFFER_3
	mov @r1,a

	Lcall BCD_2_Hex

	mov r1,#HEX_BUFFER_1
	mov a,@r1
	mov r1,#HEX_MAZROOB_1
	mov @r1,a

	mov r1,#HEX_BUFFER_2
	mov a,@r1
	mov r1,#HEX_MAZROOB_2
	mov @r1,a

	mov r1,#HEX_BUFFER_3
	mov a,@r1
	mov r1,#HEX_MAZROOB_3
	mov @r1,a


	;10'5/U.P...
	mov r1,#REV_UPL
	mov a,@r1
	mov r1,#BCD_BUFFER_1
	mov @r1,a

	mov r1,#REV_UPM
	mov a,@r1
	mov r1,#BCD_BUFFER_2
	mov @r1,a

	mov r1,#REV_UPH
	mov a,@r1
	mov r1,#BCD_BUFFER_3
	mov @r1,a

	Lcall BCD_2_Hex

	mov r1,#HEX_BUFFER_1
	mov a,@r1
	mov r1,#HEX_MAZROOBONFIH_1
	mov @r1,a

	mov r1,#HEX_BUFFER_2
	mov a,@r1
	mov r1,#HEX_MAZROOBONFIH_2
	mov @r1,a


	;Preparing Multiply :(10'5/U.P)x(T.P)...
	Lcall Multiply
	Lcall Hex_2_BCD


	;Storing Result in Liter_HML...
	mov r1,#BCD_Buffer_3
	mov a,@r1
	anl a,#0fH
	swap a
	mov 00h,a
	mov r1,#BCD_Buffer_2
	mov a,@r1
	anl a,#0f0H
	swap a
	orl a,00H
	mov r1,#Liter_L
	mov @r1,a

	mov r1,#BCD_Buffer_4
	mov a,@r1
	anl a,#0fH
	swap a
	mov 00h,a
	mov r1,#BCD_Buffer_3
	mov a,@r1
	anl a,#0f0H
	swap a
	orl a,00H
	mov r1,#Liter_M
	mov @r1,a

	mov r1,#BCD_Buffer_5
	mov a,@r1
	anl a,#0fH
	swap a
	mov 00h,a
	mov r1,#BCD_Buffer_4
	mov a,@r1
	anl a,#0f0H
	swap a
	orl a,00H
	mov r1,#Liter_H
	mov @r1,a

	;Now Liter_HML is ready!
	Ret

;========== Rutin ===========
Rev_X:
	;This Rutin Calculates 1/X (Reverse of X)
	;Uses:Calculate(Rutin),Acc,R1,Right1...6,Carry.
	;OutPut:Rev_UPH,Rev_UPM,Rev_UPL.
	;Notice:We Use Rutin 'Calculate' for this calculation.
	;	  we calculate : (U.P)x (Result)<=100,000
	;	  Result is 10'5/U.P
	;Caution:This Rutin Uses Right1...6 (Right Pulses Counter). you can
	;	   Use This Rutin , JUST , Before Openning Interrupt 0.

	mov right1,#00H
	mov right2,#00H
	mov right3,#00H
	mov right4,#00H
	mov right5,#00H
	mov right6,#00H
lop1:
	inc right1
	mov a,right1
	cjne a,#10d,ppl1
	mov right1,#00h

	inc right2
	mov a,right2
	cjne a,#10d,ppl1
	mov right2,#00h

	inc right3
	mov a,right3
	cjne a,#10d,ppl1
	mov right3,#00h

	inc right4
	mov a,right4
	cjne a,#10d,ppl1
	mov right4,#00h

	inc right5
	mov a,right5
	cjne a,#10d,ppl1
	mov right5,#00h

	inc right6
	mov a,right6
	cjne a,#10d,ppl1
	mov right6,#00h
	;Means:Rev_UP=99,99,99H / of course , Imposible.
	jmp OkRatio

ppl1:
	lcall calculate

	;compare with 10/00/00 . Stage1:bcd_buffer_3<=10H
	mov r1,#bcd_buffer_3
	mov a,@r1
	Clr C
	SUBB a,#10H
	jb acc.7,lop12
	jmp Okratio1

lop12:
	;Generating Rev_UP from Right1...6 / Valid.
	mov a,right2
	swap a
	orl a,right1
	mov r1,#Rev_UPL
	mov @r1,a

	mov a,right4
	swap a
	orl a,right3
	mov r1,#Rev_UPM
	mov @r1,a

	mov a,right6
	swap a
	orl a,right5
	mov r1,#Rev_UPH
	mov @r1,a

	sjmp lop1

OkRatio1:
	;compare with 10/00/00 . Stage2:bcd_buffer_2=00H
	mov r1,#bcd_buffer_2
	mov a,@r1
	cjne a,#00H,Okratio
	jmp Okratio2

OkRatio2:
	;compare with 10/00/00 . Stage3:bcd_buffer_1=00H
	mov r1,#bcd_buffer_1
	mov a,@r1
	cjne a,#00H,Okratio

	;This Part Run , When BCD_BUFFER_321=#10,00,00H Exactly. Valid.
	mov a,right2
	swap a
	orl a,right1
	mov r1,#Rev_UPL
	mov @r1,a

	mov a,right4
	swap a
	orl a,right3
	mov r1,#Rev_UPM
	mov @r1,a

	mov a,right6
	swap a
	orl a,right5
	mov r1,#Rev_UPH
	mov @r1,a

okratio:
	;10'5/U.P is Ready!
	Ret

;========== Rutin ===========
Keycheck:
	;Identify Status of Keyboard
	;Input:-
	;Output:Keyboard(Pressed Keys:1 - UnPressed Keys:0),ReliableKey(1:Reliable,0:Invalid).
	;	  Keyboard Map:(00,K3,K2,K1(Side1),K3,K2,K1(Side2)).
	;	  ReliableKey Map:(00,0/1,0/1,0/1,0/1,0/1,0/1).
	;Uses:R0,R1,Acc,Delay20(Rutin).

	;R1=0 , means Side2
	clr R1Scan
	mov p0,#0FFH
	clr Buffer1
	NOP
	NOP
	NOP
	NOP
	mov a,p0
	RR a
	RR a
	RR a
	RR a
	RR a
	anl a,#00000111B
	mov r1,#keyboard
	mov @r1,a
	Setb Buffer1
	;Bus Closed.
	;1st keyboard Stored-Side 2

	;R1=1 , means Side1
	Setb R1Scan
	mov p0,#0FFH
	clr Buffer1
	NOP
	NOP
	NOP
	NOP
	mov a,p0
	RR a
	RR a
	anl a,#00111000B
	mov r1,#keyboard
	orl a,@r1
	mov r1,#keyboard
	mov @r1,a
	Setb Buffer1
	;Bus Closed.
	;1st keyboard Stored-Side 1

	;1st keyboard Stored in Keyboard register (00,K3,K2,K1(Side1),K3,K2,K1(Side2))

	lcall delay20	;Debouncing...

	;R1=0 , means Side2
	clr R1Scan
	mov p0,#0FFH
	clr Buffer1
	NOP
	NOP
	NOP
	NOP
	mov a,p0
	RR a
	RR a
	RR a
	RR a
	RR a
	anl a,#00000111B
	mov 00H,a
	Setb Buffer1
	;Bus Closed.
	;2nd keyboard Stored-Side 2

	;R1=1 , means Side1
	Setb R1Scan
	mov p0,#0FFH

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -