想求个串口示波器便于调试用?站上yangyh75前辈提供的还是不回用啊
想求个串口示波器便于调试用?站上yangyh75前辈提供VisualScope的还是不回用啊有没有不带CRC校验的示波器呢,多通道能后台还能收集数据的。
下面是前辈yangyh75的校验代码,我输出来的波形杂乱有错,不用的通道也有输出,请再给详细说明下,本人对C不是精通!
还有这个:排列方式是低八位在前,高八位在后(但是每个字节还是左到右是高位到低位排列);还是这个WORD的从左到右就是从低位到高位排列呢
void CRC16(unsigned char *Array, unsigned char *Rcvbuf,unsigned int Len)
{
unsigned intIX,IY,CRC;
CRC=0xFFFF;//set all 1
if (Len<=0)
CRC = 0;
else
{
Len--; ?????这个是什么意思啊 ,都代表什么变量??????
for (IX=0;IX<=Len;IX++)
{
CRC=CRC^(unsigned int)(Array);
for(IY=0;IY<=7;IY++)
if ((CRC&1)!=0) CRC=(CRC>>1)^0xA001; ?????这个是什么意思啊 ,都代表什么变量??????
else CRC=CRC>>1; //
}
}
Rcvbuf = (CRC & 0xff00)>>8;//高位置
Rcvbuf = (CRC & 0x00ff);//低位置
} http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4380322&bbs_page_no=1&bbs_id=3053
看看这个支持串口直接捕获和协议公开的串口通信 CRC多项式怎么是A001 http://ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4414133&bbs_page_no=1&bbs_id=1025 谢谢两位 不过还是想问下通信协议,不接收地址数据,直接发送数据和CRC可以有显示吗 还是我来解释一下吧:
1、关于函数void CRC16(unsigned char *Array, unsigned char *Rcvbuf,unsigned int Len)需要明白以下:
a、*Array是数组Array的首地址,这个数组存放你所需要发送的4个通道数据,一个通道有高位和低位,所以4个通道需
要8个unsigned char。
b、*Rcvbuf是数组Rcvbuf的首地址,这个数组存放校验码,同样也是高位和低位。
c、Len是你发送的位长,调用时指定为8就ok。
调用语句如下:CRC16(Array, Rcvbuf,8);
紧接着发送 Array数组,然后发送Rcvbuf数组,就ok了。
2、要使用哪个出口示波器应该将你的COM口设置为COM1,波特率设置为9600,因为这是不出钱的。
3、示波器的菜单栏的setup——communication protocol——设置为CRC16。
这样解释是否明白了,它要求每次发送10组数据,其中8组是你的4个通道数据,2组是校验码。
祝好运。 这个论坛怎么增加附件呢 谢谢 yangyh75!!
以为要先接受电脑串口发过来的地址,再发送4个通道数据呢 ,现在看来不需要的,直接发数据就可 现在的示波器还是没有波形显示,画面没有一点动作。设置没问题CRC16,COM1,9600。不过选CHECK SUM方式,有杂乱波形,选CRC16没显示。
我用串口调试观察 ,数据发送的正确,就是不知道CRC对不对,我设置的前8组数据每次都一样,为什么CRC的后两组的值还是一直变化,是这个问题吗?下面是我的程序,给纠正下!!!
void main()
{
InitSysCtrl();
#ifdef FLASH
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
#endif
SpiInitGpio();
SciaInitGpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
ADCSetup();
spi_init();
SCIAInit();
GpioDataRegs.GPADAT.bit.GPIO1 = 1;
n=0;
for(;;)
{ //adcspi(8);
//spi_rdytx(rdata);
//scitx(rdata);
ADCTX(); 这是对8组数据的设置,SCI-TX到。
//crc_num();
//crc();
CRC16(); CRC程序,求出CRC的两组数据。
scitx_ready(); 发送子程序 ,依次发送10组数据。
}
}
void ADCTX()
{ //Uint16 t,x;
//t= AdcResult.ADCRESULT0;
//x=t*3/5;
//sci_tx = x<<4;
//sci_tx = x>>4;
//sci_tx=(t&0x0f80)>>7;
//sci_tx=t&0x007f;
sci_tx = 0xff; 这是成每次都是一样的数据 ,共八组。
sci_tx = 0xff;
sci_tx = 0xff;
sci_tx = 0xff;
sci_tx = 0x00;
sci_tx = 0x00;
sci_tx = 0x00;
sci_tx = 0x00;
}
void CRC16()
{
//unsigned short CRC;
unsigned char i,j;
CRC = 0xffff;
for (i=0;i<10; i++){
CRC ^= sci_tx;
for (j=0;j<8;j++) {
if (CRC & 0x01)
CRC = (CRC >>1 ) ^ 0xa001;
else
CRC = CRC >> 1;
} CRC的子程序,把2组CRC数据排在后两组,第8和9组。
}
sci_tx=(CRC&0xff00)>>8;//高位
sci_tx=(CRC&0x00ff);//低位
}
void scitx_ready()
{ int i;
for(i=0;i<10;i++)
{
while(SciaRegs.SCICTL2.bit.TXRDY != 1); 串口发送 一次发送10组!!
SciaRegs.SCITXBUF = sci_tx;
}
} 想下载下来玩下,就是现在好像不能下载啊{:sad:} 记号 kangkai613 发表于 2010-12-10 13:13 static/image/common/back.gif
现在的示波器还是没有波形显示,画面没有一点动作。设置没问题CRC16,COM1,9600。不过选CHECK SUM方式,有 ...
你当时这个搞定了没有?我现在也在弄这个,有点问题,请教你一下 搜搜我的一个,先凑活用着,这几天会有大手笔,所有平台上传开源,包括新上位机 VisualScope群321184302,串口示波器群,希望对你有帮助
页:
[1]