教学内容与重难点
【内容01】理解时间片的程序设计思维。
【内容02】掌握外部中断信号控制时间片运行的程序设计思路。
【内容03】完成实训项目:外部中断控制跑马灯的运行与暂停。
——–学生实践实操,老师讲解演示。
【内容04】专创融合专题。
【重点】实训项目:外部中断控制跑马灯的运行与暂停 。
【难点】外部中断信号控制时间片运行的程序设计思路 。
教学单元核心内容与学习资源
实训案例:外部中断控制跑马灯的运行与暂停
新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务:
1-设计LED灯检测函数,同时点亮4个LED灯,延时,然后同时关闭4个LED灯。灯光检测完成后,开始进入跑马灯。
2-跑马灯过程为:D4灯亮,其余熄灭,延时,D3灯亮,其余熄灭,延时,D6灯亮,其余熄灭,延时,D5灯亮,其余熄灭,延时…如此反复。
3-初始化SW1按键,即P1_2引脚为外部中断,下降沿触发。
4-在外部中断的服务函数中,控制跑马灯的运行与暂停互相切换。

unsigned char F_LED = 1;
/*=======================简单的延时函数========================*/
void Delay(unsigned int t)
{
while(t--)
{
while(F_LED == 0); //延时暂停
}
}
/*========================跑马灯控制函数=======================*/
void LED_Running()
{
D4 = 1;
D3 = 0;
D6 = 0;
D5 = 0;
Delay(60000);
D4 = 0;
D3 = 1;
D6 = 0;
D5 = 0;
Delay(60000);
D4 = 0;
D3 = 0;
D6 = 1;
D5 = 0;
Delay(60000);
D4 = 0;
D3 = 0;
D6 = 0;
D5 = 1;
Delay(60000);
}
/*=======================外部中断初始化函数====================*/
void Init_INTP1()
{
IEN2 |= 0x10; //使能P1端口组的外部中断
P1IEN |= 0x04; //使能P1_2引脚的外部中断
PICTL |= 0x02; //下降沿触发
EA = 1; //使能总中断
}
/*=======================外部中断服务函数======================*/
#pragma vector = P1INT_VECTOR
__interrupt void Service_INTP1()
{
//判断P1端口组中,是否为P1_2引脚产生的中断触发
if((P1IFG & 0x04) == 0x04)
{
if(F_LED == 1) //切换跑马灯的暂停与运行状态
{
F_LED = 0;
}
else
{
F_LED = 1;
}
}
P1IFG = 0;
P1IF = 0;
}
/*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
LED_Check(); //灯光检测
Init_INTP1(); //外部中断初始化
while(1)
{
LED_Running(); //循环控制跑马灯
}
}
