📄 pl80.asm
字号:
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 + -