|
本帖最后由 ajfan 于 2024-10-15 12:48 编辑
水平不够,估计又钻牛角尖了,请教关于C8051F360程序的问题,
期望的功能是360读AD7606 然后通过FT232H将数据送到USB, Target_Samples为每次采集的数量(默认10),一次采集为一个循环,通过FT232H读到数据启动下一个循环的采集,目前的现象是第一个循环读AD7606数据写FT232H并上传是正确的,但第二,三个循环以后就只能读到0了,第四次后USB上位机卡死。
将“AD7606数据写FT232H”这一步的AD_Data改为Test1(FT232H每次只送固定Test1的值)每次循环都正常响应(均读到1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),USB没有卡死。AD7606 CVT和Busy信号均正常。
将“AD7606数据写FT232H”这一步的改为Test1改回AD_Data,又每次只响应一次数据,然后USB卡死。
我的理解AD_Data仅是变量而已,里面什么值不应该让程序出现0(第一次是数据正常)或卡死现象,难道有什么变量赋值的问题或溢出啥么?
对应部分的程序如下:
#include <C8051F360.H>
#include <string.h>
#include <intrins.h>
#include <stdlib.h>
unsigned char Test1[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
unsigned char AD_Data[16]={0};
......
接收FT232H USB数据,设定对应的Target_Samples值,进行对应循环。
......
unsigned char t=0,v=0,l=0;
if(Alive_Samples <= Target_Samples)
{
AD7606_CVT=1;
Alive_Samples++;
for(l=0;l<20;l++) //等待ADC转换结束
{
delay_1us();
}
for(t=0;t<8;t++) //读AD7606数据
{
AD7606_RD=0;
AD7606_RD=0;
AD_Data[2*t]=P1; //LSB
AD_Data[2*t+1]=P2; //HSB
AD7606_RD=1;
AD7606_RD=1;
}
SFRPAGE = CONFIG_PAGE; //P3 设置为输出
P3MDOUT = 0xff;
delay_ms(100);
for(v=0;v<16;v++) //AD7606数据写FT232H
{
P3=AD_Data[v];
FT232_WR=0; //delay t10>30ns
FT232_WR=1;
}
AD7606_CVT=0;
}
else
{
Alive_Samples 如果大于等于Target_Samples,复位,等待新的启动命令
SFRPAGE = CONFIG_PAGE; //P3 设置为输入,等待USB数据
P3MDOUT = 0x00;
delay_ms(100);
......
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
有一句段子是这样说的,身家过亿的只关心自己的身体,身家千万的,在担心传承,勉强糊口度日才天天看国际新闻,关心国家大事。
|