驱动6路电机的开关和行走,因为驱动6个电机,所以不能控制一个电机直接关闭ET0,所以想把flag用作中断开关
#包含
类型无符号字符字节;
类型无符号在word中;
字节标志1;
字节缓存,计数;
sbit DIR=P0^5;
//sbit SLP=P1^0;
sbitflag=P2^7;
sbit STEP=P0^4;
sbit EN=P0^0;
sbit M1=P0^1;
sbit M2=P0^2;
sbit M3=P0^3;
//sbit EN=P1^3;
语音时间r0 init (语音)//100微秒@11.0592MHz
{
AUXR |=0x80; //计时器时钟1T模式
TMOD=0xF0; //设定计时器模式
TL0=0xAE; //设定计时器初始值
TH0=0xFB; //设定计时器初始值
TF0=0; 清除//TF0标志
TR0=1; //计时器0开始计数
EA=1;
//ET0=1;
}
语音识别(void )//9600bps@11.0592MHz
{
PCON=0x7F; //波特率不会加倍
SCON=0x50; //8位数据、可变波特率
AUXR |=0x40; //计时器1个时钟为Fosc,即1T
AUXR=0xFE; //串行端口1选择计时器1作为波特率发生器
TMOD=0x0F; //清除计时器1模式位
TMOD |=0x20; //将计时器1设置为8位自动重装方式
TL1=0xDC; //设定定时初始值
TH1=0xDC; //设定计时器重载值
ET1=0; //计时器1禁止中断
TR1=1; //开始计时器1
ES=1;
}
void init () )
{
EN=0;
M1=1;
M2=0;
M3=0;
}
欢跃延迟(wordn )。
{
WORD x;
wile(n---- ) )。
{
x=5000;
while(x----;
}
}
void D1 () ) )
{
if(cache==0xa5 ) ) ) )。
{
TR0=0;
ET0=0;
cache=0;
}
if(cache==0x50 ) ) ) )。
{
TR0=1;
ET0=1;
DIR=1;
cache=0;
flag1=0;
}
if (! 标志)
{
DIR=0; //向电动机方向移动
}
}
是语音发送(字节日期)
{
SBUF=dat; //发送当前数据
while (! 钛; //等待上一个数据的发送完成
TI=0; //清除发送标志
}
Void主() )
{
Timer0Init (;
init (;
UartInit (;
while(1)。
{
D1 ();
//DIR=1;
//flag1=1;
//if (标志1 ) ) )。
{
if (! 标志)
{
dlay(1;
if (! 标志)
{
DIR=1;
dlay(500;
}
}
() /
}
}
void timer0(中断1 )
{
//count;
/*if(flag1==1) ) () ) ) ) ) ) ) ) )。
{
步骤=0;
}
if(flag1==2) )
{
STEP=~STEP;
() /
STEP=~STEP;
//if (计数=100 ) )
//{
//count=0;
//send(0x52;
//}
/*if(flag==1) () () ) ) ) ) ) ) ) ) ) ) )
{
t1;
if(t1=35000 ) ) ) )。
{
t1=0;
flag=2; //计时完成=2
}
() /
}
voidio(interrupt4)
{
是if (射频)
{
RI=0;
cache=SBUF;
}
}