大家好,最近在学习中断,下边这个程序是用于控制继电器在一定时间内闭合和断开的。
理想中实现的过程是:P3.0高电平继电器开始反复开合→中断暂停→P3.0高电平继续开始→中断暂停 这样反复循环。
但是实际情况是:P3.0高电平继电器开始反复开合→中断暂停→P3.0高电平继续开始→中断不再暂停
代码如下,还请高手麻烦看一下,代码很挫,也希望予以指正,谢谢
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dong=P3^0;
uchar steptime=700;
uint flag=0;
void delaynms(uchar z) //nms延时
{
uchar x,y;
for(x=z;x>0;x--)
{
for(y=0;y<115;y++); //1ms基准延时
}
}
void main(void)
{
EX0=1;
EA=1;
while(1)
{
if(dong==0 | flag==1)
{
if(dong==0)
{
flag=0;
while(1)
{
P1=0xFF;
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
P1=0x00;
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
}
}
}
}
}
void start() interrupt 0
{
flag++;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
P1=0xFF;
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
P1=0x00;
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
delaynms(steptime);
}
程序在这 flag干啥呢
flag是用来计数的,在中断和第一个while下,设想的是flag==1的时候,继电器运作,flag==0的时候继电器不运作。
unsigned char code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32}; // 复位代码
(*((void (*)())(rst)))(); // 执行上一行代码,将rst数组当函数调用
功能是实现了,然而还是对之前的中断问题耿耿于怀……
一周热门 更多>