单片机最小系统组成与I/O输出控制

发布者:atech123最新更新时间:2012-08-08 来源: 21ic 关键字:单片机  最小系统组  输出控制 手机看文章 扫描二维码
随时随地手机看文章

单片机是一门实践性较强的技术,很多初学者在学习单片机技术开发的时候往往一头雾水,不知何从下手。为此,笔者结合自己使用单片机多年的经验,特意设计了单片机开发所需的Study-c 整机和硬件套件,并结合套件精心编写了单片机从入门到精通系列教程。通过讲述单片机原理、电路设计、应用开发软件工具、编写实验实例让读者全面接触单片机技术。教程编排上由浅入深,循序渐进,内容力求完整、实用、趣味并存,使读者在轻松愉快的学习过程中逐步提高单片机软硬件综合设计水平。

一、内容提要

本讲主要向大家介绍51 系列单片机的最小系统的实现并通过编写程序来实现对单片机IO 口的输出控制。以点亮外部连接的LED(发光二极管)为例,简要的介绍单片机的原理、最小系统的组成,并通过简单的C51 程序设计来讲述编译软件Keil的使用并下载Hex 文件烧写单片机。

二、原理简介

在了解原理之前, 首先让我们思考一个问题,什么是单片机, 单片机有什么用? 这是一个有意思的问题,因为任何人都不能给出一个被大家都认可的概念,那到底什么是单片机呢? 普遍来说, 单片机又称单片微控制器, 是在一块芯片中集成了CPU( 中央处理器)、RAM( 数据存储器)、ROM( 程序存储器)、定时器/ 计数器和多种功能的I/O( 输入/ 输出) 接口等一台计算机所需要的基本功能部件,从而可以完成复杂的运算、逻辑控制、通信等功能。在这里,我们没必要去找到明确的概念来解析什么是单片机,特别在使用C 语言编写程序的时,不用太多的去了解单片机的内部结构以及运行原理等。从应用的角度来说,通过从简单的程序入手,慢慢的熟悉然后逐步深入精通单片机。

在简单了解了什么是单片机之后,然后我们来构建单片机的最小系统,单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分,也可理解为是用最少的元件组成的单片机可以工作的系统。对51 系列单片机来说, 最小系统一般应该包括: 单片机、时钟电路、复位电路、输入/ 输出设备等(见图1)。

图1 单片机最小系统框图
图1 单片机最小系统框图

三、电路详解

依据上文的内容,设计51 系列单片机最小系统见图2。

图2 51系列单片机最小系统
图2 51系列单片机最小系统[page]

下面就图2 所示的单片机最小系统各部分电路进行详细说明。

1. 时钟电路

在设计时钟电路之前,让我们先了解下51 单片机上的时钟管脚:

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 保持低电平时,则不管是否有内部程序存储器,只访问外部存储器。

对于现今的绝大部分单片机来说,其内部的程序存储器(一般为flash)容量都很大,因此基本上不需要外接程序存储器,而是直接使用内部的存储器。

在本实验套件中,EA 管脚接到了VCC 上,只使用内部的程序存储器。这一点一定要注意,很多初学者常常将EA 管脚悬空,从而导致程序执行不正常。

4. P0 口外接上拉电阻

51 单片机的P0 端口为开漏输出,内部无上拉电阻(见图3)。所以在当做普通I/O 输出数据时,由于V2 截止,输出级是漏极开路电路,要使“1”信号(即高电平)正常输出,必须外接上拉电阻。

图3 P0端口的1位结构
图3 P0端口的1位结构

另外,避免输入时读取数据出错,也需外接上拉电阻。在这里简要的说下其原因:在输入状态下,从锁存器和从引脚上读来的信号一般是一致的,但也有例外。例如,当从内部总线输出低电平后,锁存器Q = 0, Q = 1,场效应管V1 开通,端口线呈低电平状态。此时无论端口线上外接的信号是低电平还是高电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入端口引脚上的信号。又如,当从内部总线输出高电平后,锁存器Q = 1, Q = 0,场效应管V1 截止。如外接引脚信号为低电平, 从引脚上读入的信号就与从锁存器读入的信号不同。所以当P0 口作为通用I/O 接口输入使用时,在输入数据前,应先向P0 口写“1”,此时锁存器的Q 端为“0”,使输出级的两个场效应管V1、V2 均截止,引脚处于悬浮状态,才可作高阻输入。

总结来说:为了能使P0 口在输出时能驱动NMOS 电路和避免输入时读取数据出错,需外接上拉电阻。在本实验套件中采用的是外加一个10K 排阻。此外,51 单片机在对端口P0—P3 的输入操作上,为避免读错,应先向电路中的锁存器写入“1”,使场效应管截止,以避免锁存器为“0”状态时对引脚读入的干扰。

[page]

5. LED 驱动电路

细心的读者可能已经发现,在最小系统中,发光二极管(LED)的接法是采取了电源接到二极管正极再经过1K 电阻接到单片机I/O 口上的(见图4 中的接法1)。为什么这么接呢?首先我们要知道LED 的发光工作条件,不同的LED 其额定电压和额定电流不同,一般而言,红或绿颜色的LED 的工作电压为1.7V~2.4V,蓝或白颜色的LED 工作电压为2.7~4.2V, 直径为3mm LED 的工作电流2mA~10mA。在这里采用红色的3mm 的LED。其次,51 单片机(如本实验板中所使用的STC89C52单片机)的I/O 口作为输出口时,拉电流(向外输出电流)的能力是μA 级别,是不足以点亮一个发光二极管的。而灌电流(往内输入电流)的方式可高达20mA,故采用灌电流的方式驱动发光二极管。当然,现今的一些增强型单片机,是采用拉电流输出(接法2)的,只要单片机的输出电流能力足够强即可。另外,图4 中的电阻为1K 阻值,是为了限制电流,让发光二极管的工作电流限定在2mA~10mA。

图4 LED的接法
图4 LED的接法

四、程序设计

在单片机编程语言上,有C 语言和汇编两种选择。本系列教程采用C 语言编写程序,在此对C语言和汇编语言在进行单片机开发时进行下简单比较,汇编语言面向硬件,要求对硬件的特性如寄存器之类的比较熟悉,执行效率高,但可读性和移植性差,不同的单片机之间的程序不能通用,例如学会了51 单片机的汇编指令,却没法用到AVR 单片机上。C语言面向过程,可读性和移植性很好,效率要比汇编低一些。对于刚接触单片机的人来说,学习这两种语言是一样的,但在以后的开发效率上,C 语言的优势就体现出来了,其可以几乎完全不改动的情况下移植,大大提高了开发速度。

控制发光二极管D1 闪烁的C 语言源程序:

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 程序流程图
图5 程序流程图

[page]

图6 硬件电路板图
图6 硬件电路板图

五、总结

本讲主要介绍了51 单片机最小系统的设计以及编写第一个简单的程序。从过该实验,可以掌握单片机的开发流程,从而快速入门。在该讲中应该注意几个问题:

1. 本讲座中采用C 语言编写程序,因为C 语言的可读性和可移植性强。若读者没有学过C 语言,则应去了解和掌握相应的C 语言知识。C 语言易学易用,相信很快就能熟练。

2. 程序编译软件采用的是Keil。限于篇幅的原因,在这里就不对其进行讲述,如果读者有对其不明白的地方,可以到本刊论坛的单片机版面,作者制作了一个详细的Keil 入门教程。我们通过Keil编译程序,最终生成烧写单片机的Hex 代码文件。

Keil 软件界面如图7 所示, 中间空白区域为代码区,左侧为项目列表,最下面为消息窗口。

图7 Keil软件开发界面
图7 Keil软件开发界面

3. 本实验板上所用的STC 单片机通过串口下载程序。其上位机软件界面如图8 所示(推荐使用V3.1 版本,最新版本可以到STC 主页上下载:http://www.mcu-memory.com/), 烧写操作很简单,点击“Open File”按钮浏览找到所生成要烧写的Hex 文件后,单片机断电,点击“下载”按钮,单片机上电,程序就可下载到单片机中了。

图8 STC烧写软件界面
图8 STC烧写软件界面

4. 产品组件

读者如果按照该讲内容进行理解并实践的话,可以说单片机就算入门了。下一讲将进一步深入,将要介绍单片机内部定时器和中断系统,敬请期待。

关键字:单片机  最小系统组  输出控制 引用地址:单片机最小系统组成与I/O输出控制

上一篇:基于X5045的看门狗电路及51读写x5045存储器的程序
下一篇:单片机内部定时/计数器和中断系统

推荐阅读最新更新时间:2024-03-16 13:05

单片机的I/O口模拟I2C数据总线传输方式
需要做的工作小结如下: 1、MCU的I2C采用IO口模拟实现; 2、MCU作为I2C主设备与定时芯片RX-8025SA建立通信; 3、实现定时闹钟、定时唤醒及睡眠的功能; 调试过程: 1、IO口模拟I2C的代码在网上是可以找得到的。但是在具体的项目中,由于时钟的的不同在时序的控制上有区别,需要再调试。 在具体项目中调试I2C时,需要注意一下几点: 1)I 2C设备的地址,有的描述方法是7位,有的描述方法是8位。 注意只要代码和实际的设备地址相一致就好的。关于7位地址的使用方法无非描述的是8位地址的高7位,因为最后一位是固定的。(读的时候是1,写的时候是0)。 2)I2C通信协议本身并没有规定在通信过程中,传输的字
[单片机]
<font color='red'>单片机</font>的I/O口模拟I2C数据总线传输方式
单片机译码器的作用和工作原理
问:单片机里的译码器是如何工作的?寻址空间是如何确定的?译码器与寻址空间是怎么联系的? 答:单片机技术里常用的译码器实际上是由许多与门、或门、非门和它们的组合构成的。它有若干个输入端和若干个输出端(也可能只有一个输出端)。对某一个输出端来说,它的电平高低必然与输入的某一种状态相对应。 例如,具有4个输入端的与非门就是一个简单的译码器,只有四个输入端为1111时,它的输出端才为0。如果将地址总线的A9、A8、A7、A6与它的四个输入连接起来,并把它的输出连到存储器芯片或某个需要寻址的外设接口的片选端(假定低电平有效),那么,只有当A9、A8、A7、A6为1111时,存储器芯片或外设才会被选中。 译码器的寻址空间取决于地址总线的
[单片机]
SST89C54/58系列单片机的IAP应用技术
摘要:SST89C54/58j Silicon Storage Technology公司推出的带有20KB/36KB Flash的单片机。芯片内部集成了可以对Flash进行操作的功能模块。通过对Flash的分区实现在应用中可编程的功能。本文介绍它们的IAP功能,并给出IAP功能的一些子程序。 关键词:SST89C54/58 IAP Flash存储器 SST89C54/58单片机是MCS-51系列单片机的派生产品。它们在指令系统、硬件结构和片内资源上与标准8052单片机完全兼容,只是加大了内部程序存储器Flash的容量。 SST89C54/58的特色: *256%26;#215;8位内部RAM; *3个16位定时/计数器(
[单片机]
基于C8051F系列单片机的低功耗技术分析与设计
  在控制终端系统设计中,当系统要求整体功耗偏低时,C8051F系列单片机是一个最佳的选择。它们拥有灵活的时钟硬件,使系统能够方便地在高效运作模式与低功耗模式问进行转换,智能的电源管理模式能够在正常工作及待机状态自由切换,从而降低整个系统的能量损耗;当工作频率低于10kHz时,时钟丢失检测器(MCD)能够引发系统产生复位,确保系统工作的安全可靠。   1 C8051F各部分组件的功耗   当一个系统对功耗要求严格时,可以在硬件电路建立前首先粗略计算一下整个系统所需的功耗。由于C8051F系列单片机为数模混合SOC系统,能够实现整个设计的大部分功能,因此整个设计系统的功耗将主要集中在C805IF系列单片机的能量消耗上。   
[单片机]
基于C8051F系列<font color='red'>单片机</font>的低功耗技术分析与设计
PIC单片机精通_串口通信模块C实现
1.串口通讯头/定义文件 usart.h #ifndef _SERIAL_H_ #define _SERIAL_H_ #define BAUD 9600 #define FOSC 9216000L #define NINE 0 /* Use 9bit communication? FALSE=8bit */ #define DIVIDER ((int)(FOSC/(16UL * BAUD) -1)) #define HIGH_SPEED 1 #if NINE == 1 #define NINE_BITS 0x40 #else #define NINE_BITS 0 #endif #if HIG
[单片机]
常用电机微控制器之比较
    摘要: 在介绍几种典型电机微控制器8XC196MC、TMS320C240和ADMC311结构的基础上,着重对这些芯片如何实现PWM控制等交流电机控制系统所必需的性能进行了分析比较,以便为交流感应电机(ACIM)、步进电机(SM)等电机控制系统的数字设计提供参考。     关键词: DSP 微控制器 电机控制 PWM 电机控制是微控制器的一个重要应用领域。近几十年来,随着微电子工艺水平的提高,电机微控制水平有了飞速的发展。世界上著名的集成电路芯片制造商纷纷推出各自的产品,使得电机微控制器种类不断增多,功能日益增强。常见的有Intel公司的8CX196MC/MD/MH、TI公司的TMS320C24x系列
[工业控制]
51单片机PID电机调速Proteus仿真与源码
本代码采用Proteus仿真,采用51单片机模拟PWM,用定时器获取电机转速信息,用PID算法控制转速,转速、P、I、D都可以用按钮设置,LCD显示屏显示出电机的转速、差值、设定值、P、I、D,并可以粗调跟微调,还有闪烁提示,用来指示当前的设置项目。 仿真原理图如下 不按设定键直接调整的是设定速度值因为速度值是以周期形式调整,所以速度值越小,转速越高,2秒钟无操作退出设置模式,非设置模式调节转速 单片机源程序如下://************************项目信息************************** //项目名称: //客户名称: //************************文件信息*****
[单片机]
51<font color='red'>单片机</font>PID电机调速Proteus仿真与源码
51单片机控制步进电机-让电机转起来
摘要: 本节介绍用简单的方式,让步进电机转起来。其目的之一是对电机转动有直观的感受,二是熟悉整个开发流程 本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分,相关基础教程网上很多,可以自行学习 一、软件清单 需要用到的软件有keil5编译软件、STC程序烧录软件 二、控制原理 根据TB6600驱动器原理,向PUL口发送脉冲,每发送一个脉冲,电机就转一步。通过单片机延时的方式,切换PUL口电平产生脉冲,从而控制电机转动。 三、程序代码 //毫秒延时函数 void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved