标题:
这个循迹程序的循迹为什么只能进去一次
[打印本页]
作者:
老新手98
时间:
2018-10-28 17:02
标题:
这个循迹程序的循迹为什么只能进去一次
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIRl=P1^0; //方向信号
sbit PUIl=P1^1; //脉冲信号
sbit DIRr=P1^2;
sbit PUIr=P1^3;
uchar temp,signal,L_flag,R_flag;
//extern L_flag,R_flag;
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFF; //给定时器赋初值,定时0.2ms
TL0=0X38;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void Timer1Init()
{
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
TH1=0XFF; //给定时器赋初值,定时0.2ms
TL1=0X38;
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void main()
{
temp=P0;
signal=temp&0xff;
DIRl=0;
DIRr=1;//电机正转
Timer0Init(); //定时器0初始化
Timer1Init(); //定时器1初始化
while(1)
{
if(signal==0X87)//10000111
{L_flag=2;R_flag=2;
temp=P0;
signal=temp&0xff;
}
if(signal==0X3F)//11100001
{L_flag=2;R_flag=2;
temp=P0;
signal=temp&0xff;
}
if(signal==0X0F)//00001111
{L_flag=1;R_flag=3;
temp=P0;
signal=temp&0xff;
}
if(signal==0XF0)//11110000
{L_flag=3;R_flag=1;
temp=P0;
signal=temp&0xff;
}
if(signal==0X1F)//00011111
{L_flag=1;R_flag=3;
temp=P0;
signal=temp&0xff;
}
if(signal==0XF8)//11111000
{L_flag=3;R_flag=1;
temp=P0;
signal=temp&0xff;
}
if(signal==0XFC)//11111100
{L_flag=3;R_flag=1;
temp=P0;
signal=temp&0xff;
}
if(signal==0X3F)//00111111
{L_flag=1;R_flag=3;
temp=P0;
signal=temp&0xff;
}
if(signal==0xC3)
{L_flag=2;R_flag=2;
temp=P0;
signal=temp&0xff;
}
}
}
void timer0() interrupt 1
{
if(L_flag==1)
{TH0=0XFE; //给定时器赋初值,定时0.3ms
TL0=0XD4;
}
if(L_flag==2)//11100001
{ TH0=0XFF; //给定时器赋初值,定时0.2ms
TL0=0X38;
}
if(L_flag==3)
{
TH0=0XFF; //给定时器赋初值,定时0.1ms
TL0=0X9C;
}
PUIl=~PUIl;
}
//**********************************************************
void Timer1() interrupt 3
{
if(R_flag==1)
{TH1=0XFE; //给定时器赋初值,定时0.3ms
TL1=0XD4;
}
if(R_flag==2)//11100001
{ TH1=0XFF; //给定时器赋初值,定时0.2ms
TL1=0X38;
}
//******************
if(R_flag==3)
{
TH1=0XFF; //给定时器赋初值,定时0.1ms
TL1=0X9C;
}
PUIr=~PUIr;
}
这个是步进电机 用定时器t0,t1来控制他的速度 但是循迹只进去了一次 只能检测最开始的状态
作者:
999333
时间:
2018-10-28 21:38
一直在while程序里面出不来,一直循环,就只能循迹一次
作者:
HC6800-ES-V2.0
时间:
2018-10-29 08:46
你将每个if内的
temp=P0;
signal=temp&0xff;
现金条语句取出,放在所有if语句完的后成试试,就是这样——
if(signal==0X87)//10000111
{L_flag=2;R_flag=2;
}
if(signal==0X3F)//11100001
{L_flag=2;R_flag=2;
}
if(signal==0X0F)//00001111
{L_flag=1;R_flag=3;
}
if(signal==0XF0)//11110000
{L_flag=3;R_flag=1;
}
if(signal==0X1F)//00011111
{L_flag=1;R_flag=3;
}
if(signal==0XF8)//11111000
{L_flag=3;R_flag=1;
}
if(signal==0XFC)//11111100
{L_flag=3;R_flag=1;
}
if(signal==0X3F)//00111111
{L_flag=1;R_flag=3;
}
if(signal==0xC3)
{L_flag=2;R_flag=2;
}
temp=P0;
signal=temp&0xff;
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1