51MCU中断和定时计数系统的工作原理.doc

51MCU中断和定时计数系统的工作原理.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51MCU中断和定时计数系统的工作原理

中断请求:MCS-51有5个中断请求源,分别是:外部中断0(中断标志位IE0)、外部中断1(中断标志位IE1)、定时器/计数器T0(中断请求标志位TF0)、定时器/计数器T1(中断请求标志位TF)、串行中断(中断请求标志位TI或者RI)。 定时器/计数器中断标志位和外部中断标志位锁存在TCON寄存器中(可位寻址): IT0:外部中断0的触发方式。(0为电平触发,1为下降沿触发,由软件设置)。 IE0:外部中断0的标志位。(当CPU检测到采样到的低电平时自动置1转向中断函数,一旦转向中断函数后由硬件自动清0) IT1和IE1与上相似。 TF0和TF1:片内定时/计数器T0/T1溢出中断请求标志。当定时/计数器T0/T1发生溢出时,置位TF0/TF1为1,并向CPU申请中断,一旦转向中断函数后由硬件自动清0。 TR0和TR1:开启T0和T1定时器(软件置1则开启)。 CPU对中断请求源的开关由IE寄存器控制(可位寻址): EX0和EX1:外部中断0和1的中断允许位。(置1打开) ET0和ET1:定时器/计数器T0和T1的中断允许位。(置1打开) ES:串行中断允许位。(置1打开) EA:中断总控制位。(置1打开) 定时器/计数器T0和T1的工作方式和模式由TMOD寄存器控制(不能位寻址): 高四位控制T1,低4位控制T0。 GATE:门控位。(为0时只由TR0/TR1启动定时器和计数器,为1时有TR0/TR1以及外中断引脚上的高电平共同启动定时器和计数器) C/T:计数器模式和定时器模式选择位。(0为定时器,1为计数器)当为定时器模式时,以振荡器的12分频(1/12)后的信号做计数信号;当为计数器模式时,以P3.4和P3.5引脚的外部输入脉冲计数(脉冲负跳变一次,计数加1。 M1、M0:工作方式选择位: 定时器/计数器T1/T0: 当M1M0=00时(方式0):由TH1的8位和TL1的低5位组成(TL1溢出后向TH1进位,TH1溢出后置位TCON中的TF1,进入中断)注意当计数溢出后,计数器为全0。 当M1M0=01时(方式1):由TH1的8位和TL1的8位组成(TL1溢出后向TH1进位,TH1溢出后置位TCON中的TF1,进入中断)注意当计数溢出后,计数器为全0。 当M1M0=10时(方式2):TH1作为常数缓冲器,当TL1计数溢出时(TL1溢出后置位TCON中的TF1,进入中断,而不向TH1置位了),TL1计数溢出后,自动将TH1中的常数送至TL1,使得TL1从TH1中设定的常数初值开始计算(此种方法在中断程序中不必重装初值)。 当M1M0=11时(方式3):只适应于T0(当T1处于方式3时相当于TR1=0,即未打开计数器),一般不会用到。 外部中断举例: #includereg52.h #define uchar unsigned char #define uint unsigned int sbit KEY1 = P3^2; //外部中断0的引脚(INT0) sbit KEY2 = P3^3; //外部中断1的引脚(INT1) uchar Count = 100; uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示的从0到9的字符表 /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; idel; i++) for(j=0; j1827; j++) ; } /******************************************************************** * 名称 : Outside_Init() * 功能 : 外部中断1 的初始化 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Outside_Init(void) { EX1 = 1; //开外部中断1 IT

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档