为了账号安全,请及时绑定邮箱和手机立即绑定

单片机加上延时函数 IO口输出就不正常,为什么啊?

单片机加上延时函数 IO口输出就不正常,为什么啊?

慕的地8271018 2023-01-12 15:11:23

延时函数屏蔽掉就正常
改一下 输出变得更怪异 有谁知道是怎么回事么

void delay1ms(uchar t) //1ms延时
{
uchar a,b;
for(a=0;a<t;a++)
for(b=0;b<125;b++);
}
#include <reg52.h> 
#define uchar unsigned char  
#define uint unsigned int  
#define ulong unsigned long 
sbit IN4=P1^2; //B-
sbit IN3=P1^3; //B+
sbit EN2=P1^4; //B使能 
sbit IN2=P1^5; //A- 
sbit IN1=P1^6; //A+
sbit EN1=P1^7; //A使能
uchar np;
uchar steptable[]={//时序表 0-7为正转,7-0为反转
0xd3, 0xdb,0x9b,0xbb,0xb3,0xb7,0x97,0xd7};
void delay1ms(uchar t) //1ms延时
{uchar a,b;
for(;t>0;t--)
for(a=2;a>0;a--)
for(b=220;b>0;b--);
}
void a_step(uchar d,uchar t) {
if(d&0x01) 
{if(np==0)  
np=7;  
else np--; }
else
{if(np==7)
np=0;
else np++;
}
P1=steptable[np];
delay1ms(t); }
void a_turn(uchar d,uchar t)
{ uchar i;
for(i=0;i<96;i++)
a_step(d,t);
}
void main(void)
{while(SEN)
{ a_step(0,200); }
while(1) //主循环
{ a_turn(0,200);}
}

查看完整描述

2 回答

?
元芳怎么了

TA贡献1530条经验 获得超7个赞

uchar np;定义的是无符号的
这里有错
{if(np==0)  
np=7;  
else np--; }np--的话减为负的就溢出了。
这是步进电机的程序?加延时有什么问题?

查看完整回答
反对 回复 2023-01-15
?
呼如林

TA贡献1560条经验 获得超3个赞

延时应该跟输出没关系的吧,有没有电路图看看。
还有那np最好给个初值,不然在定义的时候np的值不就是未知的那在计算的时候可能有错


查看完整回答
反对 回复 2023-01-15

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信