中断 定时器的使用

中断

单片机在执行任务的过程中,需要处理其他紧急事务,需要打断当前执行的任务,就需要使用中断服务。
中断按照种类分为定时器/计数器中断,外部中断,串口中断。这篇文章主要讲解定时器中断。

定时器

下面,我们直接引入代码进行讲解。
#include//常规操作,引入头文件

unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0XC6};//数码管

unsigned char tt;//变量定义
unsigned char num;
void Timer0Init(void);

void main(void)
{

P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;  
P2=0XC0;P0=0X04;P2=0XFF;P0=0XFF;   //数码管初始化程序

Timer0Init();//定时器初始化
EA=1;ET0=1;//打开总中断,打开定时器0,在这里,EA、ET0相当于一个开关,EA相当于一个总开关,ET0相当于一个小开关,这两个开关不打开,定时器就不会响应。

while(1)//这里该写什么写什么
{	
}

}

void Timer0Init(void) //5毫秒@11.0592MHz,这里是在烧写程序中生成的,烧写程序中设置好需要的时间,烧写器会自动生成。范围大概是0-6.5535ms
{
AUXR |= 0x80; //定时器时钟1T模式 // AUXR = AUXR|0x80; 0010 1010 | 1000 0000 =1010 1010
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}

void tm0_isr() interrupt 1//中断服务函数,函数名自己定义,后面跟的是中断编号,中断编号一定要对应需要使用的中断。
{
tt++;
if(tt = = 200)
{
tt=0;
P0=tab[num];
num++;if(num = = 12)num=0;
}
}
在这里插入图片描述
上图为中断服务对应的编号和优先级顺序,大家可以自行参考。
如果需要理解原理可以移步https://editor.csdn.net/md/?articleId=112068955,单片机复习篇。如有疑问可以私信。

——————————————————————————————————————
本文纯原创,如有侵权请联系删除,如有错误,敬请批评指正,谢谢大家。

你可能感兴趣的:(硬件,单片机)