本笔记仅供学习交流
学习视频链接
【基础技能08】中断系统与外部中断应用
【基础技能09】定时器的基本原理与应用
大家可以参考一下欧老师的博客资料 https://bbs.21ic.com/icview-2477100-1-1.html
基本原理
中断
我不会讲那么学术化,我全部是按照自己的理解来讲的hhhhhh 野路子了
中断其实就和自定函数的感觉差不多
只不过中断的触发条件不需要我们自己设定 单片机帮你设定好了
代码部分中,我们需要设定中断函数,其实就是当你触发中断了,你想让单片机做点啥就写在这个函数里面就可以了
然后我们还需要打开中断的开关,让单片机处于中断可以被触发的状态
具体一点的比喻就是 (借用一下MC 哈哈哈)
你布置了一个活塞机(中断函数)但是你没有红石没有压力板(没有打开中断开关),用不了活塞机,所以你需要布置红石线路和压力板(打开中断开关)。当你踩到压力板上(触发中断),活塞机开始工作(中断函数工作)。大概就是这样,应该可以理解吧hhhhh。
(图片来自网络)
看一下中断的结构
(图片来自欧老师博客)
中断是存在优先级的 优先级从高到低依次是外0 定时器0 外部1 定时器1 串口
这个是控制开关的寄存器(图片来自欧老师博客)
这个是控制优先级的寄存器 (就是说万一多个中断同时触发,优先执行哪个中断函数)
这个是与中断初始化设置有关的寄存器
先上要求
好了直接上代码吧
代码
#include "reg52.h"
#include <intrins.h>
sbit l1=P0^0;
sbit l8=P0^7;
void delay(void) //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void selecthc573(unsigned char channel){
switch(channel){
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void LED(){
l1=0;
delay();
l1=1;
delay();
}
void init_it0(){
IT0=1;//设置为下降沿触发
EX0=1;//外部中断0开关打开
EA=1;//总中断开关打开
}
void inter_1() interrupt 0{// there must be the sign "interrupt 0"
l8=0;
delay();
l8=1;
}
void main (){
init_it0();
selecthc573(4);
while(1){
LED();
}
}
结果展示
中断功能演示
OK 下篇文章见