定时器中断&外部中断 区别联系

您所在的位置:网站首页 t0传感器异常 定时器中断&外部中断 区别联系

定时器中断&外部中断 区别联系

2024-07-16 05:01| 来源: 网络整理| 查看: 265

开头,先做一个小总结:

什么时候用定时器/计数器?什么时候用外部中断?   为什么?

        如果说他们最大的区别,我自己学习总结的认为:

定时器/计数器 是软件成面的,也就是通过代码来实现,我们可以通过定时器/计数器中断控制寄存器 TMOD 来设置一个时间(下面会讲到),设置这个时间的目的是在计算机执行程序的过程中,在除了 main()函数 中 while(1) 的无限循环下,在定时器中断处理函数(void Time0Handler() interrupt 1)中,也进行无限循环,只不过每次循环的时间我们都可以自己设定(通过TMOD);外部中断是硬件中断;比起定时器中断就简单多了,来自外部,开启后,不管你是什么,触发对应的引脚,就执行(void Ex0_Handler() interrupt 0 )外部中断处理函数。

下面来详细讲讲:

定时器/计数器

C51中的定时器和计数器是同一个硬件电路支持的,所有原理是一样的,标准C51有2个定时器/计数器:T0和T1。

定时/计数器的寄存器也分为可位寻址和不可位寻址两种

可位寻址和不可位寻址的区别是什么呢?

-可位寻址,就是指它的寄存器可以单独领出来,进行赋值和传递;

-不可位寻址,就是指它的寄存器不可以单独领出来,两个定时器的命名有重复,我们一般的操作是将 TMOD 进行 位运算 来进行定时器的选取和赋值:

//1. 配置定时器0工作模式位16位计时 //设置定时器模式 //选择定时器1 TMOD &= 0xF0; TMOD |= 0x01; //2. 给值,定一个0.5出来 TL0=0x33; TH0=0xFE; TL0&TH0,如何定呢? 根据选取的模式(TMOD)中的M1&M0,一般我们选择01就行,根据芯片手册可以了解到,01模式,是将TH&TL的位全用上,一共16个位,可以计数2^16个数,也就是65536下,可以加65536下;加1进行了多久呢?当晶振频率是11.0592MHz的时候,等于11059.2KHz = 11059200Hz 机器周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 = 12 / 时钟频率 秒 = 12 / 11059200 秒 = 12 000 000 / 11059200 微秒 = 1.085 微秒;将2^16 * 1.085us,可以算出TF0(计数溢出标志位)出现溢出时,需要71ms,也就是说,一次计数,最长71ms,是不是蛮长的; 外部中断

        先启动一下!

void EX0_Init() 外部中断0,启动! { EX0 = 1; IT0 = 0; //低电平触发 //1的话就是下降言触发 }

       顾名思义,外部中断来自外部,它是硬件中断,是硬件成面的中断,因此外部中断比定时器中断快(硬件肯定比软件快,比软件精准度更高);

        外部中断我们可以简单的理解为,他就是某个引脚引起的,每次这个中断引脚受到了触发,外部中断程序就立马执行(计算机会放下手下的工作,去执行中断程序,处理完成后,再转战之前的程序),因此可以明白,只要硬件上接到了中断引脚就行,用来接收外部的信号,不管是震动传感器,光传感器,不管是什么都可以,只要是来自外部的信号,给予了该引脚,都可以使用外部中断。

常见51单片机中断查询次序

查询次序越高,这个中断的优先级就越高。

当然,在大家写中断处理函数的时候,千万要注意函数后面的中断号!

感谢大家阅读,如果有什么错误,还请多多指教。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3