|
本帖最后由 ajfan 于 2023-12-14 11:22 编辑
请教各位高手,用的是C8051F340 通过并口读取AD7606的值,可以实现正常的AD7606数据读取,现在想实现的功能是”将AD7606连续采样125次结果分别存变量A,A满后存B,B满后再存A,以此循环“
目前发现程序永远都执行else下面的语句, 尝试用Uart0Send在判断前读取发现PPCH为0xff, 理论上应该是0或1,不知道具体是什么情况会出现0xff,亦或当前的程序逻辑有问题?
当前在调试,while整个都是空的,不会出现错乱赋值的问题。在while前已经赋值过PPCH=0; 了。
unsigned char Data_A[1000],Data_B[1000],Rdy_A=0,Rdy_B=0,Count=0,PPCH=0;
//---------------------------------------------------
//函数功能:UART0中断服务程序
//---------------------------------------------------
void External_Interrupt0(void) interrupt 0
{
unsigned char n;
EA=0;
Uart0Send(PPCH);
if (PPCH==0) //如果PPCH为0,AD7606 16位数据存Data_A,存1000Byte
{
for (n = 0; n < 4; n++)
{
AD7606_RD=0;
Data_A[Count * 8 + n*2] = P2;
Data_A[Count * 8 + n*2+1] = P3;
AD7606_RD=1;
}
if (Count >= 125)
{
Rdy_A = 1;
Count=0;
PPCH=1;
}
else
{
Rdy_A = 0;
Count++;
}
}
else //如果PPCH为1,AD7606 16位数据存Data_B,存1000Byte
{
for (n = 0; n < 4; n++)
{
AD7606_RD=0;
Data_B[Count * 8 + n*2] = P2;
Data_B[Count * 8 + n*2+1] = P3;
AD7606_RD=1;
}
if (Count >= 125)
{
Rdy_B = 1;
Count=0;
PPCH=0;
}
else
{
Rdy_B = 0;
Count++;
}
}
AD7606_CVT=0;
AD7606_CVT=1;
EA=1;
}
AD7606_CVT=0;
AD7606_RD=1;
AD7606_FRSTDATA=0;
Rdy_A=0;
Rdy_B=0;
PPCH=0;
IT0=1;
EX0=1; // 使能外部中断0
EA = 1; // 使能总中断
AD7606_CVT=0;
AD7606_CVT=1;
while(1)
{
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
有时候所谓难以割舍的感情,事实上只是不甘心而已。 (出处:黄舒骏《不要只因为他亲吻了你》)
|