|
发表于 2012-5-15 22:06:58
|
显示全部楼层
本帖最后由 sunxiaofei 于 2012-5-15 23:51 编辑
求群主解决:安装使用控制原51小车存在问题
1、只有复位单片机后才能控制,只要程序一开单片机立即死机。
2、控制时间不长大约2-3分钟,又需要复位单片机。使用WIFIRobot_Basic V1.1可以长时间控制。
小车配置at89s51使用了群主89c52的下位机,应该如何修改?我只把#include<reg52.h>改成了#include<reg51.h>
3 在上两个版本时如果按了没在单片机里定义的按键也会出现单片机死机。
4、是不是与心跳包有关,我的程序用了群主的52单片机数据包格式,不知如何完善??
#include<reg51.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer =0; //从串口接收的数据
uint i=0,j,URTAReceivedCount=0,n=1;
uchar flag=0;
uchar data Tempdatatable[4],CommandDatatable[4];//数据包
uchar key_stime_counter,hight_votage=15,timeT_counter; //舵机的变量
bit key_stime_ok;
sbit control_signal=P3^6; //舵机控制信号
sbit StatusLight=P0^0; //状态灯
sbit MainLight=P0^1; //主大灯
sbit Trig = P3^4; //雷达产生脉冲引脚
sbit Echo = P3^5; //接收雷达回波引脚
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void TurnOnStatusLight()
{
StatusLight=0;
}
/********************************************************************
* 名称 : Send_Data()
* 功能 : 向上位机传送字符
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Send_Data(uchar data type,uchar data cmd)
{
uchar data Buffer[4];
//构建数据包
uchar *p;
uint Send_Count=0;
p = Buffer;
Buffer[0]=0XFF;
Buffer[1]=type;
Buffer[2]=cmd;
Buffer[3]=0XFF;
while(1)
{
if(*p==0XFF)
{
Send_Count++; //0XFF标志统计位
}
SBUF = *p; //发送
while(!TI) //如果发送完毕,硬件会置位TI,等待发送完毕
{
_nop_();
}
p++;
TI = 0;
if(Send_Count == 2) //当统计到两次出现0XFF,则认为一个数据包发送完毕,跳出循环
{
TI = 0;
break;
}
}
}
/********************************************************************
协议规定:
包头 类型位 数据位 结束位
0XFF 1 1 0XFF
各命令说明:
类型位 数据位 功能
0X00 0X01 前进
0X00 0X02 后退
0X00 0X03 左转
0X00 0X04 右转
0X00 0X00 停止
0X01 0X01 舵机上
0X01 0X02 舵机下
0X02 0X01 车灯亮
0X02 0X02 车灯灭
0X03 雷达数据 发送雷达数据
***********************************************************************/
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar temp;
ES=0; //关串口中断
RI=0; //软件清除接收中断
temp=SBUF;
if(temp==0XFF && URTAReceivedCount<2)
{
Tempdatatable[0]==0XFF; //包头
URTAReceivedCount++;
}
else
{
Tempdatatable[n]=temp;
n++;
}
|
|