单片机定时器,中断的问题
作者&投稿:始琬 (若有异议请与网页底部的电邮联系)
单片机定时器中断的问题~
IE0/1 外部中断0/1请求标志
IT0/1 外部中断源0/1触发方式控制
TF0/1 定时器T0/1溢出中断标志
RI 串口的接收中断
TI 串口的发送中断
2、中断时能控制
EA CPU中断开放标志
ET0/1/2 定时器T0/1/2中断允许位
ES 串口中断允许位
EX0/1 外部中断0/1允许位
3、中断优先级控制
PT0/1/2 定时器T0/1/2中断优先级控制
PS 串口中断优先级控制
PX0/1 外部中断0/1优先级控制
你是初学者吧,你可以到我文库里看一本叫 “教你初学单片机”的文档,看完以后你自己就会明白了哈
这个程序你要明白几个知识点
1、这个中断函数是每1毫秒(12M晶振下)执行一次。
2、return:执行return之后,整个函数返回了,return之后的代码不在执行。
看你的代码
beep=-beep;应该是个喇叭什么的吧,只要中断函数执行,喇叭就会响。
如果L_LED等于0的时候,t会自加到150,在没有达到150之前,都会运行return,所以,这段时间是不会运行t=0;DelayMS(20);的,所以这段时间里中断美毫秒执行一次,DEEP也就每毫秒取反,输出方波,驱动喇叭
同理
L_LED等于1的时候,也是一样的原理
当达到条件运行DelayMS(20);的时候,程序中断会再这里空耗20毫秒,这20毫秒时间里,DEEP没有输出方波,喇叭就不响了。
应该看懂了吧,好好想想,想不通再联系我
这个程序你要明白几个知识点
1、这个中断函数是每1毫秒(12M晶振下)执行一次。
2、return:执行return之后,整个函数返回了,return之后的代码不在执行。
看你的代码
beep=-beep;应该是个喇叭什么的吧,只要中断函数执行,喇叭就会响。
如果L_LED等于0的时候,t会自加到150,在没有达到150之前,都会运行return,所以,这段时间是不会运行t=0;DelayMS(20);的,所以这段时间里中断美毫秒执行一次,DEEP也就每毫秒取反,输出方波,驱动喇叭
同理 L_LED等于1的时候,也是一样的原理
当达到条件运行DelayMS(20);的时候,程序中断会再这里空耗20毫秒,这20毫秒时间里,DEEP没有输出方波,喇叭就不响了。
应该看懂了吧,好好想想,想不通再联系我
把while(1)里面的去掉
在timer0里面把 P10=0;改成
P10 = ~ P10;
如果还看不出来,把定时的时间加长。
=================
因为你这样,定时器中断刚刚把LED置0,while里面就把LED置1了。太快了,肉眼看不见
IE0/1 外部中断0/1请求标志
IT0/1 外部中断源0/1触发方式控制
TF0/1 定时器T0/1溢出中断标志
RI 串口的接收中断
TI 串口的发送中断
2、中断时能控制
EA CPU中断开放标志
ET0/1/2 定时器T0/1/2中断允许位
ES 串口中断允许位
EX0/1 外部中断0/1允许位
3、中断优先级控制
PT0/1/2 定时器T0/1/2中断优先级控制
PS 串口中断优先级控制
PX0/1 外部中断0/1优先级控制
你是初学者吧,你可以到我文库里看一本叫 “教你初学单片机”的文档,看完以后你自己就会明白了哈
这个程序你要明白几个知识点
1、这个中断函数是每1毫秒(12M晶振下)执行一次。
2、return:执行return之后,整个函数返回了,return之后的代码不在执行。
看你的代码
beep=-beep;应该是个喇叭什么的吧,只要中断函数执行,喇叭就会响。
如果L_LED等于0的时候,t会自加到150,在没有达到150之前,都会运行return,所以,这段时间是不会运行t=0;DelayMS(20);的,所以这段时间里中断美毫秒执行一次,DEEP也就每毫秒取反,输出方波,驱动喇叭
同理
L_LED等于1的时候,也是一样的原理
当达到条件运行DelayMS(20);的时候,程序中断会再这里空耗20毫秒,这20毫秒时间里,DEEP没有输出方波,喇叭就不响了。
应该看懂了吧,好好想想,想不通再联系我