没有示波器,看到网上有这个VisualScope虚拟滤波器,但是不会用。。。
在网上看到这样一个程序,看起来挺合适的,下载到单片机,然后打开VisualScope,不显示波形,不知道怎么办了?
我的步骤是这样的:
1、下载程序到单片机
2、打开VS,设置com3,波特率9600。
3、然后打开setup,将设置成CRC16模式
4、点击RUN,没有波形
而我用它自带的串口通信,能够接收到数据。
#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[i]; //逐字节异或
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[i]; //向串口送出数据这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[i]; //向串口送出数据这10个字节数据
while(TI==0);
TI=0;
}
tmp--; //递减
if(tmp==0)//当tmp递减到0时,改变Sta状态
{
Sta=0;
}
}
Delayms(20);//延时20毫秒
}
} |