基于51单片机及ADC0808的数字电压表数码管汇编语言proteus仿真程序设计

前言

附:http://www.jh-tec.cn/archives/7313

大家好,上一条博客写了关于基于51单片机以及ADC0808的数字电压表,但是采用的C语言,本章讲一下采用汇编语言来实现电压的测量,同样采用数码管显示。

硬件设计

该设计采用的MCU同样是51单片机,ADC也是采用的TI的ADC0808,显示部分采用4位数码管,最终的测试电压范围为0~5V,这次的精度提高到约为0.01V,仿真图如下:
右下方是模拟的输入电压
在这里插入图片描述
在这里插入图片描述

部分汇编代码如下: (代码详细备注,方便阅读)

   		LED_0	EQU	30H				;百分位
        LED_1	EQU	31H				;十分位
        LED_2	EQU	32H				;个位
        LED_3	EQU	33H				;十位
        ADC		EQU	35H
        CLOCK	BIT	P1.4			;定义0808时钟位
        ST		BIT	P1.5
        EOC		BIT	P1.6
        OE		BIT	P1.7
		ORG	0000H
		LJMP START
		ORG	000BH
		LJMP INT_T0
        ORG	30H
START:	MOV	LED_0,#00H
		MOV	LED_1,#00H
		MOV	LED_2,#00H
		MOV	DPTR,#TABLE				;表格数值赋到DPTR
		MOV	TMOD,#02H				;定时器选择方式2
		MOV	TH0,#0F5H				;防止数码管数位闪动,可设定的置为小于等于245的数
		MOV	TL0,#00H
		MOV	IE,#82H					;开T0中断
		SETB TR0					;T0开始计数
WAIT:	CLR	ST
		SETB ST						;上升沿清零SAR(SAR用来在A/D转化过程中存放暂态数字量)
		CLR	ST						;下降沿启动ADC工作
		JNB	EOC,$					;等待转换结果
		SETB OE						;ADC输出
		MOV	ADC,P2					;读取AD转换结果
		CLR	OE 		
		MOV	A,ADC					
		MOV	R7,A					;R7储存AD转换后的结果				
		MOV	LED_3,#00H				;清空十位
		MOV	LED_2,#00H				;清空个位
		MOV	A,#00H					
LOOP1:	ADD	A,#20H					;一位二进制码对应100mV
		DA	A						;结果转换成BCD码
		JNC	LOOP2					;Cy为0跳转,Cy为1继续执行
		MOV	R4,A					;R4储存百分位、十分位
		INC	LED_2					;个位加1
		MOV	A,LED_2
		CJNE A,#0AH,LOOP4			;个位不为10跳转,为10继续执行
		MOV	LED_2,#00H				;个位置0
		INC	LED_3					;十位加1
LOOP4:	MOV	A,R4
LOOP2:	DJNZ R7,LOOP1				;R7减1不为0跳转,为0继续执行
		ACALL BTOD1
		LCALL DISP					;调用显示子程序
		LJMP WAIT
		ORG	0200H
BTOD1:	MOV	R6,A					;R6储存R7为0后的A的值
  • 11
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值