原创 51总线方式获取adc0809数值

2018-11-28 08:49 4285 26 6 分类: MCU/ 嵌入式

最近单片机有一个实验挺有意思的,使用51单片机以总线的方式读取adc0809的数据

先补充点关于单片机总线的预备知识,我一开始不了解总线的时候做这个实验也是很懵逼的。

单片机的三总线结构

51单片机有三条总线:数据总线、地址总线、控制总线

从图中可以看出,8位数据总线由P0组成,16位地址总线由P0和P2组成,控制总线由P3和相关引脚组成

采用总线的方式可以简化编程,节省I/O口,便于外设扩展

但是数据口和地址口在P0是怎么复用的呢,这就需要看到时序了

从图中可以看出,P0口是数据/地址分时复用的,这是P0口内部的复用结构完成的

实操练习

51单片机与adc0809接线原理图如下

解释电路

P2.7口用作adc0809的选择线

P0.0~P0.2所接的A B C是adc0809的IN0通道选择线

接下来就是计算adc0809的地址了

P2 P0

0xxx xxxx xxxx x000

因此地址为0x7ff8

遇到的问题

本来应该显示5v的位置只显示1.144v,而且在电阻增大的过程中,显示的值先减小后增大又减小,具体情况如图

实在没有办法的情况下,借别的同学的代码来看,没发现自己的程序在时序、地址上的错误。

琢磨了单片机的数值变换的现象后,突然觉得是不是保存ad转换数值的变量溢出了,然后就发现我的变量类型是int,而别人的变量类型是long int

在将保存ad转换的变量类型修改过后,程序就运行正常了

程序代码

作者: greedyhao, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3868882.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

moniqiuwen 2018-11-29 08:57

多谢分享
相关推荐阅读
greedyhao 2019-03-17 09:03
uboot链接脚本分析
上一篇uboot主编译脚本分析的编译选项参数中提到了链接脚本这么个东西我也是写到这里才开始了解链接脚本(Linker command scripts),之前只是大概知道有这么一个东西先从参考资料中的内...
greedyhao 2018-09-29 21:18
对Xil_Out32未定义的引用
第一次在HLS中遇见一个官方库函数未定义问题,这就把解决方法记录下来。在创建好工程,写完工程代码后,发现报错如下./src/led_controller_test_tut_4A.o:在函数‘main’...
greedyhao 2018-09-29 21:12
Vivado生成Bitstream失败的解决方法
跟着实验指导书,难得的又遇到问题了,在最后生成Bitstream的时候出错了,无法生成Bitstream。报错信息如下[DRC NSTD-1] Unspecified I/O Standard: 4 ...
greedyhao 2018-09-17 22:26
zybo初体验
前段时间过生日,亲戚给了些钱让我自己买生日礼物,早就想搞一块zynq的板了,但是淘宝一看太贵,于是去咸鱼上淘了一块二手的ZYBO(谁知道是不是二手,反正看着挺新)来玩玩。学习肯定是从官方资料开始的,T...
greedyhao 2018-09-13 10:53
运行c代码前发生了什么
众所周知,c代码也是一种比较高级的语言了,机器是没有办法直接运行的,机器所能理解的只有机器码--那一串0和1而已。虽然早就知道c代码是先经过编译链接最后才放在机器上执行,但是在这么一个过程中究竟发生了...
我要评论
1
26
关闭 站长推荐上一条 /2 下一条