51单片机资源Word格式文档下载.docx

上传人:b****3 文档编号:17027223 上传时间:2022-11-27 格式:DOCX 页数:18 大小:52.36KB
下载 相关 举报
51单片机资源Word格式文档下载.docx_第1页
第1页 / 共18页
51单片机资源Word格式文档下载.docx_第2页
第2页 / 共18页
51单片机资源Word格式文档下载.docx_第3页
第3页 / 共18页
51单片机资源Word格式文档下载.docx_第4页
第4页 / 共18页
51单片机资源Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

51单片机资源Word格式文档下载.docx

《51单片机资源Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《51单片机资源Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

51单片机资源Word格式文档下载.docx

位地址

8FH

8EH

8DH

8CH

8BH

8AH

89H

88H

功能

T1中断标志

T0中断标志

INT1中断标志

INT1触发方式

INT0中断标志

INT0触发方式

TCON位功能:

①TF1——T1溢出中断请求标志,T1计数溢出后,TF1=1

②TF0——T0溢出中断请求标志

T0计数溢出后,TF0=1

③IE1——外中断中断请求标志

当P3.3引脚信号有效时,IE1=1

④IE0——外中断中断请求标志

当P3.2引脚信号有效时,IE0=1

⑤IT1——外中断触发方式控制位

IT1=1,边沿触发方式;

IT1=0,电平触发方式。

⑥IT0——外中断触发方式控制位

其意义和功能与IT1相似。

串行控制寄存器SCON

TI

RI

99H

98H

串行发送中断标志

串行接收中断标志

①TI——串行口发送中断请求标志

②RI——串行口接收中断请求标志

⑵中断允许控制寄存器IE

80C51对中断源的开放或关闭由中断允许控制寄存器IE控制。

IE的结构、位名称和位地址如下:

IE

EA

ES

ET1

EX1

ET0

EX0

AFH

ACH

ABH

AAH

A9H

A8H

中断源

CPU中断允许控制位

串行口中断允许控制位

T1中断允许控制位

INT1中断允许控制位

T0中断允许控制位

INT0中断允许控制位

①EA——CPU中断允许控制位

EA=1,CPU开中;

EA=0,CPU关中,且屏蔽所有5个中断源。

②EX0——外中断INT0中断允许控制位

EX0=1,INT0开中;

EX0=0,INT0关中。

③EX1——外中断INT1中断允许控制位

EX1=1,INT1开中;

EX1=0,INT1关中。

④ET0——定时/计数器T0中断允许控制位

ET0=1,T0开中;

ET0=0,T0关中。

⑤ET1——定时/计数器T1中断允许控制位

ET1=1,T1开中;

ET1=0,T1关中。

⑥ES——串行口中断(包括串发、串收)允许控制位

ES=1,串行口开中;

ES=0,串行口关中。

说明:

80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。

首先要EA=1,其次还要自身的控制位置“1”。

三.中断处理过程

中断处理过程大致可分为四步:

中断请求、中断响应、中断服务、中断返回

⒈中断请求

中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器IE中)置“1”。

⒉中断响应

CPU查询(检测)到某中断标志为“1”,在满足中断响应条件下,响应中断。

⑴中断响应条件:

①该中断已经“开中”;

②CPU此时没有响应同级或更高级的中断;

③当前正处于所执行指令的最后一个机器周期;

④正在执行的指令不是RETI或者是访向IE、IP的指令,

否则必须再另外执行一条指令后才能响应。

⑵中断响应操作

CPU响应中断后,进行下列操作:

①保护断点地址;

②撤除该中断源的中断请求标志;

③关闭同级中断;

④将相应中断的入口地址送入PC;

80C51五个中断入口地址:

INT0:

0003H;

T0:

000BH;

INT1:

0013H

T1:

001BH;

串行口:

0023H

⒊执行中断服务程序

中断服务程序应包含以下几部分:

⑴保护现场

⑵执行中断服务程序主体,完成相应操作

⑶恢复现场

⒋中断返回

在中断服务程序最后,必须安排一条中断返回指令RETI,当CPU执行RETI指令后,自动完成下列操作:

⑴恢复断点地址。

⑵开放同级中断,以便允许同级中断源请求中断。

四.中断响应等待时间

若排除CPU正在响应同级或更高级的中断情况,中断响应等待时间为:

3~8个机器周期

五.中断请求的撤除

中断源发出中断请求,相应中断请求标志置“1”。

CPU响应中断后,必须清除中断请求“1”标志。

否则中断响应返回后,将再次进入该中断,引起死循环出错。

⑴对定时/计数器T0、T1中断,外中断边沿触发方式,CPU响应中断时就用硬件自动清除了相应的中断请求标志。

⑵对外中断电平触发方式,需要采取软硬结合的方法清除(CPU自动硬件清除,同时用户也要及时将外部中断引脚变成无效电平)。

⑶对串行口中断,用户应在串行中断服务程序中用软件清除TI或RI。

六.中断优先控制和中断嵌套

⒈中断优先控制

80C51中断优先控制首先根据中断优先级,此外还规定了同一中断优先级之间的中断优先权。

其从高到低的顺序为:

INT0、INT1、T0、T1、串行口。

中断优先级是可编程的,而中断优先权是固定的,不能设置,仅用于同级中断源同时请求中断时的优先次序。

80C51中断优先控制的基本原则:

①高优先级中断可以中断正在响应的低优先级中断,反之则不能。

②同优先级中断不能互相中断。

③同一中断优先级中,若有多个中断源同时请求中断,CPU将先响应优先权高的中断,后响应优先权低的中断。

⒉中断嵌套

当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,CPU可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。

中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。

中断嵌套结构类似与调用子程序嵌套,不同的是:

①子程序嵌套是在程序中事先按排好的;

中断嵌套是随机发生的。

②子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。

七.中断系统的应用

⒈中断初始化

⑴设置堆栈指针SP

⑵定义中断优先级

⑶定义外中断触发方式

⑷开放中断

⑸安排好等待中断或中断发生前主程序应完成的操作内容。

⒉中断服务主程序

中断服务子程序内容要求:

⑴在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。

⑵根据需要保护现场。

⑶中断源请求中断服务要求的操作。

⑷恢复现场。

与保护现场相对应,注意先进后出、后进先出操作原则。

⑸中断返回,最后一条指令必须是RETI。

⒊中断系统应用举例

****C51中提供的中断服务函数的定义如下:

返回值中断ISR函数名interruptnusing[m]

其中:

n-----对应中断源的编号

m----使用指定的寄存器组(0~3)

程序举例:

#defineucharunsignedchar//定义一下方便使用

#defineuintunsignedint

#defineulongunsignedlong

#include<

reg52.h>

//包括一个52标准内核的头文件

sbitP10=P1^0;

//头文件中没有定义的IO就要自己来定义了

//用外中断方式读按键K1,点亮或者熄灭一个LED

voidmain(void)//主程序

{

IT0=1;

//外中断跳变产生中断

EX0=1;

//打开外部中断0

EA=1;

//打开总中断

P10=0;

while

(1);

//主程序循环

}

//外中断0的ISR

voidint0_ISR()interrupt0

P10=~P10;

//在中断里点亮或者熄灭LED

/*提示:

需要去抖操作,否则按键抖动会引起多种中断。

*/

二、80C51定时/计数器

定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。

此外,定时/计数器还可作为串行通信中波特率发生器。

一.定时/计数器概述

80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。

对外部事件脉冲(下降沿)计数,是计数器;

对片内机周脉冲计数,是定时器。

计数器由二个8位计数器组成。

定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。

调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。

定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。

且外部脉冲的最高频率不能超过时钟频率的1/24。

二.定时/计数器的控制寄存器

⒈定时/计数器控制寄存器TCON

T1运行标志

T0运行标志

TR1

TR0

TCON低4位与外中断、有关,已在中断中叙述。

高4位与定时/计数器T0、T1有关。

⑴TF1:

定时/计数器T1溢出标志。

⑵TF0:

定时/计数器T0溢出标志。

⑶TR1:

定时/计数器T1运行控制位。

TR1=1,T1运行;

TR1=0,T1停。

⑷TR0:

定时/计数器T0运行控制位。

TR0=1,T0运行;

TR0=0,T0停。

TCON的字节地址为88H,每一位有位地址,均可位操作。

⒉定时/计数器工作方式控制寄存器TMOD

TMOD用于设定定时/计数器的工作方式

低4位用于控制T0,高4位用于控制T1。

高4位控制T1

低4位控制T0

门控位

计数/定时方式选择

工作方式选择

G

C/T

M1

M0

⑴M1M0——工作方式选择位

M1M0

工作方式

00

方式0

13位计数器

01

方式1

16位计数器

10

方式2

两个8位计数器,初值自动装入

11

方式3

两个8位计数器,仅适用T0

⑵C/T——计数/定时方式选择位

C/T=1,计数工作方式,对外部事件脉冲计数,用作计数器。

C/T=0,定时工作方式,对片内机周脉冲计数,用作定时器。

⑶GATE——门控位

GATE=0,运行只受TCON中运行控制位TR0/TR1的控制。

GATE=1,运行同时受TR0/TR1和外中断输入信号的双重控制。

只有当INT0/INT1=1且TR0/TR1=1,T0/T1才能运行。

TMOD字节地址89H,不能位操作,设置TMOD须用字节操作指令。

三.定时/计数器工作方式

⒈工作方式0

13位计数器,由TL低5位和TH8位组成,TL低5位计数满时不向TL第6位进位,而是向TH进位,13位计满溢出,TF置“1”。

最大计数值2^13=8192。

⒉工作方式1

16位计数器,由TL和TH组成,最大计数值为2^16=65536。

工作方式与方式0相似;

⒊工作方式2

可自动装载的8位计数器,仅用TL计数,最大计数值为2^8=256,计满溢出后,一方面进位TF,使溢出标志TF=1;

另一方面,使原来装在TH中的初值装入TL。

优点:

定时初值可自动恢复;

缺点:

计数范围小。

常作为串口波特率发生器。

适用于需要重复定时,而定时范围不大的应用场合。

⒋工作方式3

方式3仅适用于T0,T1无方式3。

T1停止计数,只是保持其值,T0分成两个独立的8位计数器TH0和TL0;

,此方式较特别。

⑴T0方式3

在方式3情况下,T0被拆成二个独立的8位计数器TH0、TL0。

①TL0使用T0原有的控制寄存器资源:

TF0,TR0,GATE,C/T,INT0,组成一个8位的定时/计数器;

②TH0借用T1的中断溢出标志TF1,运行控制开关TR1,只能对片内机周脉冲计数,组成另一个8位定时器(不能用作计数器)。

⑵T0方式3情况下的T1

T1由于其TF1、TR1被T0的TH0占用,计数器溢出时,只能将输出信号送至串行口,即用作串行口波特率发生器。

四.定时/计数器的应用

⒈计算定时/计数初值

80C51定时/计数初值计算公式:

故有:

其中:

N与工作方式有关:

方式0时,N=13;

方式1时,N=16;

方式2、3时,N=8。

Fosc---主振频率(单片机晶振);

⒉定时/计数器应用步骤

⑴合理选择定时/计数器工作方式

⑵计算定时/计数器定时初值(按上述公式计算)

⑶编制应用程序

①定时/计数器的初始化

包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。

②正确编制定时/计数器中断服务程序

注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。

【例】试用T1方式2编制程序,在P1.0引脚输出周期为400S的脉冲方波,已知fosc=12MHZ。

解:

①计算定时初值

T1初值=2^8-200*10^(-6)*12*10^6/12=256–200=56=38H

TH1=38H;

TL1=38H

②设置TMOD:

00100000B=20H

③编制程序如下:

(1)查询方式

sbitP10=P1^0;

voidmain(void){

TMOD=0x20;

//T1function2

TH1=0x38;

TL1=0x38;

TR1=1;

//startT1

while

(1){

while(!

TF1);

//查询等待TF1置位

TF1=0;

P10=~P10;

(2)中断方式

//enableinterrupt

ET1=1;

voidTimer1_ISR(void)interrupt1using3{

3、串行通信

内容简介见PPT

波特率计算:

方式1和方式3都是可变的:

常用波特率通常按规范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。

解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。

(1)查询法:

点对点的双机通信:

要实现甲与乙两台单片机点对点的双机通信,线路只须将甲机的TXD与乙机的RXD相连,将甲机的RXD与乙机的TXD相连,地线与地线相连。

 

分析过程:

甲、乙两机都选择方式1:

8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。

由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定。

则须对定时/计数器T1初始化。

设SMOD=0,甲、乙两机的振荡频率为12MHZ,由于波特率为1200。

定时/计数器T1选择为方式2,则初值为:

初值=256-fosc×

2SMOD/(12×

波特率×

32)=256-12000000/(12×

1200×

32)≈230=E6H;

根据要求定时/计数器T1的方式控制字为20H

发送程序:

#defineucharunsignedchar

ucharidatatrdata[]={'

8'

'

9'

S'

5'

1'

0x0d,0x0a,0x00};

main()

uchari;

uintj;

TMOD=0x20;

//定时器1定时方式2

TH1=0xe6;

//12MHz1200波特率

TL1=0xe6;

SCON=0x40;

//串口方式1,不允许接收REN=0;

PCON=0;

//SMOD=0

TR1=1;

//启动定时器

while

(1)

i=0;

while(trdata[i]!

=0x00)//00结束

SBUF=trdata[i];

while(TI==0);

TI=0;

i++;

}

for(j=0;

j<

50000;

j++);

//延时

接收方程序:

ucharidatabuf[8];

SCON=0x50;

//串口方式1,允许接收REN=1

TMOD=0x20;

while

(1)//接收一祯

{for(i=0;

i<

9;

i++)

{

while(RI==0)//当有数据时启动接收

RI=0;

buf[i]=SBUF;

//读入数据

与PC机串行调试器通讯:

#include<

reg51.h>

//UART初始化:

模式1,8位,9600Bdsat11.059MHz

voidInitSerial()

{

SCON=0x50//uartinmode1(8bit),REN=1

TMOD=TMOD|0x20;

//Timer1inmode2

TH1=0xFD;

//9600Bdsat11.059MHz

TL1=0xFD;

//9600Bdsat11.059MHz

TR1=1;

//Timer1run

voidmain()

unsignedchartemp;

InitSerial();

//串行口初始化

while

(1)

{while(!

RI);

//PC机发送数据

RI=0;

temp=SBUF;

//接收数据

SBUF=temp;

//发送数据

while(!

TI);

//MCU发送数据

TI=0;

}

(2)中断法

一般情况下,常采用查询法发送数据。

中断法接收程序。

下面就是一个中断法的程序:

unsignedchari,full_flag;

unsignedcharbuff[20];

//BUFF

ES=1;

voidmain(void){

i=0;

full_flag=0;

while

(1){

if(full_flag){

ES=0;

Delay(1000);

//延时1s

full_flag=0

ES=1;

voidUART_ISR(void)interrupt4{

if(RI){

buff[i]=SBUF;

if(i>

20){

full_flag=1;

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

当前位置:首页 > PPT模板 > 其它模板

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

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