中断及定时器重点难点学习资料_第1页
中断及定时器重点难点学习资料_第2页
中断及定时器重点难点学习资料_第3页
中断及定时器重点难点学习资料_第4页
中断及定时器重点难点学习资料_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1)*外中断INTO-.........voidintsvrO(void)interrupt0using1

2)*定时/计数器TO——voidtimerO(void)interrupt1using1

3)*夕卜中断INT1.......-voidintsvrO(void)interrupt2using1

4)*定时/计数器T1------voidtimerO(void)interrupt3using1

5)*串口中断…....voidserialOinterrupt4using1

P3口的代替功能

寄存器地址BOH,位寻址B7H~B0Ho

引脚P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7

代替功能RXDTXD/INTO/INT1TOT1/WR/RD

1、IE:中断允许控制寄存器

寄存器地址A8H,可按位寻址,位寻址AFH~A8H。复位IE全部清零

位地址AFAEADACABAAA9A8

位符号EA/ET2ESET1EX1ETOEXO

位序号D7D6D5D4D3D2D1DO

EA:中断允许总控制位

当EA=0时,中断总禁止。

当EA=1时,中断总允许后中断的禁止与允许由各中断源的中断允许控制位进行设置。

EXO(EX1):外部中断允许控制位

当EX0(EX1)=0禁止外中断

当EXO(EX1)=1允许外中断

ET0(EX1):定时/计数中断允许控制位

当ETO(曰1)=0禁止定时(或计数)中断

当ETO(ET1)=1允许定时(或计数)中断

ET2:定时器2中断允许控制位

ES:串行中断允许控制位

当ES=0禁止串行中断

当ES=1允许串行中断

2、IP:中断优先级控制寄存器

寄存器地址B8H,位寻址BFH~B8H。

位序号D7PD6Pb5[34rD3D2plFDO

位地址BFHBEHBDHBCHBBHBAHB9HB8H

位符号//PT2PSFT1PX1FTOPXO

PXO--外部中断0优先级设定位,1为高优先级中断,0为低优先级中断

PTO一定时中断0优先级设定位

PX1一外部中断1优先级设定位

PT1一定时中断1优先级设定位

PS一串口中断优先级设定位

FT2一定时器2优先级设定位

3、TCON:定时器控制寄存器

寄存器地址88H,位寻址8FH~88H。

位地址8FH8EH8DH8CH8BH8AH89H88H

位符号TF1TR1TFOTROIE1IT1IB)IT0

TRO(TR1)——定时器运行控制位

当TRO(TR1)=0停止定时器/计数器工作

当TRO(TR1)=1启动定时器/计数器工作

IE0(IE1)一外中断请求标志位

当CPU采样到P3.2(P3.3)[INTO或INT1]出现有效中断请求时,此位由硬件置1。在中断响应完成

后转向中断服务时,再由硬件自动清0。

IT0(IT1)一外中断请求信号方式控制位

当ITO(IT1)=1脉冲方式(后沿负跳有效)下降沿触发有效

当ITO(IT1)=0电平方式(低电平有效)此位由软件置1或清0。

TFO(TF1)一计数溢出标志位

当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的

标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询

状态位来使用。

4、TMOD:工作方式控制寄存器

寄存器地址89H,不可位寻址。

位序B7B6B5B4B3B2B1BO

位符号GATEC/TM1M0GATEC/TM1MO

GATE—0塔立

当=0时,以运行TRO(或TR1)启动或禁止定时器、计数器

当=1时,以TRT/INTO(或TR1*/INT1)启动或禁止定时器、计数器

GATE=0以TCON寄存器中的TRO(TR1)启动定时器/计数器

GATE=1TCON寄存器中的TRO(TR1)和外部中断引脚INTO(INT1)启动定时器,高电位有效

。丁=1由外引脚TO或T1做计数脉冲,OT=0由TH和TL做定时数。M1M0一工作方式

选择位

M1,M0:用来选择计时计数器工作模式

M1M0工作模式说明

00013位计时计数器(8192)

01116位计时计数器(65536)

1028位计时计数器,可自动重新载入计数值(256)

113当成两组独立的8位计时器(256,TO和T1不能同时用)

5、T2MOD:工作同空制寄骨

寄存器地址0C9H,不可位寻址,用来设定定时器2自动重装模式递增或递减模式

PPPPPPT2OEDCEN

T2OE:定时器2输出允许位,当=1时,P1.0/T2弓I脚输出连续脉冲信号

DCEN:当=1时,T2配置成向上向下计数器

6、T2CON:定时器控制寄存器,可进行位寻址

寄存器地址0C8H,位寻址0C8H~0CFHo

位地址CFCECDCCCBCAC9C8

位符号TF2EXF2RCLKTCLKEXEN2TR2OT2CP/RL2

TF2:T2溢出标记;方式2,3置TF2,方式3不置。

当T2溢出时TE2=1,TD2只能用软件清0

当RCLK=1或TCLK=1时,TF2将不置位

EXF2:T2外部标记

当EXEN2=1时,T2EX/P1.1引脚上的负跳变引起T2的捕捉/重装操作,此时EXF2=1。在T2中断

允许时,EXF2=1将弓|起中断,EXE2只能用软件清除。在T2的递增、递减计数模式下(DCEN=1)

EXF2的置位将不引起中断。

RCLK:接收时钟允许

当RCLK=1时,T2的溢出脉冲可用作串行口的接收时钟信号,适于串行口模式1、3当RCLK=0

时,T1的溢出脉冲用作串行口接收时钟信号

TCLK:发送时钟允许

当RCLK=1时,T2的溢出脉冲可用作串行口的接收时钟信号,适于串行口模式1、3当RCLK=O

时,T1的溢出脉冲用作串行口发送时钟信号

EXEN2:T2外部事件(引起捕捉/重装的外部信号)允许,即外部使能标志

当EXEN2=1时,如果T2没有作串行时钟输出(即RCLK+TCLQ0),则在T2EX/P1.1引脚跳变将

引起T2的捕捉/重赛桑作;

当EXEN2=0时,在T2EX引脚的负跳变将不起作用

TR2:T2计数控制位;TR2=1时允许计数/定时。

C/T2:外部计数器/定时器选择位;OT2=1时为计数器,计数脉冲来自T2(P1.0);下降沿触发

OT2=0时为内部定时器,以震荡脉冲的十二分频信号为计数信

号。

CP/RL2:捕捉/重装选择

当CP/RL2=1且EXEN2=1时,T2EXZP1.1弓也却的负跳变将弓|起捕捉操作

当CP/RL2=0且EXEN2=1时,T2EX/P1.1弓脚的负跳变将弓|起重赛果作

当CP/RL2=0且EXEN2=0时,T2的溢出将引起T2的自动重辘作

当RCLK+TCUQ1时,CP/RL2控制位不起作用,T2被强制工作于重装方式。重装方式发生于T2溢

出时,常用来作波特率发生器。

7、SOON:串行口控制寄存器

寄膈蜘98H,位寻址9FH~98H.

位地址9F9E9D9C9B9A9998

位符号SM0SM1SM2RENTB8RB8TIRI

SMO、SM1:串行口工作方式僻位

SMOSM1方式功能说明

000同步移位寄存器方式(通常用于犷屣I/O口)

01110位异步收发(8位数据).波特率可变(由定时器1的溢出率控制)

102II位异步收发(9位数据).波特率固定

11311位异步收发(9位数据).波特率可变(由定时器1的溢出率控制)

SM2:多机通信控制位

对于方式0:SM2=0„

对于方式1:SM2=1,只有接到靛的停止位才激活RI。

对于方式2和3为多机通信控制位;SM2=1,则接收的第9磔据为0时不激活Ri

REN:允许/禁止串行口接收的控制位,REN=1允许接U嫁据

TB8:在方式2和方式3中,是被发送的第9磔据,可根据需要由软件置1或清零,也可以作为

奇偶校验位,在方式1中是停止位。

RB8:在方式2和方式3中,是被接收的第9位数据(来自第TB8位);在方式1中,RB8收到的

是停止位,在方式0中不用。

TI:串行口发送中断请求标志位

当发送完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。

RI:串行口接收中断请求标志位

当接收完一帧串行数据后,由硬件置1;码专向中断服务程序后,用软件清0。

8、PSW:程序状态字

寄缁飒D0H,位寻址D7H~D0Ho

位地址D7D6D5D4D3D2D1DO

位符号CYACF0RS1RS0OV-P

CY-a位标记。CY=1表示运算时有曲沛生。

AC一半进位标记。补助进位位;AO1表示运算时较低4位有进位产生。

F0一用户设定标记

RS1、RS0一4个工作寄存器区的选择位。

RS1RSO选择的寄存器组

00寄存器组0

01寄存器组1

10寄存器组2

11寄存器组3

OV一溢出标记.OV=1表示运算时有益出产生

P~~奇偶校验标记.奇偶位;P=0表示A中1的个数是偶数,P=1表示A中1的个数是奇数。

9、PCON:电源控制器及波特率选择寄存器

字节地址=87H,不可位寻址

D7D6D5D4D3D2DD0

SMOD(SMODO)(LVDF)(POF)GF1GF0PDIDL

SMOD一波特率倍增位

SMOD=1:串口方式1,2,3时,波特率正常

SMOD=0:串口方式1,2,3时,波特率加倍

(SMODO)(LVDF)(POF)是STC单片机特有的功能

GF1、GFO一用户通用标记,用户课自由使用

PD一掉电模式控制位,PD=1时进入掉电模式,在硬件复位或外中断低电平触发或由下降沿触发

恢复。进入掉电模式,外部晶振,cpu,定时器,串行口全部停止工作,只有外部中断工作

IDL-空闲模式控制位,IDL=1时进入空闲模式,除cpu外,其余继续工作。

在AT89S51中PCON.4是电源断电标记位POF,上电是为1

进入空闲模式:PCON=0x01;之前执行AUXR=OxFF;定义空闲模式下看门狗WDT不计数。

定时器

6)对TMOD赋值,以确定T0和T1的工作方式

7)计算初值,并将初值写入THO.TLO或TH1,TL1

8)中断方式时,对IE赋值,开放中断

9)使TRO或TR1置位,启动定时器计数器定时或计数

能在主程序完成的功能就不在中断函数中些,否则一定要高效简洁

方式0和方式3很少用,方式1用作16位的计数器,方式2用在串口波特率发生器

1、发光二极管以一秒亮灭,11.0592M晶振

•定时器0工作方式1

#include<reg52.h>〃52系列单片机头文件

#defineucharunsignedchar

#defineuintunsignedint

sbitled1=P1A0;

ucharnum;

voidmain()

(

TMOD=0x01;〃设置定时器0为工作方式1(M1M0为01)

THO=(65536-45872)/256;〃装初值11.0592M晶振定时50ms为45872

TLO=(65536-45872)%256;

EA=1;〃开总中断

ET0=1;〃开定时器0中断

TR0=1;〃启动定时器0

while(1)〃程序停止在这里等待中断发生

r

\

if(num==200)〃如果了200次,说明1秒时间到

num=0;〃然后把num清0重新再计200次

Ied1=-led1;〃让发光管状态取反

)

)

)

voidT0_time()interrupt1

(

TH0=(65536-45872)/256;〃重装初值

TL0=(65536-45872)%256;

num++;

)

•定时器0工作方式0

1、定时器方式0为13位计数器,最多能装载的数2八=8192个,所以最多经过8192个机器周期该计数

器就会溢出一次,向cpu申请中断

2、计算机器周期T,晶振为11.0592MHz,那么机器周期为12*(1/11059200)=1.0851微s,若

t=5ms,则N=5000/1.0851=4607

3、TH0=(8192-4607)/32;中,对32求模是因为定时器方式0为13位计数器,计数支使用了TL0的低5

位,这5位最多装载32个数,再加1进位。16位计数器装载256个数

voidmain()

(

TMOD=0x00;〃设置定时器0为工作方式0(00000000)

TH0=(8192-4607)/32;〃题值

TL0=(8192-4607)%32;

EA=1;〃开总中断

日'0=1;〃开定时器0中断

丁印=1;//启动定时器0

•定时器T0的定时方式2

1、定时器2被称为8位初值自动装载的8位定时器/计数器,THX被作为常数缓冲器,TD(计数溢出时,

在溢出标志TFX置1的同时,还自动将THX中的常数重新装入TLX中,使TLX从初值开始重新计数,提

高定时的精度。

2、定时器2特别适合做较精确的脉冲信号发生器,此时晶振懈一定要是12的整数倍。

方式2为8位计数器,最多装2"8=256个,即使用12MHz晶振,最多只有256微秒

3、机器周期为12*(1/11059200)=1.0851微s,计时1s,当计250个数,需1.0851*250=271.275微

秒。需要溢出1000000/271.275=3686,若为12MHz晶振,则溢出4000次

4、主要应用在串口波特率发生器。

#include<reg52.h>//52系列单片机头文件

#defineucharunsignedchar

#defineuintunsignedint

sbitIed1=P1A0;

uintnum;〃3686远远超过了uchar的范围

voidmain()

(

TMOD=0x02;〃设置定时器0为工作方式2(00000010)

TH0=6;//装初值

TL0=6;

EA=1;〃开总中断

日"0=1;〃开定时器0中断

TR0=1;〃启动定时器0

while(1)〃程序停止在这里等待中断发生

(

if(num==3686)〃如果^了3686次,说明1秒时间到

(

num=0;〃然后把num清0重新再计3686次

Ied1=~led1;〃让发光管状态取反

)

)

•定时方式3

1、方式3只适用于定时器/计数器T0,当设定定时器T1为方式3,定时器T1不计数,T0分成两

个独立的8位计数器TLO和TH0o

2、其中TLO为正常8位计数器,计数溢出后置位TFO,并向CPU申请中断,之后重新装初值。TH0

将占用定时器T1的。

3、在工作方式3时,T1一定不要用在有中断的场合,不过可以用来当做串行口的波特率发生器。

TLO计数器对应的8位定时器

#include<reg52.h>〃52系列单片机头文件

#defineucharunsignedchar

#defineuintunsignedint

sbitIed1=P1A0;

sbitIed2=P1A1;

uintnum1,num2;

voidmain()

(

TMOD=0x03;〃设置定时器0为工作方式3(00000011)

TH0=6;//装初值

TL0=6;

EA=1;〃开总中断

ET0=1;〃开定时器0中断

ET1=1;〃开定时器1中断

TR0=1;〃启动定时器0

TR1=1;〃启动定时器0的高8位计数器

while(1)〃程序停止在这里等待中断发生

(

if(num1>=3686)〃如果了3686次,说明1秒时间到

(

num1=0;〃然后把num1清0重新再计3686次

Ied1=~led1;〃让发光管状态取反

)

if(num2>=1843)〃如果到了1843次,说明半秒时间到

(

num2=0;〃然后把num2清0重新再计1843次

Ied2=~Ied2;〃让发光管状态取反

)

)

)

voidTL0_time()interrupt1

(

TL0=6;〃重装初值

num1++;

}voidTH0_time()interrupt3

(

TH0=6;〃重装初值

num2++;

1、定时器0的方式1实现第一个发光二极管以200ms间隔闪烁,定时器1的方式1实现数码

管前两位59s循环计时

#include<reg52.h>//52系列单片机头文件

#defineucharunsignedchar

#defineuintunsignedint

sbitIed1=P1A0;

ucharcodetablet]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

voiddelayms(uint);

voiddisplay(uchar,uchar);

ucharnum,num1,num2,shi,ge;

voidmain()

TMOD=0x01;〃设置定时器0为工作方式1(M1M001)

TH0=(65536-45872)/256;〃装初值11.0592M晶振定时50ms为45872

TL0=(65536-45872)%256;

THU(65536-45872)/256;//装初值11.0592M晶振定时50ms为45872

TL1=(65536-45872)%256;

EA=1;〃开总中断

ET0=1;〃开定时器0中断

ET1=1;〃开定时器1中断

TR0=1;〃启动定时器0

TR1=1;〃启动定时器1

while(1)〃程序在这里不停地对数码管动态扫描同时等待中断

display(shi,ge);

)

voiddisplay(ucharshi,ucharge)〃显示子函数

(

P0=tabletshi];〃送十位段选辘

P0=0xfe;〃送位选数据

delayms(5);//延时

PO=table[ge];〃送个位段选数据

PO=Oxfd;

delayms(5);

)

voiddelayms(uintxms)

(

uinti,j;

for(i=xms;i>0;i-)//i=xms即延时约xms毫秒

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

)

voidT0_time()interrupt1

(

TH0=(65536-45872)/256;〃重装初值

TL0=(65536-45872)%256;

num1++;

if(num1==4)〃如果到了4次,说明200ms时间到了

(

num1=0;〃清零,重新再计

Ied1=~led1;

)

voidT1_time()interrupt3

TH1=(65536-45872)/256;〃重装初值

TL1=(65536-45872)%256;

num++;

if(num2==20)〃说明一秒到

(

num2=0;

num++;

if(num==60)〃这个数送数码管显示,到60归零

num=O;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论