最近单片机有一个实验挺有意思的,使用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
版权声明:本文为博主原创,未经本人允许,禁止转载!
moniqiuwen 2018-11-29 08:57