找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1541|回复: 11
打印 上一主题 下一主题
收起左侧

新手求教关于单片机+ADC0808仿真问题

[复制链接]
跳转到指定楼层
楼主
仿真目的:采用总线形式进行ADC0808仿真
问题:1.输出值范围与预期不符,量程应该为【0-5】,仿真结果是【0.88-3.45】且在变动的过程中出现了大于9的数;2.即使采集口没有接其他东西,也会显示一个定值;3.本来是采集IN0的数据,但是如果IN1的模拟量变化,显示的数据也会变化。
小弟我真的看不出来,照着视频一行一行敲的代码,求助个位大佬的帮助。

出错情况
1.未连接有初值


2.量程不对



3.端口“串线”

代码:
1.ADC0808
头文件:
  1. #ifndef __ADC0809_H__
  2. #define __ADC0809_H__

  3. #include <REGX52.H>
  4. #include <absacc.H>

  5. sbit EOC    = P3^5;

  6. #define AD_IN0 XBYTE[0X7FF8]
  7. #define AD_IN1 XBYTE[0X7FF9]
  8. #define AD_IN2 XBYTE[0X7FFA]
  9. unsigned char ADC_Conv();
  10.         
  11. #endif
复制代码
函数部分:
  1. #include "ADC0809.H"

  2. unsigned char ADC_Conv()
  3. {
  4.         unsigned char ad_result = 0;
  5.         AD_IN0  = 0x0000; //借助对端口地址执行写操作时序,来满足A/D的操作时序
  6.         while(EOC == 0);//查询方式  高电平结束
  7.         ad_result = AD_IN0;//借助对端口地址执行读操作时序,来满足A/D的操作时序
  8.         return ad_result;
  9. }

复制代码

2.主函数 与 显示服务函数
  1. #include <REGX52.H>
  2. #include "DISPLAY.H"
  3. #include "ADC0809.H"

  4. void display_service();

  5. unsigned char ad_result = 0; // 0-255
  6. int ad_show = 0;

  7. void main()
  8. {

  9.         while(1)
  10.         {
  11.                 DotDig1 = 1;
  12.                 ad_result = ADC_Conv();
  13.                 ad_show = ad_result * 1.0 *500/255;  //5v - 500  255-份
  14.                 display_service();
  15.                 Display();
  16.         }
  17. }

  18. void display_service()
  19. {
  20.         LEDBUF[0]=23;
  21.         LEDBUF[1]=ad_show/100%10;
  22.         LEDBUF[2]=ad_show/10%10;
  23.         LEDBUF[3]=ad_show%10;
  24. }
复制代码

附件:仿真与代码
ADC0808总线型.zip (112.88 KB, 下载次数: 8)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:625730 发表于 2022-1-26 10:06 | 只看该作者
最好把ADC部分的电路图补全,这样好分析一点。你的AD转换函数应该是不对的,没有ADWR,ADRD等的设置。
回复

使用道具 举报

板凳
ID:213173 发表于 2022-1-26 11:58 | 只看该作者
给你一个示例
数字电压表ADC0808仿真.rar (76.21 KB, 下载次数: 17)

回复

使用道具 举报

地板
ID:526543 发表于 2022-1-26 12:54 | 只看该作者
ADC部分的电路图补全一下
回复

使用道具 举报

5#
ID:675269 发表于 2022-1-26 15:48 | 只看该作者
这个是adc部分的电路图

回复

使用道具 举报

6#
ID:675269 发表于 2022-1-26 15:51 | 只看该作者
123456ZXC1 发表于 2022-1-26 12:54
ADC部分的电路图补全一下

您好,我补了一下,麻烦看一看
回复

使用道具 举报

7#
ID:675269 发表于 2022-1-26 16:04 | 只看该作者
耽误大家时间了,由于本人的粗心,没有把ALE引脚的网络标号改掉。导致ALE没有信号。改完之后可以正常的显示。
但是我有些许疑问,第一,为什么不连接的时候会显示一个固定值2.49。第二,如果我测得是端口一,但端口一没有接任何东西此时应该显示第一个疑问的固定值,但是改变接在端口二的滑动电阻改变电压,此时数码管显示的值会变动,这种“串线”的情况是由于什么。如果正常端口一接入滑动电阻,则端口二的变动不会造成端口一数值的紊乱。
回复

使用道具 举报

8#
ID:675269 发表于 2022-1-26 16:05 | 只看该作者
rsdwm 发表于 2022-1-26 15:48
这个是adc部分的电路图

找到问题了  ALE引脚没改
回复

使用道具 举报

9#
ID:675269 发表于 2022-1-26 16:06 | 只看该作者

谢谢,不过我的是总线方式  这个是io口控制的
回复

使用道具 举报

10#
ID:675269 发表于 2022-1-26 16:07 | 只看该作者
TEC 发表于 2022-1-26 10:06
最好把ADC部分的电路图补全,这样好分析一点。你的AD转换函数应该是不对的,没有ADWR,ADRD等的设置。

谢谢,找到问题了,引脚标号错了。方便看一下我新回复的问题吗
回复

使用道具 举报

11#
ID:675269 发表于 2022-1-26 16:07 | 只看该作者
123456ZXC1 发表于 2022-1-26 12:54
ADC部分的电路图补全一下

谢谢,找到问题了,引脚标号错了。方便看一下我新回复的问题吗
回复

使用道具 举报

12#
ID:625730 发表于 2022-1-26 17:40 | 只看该作者
rsdwm 发表于 2022-1-26 16:07
谢谢,找到问题了,引脚标号错了。方便看一下我新回复的问题吗

嘿嘿,不是很懂这个总线型方式。你的ADC0809的时钟信号是单片机ALE引脚提供的?可以在仿真的时候加个示波器对照一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表