找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6573|回复: 9
收起左侧

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

[复制链接]
回帖奖励 20 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 80%)
ID:293458 发表于 2018-3-20 15:15 | 显示全部楼层 |阅读模式
问题描述:用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接绿灯。硬件图如下:
问题2.png 问题1_20180320143907.png

实现的功能:不停地将两个滑动变阻器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    //转第一步,无限循环

回复

使用道具 举报

ID:111634 发表于 2018-3-21 10:28 | 显示全部楼层

回帖奖励 +5 黑币

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

实例81  ADC0808中断方式A-D(ALE输出CLK)
Proteus仿真一下,确认有效。
0809ad1.jpg
实例81 ADC0808A-D( ALE输出CLK,中断方式).rar (54.32 KB, 下载次数: 40)
回复

使用道具 举报

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仿真时系统默认,实际电路必须接。
回复

使用道具 举报

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

使用道具 举报

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)
回复

使用道具 举报

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)
回复

使用道具 举报

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)
回复

使用道具 举报

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机械工业出版社。程序语句条条有注解,便于阅读理解,便于自学。
回复

使用道具 举报

ID:295783 发表于 2018-3-24 13:40 | 显示全部楼层
你的单片机XTALE1和XTALE2没接晶振,而他的ALE引脚能直接接到ADC0808的clock
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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