AT89C51串口通讯教程

上传人:宝路 文档编号:6856827 上传时间:2017-10-08 格式:DOC 页数:42 大小:348.50KB
返回 下载 相关 举报
AT89C51串口通讯教程_第1页
第1页 / 共42页
AT89C51串口通讯教程_第2页
第2页 / 共42页
AT89C51串口通讯教程_第3页
第3页 / 共42页
AT89C51串口通讯教程_第4页
第4页 / 共42页
AT89C51串口通讯教程_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《AT89C51串口通讯教程》由会员分享,可在线阅读,更多相关《AT89C51串口通讯教程(42页珍藏版)》请在金锄头文库上搜索。

1、AT89C51 串口编程前言本文档是为单片机初学者写的有关串口通讯编程的说明文档。使用的单片机硬件是最通用的 AT89C51 单片机,编程语言为 c 语言。本文档不是系统的介绍单片机知识的教程,而是为了使您尽快掌握串口编程方法的技术说明。本文档前几部分大量内容摘自平凡老师的单片机教程,此教程是单片机入门的良好教材,但由于那本教程是由汇编语言描述的,对于时间不充足的同学来说,学习汇编会浪费一些时间,所以我还是整理了我们要了解的内容写到了本文档中。对于时间比较充分,也有兴趣学习汇编语言的同学可以先阅读平凡老师的“单片机教程” ,然后从本文档第六部分看起。该教程网址:http:/ 、RAM(数据存储

2、) 、ROM(程序存储) 、输入/输出设备(例如:串行口、并行输出口等) 。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如 A/D,D/A 等。 天!电脑中的 CPU 一块就要卖上千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。 不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40 脚封装,当然功能多一些单片机也有引脚比较多的,如 68 引脚,功能少的只有 10 多个或 20 多个引脚,有的甚至只

3、 8 只引脚。为什么会这样呢? 功能有强弱,另外这种芯片的生产量很大,技术也很成熟,51 系列的单片机已经做了十几年,所以价格就低了。 既然如此,单片机的功能肯定不强,干吗要学它呢? 话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用 P4?应用的关键是看是否够用,是否有很好的性能价格比。实现一个发光二极管的闪烁体会对单片机的 c 语言编程买回来一块 c51 单片机,要想使用它 首先要做必要的连线。我们实验室通常会给我们提供已经接好线的板子,所以我们不必自己去连线,这里需要说明的一点是,一块单片机要工作起来首先需要复位,所谓复位就是在

4、单片机的 RST 引脚持续的加上两个机器周期的高电平,使单片机回到工作的状态。 (机器周期在串口波特率的计算中介绍)我做实验时使用的板子是一块较复杂的板子的一部分,那块板子的复位方式是其他器件的程序给单片机复位,可是我做实验时那个器件不需要工作,所以,单片机一直不能复位。如果你遇到这种情况,请按任何一本书上介绍的加电复位选择合适的电容和电阻,按书上的连线图焊接好,如果你用的是我以前用过的板子,这块板子已经接好了复位电路,无须多考虑。请打开一本单片机的书,找到单片机的引脚图。我们用的板子在 p1.0 脚接有一个发光二极管,当 p1.0 为高电压时,二极管点亮,为低电压时,二极管熄灭。我们现在想让

5、小灯每隔 0.5s闪烁一次,实际上就是要灯亮 0.5s,再灭 0.5s,也就是说要 P10 不断地输出高和低电平。怎样实现这个要求呢?我们首先给出程序,然后对照程序分析。实验 1/程序开始#includec51 单片机编程特有的头文件#define uint unsigned int#define uchar unsigned charsbit P10=P10; /sbit 是单片机 c 程序新的关键字,用于定义位变量void Delay(uint i)/延时程序,i 是时间参数 uint j;for(;i0;i-)for(j=0;j头文件#define uint unsigned intsb

6、it P10=P10;定义 P10 为位变量 P10void main(void)uint k=0;定义用于软件计数的变量 k 并赋初值TMOD=0x20;使用定时器 1 的方式 2TR1=1;启动定时器 1P10=0;给 P10 赋初值,关闭小灯TH1=0X00;TL1=0X00;装载计数初值while(1)不停的循环while(!TF1);检查是否定时器溢出,如溢出则向下执行TF1=0;溢出 标志位清 0while(+k=2000)当定时器 1 溢出 2000 次时进入循环体 P10=!P10;使 P10 电位反向,控制小灯明暗k=0;软件计数标志清零,准备下一次计数由以上的程序我们可以看

7、出使用计数定时器的一般步骤为:1、 确定 T/C 的工作方式编程 TMOD 寄存器2、 计算 T/C 中的计数初值,并装载到 TH 和 TL3、 T/C 在中断方式工作时,须开 CPU 中断源 编程 IE 寄存器(下节讲)4、 启动定时计数器编程 TCON 中的 TR1 和 TR0 位。上面第三条中提到中断,休息一会,我们来看单片机中另一个重要的内部资源中断。五、 中断介绍1、有关中断的概念什么是中断,我们从一个生活中的例子引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打

8、断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。第一、什么可经引起中断,生活中很多事件可以引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了.等等诸如此类的事件,我们把可以引起中断的称之为中断源,单片机中也有一些可以引起中断的事件,89c51 中一共有 5 个:两个外部中断,两个计数/定时器中断,一个串行口中断。第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是

9、等人上门),你可能会按你通常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。计算

10、机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。2、寻找中断入口,根据 5 个不同的中断源所产生的中断,查找 5 个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这 5 个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。3、执行中断处理程序。4 、中断返回:执行完中断

11、指令后,就从中断处返回到主程序,继续执行。MCS-51 中断系统的结构:如图(抱歉,本图请找本 51 书看一下)所示,由与中断有关的特殊功能寄存器、中断入口、顺序查询逻辑电路等组成,包括 5 个中断请求源,4个用于中断控制的寄存器 IE、IP、ECON 和 SCON 来控制中断。1、中断请求源:(1) 外部中断请求源:即外中断 0 和 1,经由外部引脚引入的,在单片机上有两个引脚,名称为 INT0、INT1 ,也就是 P3.2、P3.3 这两个引脚。在内部的 TCON 中有四位是与外中断有关的。IT0:INT0 触发方式控制位,可由软件进和置位和复位,IT0=0,INT0 为低电平触发方式,I

12、T0=1 ,INT0 为负跳变触发方式。这两种方式的差异可暂不考虑。IE0:INT0 中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在 CPU 响应中断后,由硬件将 IE0 清 0。IT1、IE1 的用途和 IT0、IE0 相同。(2) 内部中断请求源TF0:定时器 T0 的溢出中断标记,当 T0 计数产生溢出时,由硬件置位 TF0。当 CPU 响应中断后,再由软件将 TF0 清 0。TF1:与 TF0 类似。TI、RI:串行口发送、接收中断,在串口中再仔细讲解。2、中断允许寄存器 IE在 MCS51 中断系统中,中断的允许或禁止是由片内可进行位寻址的 8 位中断允许寄

13、存器 IE 来控制的。见下表EA ES ET1 EX1 ET0 EX0中断允许寄存器 IE 示意表其中 EA 是总开关,如果它等于 0,则所有中断都不允许。ES串行口中断允许 : ES1 ,串口允许中断;ES0,串口不允许中断。ET1定时器 1 中断允许 (以下的含义和 ES 的解释相同) EX1外中断 1 中断允许。ET0定时器 0 中断允许EX0外中断 0 中断允许。如果我们要设置允许外中断 1,定时器 1 中断允许,其它不允许,则 IE 可以是EA ES ET1 EX1 ET0 EX01 0 0 0 1 1 0 0用 c 语句 IE0x8c;即可完成上述对 IE 的编程。当然也可以分别对

14、每一位编程:EA1; ET11 ;EX11;3、五个中断源的自然优先级外中断 0定时器 0外中断 1定时器 1串口优先级:单片机采用了自然优先级和人工设置高、低优先级的策略,即可以由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。开机时,每个中断都处于低优先级,我们可以用指令对优先级进行设置。看下表。PS PT1 PX1 PT0 PX0中断优先级寄存器 IP 示意表中断优先级中由中断优先级寄存器 IP 来设置的,IP 中某位设为 1,相应的中断就是高优先级,否则就是低优先级。例:设有如下要求,将 T0、外中断 1 设

15、为高优先级,其它为低优先级,求 IP的值。IP 的首 3 位没用,可任意取值,设为 000,后面根据要求写就可以了PS PT1 PX1 PT0 PX00 0 0 0 0 1 1 0因此,最终,IP 的值就是十六进制数 0x06。.本串口通讯实验中,因为只用到了串口中断,所以没必要设优先级寄存器IP,本段内容可以只作一般了解。4、MCS51 的中断响应过程:1、中断响应的条件:讲到这儿,我们依然对于计算机响应中断感到神奇,我们人可以响应外界的事件,是因为我们有多种“传感器“眼、耳可以接受不同的信息,计算机是如何做到这点的呢?其实说穿了,一点都不希奇,MCS51 工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“ ,如果是 1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。很蠢,不是吗?可计算机本来就是这样,它根本没人聪明。了解了上述中断的过程,就不难解中断响应的条件了。在下列三种情况之一时,CPU 将封锁对中断的响应:A、CPU 正在处理一个同级或更高级别的中断请求。B、现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号