找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用单片机驱动ADC0808时仿真不出来,求大神帮忙解答!感激不尽

[复制链接]
回帖奖励 20 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 80%)
跳转到指定楼层
楼主
问题描述:用proteus仿真时,不管两个变阻器怎么调节,始终是两个红灯亮。求大神帮忙解答。
硬件描述:我用的是AT89C51,ADC0808,四个LED灯,两个滑动变阻器代替模拟两个传感器。ADC0808接口:IN0接滑动变阻器RVI,IN1接滑动变阻器RV2,ADDA、B、C分别接P2.0、P2.1、P2.2,ALE和START接P0.6,CLOCK接单片机ALE经过四分频,EOC接P0.2,OE接P0.0,OUT1~OUT8接P3端口。P1.0和P1.2接红灯,P1.1和P1.3接绿灯。硬件图如下:


实现的功能:不停地将两个滑动变阻器RV1和RV2的模拟电压信号通过ADC0808转换成数字信号输出到单片机P3端口,当RV1的输出电压超过2.5V时,P1.0红灯亮,否则P1.1绿灯亮;当RV2的输出电压超过2.5V时,P1.2红灯亮,否则P1.3绿灯亮。
汇编程序:        
                ORG    0000H  //开始
CHONG:    CLR    P0.0     //OE置0
                MOV    P2,#0  //选择IN0端口
                CLR    P0.6      //启动A/D转换
                SETB   P0.6
                CLR    P0.6   
                JNB    P0.2,$    //等待转换结束
                SETB   P0.0      //转换结束则将OE置1,允许输出
                MOV    A,P3      //将ADC0808的输出放到A
                SUBB   A,#80H  //将其减去2.5V
                ANL    A,#80H     //判断余数是正数还是负数
                JNZ    YWZC        //若为负数则模拟电压小于2.5V,转变阻器1正常显示程序;否则顺序执行变阻器1不正常显示程序
                CLR    P1.0           //红灯1亮
                SETB   P1.1           //绿灯1灭
                SJMP   COCGQ      //转RV2判断
YWZC:      CLR    P1.1            //红灯1灭
                 SETB   P1.0           //绿灯1亮
COCGQ:    CLR    P0.0          //OE置0,以下程序判断RV2
                MOV    P2,#01    //选择IN1端口
                SETB   P0.6        //启动A/D转换
                CLR    P0.6
                JNB    P0.2,$      //等待转换结束
                SETB   P0.0       //转换结束则将OE置1,允许输出
                MOV    A,P3       //将ADC0808的输出放到A
                SUBB   A,#80H  //将其减去2.5V
                ANL    A,#80H   //判断余数是正数还是负数
                JNZ    COZC       //若为负数则模拟电压小于2.5V,转变阻器2正常显示程序;否则顺序执行变阻器2不正常显示程序
                CLR    P1.2      //红灯2亮
                SETB   P1.3      //绿灯2灭
                SJMP   COBZC    //转移
COZC:      CLR    P1.3        //红灯2灭
               SETB   P1.2        //绿灯2亮
COBZC:    SJMP   CHONG    //转第一步,无限循环

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

使用道具 举报

沙发
ID:111634 发表于 2018-3-21 10:28 | 只看该作者

回帖奖励 +5 黑币

本帖最后由 zl2168 于 2018-3-21 10:30 编辑

实例81  ADC0808中断方式A-D(ALE输出CLK)
Proteus仿真一下,确认有效。

实例81 ADC0808A-D( ALE输出CLK,中断方式).rar (54.32 KB, 下载次数: 40)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。


回复

使用道具 举报

板凳
ID:293458 发表于 2018-3-21 11:35 | 只看该作者
zl2168 发表于 2018-3-21 10:28
实例81  ADC0808中断方式A-D(ALE输出CLK)
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单 ...

为什么你的单片机XTALE1和XTALE2没接晶振,而他的ALE引脚能直接接到ADC0808的clock
回复

使用道具 举报

地板
ID:111634 发表于 2018-3-21 14:58 | 只看该作者
第一个问题:Proteus仿真时系统默认,实际电路必须接。
回复

使用道具 举报

5#
ID:111634 发表于 2018-3-21 15:09 | 只看该作者
第二个问题:51单片机,无读写外RAM操作时,ALE信号固定为CPU时钟频率的1/6,可用作0808的CLK信号
回复

使用道具 举报

6#
ID:111634 发表于 2018-3-21 15:10 | 只看该作者
本帖最后由 zl2168 于 2018-3-21 15:15 编辑

实例82  ADC0808查询方式A-D(ALE输出CLK)
实例82 ADC0808A-D( ALE输出CLK,查询方式).rar (54.04 KB, 下载次数: 8)

查询方式时,0809 EOC端可不必通过反相器与INT0或INT1相连,直接与80C51 P1口或P3口中任一端线相连,不断查询EOC电平,当EOC高电平时,表示0809A-D完成,即可读0809A-D
回复

使用道具 举报

7#
ID:111634 发表于 2018-3-21 15:11 | 只看该作者
本帖最后由 zl2168 于 2018-3-21 15:16 编辑

实例83  ADC0808延时方式A-D(ALE输出CLK)
实例83 ADC0808A-D( ALE输出CLK,延时等待方式).rar (54.13 KB, 下载次数: 8)

延时等待方式时,0809 EOC端可不必与80C51相连,而是根据时钟频率计算出A-D转换时间,每路每次需64个时钟周期,80C51一机周发出2ALE信号,因此需要32个机器周期,略微延长后直接读A-D转换值。
回复

使用道具 举报

8#
ID:111634 发表于 2018-3-21 15:12 | 只看该作者
本帖最后由 zl2168 于 2018-3-21 15:14 编辑

实例84  ADC0808并行A-D(虚拟CLK)
实例84 ADC0808A-D(虚拟CLK).rar (35.75 KB, 下载次数: 7)

Proteus仿真一下,确认有效。以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。
回复

使用道具 举报

9#
ID:111634 发表于 2018-3-21 15:21 | 只看该作者
以上4例有双解c和汇编程序,取之于《单片机原理与控制技术——双解汇编和C51》第3版ISBN 978-7-111-42393-5机械工业出版社和《单片机学习指导及习题解答——双解汇编和C51》第2版ISBN 978-7-111-42431-4机械工业出版社。程序语句条条有注解,便于阅读理解,便于自学。
回复

使用道具 举报

10#
ID:295783 发表于 2018-3-24 13:40 | 只看该作者
你的单片机XTALE1和XTALE2没接晶振,而他的ALE引脚能直接接到ADC0808的clock
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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