时间:
2023年9月20日
学习目标:
定时器模块and中断程序模块
学习内容:
中断的初始化函数:配置中断源;中断服务函数:不能调用,无参,无返回值,使用interrupt修饰
对于iap15f2k61s2来说有14个中断源,其中有4个固定最低优先级INT2,INT3,INT4,TIME2,其他的有俩个优先级,可实现2级中断嵌套,INT0,INT1能将单片机从掉电模式唤醒。
定时器的定时和计数功能,若计数脉冲来自系统时钟是定时功能,来自外部引脚p34,p35,p31是计数功能。注意定时器T0,T1的四种工作方式,T2则为固定16自动重装初值,一般用做串口波特率发生器或可编程时钟输出源。
代码部分示例:
定时器初始化函数:
void Timer1_Init(void) //1毫秒@11.0592MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x66; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1=1;
EA=1;
}
定时器中断函数:
void time_1() interrupt 3
{
ulms++;
if(!(ulms%1000))
{
ucsec++;
disp_led(ucsec);
}
}
外部中断初始化函数:
void sys_init()//中断初始化
{
EX0=1;//外部中断的中断允许位
IT0=1;//外部中断的中断类型
EX1=1;
IT1=1;
EA=1;//总中断
}
外部中断服务函数:
void isr_intr0() interrupt 0//外部中断0的中断服务函数
{
ucled^=1;
P0=~ucled;
P2=P2&0X1F|0X80;
P2=P2&0X1F;
}
void isr_intr1() interrupt 2//外部中断1的中断服务函数
{
ucled^=2;
P0=~ucled;
P2=P2&0X1F|0X80;
P2=P2&0X1F;
}
总结:
当然代码不是我自己想出来的,我也是跟着书上敲,但是原理基本都是懂了的,下面就是自己更加熟悉一下代码逻辑和编写方面,每天学一点嘛!