51单片机,如何并行运行
最近在学习单片机,关于两组流水灯同时运行的问题,一直不能解决。按下按键1,第一组流水线灯一直运行不停
按下按键2,第二组流水线灯一直运行不停
(按键2是外部中断)
现在使用了1个外部中断,按下按键2的时候,打开中断,就运行第二组流水灯了。第一组暂停了。
不能达到并行运行的效果。 再检查一下程序 或许没设置好死循环? 关键部分发出来看看? SLCoCo 发表于 2022-7-27 20:09
关键部分发出来看看?
#include<reg51.h>
#define uchar unsigned char
sbit P30 =P3^0;
sbit P00 =P0^0;
//#define u8 unsigned char
//#define u16 unsigned int
typedef unsigned char u8;
typedef unsigned int u16;
sbit key_s2 = P3^0;
sbit flag = P3^7;
//延时函数
void delay_ms(u16 x)
{
u16 i,j;
for(i=0;i<x;i++)
for(j=0;j<115;j++);
}
void int1Init()
{
EA = 1; //开总中断
EX1 = 1;//开外部中断1
EX0 = 1;
IT1 = 1;//外部中断1下降沿触发
IT0 = 1;
}
u16 i,j;
void main()
{
int1Init();
while(1)
{
if(key_s2 == 0)
{
delay_ms(20);
if(key_s2 == 0)
{
flag = 1;
flag = 0;
while(!key_s2);
}
}
}
}
//外部中断1中断服务程序
void int1() interrupt 2
{
for(i=0;i<20;i++)
{
P1 =~P1;
delay_ms(100);
}
}
void int0() interrupt 0
{
for(i=0;i<20;i++)
{
P30 =~P30;
delay_ms(100);
}
} run2u 发表于 2022-7-27 16:33
再检查一下程序 或许没设置好死循环?
#include<reg51.h>
#define uchar unsigned char
sbit P30 =P3^0;
sbit P00 =P0^0;
//#define u8 unsigned char
//#define u16 unsigned int
typedef unsigned char u8;
typedef unsigned int u16;
sbit key_s2 = P3^0;
sbit flag = P3^7;
//延时函数
void delay_ms(u16 x)
{
u16 i,j;
for(i=0;i<x;i++)
for(j=0;j<115;j++);
}
void int1Init()
{
EA = 1; //开总中断
EX1 = 1;//开外部中断1
EX0 = 1;
IT1 = 1;//外部中断1下降沿触发
IT0 = 1;
}
u16 i,j;
void main()
{
int1Init();
while(1)
{
if(key_s2 == 0)
{
delay_ms(20);
if(key_s2 == 0)
{
flag = 1;
flag = 0;
while(!key_s2);
}
}
}
}
//外部中断1中断服务程序
void int1() interrupt 2
{
for(i=0;i<20;i++)
{
P1 =~P1;
delay_ms(100);
}
}
void int0() interrupt 0
{
for(i=0;i<20;i++)
{
P30 =~P30;
delay_ms(100);
}
} SLCoCo 发表于 2022-7-27 20:09
关键部分发出来看看?
就比如看,电视一样,
在播放中央一套的时候,可以去调整音量,这样就是属于并行运行。
互不干涉。 你的思路在我看来错了一点,外部中断程序触发后,执行完外部中断程序之后,才会回到原先执行的程序。
这样的一个逻辑,就会使你理解的并行不会真实发生,这样也就意味着如果想要完成你并行的想法,就需要你写的外部中断程序中继续执行1组流水灯的功能程序,用到寄存器并读取中断触发时的状态值,继续执行1组流水灯对应的程序,并完成2组流水灯对应的程序。
希望对你有帮助! contest 发表于 2022-7-29 14:08
你的思路在我看来错了一点,外部中断程序触发后,执行完外部中断程序之后,才会回到原先执行的程序。
这样 ...
是的,中断运行的同时,继续运行第1组的流水灯程序。
使用74HC595吗? 81051006 发表于 2022-7-30 09:51
是的,中断运行的同时,继续运行第1组的流水灯程序。
使用74HC595吗?
如果想在单独使用芯片保存状态也是可以,这个思路没有错误。在我看来,更加简单的方法,也可以使用51单片机自身的存储计算能力来完成,再通过程序将中断时的状态继承下来,继续执行程序。 我看见你的引脚3.0重新定义了两次... 运行第一组流水灯亮灭是哪个引脚 对应程序哪个部分呢 引脚3.7是什么功能呢