请
登录
后使用快捷导航
没有帐号?
注册
首页
论坛
设计作品
全志V85x硬件设计大赛作品精选第一期
全志V85x硬件设计大赛作品精选第二期
瑞萨RA4M2物联网网关设计挑战赛作品集
国民技术N32开源移植挑战赛作品精选
2022福建省大学生人工智能创意赛作品合集
OpenHarmony开发者成长计划学生挑战赛优秀作品
精选帖子
【作品合集】龙芯2K0300蜂鸟开发板试用精选
【资源下载】英飞凌PSoC 6 RTT物联网开发板
【正点原子STM32精英V2开发板】HC-SR501红外人体感应
【沁恒CH32V208开发板试用】跳动的心脏-Systick
【鲁班猫创意氛围赛】现代化无线哨兵
【飞凌RK3588开发板试用】基于pyqt5的人脸识别
书籍评测
电子工程师必备丛书系列——电路板技能速成宝典
Proteus实战攻略:从简单电路到单片机电路的仿真
电子工程师必备丛书系列——九大系统电路识图宝典
OpenHarmony嵌入式系统原理与应用——基于RK2206芯片
深入理解微电子电路设计——数字电子技术及应用(原书第5版)
资深工程师十余年实战经验,PADS PCB设计指南
社区工程师专题
第一期:坚持兴趣成就嵌入式工程师
第二期:电子工程师需要在参赛中历练成长
第三期:创意源于生活,工具始于懒惰
第四期:工程师漫谈开发板评测的乐趣
第五期:硬件工程师的心路历程
第六期:宁精勿杂,在嵌入式领域做到优秀
版块
技术社区
FPGA开发者技术社区
RISC-V MCU技术社区
HarmonyOS技术社区
瑞芯微Rockchip开发者社区
OpenHarmony开源社区
嵌入式技术论坛
单片机及嵌入式
单片机/MCU论坛
ARM技术论坛
STM32/STM8技术论坛
RISC-V技术社区
FPGA|CPLD|ASIC论坛
DSP论坛
电源与无线技术
电源技术论坛
无线充电技术
WIFI技术
蓝牙技术
天线|RF射频|微波|雷达技术
EDA设计论坛
PCB设计论坛
DFM|可制造性设计论坛
Protel|AD|DXP论坛
PADS技术论坛
Allegro论坛
KiCad EDA 中文论坛
proteus论坛|仿真论坛
电路设计与测试
电路设计论坛
电子元器件论坛
LabVIEW论坛
Matlab论坛
传感技术
测试测量技术
DIY及创意
综合应用与活动
电机控制
发烧友官方/活动
模拟技术论坛
机器人论坛
USB论坛
音视频技术
综合技术交流
小组
厂商
龙芯技术社区
先楫半导体HPMicro
其利天下技术小组
瑞萨单片机论坛
芯海科技论坛
飞凌嵌入式论坛
国民技术论坛
飞腾派开发者社区
创龙科技论坛
米尔电子
技术
Linux论坛
单片机学习小组
嵌入式学习小组
电子行业动态
工程资源中心
电磁兼容设计与整改
物联网技术
汽车电子技术论坛
氮化镓技术社区
HiHope开发者社区
高校
东莞理工学院电子协会
西安电子科技大学西电实验室
深圳大学电子协会
桂林电子科技大学机电工程协会
湘潭大学电子科技协会
名人
张飞硬件学习小组
韦东山Linux嵌入式课程社区
黄工无刷电机学习
MILL小眼睛FPGA小组
龙哥 Labview 学习群
淘贴
开源硬件项目分享
开发板免费试用
沁恒微CH32V307试用合集
芯昇RISC-V开发板试用合集
乐鑫ESP32-C3试用合集
活动
设计大赛
瑞萨RA4M2物联网网关设计挑战赛
华秋电子x全志在线开源硬件设计大赛
RT-Thread 创新设计大赛
星核计划-高云FPGA开发者计划
OpenHarmony成长计划学生挑战赛
RT-Thread全球巡回线下培训
国民技术N32开源移植挑战赛
开发板试用
【创客营】新品Vision Board开发板免费评测
龙芯2K0300蜂鸟开发板免费试用
米尔-STM32MP135开发板-入门级MPU设计平台
风火轮YY3568开发板免费体验
【新品试用】英飞凌PSoC 6 RTT开发板试用
正点原子STM32战舰V4开发板
【有奖评测】为昕原理图设计EDA软件免费试用
社区之星
杨永胜:兴趣加努力,嵌入式工程师最好的前进之路
谢小龙:五年嵌入式开发,一个“博大”+“精深”的老鸟
罗大信:从工程师到创始人,我的20年嵌入式经验
刘建华:如果不想虚度一生,那就学习一辈子
贺婷婷:不退则进,遇到问题面对它,你会登上新台阶
罗除博士:共同携手,助力鸿蒙生态冲破牢笼
官方活动
【有奖征文】赢千元现金!发文章、上传资料送壕礼
每日打卡活动,赢取OH定制礼品
RISC-V MCU 技术社区打卡活动
【有奖打卡活动】2023年打卡计划
【书单评测】27本电子工程书籍
【书籍评测】PADS PCB设计指南
【精选集合】野火鲁班猫创意氛围赛作品
技术峰会/沙龙
2024 KiCon Asia KiCad 用户大会
2023 电子工程师大会暨第三届社区年度颁奖
开放原子开源基金会OH技术峰会
电子设计与制造技术研讨会
PCB设计与制造技术研讨会
2022 OH主题线下技术沙龙
2022开放原子全球开源峰会
专栏
技术原创
从编程到应用——从零开始学ARM
基于STM32设计的数码相册
基于DWC2的USB驱动开发-IAD描述符详解
基于CW32L083的线控器方案设计
RISC-V内核RC遥控车拆解:空心杯电机+2.4G跳频控制
最新资讯
SK海力士2023年HBM3营收增长5倍
夺得多项第一!问界M7冬测成绩大翻身
ASML 2023年末爆单,中国贡献营收翻倍
谁能打造最强车型?从OTA看车企的智能化之争有多激烈
首个石墨烯功能半导体面世,硅基的陌路?
企业
推荐企业号
Aigtek安泰电子
斯丹麦德电子
张飞实战电子
芯佰微电子
其利天下技术
扬兴科技
飞凌嵌入式
米尔电子
RA生态工作室
生态平台
OpenHarmony生态平台
RISC-V生态平台
瑞芯微Rockchip生态平台
精选内容
大咖齐聚,飞凌嵌入式技术创新日活动
米尔NXP i.MX 93开发板免费评测试用
Docker容器安装及运行测试方案详解
用时钟频率精度测量电路进行时间校验
基于Realtek的智能语音服务解决方案
问答
年度榜单
2022年度TOP榜单——模拟技术论坛问答
2021年度TOP榜单——电路设计论坛问答
2021年度TOP榜单——电源技术论坛问答
2021年度TOP榜单——电机控制技术论坛问答
高手问答
电子老顽童带你看懂电路设计
资深产品硬件研发工程师,与你讨论电路设计!
layout leader工程师任工谈PCB设计
与搞电源小哥一起揭秘电源设计那些难点
下载
电子书
电源技术知识总结
常用电源设计技巧图解
开关电源噪声-EMC(上)
开关电源噪声-EMC(下)
凡亿电路-PCB封装设计指导白皮书
精华资料
龙芯生态白皮书
中国物联网操作系统市场研究白皮书
AIGC(GPT-4)赋能通信行业应用白皮书
OPPO 《6G:极简多能 构建移动的世界》白皮书
智慧充电桩物联网技术白皮书
常用软件
Altium Designer21.9.2软件安装包下载
Cadence SPB OrCAD Allegro 17.4安装包及补丁下载
MATLAB 2020软件安装包下载
PADS 软件下载
LabVIEW 软件下载
学院
课程
直播
开发板购买
更多
电子发烧友
电子新闻
电子电路
技术文库
行业应用
电子标签
资料下载
电子元器件
技术研讨会
在线研讨会
特色服务
企业号
硬声APP
发烧友APP
产品库
积分商城
VIP会员
签到
经验
淘贴
华秋智造
PCB计价
SMT计价
元器件采购
BOM计价
Layout计价
钢网计价
PCB下单助手
工程师工具
PCB在线检查
华秋CAM
datasheet查询
替代料查询
免费样品申请
在线计算工具
工程师专区
品牌厂商查询
华秋DFM
帖子
搜索历史
清空
搜索热词
本版
帖子
用户
发 帖
提问题
发文章
发资料
发讨论
发视频
草稿箱
登录/注册
完善资料让更多小伙伴认识你,还能领取
20
积分哦,
立即完善>
3天内不再提示
每日签到
发烧友10周年庆典,全网超值优惠来袭!千元现金券,下单抽奖赶紧参与》》
电子发烧友论坛
/
嵌入式论坛
/
嵌入式论坛
电路图及DIY
电源技术论坛
综合技术与应用
无线通信论坛
EDA设计论坛
测试测量论坛
招聘/交友/外包/交易/杂谈
官方社区
单片机/MCU论坛
ARM技术论坛
STM32/STM8技术论坛
嵌入式技术论坛
RISC-V技术论坛
瑞芯微Rockchip开发者社区
FPGA|CPLD|ASIC论坛
DSP论坛
/
边学边秀单片机4
[文章]
边学边秀单片机4
7788281
2012-10-27 22:27:13
4455
单片机
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
0
0
本帖最后由 7788281 于 2012-10-27 22:44 编辑
14、为S51板自制USB-ISP下载线
现在的笔记本包括台式机都渐渐地舍弃了并口、串口;很多网友也跟我说,台式没有并口了,下载线没法用了,让我帮他想想办法。看来做个USB-ISP下载线是势在必行了。
在网上搜了下,主要有两种方案,一种是用FT245串口芯片加ATMEGA8的方案,另一种是只用ATMEGA8进行USB串口协议的软件模拟和ISP下载全部完成。据说第一种稳定,但成本高,
电路
复杂,不便自制。我们还是本着低成本,简单易做的原则进行。就用单个M8来做。
好!废话少说,干活。在网上搜了一下找了个BUG少,易于自制的图。
在制做前首先要搞清楚几点,第一,这个USB下载线本身就是一A-V-R
单片机
,在制做完成后首先也得通过其它并或串口ISP下载线给它下载程序,这样它才能工作。第二先得大概了解一下这个A-V-R单机机M8的基本资料。这样才能对电路有个了解,从而便于调试。因此,你原先用的并口ISP下载线在这里还得起着关键的作用,可别扔掉啊!我图示一下这个过程先:
接下来按上述图的要求准备
元件
。
元件准备好后,先得检测下质量,电阻的阻值、发光管的极性、电容是否有短路。要测试下两个稳压管的稳压值是否正确。最最重要的是先把USB接口用延长线接到PC上,然后用万用表测一下正极在哪,做个标记,这样就能搞清楚了D+、D-的位置,也不会接反
电源
了。免得焊好后发现错了极性反复焊,焊盘很容易脱落,也避免接反烧了元件。(我开始用的是USB公头接口,后来发现在板子上吃不上劲,稍一用力很可能会松脱。所以换成母口了)
电路图我整理了一下,因为有的元件不需要,有的为了方便检查,避免漏连了线。
现在补上焊板图:1、底板焊盘图
2、跳线图:粉红色为正面跳线,绿色为背面连接导线。
下面是全图。供焊接时参考。
(上面三张图为2009.03.06补上)
焊接过程就没什么好说的了,不是
PCB
板,是洞洞板的,在事先大概做个布局(布局原则就是减短引长度,跳线尽量少。好像我做的跳线并不少哦!)然后就按照上面的电路图焊接,完成后如下图,感觉是不是还不错?:
再来张反面吧,有点惨不忍睹吧!
在调试前也还得先弄清几个问题:
第一、电源题:原先的并口下载线是靠S51板上来供电的,也就是说当你焊好你的USB-ISP板后给它装固件时,USB-ISP板得向原并口下载线供电,而固件装好后USB-ISP板就是靠PC的USB口向我们的USB-IS板供电了,而你以后的51实验板就不能向这个USB-ISP板供电了,否则PC和51实验板都向USB-ISP供电,那么电压不同就有可能烧坏PC口或元件的。因此J2跳线就是为了区别装固件和正常下载而使用的。装固件时另附电源加在USB-ISP上,J2短接,可以过J2口向原来的并口下载线供电。当正常使用时,USB-ISP板上的附加电源撤掉,由PC的USB口供电,将J2断开,隔离开USB-ISP板和51板电源。
J1是降速跳线,短接时慢速,在装固件时要求在慢速下。J3是M8复位跳线,装固件时要求M8在复位状态。正常使用时就断开这三个跳线了。
第二、ISP接口问题:得弄清下载接口的对应接线,MOSI、MISO、RST、SCK要一一对应不能弄错。也就是说你原先并口下载线的并口各功能线接到十针的ISP接口和USB-ISP下载线的接口要对得上。例如我的51板是自己做的,上面的十针下载接口是我自己随意接的没有按照什么标准。因此我做并口下载线时,就将并口下载线上的各功能线与51板上的一一对应,这样就能调试通。现在做USB-ISP下载线还是一样,得按照我自己的十针接口方式,只要各功能线准确无误地对上就好。
J1是降速跳线,短接时慢速,在装固件时要求在慢速下。J3是M8复位跳线,装固件时要求M8在复位状态。正常使用时就断开这三个跳线了。
不同的PC端下载软件对并口脚的定义是不同的,这一点一定要弄清楚,否则是不可能正常下载的。有的软件有配置文件,可以跟据你的要求设置并口的某个脚为什么功能。如ISPLAY 1.5。它的配置文件如图:
你可以通过修改这些MOSI、MISO、SCK、RST、OE、LE等功能输出的并口脚号以适应你的下载线。
我的原先并口下载线用的是官方的一张图:
它的配套PC端下载软件ISP-30A是不能自己设定并口引脚号的。界面如下图。
好!下面开始调试,检查USB-ISP下载板没有连错线或短路现象。将USB-ISP下载板的三个跳线短接,接上外加电源,测量电流为6mA,应该没问题。将原先的并口下载线的并口端接至PC,将十脚ISP接口端与USB下载板对接,测量并口板上的电压已正常。如下图:(我这是示意图,因为在房子里上PC光线不好,照得不清楚)
此时USB下载板上的发光管是不会亮的,因为它里面没有程序还无法运行。开始进行下载。在PC上运行ISPLAY1.5如图:
事先我将配置文件Pin_config.ini内的各功能线已修改为和我的并口下载线相同的脚号。在左下角的“程序设置”里选好那个配置文件。点击“检测器件”钮,但始终检测不到器件,如上图。我想我的并口下载线肯定是好的,一直在用啊!难道配置文件不起作用?或那个LE控制时序和我那个板上的要求不同?干脆用那个我一直使用的ISP-30A试试吧!于是将它运行。因为是要给ATMEGA8下载程序,所以在器件选项里选MEGA8。
果然,我点了下Read,居然能正常读取了,于是我点Open file然后选择网上下的那个11K大小的main.hex,点击Write接下来就是写程序和校验一切OK。然后点击Fuse Bytes(熔丝字节),在下图的SUT0和CKSEL0前点上勾,
然后回到主界面点Write LBs。当写完之后我把三个跳线一拔,绿色发光管已经亮起,说明M8的程序运行了。这样我的USB下载板的固件就算装好了。
将USB下载板从并口下载器上拔下,我去掉附加电源后将它到PC的USB口上,立即就发现了新USB设备,一切没有悬念,安装驱动程序一路正常(这部分软件的使用网上已写的很详细,我就不重复了),PC告诉我设备可以使用了。我将我的51板和USB下载线连上
运行PROGISP1.6.6
一阵狂喜过后我在“编程器及接口”下的选择框中选USBASP,在“选择芯片”里选AT89S51。
点击“芯片识别字”右边的RD钮,哦!可就是检测不到器件如下图:
弹出这个窗,说明USB下载线是正常的了,就是检测不到51目标板。莫非是ISP连线太长?我又做了根只有10CM的ISP连线,但状况依旧。唉!沮丧啊。休息休息,喝口水……
突然想起网上说起过用修改过的固件可以针对51板出现的Chip Enable Program Error。立即上网找来那个18K大小的USBISP.hex,重做刚才的下载工作,一切顺利,再运行PROGISP1.6.6
哈哈!检测到51器件了,
特征字不匹配,不管它了,先点击“是”。于是便试着点击“读出Flash”钮。成功!
我接着点“调入Flash”选择一个我以前的HEX文件,点击下面的自动,红色的发光管在不停地闪烁着,我开心啊!
然而在写完后校验时却总通不过,汗!
是下载线太长不稳定?就剩10CM长了,难道真的天都不可怜我吗?在一阵无助的胡乱操作中,突发奇想选AT89S52试试。
这一试不要紧呀!居然成功啦! 反复下载不同的程序,一切都OK。
再换上我那长40CM的ISP连线,反复下载程序试验,你猜怎么着?不要太稳定哦!
至此大功告成!
总结:
下载固件时,如果你原先的并口下载软件支持ATMEGA8。最好就用你一直使用的并口下载软件。这样可以先排除并口下载线上的问题。
遇到问题多试试几种操作,不要轻易放弃。
还有就是这个PROGISP1.66是不是有BUG?明明是S51,偏偏要选S52才能正常读写。还有那个ISPLAY1.5,估计不是配置文件不起作用就是那个LE的时序和我并口下载线上的要求不一样。后面抽空再找找原因。
谢谢大家捧场!哪位手痒也想做的给我留言,我会将全部资料发给你们。我在对驱动的安装和后面的下载写的较略是因为网上已把软件部分写的很细了,上网一搜“USB-ISP”就能搜到。好了!写的不够详尽之处请拍砖,我再加料啊!
我把M8各脚的电压值列出来,状态是烧写完HEX文件,拔掉短路帽,接上5V电源,但没接上PC。供大家参考一下。
D-………………3.2V、
D+………………0.1V、
M8①脚…………4.8V、
②③………………0V、
④………………0.1V、
⑤⑥………………0V、
⑦……………………5V、
⑧……………………0V、
⑨……………………0.8V、
⑩……………………0.8V、
11,12,13脚…………0V、
14脚………………0.1V、
15脚………………0.1V、
16,17,18,19脚……0V、
20,21脚………………5V、
22脚……………………0V、
23脚………………0.1V、
24脚……………………5V、
25,26,27,28脚……4.4V。
15、写给对制做并口ISP下载线有疑惑的朋友
一、器件的选用
制做并口ISP下载在网上有很多的电路和对应的PC端下载软件。很多人疑惑,不知该用哪张图,用哪个下载软件。我看了一下,采用的器件主要是74HC373、74HC541和74HC244。其实用哪个器件都可以,基本上用哪个软件也都可以使用。只要搞清了它们的并口引脚和控制线的控制方法。我先上这几个器件的图:
通过这几张图的逻辑和真值表可以看出它们的异同。
ISP下载线电路的实质也就是将PC端下载软件送出的4路串行编程信号通过4个缓冲器整形为TTL信号然后交给AT89S51的ISP口。只要把4路进入四路缓冲器的信号线接准确了,再把控制线的电平状态搞清接对了,就基本上成功大半了。
三个器件的基本接线原理图为:
1、74HC244
2、74HC541:
3、74HC373:
上面三张图的用法是一样的,可以使用同一种PC端下载软件,控制端都是采用低电平缓冲器导通,高电平截止。
而74HC373还可以采用高电平导通,低电平截止的方案,如下图:
上图的控制线由OE改为了LE控制,OE端接地,输出缓冲器长期导通。整个电路的控制取决于D锁存器的控制,高电平时导通,低电平锁存。
下面我们通过分析电路图来看看采用的是哪种方案:
图1:
上图采用的是74HC373,1脚的OE是接了地的,而LE是接了并口的第17脚。说明此方案是高电平控制导通的。
图2:
这张图采用的是74HC541,G1和G2连在一起接到了并口的第5脚。他采用的方案是低电平控制导通方式的。
我们再来看看PC端下载软件。
1、ISP-30a
上面这个软件是官方的一个ISP下载软件,它配套的是上面采用74HC541的那张ISP PROGAMMER INTERFACE的图。它不能按自己的要求设置并口引脚。只能是5、6、7、9、10、18脚分别输出BE、SCK、MOSI、RST、MISO、地。也就是说,只要你按照这几个并口引脚号接线,采用上面低电平导通方案的三种器件都可以的。
2、Easy_51Pro2.0,包括现在的ISPlay1.5
在这个软件的运行目录里有EasyISP.ini文件,它可以对各功能输出的并口引脚号根据自己的实际接线来设置。并且还可以设置LE的导通是高电平还是低电平,OE的导通是高电平还是低电平。总之,这些都可以随你控制。如下图:
就是说,你要是使用这个软件,那么你可以采用上面三种器件的所有四种方案,只要进行相应正确的设置就可以完成。
二、并口下载线的调试
有个并口调试软件对你制做ISP下载线是个很好的帮助,如下图:
利用这个并工具可以帮助你一步步完成制做ISP下载线的调试工作。
1、首先是检测PC上并口的好坏。很多人做好了下载线忙活了很多天才发现自己PC上的并口是坏的。现在有了并口调试器就可以,首先检测你的并口是否是好的。分别在上面输出框的1-9、14、16、17 脚前点上勾。并用万用表测量对应的并口脚,当勾上时为高电平(5v),去掉勾为低电平(0v)。对于10-13、15这些只读脚的测量,首先按下面的“开始”钮。这时在输出框的白色图示区域不断显示这些引脚的电平状态,例如:如果你把用并口11脚用导线去触碰18-25脚这些接地脚,你会在图示区内看到该脚电平的变化。如下图:
这样你便知道了你并口上你每一个引脚的输入、输出是否正常。
2、当你做好了ISP下载线后,把ISP下载线上的器件接上5v电源,并口接到PC的并口上,然后打开这个并口调试软件。例如我们就用上面的第一张ISP下载线原理图,
这张图的控制线是LE高电平导通控制,控制线在并口上是17脚。其它MOSI,MISO,SCK,RST分别对应并口的14、15、1、16脚。这样你打开PC上的并口调试软件,先把17脚前点上钩。用万用表测量74HC373的第11脚(是器件的第11脚)是否已是高电平(5v),然后再把软件输入框的14脚前点上勾(一会儿再去掉勾),测量J2的MOSI端是否已随调试器点选的变化发生高低电平的变化。依次将几个引脚都测量一下。注意:MISO的意思是主器件接收,从器件发送信号。所以测量第15脚时,是把J2的MISO端用一个1K的电阻接地或接电源Vcc,观查调试器的输入框的第15脚的状态是否有变化(先要按下“开始”钮)。这样测试后,ISP电路的问题就基本完成,然后将J2的MOSI、MISO、SCK、RST分别正确的接到AT89S51的P1.5、P1.6、P1.7、和RST脚上。将ISP下载线的Vcc和GND和51板上的Vcc和GND接好。就可以连上PC用Easy_51Pro_v2.0来调试了,当然调试前还是要把Easy_pro目录里EasyISP.ini设置文件先设置正确了。这样你的并口ISP下载线就不离十了。注意,从J2到51板的连线要尽量短些,最好不要超过20CM。
再上张我做过几块下载线的图,来自于上面那张ISP PROGAMMER INTERFACE的图修为用74HC373:
电路板图:
实物图:
最近网友
成都cd713
提出说按我的电路做了,测量都是正确的,但用Easy51Pro2.0就是找不到器件,我就赶紧进行测试,真的是这样,我用ISP-30a和ISPlay1.5测试都是很稳定快速的。ISPlay1.5可以将速度调到100%也很稳定,但用Easy51Pro2.0就是检测不到器件。而ISPlay1.5是继Easy51Pro2.0后面出的并口版本,说明Easy51Pro在并口下载时的确是存在问题的。希望新手学习的时候留意,以免多走弯路。我上两张用ISP-30a和ISPlay1.5检测器件的图网友们,如需要的可以对照着从网上下载或向我索取。
要注意的是:
电脑并口地址要为378,模式为EPP或ECP都可以,中断号7、5都可以。尤其是笔记本上的并口,很多缺省状态下的并口地址不是378,要在BIOS中修改一下。
这张是ISP-30a界面和检测到AT89S52的特征字的界面。
这张是用ISPlay1.5检测到AT89S52的特征字界面。
这张是ISPlay1.5的设置
16、谈谈AT89S51的上拉电阻问题
很多网友都问我AT89S51的P0口为什么要接一个上拉电阻。我就用一个篇幅来说一说
P0口和其它三个口的内部电路是不同的,如下图
P0口是接在两个三极管D0和D1之间的,而P1-P3口的上部是接一个电阻的。P0口的上面那个三极管D0是在进扩展存储器或扩展总线时使用MOVX指令时才会控制它的导通和截止,在不用此指令时都是截止的。在平常我们使用如:P0_1=0 P0_1=1这些语句时控制的都是下面那个三极管D1。
我们先假设P1口接一个74HC373,来看一看它的等效图
当AT89S51的P1口上接了74HC373后就等于接了一个负载,如上图右边。一般来说这些数字电路的输入阻抗都很大,都在几百K到上兆欧姆,而P1口内的电阻R一般在几十K以内。
如上图,当我们发出指令P1=0时,三极管D导通,见中间的等效图,这时P1点的电位为0。
当发出P1=1的指令后,三极管D截止,见右边等效图,因为Rx的阻值要比R的阻值大得多,因此P1点的电位是接近电源电压的。即高电平。
我们再来看看P0口接负载时的图
当P0=0时,等效图是中间的,三极管D1导通,P0点的电位为0。
而当P0=1时,等效图是右边的,三极管D1截止,而上面的三极管D0始终是截止的,这样P0点就等效于悬空了,它处在不稳定状态,P0点又是RX的高阻抗输入点,很容易受到外界和周围电路的干扰从而直接影响到74HC373的输出状态。因此就得加上个电阻。如下图
加上电阻Rc后,电路的状态就和P1口一样了,这个电阻Rc就是上拉电阻。
但你如果只是为了让P0口驱动个发光管,那电路可以直接简化成下图那样。S51内部的电流最好不超过15mA,如果发光管的电压为2.2V那电阻就是(5-2.2)÷15=0.18K,也就是180欧姆。
当P0=0时P0点为低电位,发光管亮起,流过D1的电流约为15mA。
当P0=1时,P0点为悬空,但发光管和180欧电阻都是低阻抗元件,P点电位就为高电位,再说也无任何输出影响,因此这样电路是可以的。
17、模数转换IC ADC0809的使用制做之一……基础知识
我们重在实际制做,太罗嗦的内容我就不说了,只讲些跟制做有关的最精炼的知识。
ADC0809是可以将我们要测量的模拟电压信号量转换为数字量从而可以进行存储或显示的一种转换IC。
下面是它的管脚图和逻辑图:
管脚功能说明:
IN0-IN7:模拟量输入通道。就是说它可以分时地分别对八个模拟量进行测量转换。
ADDA-C:地址线。也就是通过这三根地址线的不同编码来选择对哪个模拟量进行测量转换。
ALE:地址锁存允许信号。在低电平时向ADDA-C写地址,当ALE跳至高电平后ADDA-C上的数据被锁存
START:启动转换信号。当它为上升沿后,将内部寄存器清0。当它为下降沿后,开始A/D转换。
D0-D7:数据输出口。转换后的数字数据量就是从这输出给S52的。
OE:输出允许信号,是对D0-D7的输出控制端,OE=0,输出端呈高阻态,OE=1,输出转换得到的数据。
CLOCK:时种信号。ADC0809内部没有时钟电路,需由外部提供时钟脉冲信号。一般为500KHz
EOC:转换结束状态信号。EOC=0,正在进行转换。EOC=1,转换结束,可以进行下一步输出操作
REF(+)、REF(-):参考电压。参考电压用来与输入的模拟量进行比较,作为测量的基准。一般REF(=)=5v REF(-)=0V。
下面我先给出ADC0809的时序图再说说它的工作过程:
它的工作过程是这样的,
①在IN0-IN7上可分别接上要测量转换的8路模拟量信号。有人问了,可不可以只接一路?我就只想测一个模拟信号。当然可了,能挑一百斤的担子,让你只挑十斤那还不小菜。废话太多。。STOP。
②将ADDA-ADDC端给上代表选择测量通道的代码。如000(B)则代表通道0;001(B)代表通道1;111则代表通道7。
③将ALE由低电平置为高电平,从而将ADDA-ADDC送进的通道代码锁存,经译码后被选中的通道的模拟量送给内部转换单元。
④给START一个正脉冲。当上升沿时,所有内部寄存器清零。下降沿时,开始进行A/D转换;在转换期间,START保持低电平。
⑤EOC为转换结束信号。在上述的A/D转换期间,可以对EOC进行不断测量,当EOC为高电平时,表明转换工作结束。否则,表明正在进行A/D转换。
⑥当A/D转换结束后,将OE设置为1,这时D0-D7的数据便可以读取了。OE=0,D0-D7输出端为高阻态,OE=1,D0-D7端输出转换的数据。
说明:ADC0809的转换工作是在时钟脉冲的条件下完成的,因此首先要在CLOCK端给它一个时钟信号,说明书上给出了可以接入的脉冲信号频率是在10KHz-1280KHz,典型值是640KHz。
时序图上的teoc时长为,从START上升沿开始后的8个时钟同期再加2微秒。这一点得注意,因为当START脉冲刚结束进入转换工作时,EOC还没有立即变为低电平而是过了8个时钟周期后才进入低电平的,所以再给出START脉冲后最好延时一会再进行EOC的检测。
一个通道的转换时间一般为64个时钟周期,如时钟频率为640KHz时,时钟周期为1.5625微秒,一个通道的转换时间则为1.5625×64=100微秒,那么1秒种就可以转换1000000÷100=10000次。
下面我们给出一个教材上经典的接线图再说明它的利弊:
这是个老教材上的图纸,网络查查也大都是这样的图,它的时钟脉冲是通过C51的ALE经过2分频得到的,它一般是指,当C51的晶振为6MHz时,ALE输出1MHz的脉冲,经2分频后得到500KHz。但这对我们现在S52上使用12MHz晶振时就不适用了。现在S52的ALE输出的脉冲为2MHz,2分频后也有1MHz。
网上查了一下,补救的办法基本上是用T0时钟来模拟出个10KHz的脉冲信号。这是ADC0809时钟脉冲允许的最小值。也的确,一般我们用不着那么快的转换速度,所以给个10KHz也够了,还省掉了一个分频器。不过这也基本上是用T0能模拟出的最高频率了,
***it CLK=P3^3;
void main(void)
{
ET0=1;
EA=1;
TMOD=0X12;
TH0=216;
TL0=216;
TR0=1;
...
}
void t0(void) interrupt 1
{
CLK=~CLK;
}
从上面的程序可以看出,每40个时钟脉冲就发生一次中断。S51基本上也就一直忙着中断处理了。中断太频繁,占资源。
我们来看看D0-D7输出口,它是只能输出不能写入的,而ADDA-ADDC又是只能写入而不能输出的,因此我们可以将74HC373也省掉。同样74LS02也自然可以不用了。
这样我们省去了所有的其它门电路IC,也包括那个HC373。
简化电路为的是使ADC0809在用最少的其它门电路而使它工作,让我们能专注学习ADC0809是如何工作过程的。现在我来说说如何更好的模拟出这个时钟。我们现在用的都是S52芯片了,不知道大家用过里面的T2时钟吗?它有个时钟输出功能,如下图:
根据公式,用12MHz的晶振,就可以在P1.0输出45Hz----3MHz频率的时钟脉冲,要输出500KHz的脉冲还不小意思呀。
我试验了一下T2时钟,很好用:
/*这个程序让AT89S52的T2时钟从P1.0口输出45HZ方波脉冲,P1.0口接到P3.4口作为
T0的外部计数,通过T0的时钟中断在P2口输出。T0每45个脉冲就中断一次,也就是刚好一秒一次*/
#include
void main()
{
/* T2 设置 */
TR2=0x0;
T2MOD=0x02; //0010(B) 设置T2为P1.0口输出方波模式
C_T2=0; //用内部时钟计数
TL2=0x0;
TH2=0x0;
RCAP2L=0x0;
RCAP2H=0x0;
/* T0 设置 */
TMOD=0x6; //0110(B),T0为外部计数模式,方式为2 (8位自动装载)
EA=1;//总中断允许
ET0=1;//T0中断允许
TH0=256-45;
TL0=256-45;
/*start
ti
mer */
TR0=1; //启动T0时钟
TR2=1; //启动T2时钟
do
{
}while(1);
}
void t0(void) interrupt 1//T0中断服务程序
{
P2=~P2;
}
其结果P1.0输出45Hz的脉冲,T0的中断是以P1.0的45个脉冲发生一次的。P2口的数码管以一秒的时间亮,一秒时间熄灭的在闪烁,T2定时器看来很好用。达到要求。
好!上面的程序只是试试S52的T2定时器是否可正常使用。言归正传我们还是来谈ADC0809的电路:见下图:
电路图比较简单,我就不另画了,就将这张电图板图贴上。D0-D7是数据读取位,同时在低三位D0-D2上也分别接上了A、B、C通道选择位。CLK为ADC0809所需的时钟脉冲,我们将要用T2来给出时钟脉冲,因此我们必须把CLK接在S52的P1.0上。这样OE、EOC、ST就分别顺着接P1.1、P1.2、P1.3。上面除了ADC0809,就接了个电源指示用的LED和两个电源滤波电容。下面是做好后的实物图:
下一部分我们讲实际程序和具体调试。。。。
18、模数转换IC ADC0809的使用制做之二……实际制做
上一篇我们已经讲了ADC0809的原理与简化电路,仔细检查电路的正确性,尤其不能有短路现象。现在我们将它实际接上S52板子,静态电流为4mA,其中LED用了1mA,也就是说ADC0809静态电流为3mA左右。
将ADC0809板上S52板,数据口D0-D7我接的是P0,CLK接P1.0,OE、EOC、ST-ALE分别接P1.1、P1.2、P1.3,Vcc和GND接S52板上的电源和地。
下面讲程序:
程序分为三个部分:主程序、LCD显示、ADC0809转换。
左边的项目框里有三个程序文件:主程序ADC0809m.C、LCD显示程序12864put.c、ADC0809转换程序ADC0809C.asm。嗯?。。。最后一个文件是汇编文件?是的!KEIL允许同时加入C程序和汇编程序一块儿编译。我们先来看主程序:
#include
#define uchar unsigned char
extern void LcmClear( void ); //清屏,外部函数
extern void LcmInit( void ); //初始化,外部函数
extern void LcmPutstr( uchar row,uchar y,uchar * str ); //在设定位置显示字符串
extern uchar adc0809conv(void); //
uchar * uchartostr(unsigned char unm); //将char值转成字符串
uchar str[4]; //定义四个字节的数组,用来存放将数值转成的字符
//****************************
//将char值转成字符串函数
//****************************
uchar * uchartostr(uchar unm)
{
uchar x00,xx,x0,x,n; //定义百位,十位,个位变量
x00=unm/100;
xx=unm%100;
x0=xx/10;
x=xx%10;
n=0;
if(x00!=0)
{ str[n]=x00+48; //值加48即为字符
n++;
}
if(!(x00==0&x0==0))
{ str[n]=x0+48;
n++;
}
str[n]=x+48;
n++;
str[n]='