中级会员
- 积分
- 232
- 威望
- 154
- 贡献
- 42
- 兑换币
- 0
- 注册时间
- 2012-3-3
- 在线时间
- 18 小时
|
我按照Visual Scope数据格式要求,在C51做了个模拟送数据,可Visual Scope就是不能显示。用它自带的串口助手,检测数据都是正确的。很急啊,做了陀螺仪数据和加速度计数据还等着用它来测试对比信号情况呢。我发上代码和,串口助手接收的图,大家帮我找找原因啊!
#include <AT89X52.H>
#include <intrins.H>
#define uchar unsigned char
#define uint unsigned int
uchar buff2[10];//定义要发送的10个数据
/*********************************
// 延时毫秒函数,对12MHz晶振
// ,刚好为1000毫秒
**********************************/
void Delayms(uint count)
{
uint i;
while(count--)
{ for(i=0;i<80;i++){}
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//****************************************************
//CRC_CHECK函数做一个10字节的数据包以便向串口发送数据
//让Visualscop程序可以实时显示出波形
//*****************************************************
void CRC_CHECK(unsigned char *Buf, unsigned char Len)
{
unsigned int CRC_Temp;
unsigned char i,j;
CRC_Temp = 0xffff; //CRC初始化
for (i=0;i<Len; i++)//要循环的次数,就是Buf的字节数
{
CRC_Temp ^= Buf; //逐字节异或
for (j=0;j<8;j++)
{
if (CRC_Temp & 0x01) //如果低位为1
{
CRC_Temp = (CRC_Temp >>1 ) ^ 0xa001; //将CRC右移一位后与0xA001异或
}
else //如果低位为0
{
CRC_Temp = CRC_Temp >> 1; //将CRC右移一位
}
}
}
Buf[8] = CRC_Temp & 0x00ff; //将第9个数据赋上CRC的低字节
Buf[9] =CRC_Temp >>8;//第10数据上是CRC的高字节
}
//****************
// 主函数
//****************
void Main( void )
{ uchar i,Sta,tmp;
//?------设置串口------
SCON=0x50; //串口方式1
TMOD=0x20; //定时器1,定时方式为2
PCON=0x00; //设定串口工作方式1/64
TCON=0x40; //设定时器1开始计数
TH1=0xfd; //设定波特率为9600
TL1=0xfd; //
TR1=1; //启动定时器
Sta=0;//计数的状态标志,0为向上递增,1为向下递减
tmp=0;//要显示的波形数据
while(1)
{ if(Sta==0)//如果Sta为0,将tmp逐次递增并赋给buff2[0]
{
buff2[0]=tmp;
CRC_CHECK(buff2, 8);//准备数据
for(i=0;i<10;i++)
{
SBUF=buff2; //向串口送出数据这10个字节数据
while(TI==0); //确认发送完成
TI=0;
}
tmp++; //递增
if(tmp==255)//如果tmp递增到255,就改变状态为1,进行递减操作
{
Sta=1;
}
}
else //如果Sta为1时就进行递减操作
{
buff2[0]=tmp;
CRC_CHECK(buff2, 8);//准备数据
for(i=0;i<10;i++)
{
SBUF=buff2; //向串口送出数据这10个字节数据
while(TI==0);
TI=0;
}
tmp--; //递减
if(tmp==0)//当tmp递减到0时,改变Sta状态
{
Sta=0;
}
}
Delayms(20);//延时20毫秒
}
}
图片我怎么发不上去呢?
|
|