定时器与中断

中断系统:


中断的含义:

中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作,转而去处理紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断

实现这种功能的部件称为中断系统,请示 CPU 中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在 CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU 总是先响应优先级别最高的中断请求
 

注意:中断要求 “快进快出”


如何声明中断函数:

注意:每个函数都有自己的中断优先级,CPU优先处理优先级高的中断函数。


什么函数适合放在中断中?

因为放在中断中的函数要符合快进快出的原则,LED,蜂鸣器,数码管显示可以放在定时器中断里,在while()循环里放变量赋值 


定时器初始化函数:

注意,再写中断函数的时候,还需要先生成定时器初始化函数,这个函数还是不用我们自己写,使用stc-isp软件他会自动帮我们生成。生成的函数放在main函数中执行一次即可。

  • 系统频率一般选择12MHz
  • 定时器时钟1T模式最多计时(65536/12)us,12T模式最多计时65535us
  • 定时器选择按需求选择即可,一般定时选择定时器2
  • 定时长度也是按需选择

最后点击生成代码即可,记得要把代码放在void vTimer2Init()函数内部,然后再在mian函数中调用一次函数才能生效。

程序示例:

//中断服务程序
void vTimer2_ISR() interrupt 12 //中断入口
{
  cnt_led++;   //每过1mscnt_led加1
  if(cnt_led<=200)
 {
    P0=~0x01;    //0-200时P1亮 
    P2=0x80;     //打开锁存器
    P2=0;        //关闭锁存器
   
 }
 else if(cnt_led<=400)
{
   P0=0xff;    //200-400msP1灭  
   P2=0x80;
   P2=0;
}  
else
cnt_led=0;    //大于400mscnt_led清零,重新计时
}
//这样就能实现P1间隔2ms亮灭了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱写代码的倒霉蛋

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值