标题:
51单片机利用超声波控制舵机程序调试问题
[打印本页]
作者:
HaiGe
时间:
2019-4-12 03:26
标题:
51单片机利用超声波控制舵机程序调试问题
为什么把注释部分取消掉 通过串口调试助手连接电脑只能接收到 距离<=15时的运行动作组的命令 也就相当与距离一直小于15 而把运行动作组命令加上 超声波测距也能正常检测
单片机源程序如下:
#include <reg52.h>
void runActionGroup(unsigned char numOfAction, unsigned int Times);
sbit kongzhi=P1^0;
sbit jieshou=P1^1;
sbit led=P1^3;
void uartInit(); //波特率9600
unsigned int juli,s;
void yanshi(unsigned int x);
void main()
{
TMOD=0X01;
ET0=1;
EA=1;
TR0=0;
kongzhi=0;
jieshou=0;
uartInit();
while(1)
{
kongzhi=1;
yanshi(1);
kongzhi=0;
while(jieshou==0);
TR0=1;
while(jieshou==1);
juli=s;
s=0;
TR0=0;
TH0=0XFF;
TL0=0XC4;
if(juli<=15)
{
led=0;
// runActionGroup(0,1);
}
else if(15<juli<=30)
{
led=1;
// runActionGroup(1,1);
}
else if(30<juli<=50)
{
led=1;
// runActionGroup(2,1);
}
else if(juli>50)led=1;
}
}
void uartInit() //波特率9600
{
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //使能Uart中断
EA = 1; //开中断
}
void timer0()interrupt 1
{
TH0=0XFF;//5微秒
TL0=0XC4;
s++;
}
/*********************************************************************************
* Function: uartWriteByte
* Description:串口发送一个字节数据
* Parameters: dat:被发数据
* Return: 无返回
* Others:
**********************************************************************************/
void uartWriteByte(unsigned char dat)
{
SBUF = dat;
while (!TI);
TI=0;
}
/*********************************************************************************
* Function: uartWriteBuf
* Description:串口发送数据
* Parameters: buf:被发数据首地址,len:发送数据长度
* Return: 无返回
* Others:
**********************************************************************************/
void uartWriteBuf(unsigned char *buf, unsigned char len)
{
ES = 1;
while (len--) {
uartWriteByte(*buf++);
}
}
void runActionGroup(unsigned char numOfAction, unsigned int Times)
{
unsigned char buf[7];
buf[0] = buf[1] = 0x55; //填充帧头
buf[2] = 5; //数据长度,数据帧除帧头部分数据字节数,此命令固定为5
buf[3] = 0x06; //填充运行动作组命令
buf[4] = numOfAction; //填充要运行的动作组号
buf[5] = Times&0x00ff; //取得要运行次数的低八位
buf[6] = Times>>8; //取得要运行次数的高八位
uartWriteBuf(buf, 7); //发送数据帧
}
void yanshi(unsigned int x)
{
unsigned char i;
while(x--)
{for(i=0;i<120;i++);}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1