📄 13程序.asm
字号:
MOV COMM0,#3AH
MOV COMM6,#1;T
MOV A,#1
ACALL CSAVEDATA
RSTART: SETB TBEGIN ;要开始发送
CLR DE;发送
TSTART: MOV TH1, #0EAH
MOV TL1, #040H;定时5MS;200HZ
CLR TF1
SETB TR1
CLR TI
CLR RI
MOV TXADDR,#COMMR
MOV ADDR2,#COMMR
AJMP TXBEG89
;-------------- ---------主程序--------------------------
START1: JNB KBINFL,NOKEYO ;有按键?
ACALL KBIN
NOKEYO: JNB SAVEFL,NOSAVE
CLR SAVEFL
ACALL CSAVEDATA
NOSAVE: ACALL DISP1
JBC TF1, TMTWO;T1有中断
JBC TXGOON,RIERR0;长时间没有中断
JB TM100FL,START1 ;快速加减
ACALL SDECADD
AJMP START1;LOOP
RIERR0: LJMP RIERR
;--------------------------------------------------------
TMTWO: JBC TBEGIN, TXBEG89
JBC RIEND, RIEN1
SETB DE
AJMP START1
RIEN1: CLR DE
AJMP RSTART
MOV ADDR2,#COMMR
TXBEG89: MOV A,COMM6
ACALL CEXDATA
MOV TXADDR,#COMMR
MOV R0,#COMMR
ACALL FORADD
MOV COMM0, A
MOV COMM7,#0AAH
MOV TXADDR,#COMMR
MOV A,#0AAH
MOV A,SBUF
AJMP START1
;-----------------------------------------------------
FORADD: MOV MONCNT0,#6
MOV A,@R0
LOOPI1: INC R0
ADD A,@R0
DJNZ MONCNT0,LOOPI1
RET
SDECADD: SETB TM100FL
MOV MONCNT3,COUNT3
JNB ADDSOON ,DECS1 ;加?
JNB ADDRSS, DECF6 ;地址?
LOOP09: ACALL ADDRINC1
DJNZ MONCNT3, LOOP09
AJMP EXAD
DECS1: JNB DECSOON, EXAD;减?
JNB ADDRSS, DECF7 ;地址?
LOOP090: ACALL ADDRDEC1
DJNZ MONCNT3, LOOP090
AJMP EXAD
DECF6: JNB DATASS,EXAD
LOOP097: ACALL DATAINC1
DJNZ MONCNT3, LOOP097
AJMP EXAD
DECF7: JNB DATASS,EXAD
LOOP098: ACALL DATADEC1
DJNZ MONCNT3, LOOP098
EXAD: RET
;----------------------------------------------
DISP1: JB SETADFL,DISPP2
JB ADDINCFL,DISPP2
SETB ADDINCFL
MOV A,MCOUNT
CJNE A,ADDR0,HJKL1
HJKL2: MOV ADDR0,#1
AJMP DISPP2
HJKL1: JC HJKL2
INC ADDR0
DISPP2: MOV A, ADDR0
ACALL EXDATA
MOV DPARA1,DPARA
JB HIVFL,DISP2
CLR HI
SETB HV
AJMP DISP3
DISP2: CLR HV
SETB HI
DISP3: JB IVFL,DISP4
CLR IC
SETB VC
AJMP DISP5
DISP4: CLR VC
SETB IC
DISP5: MOV C, AUTO
CPL C
MOV AUTOFL,C
;--------------------------------------
MOV QUREG1,#0
MOV QUREG0,ADDR0
ACALL HEX2DCM ;IN:QU,OUT:OP
MOV R0,#OPREG
ACALL DECODE2
JB ONOFF,DISP6
AJMP DSPOFF
DISP6: MOV QUREG1,ADSVH
MOV QUREG0,ADSVL
JB IVFL, DSPV0
MOV QUREG1,ADSIH
MOV QUREG0,ADSIL
MOV ADSIH,#0
DSPV0:
ACALL HEX2DCM ;IN:QU,OUT:OP
MOV R0,#OPREG
DERT: ACALL DECODE1
DSPEX: RET
;============================================
;----------------------乘法运算----------------------------------;
; Function : MULT (AI * OP = QU)[会影响:MONCNT2/0]
; Multiplier : AIREG 0~2
; Multiplicand : OPREG 0~5
; Quotient : QUREG 0~5
;-------------------------------------------------------------------;
MULT: MOV QUREG0,#0
MOV QUREG1,#0
MOV MONCNT2,#16
MOV A,AIREG0
MUL1: JNB ACC.0, MUL3
MUL2: MOV R0,#QUREGL
MOV R1,#OPREGL
ACALL R0ADDR1 ; MP0+MP1=MP0
MUL3: CLR C ; Shift Left OPREG 1 Bit
ACALL OPRL
CLR C
ACALL AIRR; ; Shift Right AIREG 1 Bit
DJNZ MONCNT2 , MUL1
RET
;---------------R0加R1,结果放R0----低们--------------------
R0ADDR1:
MOV A, @R0 ; MP0 >= MP1 C/ R0=R1 is EQUFL
ADD A, @R1
MOV @R0,A
DEC R0
DEC R1
MOV A, @R0 ; MP0 >= MP1 C/ R0=R1 is EQUFL
ADDC A, @R1
MOV @R0,A
RET
;---------------R0减R1,结果放R0----低们--------------------
R0DECR1: CLR C
MOV A, @R0 ; MP0 >= MP1 C/ R0=R1 is EQUFL
SUBB A, @R1
MOV @R0,A
DEC R0
DEC R1
MOV A, @R0 ; MP0 >= MP1 C/ R0=R1 is EQUFL
SUBB A, @R1
MOV @R0,A
RET
;--------------------------------------------
HEX2DCM: MOV OPREG0,#0
MOV OPREG1,#0
MOV MONCNT2,#16 ;16BIT
HEX1: ACALL QURLCC ; Shift Left QUREG & OPREG 1 Bit
ACALL OPRL
DJNZ MONCNT2, HEX2
AJMP HEX8
HEX2: MOV MONCNT1,#2
MOV R0,#OPREGL
HEX3: MOV A,@R0
ANL A,#0FH ;低位
CJNE A,#5,HECB1
AJMP HEX4
HECB1: JC HEX5 ;小于5
HEX4: MOV A,@R0
ADD A,#3
MOV @R0,A
HEX5: MOV A,@R0
ANL A,#0F0H
CJNE A, #80, HECB2
AJMP HEX6
HECB2: JC HEX7 ;小于5
HEX6: MOV A,@R0
ADD A,#30H
MOV @R0,A
HEX7: DEC R0
DJNZ MONCNT1,HEX3
AJMP HEX1
HEX8: RET
;-------------对R0内数据进行解码------------------------------
DECODE1: MOV R1, #LED;LED4
AJMP DECOBE
DECODE2: MOV R1, #LED_2
DECOBE: MOV MONCNT0,#2
DECO1: MOV A,#0F0H ;
ANL A,@R0;
SWAP A
MOV DPTR,#TAB ;取段码表地址
MOVC A,@A+DPTR ;查显示数据对应段码
MOV @R1,A ;段码放入P1口
DEC R1
MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR ;查显示数据对应段码
MOV @R1,A
INC R0
DEC R1
DJNZ MONCNT0,DECO1
RET
OPRR: MOV R0,#OPREG ; 会影响:MONCNT0
AJMP XRR0
QURR: MOV R0,#QUREG
AJMP XRR0
AIRR: MOV R0,#AIREG
XRR0: MOV MONCNT1,#2
XRR1: MOV A,@R0
RRC A
MOV @R0,A
INC R0
DJNZ MONCNT1, XRR1
RET
OPRL: MOV R0,#OPREGL
AJMP XRL0
QURLCC: CLR C ; QURL+CLR C
QURL: MOV R0,#QUREGL
AJMP XRL0
AIRL: MOV R0,#AIREGL
XRL0: MOV A,@R0
MOV MONCNT1,#2
XRL1: RLC A
MOV @R0,A
DEC R0
MOV A,@R0
DJNZ MONCNT1, XRL1
RET
;------------------------------------------
DSPOFF: MOV LED2,#081H;0
MOV LED3,#01DH;F
MOV LED4,#01DH;F
MOV LED1,#0FFH;F
SETB DP
;MOV LED8,#0FFH;
RET
;--------------------------------------
KBIN:
JB ADDRSS,ADRS0
JB DATASS,DAT0
SETB ADDRSS
ACALL KCH3
AJMP KBEX
ADRS0:
ACALL KBENTER
JNC KBG011
CLR ADDRSS
SETB DATASS
AJMP KBEX
KBG011: ACALL KBADD
JNC KBGO22
ADDRINC1:
MOV A,MCOUNT
CJNE A,ADDR0,RETYUO1
RETYUO1B: MOV ADDR0,#1
AJMP KBEX
RETYUO1: JC RETYUO1B
INC ADDR0
AJMP KBEX
KBGO22: ACALL KBDEC
JNC ERRKEY0
ADDRDEC1:
MOV A,ADDR0
CJNE A,#1,KBGO23
MOV ADDR0,MCOUNT
AJMP KBEX
KBGO23: DEC ADDR0
AJMP KBEX
ERRKEY0: AJMP ERRKEY
DAT0: ACALL KBENTER
JNC KBGO1
CLR DATASS
AJMP KBEX1
KBGO1: ACALL KBONOFF ;ON/OFF?
JNC KBGOON9 ;下一个!
CPL ONOFF
MOV ADSIH,#0
MOV ADSIL,#0
MOV ADSVH,#0
MOV ADSVL,#0
AJMP KBEX1
KBGOON9: ACALL KBCHGIV ;电流电压显示切换?
JNC KBGOON8
CPL IVFL
AJMP KBEX1
KBGOON8: ACALL KBCHGHEN ;电流电压谢
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -