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