📄 meter.asm
字号:
EOC BIT P1.0 ;A/D转换好信号
TONGDAO BIT P1.1 ;测量通道标志,TONGDAO=1则测量正弦信号源的输出电压;否则,测量电位器的输出电压
ADC0 EQU 8800H ;ADC0808的IN0
ADC1 EQU 8801H ;ADC0808的IN1
ZIXING EQU 8000H ;LED的段码口
WEI EQU 8400H ;LED的位码口
QIAN BIT 00H ;显示千位标志
BAI BIT 01H ;显示百位标志
SHI BIT 02H ;显示十位标志
GEWEI BIT 03H ;显示个位标志
BUFFER EQU 30H ;显示缓冲区,共2个字节
DIVDLL EQU 21H ;定义被除数
DIVDLH EQU 22H
DIVDHL EQU 23H
DIVDHH EQU 24H
DIVL EQU 25H ;定义除数
DIVH EQU 26H
TEMPL EQU 27H ;定义余数单元
TEMPH EQU 28H
HEXH EQU 29H ;16进制数暂存单元
HEXL EQU 2AH
BCDH EQU 2BH ;BCD码的高位
BCDL EQU 2CH ;BCD码的低位
ORG 0
LJMP START
ORG 0BH
LJMP DISP
ORG 30H
START: MOV SP,#60H
SETB QIAN
CLR BAI
CLR SHI
CLR GEWEI
CLR A
MOV BUFFER,A
MOV BUFFER+1,A ;清显示缓冲区
MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H ;1ms定时初值
SETB ET0
SETB EA
SETB TR0
LOOP: SETB TONGDAO ;将P1.1置为输入状态
JB TONGDAO,LOOP1
MOV DPTR,#ADC0
SJMP LOOP2
LOOP1: MOV DPTR,#ADC1
LOOP2: MOVX @DPTR,A ;启动A/D
SETB EOC
JNB EOC,$
MOVX A,@DPTR ;取采样的电压值
MOV R3,A
MOV R2,#0
MOV R6,#0C3H
MOV R7,#50H ;#50000
LCALL DMUL ;采样值*50000
MOV A,#5
LCALL JIAFA ;+5实现四舍五入
MOV DIVDHH,R4
MOV DIVDHL,R5
MOV DIVDLH,R6
MOV DIVDLL,R7 ;被除数=采样值*50000+5
MOV DIVL,#0F6H
MOV DIVH,#09H ;除数=2550
LCALL CHUFA ;除2550得到电压值
MOV HEXH,DIVDLH
MOV HEXL,DIVDLL
LCALL BTOD ;转换为BCD码
CLR EA ;关中断避免在将计算结果送显示缓冲区时被中断程序打断
MOV BUFFER,BCDH ;从而造成显示混乱
MOV BUFFER+1,BCDL
SETB EA
SJMP LOOP
DISP: PUSH PSW
PUSH ACC
PUSH DPH
PUSH DPL
SETB RS0
CLR RS1
CLR TR0
MOV TH0,#0FCH
MOV TL0,#18H
SETB TR0
JNB QIAN,D1
MOV A,BUFFER
SWAP A
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
SETB ACC.7 ;点亮最高位的小数点
MOV DPTR,#ZIXING
MOVX @DPTR,A
MOVX @DPTR,A
MOV A,#0FEH
MOV DPTR,#WEI
MOVX @DPTR,A ;点亮千位LED
MOVX @DPTR,A
CLR QIAN
SETB BAI
SJMP D_END
D1: JNB BAI,D2
MOV A,BUFFER
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#ZIXING
MOVX @DPTR,A
MOV A,#0FDH
MOV DPTR,#WEI
MOVX @DPTR,A ;点亮百位LED
CLR BAI
SETB SHI
SJMP D_END
D2: JNB SHI,D3
MOV A,BUFFER+1
SWAP A
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#ZIXING
MOVX @DPTR,A
MOV A,#0FBH
MOV DPTR,#WEI
MOVX @DPTR,A ;点亮十位LED
CLR SHI
SETB GEWEI
SJMP D_END
D3: MOV A,BUFFER+1
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#ZIXING
MOVX @DPTR,A
MOV A,#0F7H
MOV DPTR,#WEI
MOVX @DPTR,A ;点亮个位LED
CLR GEWEI
SETB QIAN
D_END: POP DPL
POP DPH
POP ACC
POP PSW
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH
DB 27H,7FH,6FH
;===========================================
;多字节乘法程序
;被乘数在R2R3,乘数在R6R7,积在R4R5R6R7
;===========================================
DMUL: MOV A,R3
MOV B,R7
MUL AB
XCH A,R7
MOV R5,B
MOV B,R2
MUL AB
ADD A,R5
MOV R4,A
CLR A
ADDC A,B
MOV R5,A
MOV A,R6
MOV B,R3
MUL AB
ADD A,R4
XCH A,R6
XCH A,B
ADDC A,R5
MOV R5,A
MOV F0,C
MOV A,R2
MUL AB
ADD A,R5
MOV R5,A
CLR A
MOV ACC.0,C
MOV C,F0
ADDC A,B
MOV R4,A
RET
;=================================
;4字节加1字节程序
;被加数在R4R5R6R7中,加数在A中
;和在R4R5R6R7中
;================================
JIAFA: ADD A,R7
MOV R7,A
CLR A
ADDC A,R6
MOV R6,A
CLR A
ADDC A,R5
MOV R5,A
CLR A
ADDC A,R4
MOV R4,A
RET
;===============================
;4字节除以2字节的除法程序
;被除数在21H-24H单元
;除数在25H-26H单元
;商在被除数单元
;余数在27H-28H单元
;===============================
CHUFA: MOV A,DIVH ;除数为零?
ORL A,DIVL
JNZ DIVD0
SETB OV ;为零,置溢出标志
RET
DIVD0: MOV TEMPL,#0
MOV TEMPH,#0
MOV B,#32
DIVD1: CLR C
MOV A,DIVDLL
RLC A
MOV DIVDLL,A
MOV A,DIVDLH
RLC A
MOV DIVDLH,A
MOV A,DIVDHL
RLC A
MOV DIVDHL,A
MOV A,DIVDHH
RLC A
MOV DIVDHH,A
MOV A,TEMPL
RLC A
MOV TEMPL,A
XCH A,TEMPH
RLC A
XCH A,TEMPH
MOV F0,C
SUBB A,DIVL
MOV R7,A
MOV A,TEMPH
SUBB A,DIVH
ANL C,/F0
JC DIVD2
MOV TEMPL,R7
MOV TEMPH,A
INC DIVDLL
DIVD2: DJNZ B,DIVD1
CLR OV
RET
;================================================
;FUNCTION: HEX change to BCD code ( 2 byte )
;USE REGISTER: R0-R7, A, B
;USE RAM: 24H-28H
;INPUT: HEX in 29H,2AH (high-byte in 29H)
;OUTPUT: BCD code in 2BH,2CH (high-byte in 2BH)
;================================================
BTOD: MOV A,HEXH
XCH A,HEXL
MOV HEXH,A
MOV R0,#HEXH
MOV R1,#BCDH
MOV R7,#02H ; 2 byte
MOV A,R0
MOV R5,A
MOV A,R1
MOV R6,A
MOV A,R7
INC A
MOV R3,A
CLR A
SD10: MOV @R1,A
INC R1
DJNZ R3,SD10
MOV A,R7
MOV B,#08H
MUL AB
MOV R3,A
SD14: MOV A,R5
MOV R0,A
MOV A,R7
MOV R2,A
CLR C
SD11: MOV A,@R0
RLC A
MOV @R0,A
INC R0
DJNZ R2,SD11
MOV A,R6
MOV R1,A
MOV A,R7
MOV R2,A
INC R2
SD13: MOV A,@R1
ADDC A,@R1
DA A
MOV @R1,A
INC R1
DJNZ R2,SD13
DJNZ R3,SD14
MOV A,BCDH
XCH A,BCDL
MOV BCDH,A
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -