51中断-定时器/计数器中断
2016-08-16 15:36
225 查看
什么时中断:
是指在执行程序的过程中,当出现每种情况,发出紧急的事件或其他情况时,
有服务对象向CPU发出中断请求的信号,CPU暂时中断当前的程序的执行,而转去
执行相应的处理程序,待处理程序完毕以后,再返回来执行原来被中断的程序。
关于中断以定时/计数器0中断为例;
void timer0_init()
{
EA = 1; //打开总中断;
TMOD |= 0x01; //选定定时/计数器0的工作的方式
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256; //初始化定时/计数器的值
ET0 = 1; //打开中断服务程序
TR0 = 1; //打开计数器
}
void timer0_isr() interrupt 1 // 中断的服务的程序
{
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256; //触发中断后再一次初始化值
change(); //调用一个程序,假设改变led的灯
}
void main()
{
timer0_init(); //中断的初始化;
while(1);
}
这个程序的运行的过程是,先是中断的初始化,然后一直while里面死循环,每当
计数器溢出的时候,触发中断函数,进入中断的服务函数,执行中断函数timer0_isr()
由于计数器没有关闭,所以计数器一直在计数,所以每隔20ms(晶振12mhz)触发一次中
断。
注:
溢出:是指16位的计数器(可以选择计数器的工作的方式),每次累加到16位的最大的
值溢出的时候,触发中断。
ET0 :如果把它置为0的话,那么就算计数器的溢出也不会调用中断服务程序
TR0 :如果将它置为0的话,那么计数器将不再累加
累加:什么时候累加,是根据晶振的hz来决定的
单片机的晶振频率 :12M震荡周期1/12us
单片机的机器的周期:12个机器周期,即加一次1us;
interrupt 1: 1.区分不同的函数
2.
1 定时器0
2 外部中断1
3 定时器1
4 串行中断
3.后面还有跟using 的,主要为了说明使用哪一组的寄存器,可以不写
中断程序就像C语言的里面的goto语句,打断程序的执行的顺序,但是又是不同的,因为,goto
只有程序执行到那边的时候,进判断的时候程序将会跳转,而且跳转完不能够再次回到被中断的
那个地方依旧在执行完的时候继续一次的执行,但是中断,是无论在程序的哪个地方只要中断一旦
触发的时候的那么就执行中断子程序(中断服务程序)但是前提是打开中断程序,执行行完中断的依旧回到被中断的地方
计数器一直开着那么只要计数器溢出,那么就触发中断。
其余的中断类似,只不过控制的寄存器不一样;
是指在执行程序的过程中,当出现每种情况,发出紧急的事件或其他情况时,
有服务对象向CPU发出中断请求的信号,CPU暂时中断当前的程序的执行,而转去
执行相应的处理程序,待处理程序完毕以后,再返回来执行原来被中断的程序。
关于中断以定时/计数器0中断为例;
void timer0_init()
{
EA = 1; //打开总中断;
TMOD |= 0x01; //选定定时/计数器0的工作的方式
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256; //初始化定时/计数器的值
ET0 = 1; //打开中断服务程序
TR0 = 1; //打开计数器
}
void timer0_isr() interrupt 1 // 中断的服务的程序
{
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256; //触发中断后再一次初始化值
change(); //调用一个程序,假设改变led的灯
}
void main()
{
timer0_init(); //中断的初始化;
while(1);
}
这个程序的运行的过程是,先是中断的初始化,然后一直while里面死循环,每当
计数器溢出的时候,触发中断函数,进入中断的服务函数,执行中断函数timer0_isr()
由于计数器没有关闭,所以计数器一直在计数,所以每隔20ms(晶振12mhz)触发一次中
断。
注:
溢出:是指16位的计数器(可以选择计数器的工作的方式),每次累加到16位的最大的
值溢出的时候,触发中断。
ET0 :如果把它置为0的话,那么就算计数器的溢出也不会调用中断服务程序
TR0 :如果将它置为0的话,那么计数器将不再累加
累加:什么时候累加,是根据晶振的hz来决定的
单片机的晶振频率 :12M震荡周期1/12us
单片机的机器的周期:12个机器周期,即加一次1us;
interrupt 1: 1.区分不同的函数
2.
1 定时器0
2 外部中断1
3 定时器1
4 串行中断
3.后面还有跟using 的,主要为了说明使用哪一组的寄存器,可以不写
中断程序就像C语言的里面的goto语句,打断程序的执行的顺序,但是又是不同的,因为,goto
只有程序执行到那边的时候,进判断的时候程序将会跳转,而且跳转完不能够再次回到被中断的
那个地方依旧在执行完的时候继续一次的执行,但是中断,是无论在程序的哪个地方只要中断一旦
触发的时候的那么就执行中断子程序(中断服务程序)但是前提是打开中断程序,执行行完中断的依旧回到被中断的地方
计数器一直开着那么只要计数器溢出,那么就触发中断。
其余的中断类似,只不过控制的寄存器不一样;
相关文章推荐
- SQL2005 性能监视器计数器错误解决方法
- SQL Server中的Forwarded Record计数器影响IO性能的解决方法
- MySQL中实现高性能高并发计数器方案(例如文章点击数)
- alert中断settimeout计时功能
- 解决jQuery ajax请求在IE6中莫名中断的问题
- 坏狼php学习 计数器实例代码
- php 更新数据库中断的解决方法
- Java线程中断的本质深入理解
- JAVA多线程之中断机制stop()、interrupted()、isInterrupted()
- php实现计数器方法小结
- PHP垃圾回收机制引用计数器概念分析
- Android单片机与蓝牙模块通信实例代码
- PHP图形计数器程序显示网站用户浏览量
- 使用JavaScript制作一个简单的计数器的方法
- 详解Java编程中对线程的中断处理
- Python的Django框架中消息通知的计数器实现教程
- Django中实现一个高性能计数器(Counter)实例
- 51单片机的中断整理
- 时钟+温度+遥控设置,综合时钟例子
- 从硬件到纯软件,回顾一个老工程师的经历之路!