用ch372发送数据时总接收异常

我用ch372发送ad转换的数据,可是接收到的数据总是不对。用的是端点2批量发送的,数据包的大小为64,接收时,一个包内的数据基本正常,可是包与包之间就不对了,比如前一个包结束时是5,下一个包开始时就是-1,只应该是6的才对。下面是发送的程序 void ad_int() interrupt 2 //ad中断函数,完成接收数据和发送 { uchar dat1=0,dat2=0,dat3=0,temp=0; RD=0; dat3=bz; dat1=P0; temp=P1; RD=1;

dat2=(temp&0xe0)>>5; dat3=dat3<<7; dat2=dat2|dat3; f1=dat1; f2=dat2;

if(flag==1) { CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); // 向USB端点2的发送缓冲区写入数据块 delay2us(); CH375_WR_DAT_PORT( 64 ); //首先写入后续数据长度 flag=0; } CH375_WR_DAT_PORT( f1 ); // 向ch372写入数据 delay2us(); CH375_WR_DAT_PORT( f2 ); // 向ch372写入数据 i+=2; if(i==64) flag=1; }

如果你写的数据长度是64的话那么你后续需要些64个字节到CH372芯片里面去,看你的程序只写了2个字节肯定是不行的。


数据发送是在中断里进行,20u一次中断,每次发送两个字节,我想这样应该是可以的吧?


这个是没什么问题,但是每次发送数据必须等到上一次中断完成之后才能进行下一次中断。否则会丢中断的。


CH375_WR_DAT_PORT( 64 ); 一次发送的数据为64字节。 你每20US写的两个字节,其实是写道CH375的缓冲区里面去的,并没有被发送,当写的字节个数为64的时候,CH375才会等下次PC来读数据的时候将数据送出。 这个时候要等待中断,不能再写数据了。 等中断来了,检查中断状态,如果为上传成功,则可以继续下一次传输了。


在等待中断的时候,ad仍然在转换呀,还会有数据丢失,这该怎么办呢?51单片机连续向372缓冲区写入64个字节的数据需要多长时间呀?


需要多长时间只有你才知道啊,你看看你的程序是不是写的很慢啊。


那么是不是等待中断的时间有点长呢?我发现丢了不少数据。372产生的中断状态只可能是计算机成功接收的状态,中断里只执行了解除锁存的动作。


这种问题都需要实际测试才能确定问题在哪里,否则很难给确定的答案。你计算一下AD速度,再计算你写入CH372的速度,另外在等中断的适合数据你要先缓存下来。


只有登录才能回复,可以选择微信账号登录