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

📄 meter.asm

📁 多个仿真例子
💻 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 + -