51单片机中ADC0808进行模数转换

2014anewme 2015-12-13 07:53:14
用protus仿真51单片机使用ADC0808进行模数转换,八个滑动变阻器模拟了八路模拟量输入,选通哪一路输入由ADDA,ADDB,ADDC决定,不知道是电路连接的问题还是程序问题,这ADDA,ADDB,ADDC的量和ADC0808的输出相等……到底是哪里出了问题啊……
帖子传不了图片,具体看我自己的回复,心酸。
...全文
1498 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
2014anewme 2016-03-06
  • 打赏
  • 举报
回复
引用 5 楼 asdf120120121 的回复:
你把ADDA ADDB ADDC 分别接入了P0.0 0.1 0.2 AD模块的OUT1 2 3 也是这样接 那不是短路了吗? 那out的值直接给了ADD A B C 啊 我觉得是这个问题
我知道你说的,之前我也觉得是这样,后来看了很多很多这方面的帖子用的都是这个连接方式,别人的解释是,在MOVX @DPTR,A 或者MOVX A,@DPTR 这两条语句的时候,前半个周期会传送地址,后半个周期会传送内容,那么我就只在前半个周期的时候接收地址的值,后半个周期不接收,那就不会有问题了。问题是,实验的结果观察很奇怪。不过算了,我最近换了另外一个方式。
hhzy2015 2016-03-05
  • 打赏
  • 举报
回复
引用 6 楼 图灵转世的回复:
用stm32啦,还用51.
贵啊,还有Stm32贴片的DIY不方便初学者
图灵转世 2015-12-24
  • 打赏
  • 举报
回复
用stm32啦,还用51.
asdf120120121 2015-12-24
  • 打赏
  • 举报
回复
你把ADDA ADDB ADDC 分别接入了P0.0 0.1 0.2 AD模块的OUT1 2 3 也是这样接 那不是短路了吗? 那out的值直接给了ADD A B C 啊 我觉得是这个问题
2014anewme 2015-12-23
  • 打赏
  • 举报
回复
引用 1 楼 zhujinqiang 的回复:
源程序都不贴一个吗


不好意思回复晚了。
我这几天也是在研究,在MOVX @DPTR,A 或者MOVX A,@DPTR 这两条语句的时候,前半个周期会传送地址,后半个周期会传送内容。在我的实验里面,传送地址的作用很大,因为地址的最低三位传给了ADDA,ADDB,ADDC作为选通IN模拟通道的信号,所以P0.0 P0.1 P0.2 从000变成111的这个过程刚好实现了这个功能,这也是我觉得他为什么给DPTR赋值 #07FF8的理由。

在图中控制ST 和 ALE 口的是WR 非和 P2.7,这个我很困惑,为什么不是仅仅用WR非就可以呢?P2.7的意义是什么?
在传送地址的时候,因为DPH =#07F,所以P2.7会等于0,而在其他情况它会是1?但是,我后来用很慢的速度观察了这几个引脚的信号,发现了很奇怪的现象,不知道是仿真软件的问题还是芯片本来就是这样的。



上图是我观察到的电平现象。
初学者,想法可能有点乱七八糟,请多指教
2014anewme 2015-12-23
  • 打赏
  • 举报
回复
引用 1 楼 zhujinqiang 的回复:
源程序都不贴一个吗


org 0000h
ljmp start
start:
mov r0,#8;设置采集次数八个通道八次
mov r1,#30h;采集数据存储的第一的地址
mov dptr,#07ff8h;这个我也不知道为什么是这个数字
loop:
movx @dptr,a;写允许,WR非有一个脉冲
acall delay1s;延时完成转换
movx a,@dptr;读允许,RD非产生一个脉冲
mov @r1,a;存第一个模拟通道的转换值
inc dptr;地址+1,
inc r1;数据存储区+1
djnz r0,loop;没采集完八个通道回到loop
ljmp start

delay1s:
mov r7,#200
d1:
mov r6,#200
d2:
mov r5,#40
d3:
djnz r5,d3
djnz r6,d2
djnz r7,d1
ret

end


2014anewme 2015-12-23
  • 打赏
  • 举报
回复
引用 1 楼 zhujinqiang 的回复:
源程序都不贴一个吗


org 0000h
ljmp start
start:
mov r0,#8;设置采集次数八个通道八次
mov r1,#30h;采集数据存储的第一的地址
mov dptr,#07ff8h;这个我也不知道为什么是这个数字
loop:
movx @dptr,a;写允许,WR非有一个脉冲
acall delay1s;延时完成转换
movx a,@dptr;读允许,RD非产生一个脉冲
mov @r1,a;存第一个模拟通道的转换值
inc dptr;地址+1,
inc r1;数据存储区+1
djnz r0,loop;没采集完八个通道回到loop
ljmp start

delay1s:
mov r7,#200
d1:
mov r6,#200
d2:
mov r5,#40
d3:
djnz r5,d3
djnz r6,d2
djnz r7,d1
ret

end


zhujinqiang 2015-12-16
  • 打赏
  • 举报
回复
源程序都不贴一个吗

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧