将三个子函数用外部中断来控制的中断程序怎么写
时间: 2023-11-26 17:04:22 浏览: 32
好的,这里提供一个基于STC89C52单片机的实现代码,使用外部中断控制3个子函数。
```c
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
uchar i, j, k;
void delay(uint n)
{
while(n--);
}
void left_right()
{
while(1)
{
led1 = led8 = 1;
delay(50000);
for(i=2,j=7; i<=4; i++,j--)
{
switch(i)
{
case 2:
led2 = led7 = 1;
break;
case 3:
led3 = led6 = 1;
break;
case 4:
led4 = led5 = 1;
break;
}
switch(j)
{
case 7:
led2 = led7 = 0;
break;
case 6:
led3 = led6 = 0;
break;
case 5:
led4 = led5 = 0;
break;
}
delay(50000);
}
led1 = led8 = 0;
delay(50000);
}
}
void right_left()
{
while(1)
{
led4 = led5 = 1;
delay(50000);
for(i=3,j=6; i>=1; i--,j++)
{
switch(i)
{
case 1:
led1 = led8 = 1;
break;
case 2:
led2 = led7 = 1;
break;
case 3:
led3 = led6 = 1;
break;
}
switch(j)
{
case 6:
led3 = led6 = 0;
break;
case 7:
led2 = led7 = 0;
break;
case 8:
led1 = led8 = 0;
break;
}
delay(50000);
}
led4 = led5 = 0;
delay(50000);
}
}
void blink()
{
while(1)
{
for(i=0; i<3; i++)
{
led1 = led2 = led3 = led4 = led5 = led6 = led7 = led8 = 0;
delay(50000);
led1 = led2 = led3 = led4 = led5 = led6 = led7 = led8 = 1;
delay(50000);
}
delay(50000);
}
}
void main()
{
EX0 = 1; //开启外部中断0
IT0 = 1; //设置外部中断0为下降沿触发
while(1)
{
//主程序空转
}
}
void int0_isr() interrupt 0 //外部中断0的中断服务程序
{
delay(1000); //简单的消抖
if(INT0 == 0) //检测INT0是否为下降沿触发
{
left_right(); //执行左右循环函数
}
else
{
right_left(); //执行右左循环函数
}
}
void int1_isr() interrupt 2 //外部中断1的中断服务程序
{
delay(1000); //简单的消抖
if(INT1 == 0) //检测INT1是否为下降沿触发
{
blink(); //执行闪烁函数
}
}
```
这个代码可以实现使用外部中断控制3个子函数,其中外部中断0用于控制左右循环函数,外部中断1用于控制闪烁函数。需要注意的是,需要在主函数中开启外部中断并设置中断触发方式,同时在中断服务程序中检测中断触发状态。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)