51中断

来源:互联网 发布:背离指标源码 编辑:程序博客网 时间:2024/05/16 01:36

关于51单片机中断

定时器0  定时器1  外部中断0  外部中断1

1、对于优先级

外部中断0>定时器0>外部中断1>定时器1;

即外部的优先级高,有0的优先级都比1的优先级高。

2、关于定时器初始化

定时器的初始化格式:

如:void InitTimer0(void)
       {
          TMOD = 0x01;
          TH0 = 0x0FF;
          TL0 = 0x9C;
          EA = 1;      //开总中断
          ET0 = 1;   //允许T0中断
          TR0 = 1;  //启动定时器T0,不一定在此处开,当需要启动时再开,在此处就将他设为0
       }
(1)首先是模式问题,定时器需要设定模式,模式TMOD的设定为八个位,高四位定义T1,低四位 定义T0,八位分别为:GATE  C/T  M1  M0     GATE  C/T  M1  M0    对于GATE基本设为0 ;C/T为计数定时位,定时是设为0,计数设为1;M0、M1表示所选模式,有模式0为00(最大定时8192um),模式1为01(最大定时65.536ms),模式2为10。定时时间不长首选模式二。以上程序是选用定时器0的模式1.

(2)其次是初值问题,以上程序中是选用模式1,定时100um,所以初值为TH0 = 0x0FF;TL0 = 0x9C;。对于初值的计算,就模式一来讨论定时时间,定时时间=(2^16-初值)*振荡周期*12,这样就可以求出初值,另一种方法,TH0=(65536-定时时间‘此时间用um为单位’) /256,TL0=(65536-定时时间‘以um为单位’)%256。

(3)之后就是开总中断,允许T0中断,启动定时器T0。 

 

3、定时器中断函数:

void Timer0_isr(void) interrupt 1   基本格式,其中interrupt为优先级,定时器0的优先级为1,而外部中断0为0,外部中断1为2,定时器1为3。

当开启定时器即TR0/1=1;此时进入定时状态,而这时主函数还是一样在运行,定时器在定时,直到定时到我们设定的定时时间时,主函数暂停运行,进入到中断函数,执行中断函数,执行完后又返回主函数,只要定时器没有关,定时器就不断循环定时,没到定时时间主函数就暂停去执行中断函数。

 

4、外部中断

对于外部中断的初始化,即

 

开总中断EA=1,

开外部中断0/1 EX0/1=1,

设置触发方式,IT,IT=0为电平触发方式,低电平触发,IT=1为边沿触发方式,下降沿触发。

 

对于中断函数,

P3^2口为外部中断0接口,假设我们是电平触发方式,当此端口检测到一个低电平时,就产生中断执行中断函数,执行完后又返回主函数。只要检测到低电平就进行如此循环。P3^3口为外部中断1接口。

 

 

原创粉丝点击