标题: 用单片机驱动ADC0808时仿真不出来,求大神帮忙解答!感激不尽 [打印本页]
作者: 奔跑别听 时间: 2018-3-20 15:15
标题: 用单片机驱动ADC0808时仿真不出来,求大神帮忙解答!感激不尽
问题描述:用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 //转第一步,无限循环
作者: zl2168 时间: 2018-3-21 10:28
本帖最后由 zl2168 于 2018-3-21 10:30 编辑
实例81 ADC0808中断方式A-D(ALE输出CLK)
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。
作者: 奔跑别听 时间: 2018-3-21 11:35
为什么你的单片机XTALE1和XTALE2没接晶振,而他的ALE引脚能直接接到ADC0808的clock
作者: zl2168 时间: 2018-3-21 14:58
第一个问题:Proteus仿真时系统默认,实际电路必须接。
作者: zl2168 时间: 2018-3-21 15:09
第二个问题:51单片机,无读写外RAM操作时,ALE信号固定为CPU时钟频率的1/6,可用作0808的CLK信号
作者: zl2168 时间: 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值。
作者: zl2168 时间: 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一机周发出2次ALE信号,因此需要32个机器周期,略微延长后直接读A-D转换值。
作者: zl2168 时间: 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 C和Proteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。
作者: zl2168 时间: 2018-3-21 15:21
以上4例有双解c和汇编程序,取之于《单片机原理与控制技术——双解汇编和C51》第3版ISBN 978-7-111-42393-5机械工业出版社和《单片机学习指导及习题解答——双解汇编和C51》第2版ISBN 978-7-111-42431-4机械工业出版社。程序语句条条有注解,便于阅读理解,便于自学。
作者: 程序新手 时间: 2018-3-24 13:40
你的单片机XTALE1和XTALE2没接晶振,而他的ALE引脚能直接接到ADC0808的clock
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |