定时器中断&外部中断 区别联系 |
您所在的位置:网站首页 › t0传感器异常 › 定时器中断&外部中断 区别联系 |
开头,先做一个小总结: 什么时候用定时器/计数器?什么时候用外部中断? 为什么?如果说他们最大的区别,我自己学习总结的认为: 定时器/计数器 是软件成面的,也就是通过代码来实现,我们可以通过定时器/计数器中断控制寄存器 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 微秒;将先启动一下! void EX0_Init() 外部中断0,启动! { EX0 = 1; IT0 = 0; //低电平触发 //1的话就是下降言触发 }顾名思义,外部中断来自外部,它是硬件中断,是硬件成面的中断,因此外部中断比定时器中断快(硬件肯定比软件快,比软件精准度更高); 外部中断我们可以简单的理解为,他就是某个引脚引起的,每次这个中断引脚受到了触发,外部中断程序就立马执行(计算机会放下手下的工作,去执行中断程序,处理完成后,再转战之前的程序),因此可以明白,只要硬件上接到了中断引脚就行,用来接收外部的信号,不管是震动传感器,光传感器,不管是什么都可以,只要是来自外部的信号,给予了该引脚,都可以使用外部中断。 常见51单片机中断查询次序查询次序越高,这个中断的优先级就越高。 当然,在大家写中断处理函数的时候,千万要注意函数后面的中断号! 感谢大家阅读,如果有什么错误,还请多多指教。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |