ADC0809使用中的小问题----小数点后保留两位的处理方法

ADC0809转换结果在输出显示之前先要进行数据处理,其原理如下:

转换输出结果在0—255之间分别对应着0~+5V之间的256个电压值,因此单片机必须把A/D转换输出的结果转换成可以显示的电压值,具体方法是:

VIN=DOUT *5/255,其中DOUTADC0809输出的八位二进制数。

由上述公式可知:当ADC0809输出为(11111111B 时,输入电压的值为VIN=5.00V;

ADC0809输出为(00000000B 时,输入电压的值为VIN=0.00V;ADC0809输出为(10000000B,输入电压值为VIN=2.50V但是单片机进行数学运算时结果只去整数部分,因此输出为(10000000B时计算出来的电压值为VIN=2V

    由此可以看出这样运算输出的结果很不准确,在0~+5V之间只有0,1,2,3,4,5六个电压值,所以必须把单片机运算结果中的小书部分保留下来。

    具体方法是:如果保留小数点后两位,在运算时分子乘以100,保留三位就乘以1000小数点后保留两位的公式如下:VIN=DOUT *5*100/255= DOUT *100/51,有公式可知,单片机的运算结果为250。然后单片机将250除以10得到商为25,余数为0,再将25除以10得到商为2余数为5。这样就可以得到电压值的三个数字,最后分别将250三个数送出显示

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我来给您解答。以下是汇编语言编程实现轮流采集ADC0809 int0-int7的信号的步骤: 1. 首先,需要定义一些变量来存储ADC0809的控制字和数据字。例如: ``` CTRL equ 80h ; 控制字存储地址 DATA equ 81h ; 数据字存储地址 ``` 2. 然后,需要初始化ADC0809的控制字,使其能够采集int0-int7的信号。具体地,需要设置控制字的位7为0、位6为1(表示单通道模式)、位5-位3为000(表示int0-int7)、位2-位1为00(表示时钟分频系数为2)、位0为1(表示启动转换)。例如: ``` mov al, 00000001b ; 设置控制字 out CTRL, al ; 输出控制字到ADC0809 ``` 3. 接下来,需要等待ADC0809完成转换并将转换结果存储在数据字。可以通过轮询的方式等待,直到ADC0809的转换完成标志位(位7)为1。例如: ``` wait: in al, CTRL ; 读取控制字 test al, 10000000b ; 测试转换完成标志位 jz wait ; 如果转换未完成,则继续等待 ``` 4. 转换完成后,可以从数据字读取转换结果,并将其存储到指定的变量。例如: ``` in al, DATA ; 读取数据字 mov result, al ; 存储转换结果到指定变量 ``` 5. 最后,需要修改控制字的通道选择位,以便下一次采集不同的信号。可以通过循环左移的方式实现。例如: ``` rol al, 1 ; 循环左移控制字 out CTRL, al ; 输出修改后的控制字到ADC0809 ``` 综上所述,以上就是汇编语言编程实现轮流采集ADC0809 int0-int7的信号的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值