51单片机的基本端口操作.docx

上传人:b****7 文档编号:8963698 上传时间:2023-02-02 格式:DOCX 页数:14 大小:41.10KB
下载 相关 举报
51单片机的基本端口操作.docx_第1页
第1页 / 共14页
51单片机的基本端口操作.docx_第2页
第2页 / 共14页
51单片机的基本端口操作.docx_第3页
第3页 / 共14页
51单片机的基本端口操作.docx_第4页
第4页 / 共14页
51单片机的基本端口操作.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

51单片机的基本端口操作.docx

《51单片机的基本端口操作.docx》由会员分享,可在线阅读,更多相关《51单片机的基本端口操作.docx(14页珍藏版)》请在冰豆网上搜索。

51单片机的基本端口操作.docx

51单片机的基本端口操作

第一章51单片机的基本端口操作

主要对单片机最简系统在实际应用中的使用方法,从简单到复杂地实现单片机最简系统的基本功能。

“点亮最简单的单片机系统”从单片机原理上介绍单片机的基本组成和最简单系统的典型电路,以及有关单片机C51编程方法和例程。

“更加明亮的小灯”从功能上介绍如何使LED发光稳定,从原理上介绍单片机I/O口的电气特性和使用方法。

“定时亮灭的小灯”介绍如何使LED灯定时亮、灭,从单片机原理上介绍定时器的使用和编程方法。

“小灯亮灭的人工控制”从功能上介绍如何通过按键控制LED灯的亮灭,从单片机原理上介绍单片机中断的使用和编程方法。

先复习下Keil51的操作。

1.1点亮最简单的单片机系统

常用MCS-51系列单片机引脚功能说明

引脚定义

引脚功能

功能说明

Vcc

+5V电源

电源电压

Vss

电路接地端

P0.0-P0.7

通道0

8位漏极开路的双向I/O通道

P1.0-P1.7

通道1

8位拟双向I/O通道

P2.0-P2.7

通道2

8位拟双向I/O通道

P3.0

RXD

串行输入口

P3.1

TXD

串行输出口

P3.2

INT0

外部中断0输入口

P3.3

INT1

外部中断1输入口

P3.4

T0

定时器/计数器0外部时间脉冲输入端

P3.5

T1

定时器/计数器1外部时间脉冲输入端

P3.6

WR

外部数据存储器写脉冲

P3.7

RD

外部数据存储器读脉冲

RST/VPD

复位输入信号

该引脚上有2个机器周期的高电平可以实现复位操作,在掉电情况下将只给片内RAM供电

ALE/PROG

地址锁存有效信号

主要作用是提供一个适当的定时信号

PSEN

程序选通有效信号

低电平时,指令寄存器的内容读到数据总线上

EA/Vpp

片选使能

当保持TTL高电平时,8051执行内部ROM的指令;当使TTL为低电平时,从外部程序存储器取出所有指令

XTAL1

晶振输入端

内部振荡器外接晶振的一个输入端

XTAL2

晶振输入端

内部振荡器外接晶振的另一个输入端

提问:

什么是单片机系统、

提问:

单片机中晶振有什么作用?

回答:

单片机访问一次存储器的时间,称之为一个及其周期,是一个时间基准。

一个机器周期包括12个时钟周期。

如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,它的一个机器周期是12X(1/12us),也就是1us。

若是12MHz的晶振,当单片机中定时/计数器的数值加1时,实际经过的时间就是1us。

提示:

晶振电路,复位电路

基本电路图:

发光二极管导通压降通常为1.7V-1.9V;

为什么要接电阻?

电路原理及器件选择?

89C51:

单片机,控制发光二极管亮灭

OSC:

晶振,在本例中选择12MHz的立式晶振

C3,C2:

晶振电路的起振电容,容值为22pF

L1:

发光二极管

R1:

限流电阻,阻值为1k欧

地址分配和连接?

P1.0:

与发光二极管电路相连,控制LED发光二极管阴极的电平高低

RESET:

复位引脚

X1,X2:

单片机的晶振引脚

程序设计:

延时程序:

我们先不使用单片机的定时器,而是直接采用软件的延时程序定时控制发光二极管的亮灭。

在12M晶振时,一个指令周期为1us,那么1M次就是1s。

程序代码:

#include

sbitgate=P1^0;//位定义

voidmain(void)

{

unsignedinti,j;

while

(1)

{

for(i=1000;i>0;i--)//双重循环,延时约1s

for(j=1000;j>0;j--);

gate=!

gate;//对P10取反,控制小灯

}

}

补充:

结合第五代开发板电路图可以看到…

1.2更加明亮的小灯

外加与非门做驱动电路,增大电流,当然也有相应的电子驱动芯片。

1.3定时亮灭的小灯

下面我们进入单片机最重要的内容之一,定时和中断。

1.什么是单片机的定时器?

MSC-51单片机一般有两个内部的16位定时器/计数器,分别成为T0和T1.分别有两个8位的RAM单元组成,即每个计数器都是16位的计数器,最大计数量为2的16次方等于65536.

而定时和计数的关系是什么呢?

找个同学告诉我吧。

定时器每完成一个时间的定时,计数器就加1.

2.一定要计满65536个数吗?

3.如何使用MCS-51单片机的定时器呢?

定时器有两个特定的寄存器TMOD和TCON,就象定时器的操作界面。

首先介绍定时器/计数器的方式寄存器TMOD。

TMOD的控制字

TMOD.7

TMOD.6

TMOD.5

TMOD.4

TMOD.3

TMOD.2

TMOD.1

TMOD.0

GATE

C/T

M1

M0

GATE

C/T

M1

M0

可以看到,高四位和第四位分别代表两个定时器/计数器,所以我们可以以TMOD第四位来说明各位的定义与功能。

GATE:

分为两种情况,GATE=0时,定时器的起停和INT1无关,在这种情况下,定时器的起停只取决与TR0.GATE=1时,在此种情况下定时器/计数器的开关不仅要由TR0来控制,而且还要受到INT1引脚的控制,只有TR1为1时,且INT1引脚也是高电平,定时器才能开始工作。

C/T:

定时/计数器功能选择。

如果C/T为0就做定时器,如果C/T为1就做计数器。

当然只能二选一。

M1,M0:

用M1,M0来控制定时器/计数器4种工作方式的选择。

工作方式0:

M1=0,M0=0.13位定时.计数方式。

它由TL(1/0)的低五位和TH(0/1)的8位构成13位的计数器,此时TL(1/0)的高3位未用。

工作方式1:

M1=0,M0=1.是16位定时/计数方式,其他特性与工作方式0相同。

工作方式2:

M1=1,M0=0.自动重装初值的8位定时/计数器。

初值放在T(0/1)的高8位。

在工作方式2,只有低8位参与计算,而高8位不参与计算,用作预置数存放,技术范围256。

每当计数溢出,就会打开T(0/1)的高、低8位之间的开关,计预置数进入低8位。

这是由硬件自动完成的。

通常这种方式用于波特率发生器(我们将在串行接口中讲解)

工作方式3:

M1=1,M0=1.这种工作方式下,定时/计数器被拆成2个独立的定时/计数器来用。

其中,TL0可以构成8位的定时器或计数器的工作方式,儿TH0则只能作为定时器来用。

只有在T1以工作方式2运行时,才让T0以工作方式3运行。

然后,我们介绍控制寄存器TCON

TCON控制寄存器

TCON.7

TCON.6

TCON.5

TCON.4

TCON.3

TCON.2

TCON.1

TCON.0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TR0:

T0的运行控制位。

启动定时器T0没有专门的指令,而是通过TR0进行控制。

当GATE=0时,T0的运行只取决于TR0的0和1;当门控位GATE=1时,仅当TR0=1,并且外中断0引脚上的输入值为高电平时,T0才开始计数,这两个条件缺一不可

TF0:

T0的溢出和中断申请标志位。

当T0溢出时,硬件置位TF0,表示提出了中断申请。

该标志位可以通过软件查询,也可以用软件清零和置位,在单片机响应中断申请后,硬件自动清零。

TR1:

TF1:

接下来我们来看一个典型的定时器程序。

要求:

定时10ms,P1.0反相。

//定义头文件和位定义

#include

#include

sbitP00=P0^0;

sbitP13=P1^3;

voidmain(void)

{

//初始化端口

P0=0xFF;

P13=0;

//初始化定时器

TMOD=0x01;

TH0=0xD8;

TL0=0xF0;

//启动定时器,开中断

TR0=1;

ET0=1;

EA=1;

//等待循环

while

(1);

}

//定时器0中断服务子程序

voidtimer0_ISR(void)interrupt1using1

{

//定时器初始重载

TH0=0xD8;

TL0=0xF0;

//操作

P00=!

P00;

}

到这里,大家肯定就会有疑惑,什么叫做中断服务子程序,什么又叫做中断。

我们稍后解释。

这里需要提醒大家的是单片机定时/计数器各种工作方式下的最大计数量。

工作方式0:

13位,2的13次方等于8192次;

工作方式1:

16位,2的16次方等于65536次;

工作方式2和3:

都是8位的,2的8次方等于256次

那么就出现了一个问题,如果我想定时1s的话,该怎么做呢?

大家思考一下,然后我请个同学来回答。

下面我们一起来看看如何实现1s的定时亮灭。

#include

#include

#defineunitunsignedint

#defineucharunsignedchar

sbitP00=P0^0;

sbitP13=P1^3;

uintoverflow_count=0;

voidmain(void)

{

P0=0xFF;

P13=0;

TMOD=0x01;

TH0=0xD8;

TL0=0xF0;

TR0=1;

ET0=1;

EA=1;

while

(1)

{

If(overflow_count==100)

{P00=!

P00;

Overflow_count=0;

};

}

voidtimer0_ISR(void)interrupt1using1

{

TH0=0xD8;

TL0=0xF0;

Overflow_count++;

}

完成了小灯定时亮灭,我们就基本学会了如何使用单片机定时器/计数器的使用方法。

下面,就让我们来看看前面留下的问题----“中断”。

定义:

中断属于一种对事件的实时处理过程,中断源可能随时停止CPU当前的工作,转而去处理中断服务程序,待中断服务程序完成后,再返回原来工作的断点处,继续原来的工作。

再者,我们需要知道,单片机内部有多个中断,分别是

定时/计数器0中断----T0中断

定时/计数器1中断----T1中断

外中断0----INT0中断

外中断1----INT1中断

串口中断----串口中断

那么,当不同的中断同时发出终端申请,自然就会有一个中断优先级的问题。

优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已经产生而未结束,又有一个中断产生的情况。

最后,就是中断的响应过程。

具体来说可以分为以下几个步骤。

保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈;

寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址;

执行中断服务程序,用中断服务程序处理需要改变的变量或者事件;

中断返回,执行完中断服务程序后,从中断断点处返回主程序,继续执行主程序。

上面分什么是中断,中断优先级,中断的响应三个部分简单介绍了中断,下面我们来看看单片机中断系统有何作用。

简单的说,单片机在自动控制中所起到的作用就两个,一个是定时/计数,另一个就是中断的使用。

中断的作用如下:

第一、实现高速CPU和低速外设之间的配合,利用中断方式进行I/O口操作,在宏观上可以看成CPU和外设的并行工作;

第二、可以实现实时控制。

实时处理是控制系统对单片机提出的要求,各个设备可以随时向CPU发出中断申请,而CPU也必须做出快速响应和及时处理。

第三、实现故障的紧急处理。

当外设发生故障时,可以利用中断系统请求CPU及时处理这些故障。

第四、便于人机联系。

操作人员可以利用键盘等实现中断,完成人工介入。

接下来我们学习中断的使用!

中断系统主要包括5个中断请求源和4个控制寄存器IE,IP,TCON和SCON来控制中断申请,中断开关和中断优先级。

1.中断方式和标志位TCON

TCON的低四位用于外部中断的控制,高4位用于T0,T1的控制。

TCON中的控制字

TCON.7

TCON.6

TCON.5

TCON.4

TCON.3

TCON.2

TCON.1

TCON.0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

外部中断请求源

IT0:

INT0触发方式控制位,可由软件进行置位和复位。

IT0=0,INT0为低电平触发方式;IT0=1,INT0为负跳变触发方式。

IE0:

INT0中断请求标志位。

当有外部中断的请求时,这位就会置1;在CPU响应中断后,IE0置0;

IT1:

IE1:

2.中断允许寄存器IE

中断允许寄存器IE

IE.7

IE.6

IE.5

IE.4

IE.3

IE.2

IE.1

IE.0

EA

X

X

ES

ET1

EX1

ET0

EX0

其中:

EA:

总开关,如果它等于0,则所有中断都不允许

ES:

串行口中断允许

ET1:

定时器1中断允许

EX1:

外中断1中断允许

ET0:

定时器0中断允许

EX0:

外中断0中断允许

5个中断的自然优先级为:

外中断0----INT0中断----EX0

定时器0----T0中断----ET0

外中断1----INT1中断----EX1

定时器1----T1中断----ET1

串口中断----串口中断----ES

中断优先级寄存器

-

-

-

IP.4

IP.3

IP.2

IP.1

IP.0

EA

X

X

PS

PT1

PX1

PT0

PX0

其中某位为1,那么就为高优先级。

了解了中断的控制,最后我们回到开始程序中的中断服务子程序。

函数格式为

返回值函数名称(【参数】)【模式】【重入】interruptn【usingn】

其中interruptn对应的是中断源的编号,而usingn决定了使用寄存器的组号。

而51系统中有四个寄存器组,取决与PSW的两位RS0和RS1的设置。

为了方便大家理解,我们给出不同中断服务程序的C51写法如下:

外中断INT0

voidintsvr0(void)interrupt0using1

定时/计数器T0

voidtimer0(void)interrupt1using1

外中断INT1

voidintsvr1(void)interrupt2using1

定时/计数器T1

voidtimer1(void)interrupt3using1

串口中断

voidserial0(void)interrupt4using1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1