跟我学51单片机_一_单片机最小系统组成与I_O输出控制.pdf
-
资源ID:74647857
资源大小:999.20KB
全文页数:5页
- 资源格式: PDF
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
跟我学51单片机_一_单片机最小系统组成与I_O输出控制.pdf
制作入门 FOLLOW ME732011.01跟我学51单片机(一)单片机最小系统组成与I/O输出控制单片机是一门实践性较强的技术,很多初学者在学习单片机技术开发的时候往往一头雾水,不知何从下手。为此,笔者结合自己使用单片机多年的经验,特意设计了单片机开发所需的 Study-c 整机和硬件套件,并结合套件精心编写了单片机从入门到精通系列教程。通过讲述单片机原理、电路设计、应用开发软件工具、编写实验实例让读者全面接触单片机技术。教程编排上由浅入深,循序渐进,内容力求完整、实用、趣味并存,使读者在轻松愉快的学习过程中逐步提高单片机软硬件综合设计水平。一、内容提要本讲主要向大家介绍 51 系列单片机的最小系统的实现并通过编写程序来实现对单片机 IO 口的输出控制。以点亮外部连接的 LED(发光二极管)为例,简要的介绍单片机的原理、最小系统的组成,并通过简单的 C51 程序设计来讲述编译软件 Keil的使用并下载 Hex 文件烧写单片机。二、原理简介在 了 解 原 理 之 前,首 先 让 我 们 思 考 一 个 问题,什么是单片机,单片机有什么用?这是一个有意思的问题,因为任何人都不能给出一个被大家都认可的概念,那到底什么是单片机呢?普遍来说,单片机又称单片微控制器,是在一块芯片中集成了 CPU(中央处理器)、RAM(数据存储器)、ROM(程序存储器)、定时器/计数器和多种功能的 I/O(输入/输出)接口等一台计算机所需要的基本功能部件,从而可以完成复杂的运算、逻辑控制、通信等功能。在这里,我们没必要去找到明确的概念来解析什么是单片机,特别在使用 C 语言编写程序的时,不用太多的去了解单片机的内部结构以及运行原理等。从应用的角度来说,通过从简单的程序入手,慢慢的熟悉然后逐步深入精通单片机。在简单了解了什么是单片机之后,然后我们来构建单片机的最小系统,单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分,也可理解为是用最少的元件组成的单片机可以工作的系统。对 51 系列单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路、输入/输出设备等(见图 1)。图1 单片机最小系统框图三、电路详解依据上文的内容,设计 51 系列单片机最小系统见图 2。下面就图 2 所示的单片机最小系统各部分电路进行详细说明。1.时钟电路在设计时钟电路之前,让我们先了解下 51 单作者赵 亮制作入门FOLLOW ME74片机上的时钟管脚:XTAL1(19 脚):芯片内部振荡电路输入端。XTAL2(18 脚):芯片内部振荡电路输出端。XTAL1 和 XTAL2 是独立的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。图 2 中采用的是内时钟模式,即采用利用芯片内部的振荡电路,在 XTAL1、XTAL2 的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡。一般来说晶振可以在 1.2 12MHz 之间任选,甚至可以达到 24MHz 或者更高,但是频率越高功耗也就越大。在本实验套件中采用的 11.0592M 的石英晶振。和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。当采用石英晶振时,电容可以在 20 40pF 之间选择(本实验套件使用 30pF);当采用陶瓷谐振器件时,电容要适当地增大一些,在 30 50pF 之间。通常选取33pF 的陶瓷电容就可以了。另外值得一提的是如果读者自己在设计单片机系统的印刷电路板(PCB)时,晶体和电容应尽可能与单片机芯片靠近,以减少引线的寄生电容,保证振荡器可靠工作。检测晶振是否起振的方法可以用示波器可以观察到 XTAL2 输出的十分漂亮的正弦波,也可以使用万用表测量(把挡位打到直流挡,这个时候测得的是有效值)XTAL2 和地之间的电压时,可以看到 2V 左右一点的电压。2.复位电路在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。MCS-5l 系列单片机的复位引脚 RST(第 9 管 脚)出 现 2个机器周期以上的高电平时,单片机就执行复位操作。如果 RST 持续为高电平,单片机就处于循环复位状态。复位操作通常有两种基本形式:上电自动复位和开关复位。图 2 中所示的复位电路就包括了这两种复位方式。上电瞬间,电容两端电压不能突变,此时电容的负极和 RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。随之+5V电源给电容充电,电阻上的电压逐渐减小,最后约等于 0,芯片正常工作。并联在电容的两端为复位按键,当复位按键没有被按下的时候电路实现上电复位,在芯片正常工作后,通过按下按键使 RST管脚出现高电平达到手动复位的效果。一般来说,只要 RST 管脚上保持 10ms 以上的高电平,就能使单片机有效的复位。图中所示的复位电阻和电容为经典值,实际制作是可以用同一数量级的电阻和电容代替,读者也可自行计算 RC 充电时间或在工作环境实际测量,以确保单片机的复位电路可靠。3.EA/VPP(31 脚)的功能和接法51 单片机的 EA/VPP(31 脚)是内部和外部程序存储器的选择管脚。当 EA 保持高电平时,单片机访问内部程序存储器;当 EA 保持低电平时,则不管是否有内部程序存储器,只访问外部存储器。图2 51系列单片机最小系统RS110KVCCD11KR1Y111.0592MC230pFC330pFC1S1Reset10KR9GNDGNDGNDVCCVCCP0.0(AD0)39P1.01P0.1(AD1)38P1.12P0.2(AD2)37P1.23P0.3(AD3)36P1.34P0.4(AD4)35P1.45P0.5(AD5)34P1.56P0.6(AD6)33P1.67P0.7(AD7)32P1.78P3.2(INT0)12P2.0(A8)21XTAL119P2.1(A9)22P3.3(INT1)13P2.2(A10)23P2.3(A11)24P3.0(RXD)10P2.4(A12)25P3.1(TXD)11P2.5(A13)26P3.4(T0)14P2.6(A14)27P3.5(T1)15P2.7(A15)P3.6(WR)16P3.7(RD)17PSEN29XTAL218RST9VCC40GND20ALE/PROG30EA/VPP31U1STC/AT89X5X制作入门 FOLLOW ME752011.01对于现今的绝大部分单片机来说,其内部的程序存储器(一般为 flash)容量都很大,因此基本上不需要外接程序存储器,而是直接使用内部的存储器。在本实验套件中,EA 管脚接到了 VCC 上,只使用内部的程序存储器。这一点一定要注意,很多初学者常常将 EA 管脚悬空,从而导致程序执行不正常。4.P0 口外接上拉电阻51 单片机的 P0 端口为开漏输出,内部无上拉电阻(见图 3)。所以在当做普通 I/O 输出数据时,由于 V2 截止,输出级是漏极开路电路,要使“1”信号(即高电平)正常输出,必须外接上拉电阻。另外,避免输入时读取数据出错,也需外接上拉电阻。在这里简要的说下其原因:在输入状态下,从锁存器和从引脚上读来的信号一般是一致的,但也有例外。例如,当从内部总线输出低电平后,锁存器 Q 0,Q 1,场效应管 V1 开通,端口线呈低电平状态。此时无论端口线上外接的信号是低电平还是高电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入端口引脚上的信号。又如,当从内部总线输出高电平后,锁存器 Q 1,Q 0,场效应管 V1 截止。如外接引脚信号为低电平,从引脚上读入的信号就与从锁存器读入的信号不同。所以当 P0 口作为通用 I/O 接口输入使用时,在输入数据前,应先向 P0 口写“1”,此时锁存器的Q端为“0”,使输出级的两个场效应管 V1、V2 均截止,引脚处于悬浮状态,才可作高阻输入。总结来说:为了能使 P0 口在输出时能驱动NMOS 电路和避免输入时读取数据出错,需外接上拉电阻。在本实验套件中采用的是外加一个 10K 排阻。此外,51 单片机在对端口 P0P3 的输入操作上,为避免读错,应先向电路中的锁存器写入“1”,使场效应管截止,以避免锁存器为“0”状态时对引脚读入的干扰。5.LED 驱动电路细心的读者可能已经发现,在最小系统中,发光二极管(LED)的接法是采取了电源接到二极管正极再经过 1K 电阻接到单片机 I/O 口上的(见图4 中的接法 1)。为什么这么接呢?首先我们要知道LED 的发光工作条件,不同的 LED 其额定电压和额定电流不同,一般而言,红或绿颜色的 LED 的工作电压为 1.7V2.4V,蓝或白颜色的 LED 工作电压为 2.74.2V,直径为 3mm LED 的工作电流2mA10mA。在这里采用红色的 3mm 的 LED。其次,51 单片机(如本实验板中所使用的 STC89C52单片机)的 I/O 口作为输出口时,拉电流(向外输出电流)的能力是 A 级别,是不足以点亮一个发光二极管的。而灌电流(往内输入电流)的方式可高达 20mA,故采用灌电流的方式驱动发光二极管。当然,现今的一些增强型单片机,是采用拉电流输出(接法 2)的,只要单片机的输出电流能力足够强即可。另外,图 4 中的电阻为 1K 阻值,是为了限制电流,让发光二极管的工作电流限定在2mA10mA。四、程序设计在单片机编程语言上,有 C 语言和汇编两种选择。本系列教程采用 C 语言编写程序,在此对语言和汇编语言在进行单片机开发时进行下简单比较,汇编语言面向硬件,要求对硬件的特性如寄存器之类的比较熟悉,执行效率高,但可读性和移植 2 1&D Q CLK 锁存器 读锁存器 写锁存器 内部总线 读引脚 地址/数据 控制 Vcc GND P0.X V2 V1 4 3 MUQ 图3 P0端口的1位结构图4 LED的接法 1KVCCIOIO1K接法1接法2制作入门FOLLOW ME76性差,不同的单片机之间的程序不能通用,例如学会了 51 单片机的汇编指令,却没法用到 AVR 单片机上。语言面向过程,可读性和移植性很好,效率要比汇编低一些。对于刚接触单片机的人来说,学习这两种语言是一样的,但在以后的开发效率上,C 语言的优势就体现出来了,其可以几乎完全不改动的情况下移植,大大提高了开发速度。控制发光二极管 D1 闪烁的 C 语言源程序#include (1)#define led P0_0 (2)void delay(unsigned int d_time);(3)void main(void)(4)while(1)(5)led=1;(6)delay(20000);(7)led=0;(8)delay(20000);(9)void delay(unsigned int d_time)(10)for(;d_time0;d_time-);(11)1.程序详细说明(1)头文件包含。程序接下来调用的 P0_0 就是该头文件中定义好的一个寄存器地址。在对单片机内部的寄存器操作之前,应申明其来处,有兴趣的读者可以看看 AT89X52.h 文件中的内容。(2)宏定义 led,便于直观理解也便于程序修改,将 P0_0 口命名为 led,这样在程序中就可以用 led代替 P0_0 口进行操作。(3)延时函数声明。函数在调用之前必须进行声明,由于函数定义放在主函数之后,所以在主函数之前对延时函数进行了声明。(4)主函数入口。主函数不传递参数也不返回值。(5)死循环。(6)输出高电平,led 不亮。(7)延时一段时间,以便人眼能够直观看到。(8)输出低电平,led 点亮。(9)延时一段时间。(10)延时函数定义。(11)for 语句循环延时。2.程序流程图与实验现象程序流程如图 5 所示。经编译软件(keil)编译,生成单片机烧写文件,然后就可下载到单片机内部运行了,硬件电路板如图 6 所示,本实验板上用的是 STC89C52RC,可以用通过板载 USB 转串口烧写程序。故将 USB 线(本实验套件中有)连接电脑和实验板。供电电源可以从 USB 取,也可以从外部电源取电。冷启动,即先点击下载,然后再上电。下载程序到单片机内运行后,可以看到实验板上 P0_0 口外接的 LED 灯(D1)一亮一灭的闪烁。图5 程序流程图 图6 硬件电路板图五、总结本讲主要介绍了 51 单片机最小系统的设计以及编写第一个简单的程序。从过该实验,可以掌握单片机的开发流程,从而快速入门。在该讲中应该注意几个问题:1.本讲座中采用 C 语言编写程序,因为 C 语言的可读性和可移植性强。若读者没有学过 C 语言,则应去了解和掌握相应的 C 语言知识。C 语言易学易用,相信很快就能熟练。程序开始熄灭LED延时点亮 LED延时我的制作故事 MY STORY772011.012.程序编译软件采用的是 Keil。限于篇幅的原因,在这里就不对其进行讲述,如果读者有对其不明白的地方,可以到本刊论坛的单片机版面,作者制作了一个详细的 Keil 入门教程。我们通过 Keil编译程序,最终生成烧写单片机的 Hex 代码文件。Keil 软件界面如图 7 所示,中间空白区域为代码区,左侧为项目列表,最下面为消息窗口。3.本实验板上所用的 STC 单片机通过串口下载程序。其上位机软件界面如图 8 所示(推荐使用 V3.1 版本,最新版本可以到 STC 主页上下载:http:/www.mcu- File”按钮浏览找到所生成要烧写的 Hex 文件后,单片机断电,点击“下载”按钮,单片机上电,程序就可下载到单片机中了。4.产品组件读者如果按照该讲内容进行理解并实践的话,可以说单片机就算入门了。下一讲将进一步深入,将要介绍单片机内部定时器和中断系统,敬请期待。本刊为方便用户学习,特为本文答疑解惑,用户可直接发离线文件到 QQ:1320160388本文套件和源代码请联系本刊编辑部:北京海淀区上地十街辉煌国际广场 1 号楼 1708 室,邮编:100085 电话:010-59713435,传真:010-59713453 联系人:虞小姐 图7 Keil软件开发界面图8 STC烧写软件界面一段有意义的经历I&Robocon我在高考报考中国科学技术大学的时候,第一志愿选择的是“机械设计及其自动化”系,当时这个专业在中国科学技术大学并不算热门专业,但是我非常喜欢机械,喜欢想象和创造作品,喜欢那些神奇巧妙的结构、巧夺天工的作品。在我读大学二年级的时候,听说学校举办校内机器人大赛,便毫不犹豫地报名参加了。虽然那一次比赛结果并不理想,但我却产生了一种满足感,因为这是第一次让自己的想法得到了实现。与机器人的第一次亲密接触是加入机器人俱乐部之后,那是大学三年级的时候,这是我在大学学习期间的一次非常有意义的决定,这一段充实有趣的经历,给我留下了美好的回忆作者刘 方 图1 2008年北京机器人比赛,这是我们Robocon团队END