ajfan 发表于 2023-12-14 11:07:57

Int0 中断下 不能实现数据乒乓存放

本帖最后由 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,Data_B,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 = P2;
            Data_A = 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 = P2;
            Data_B = 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)
       {
       }

leafstamen 发表于 2023-12-14 12:01:04

125*8+3*2+1>999
数组溢出,AD数值把后面的变量覆盖了。

ajfan 发表于 2023-12-14 12:46:56

本帖最后由 ajfan 于 2023-12-14 12:51 编辑

果然是高手,一眼就看出来问题点,我晚上改了试下。

感谢楼上,赠出我仅有的40汤圆,请笑纳。
页: [1]
查看完整版本: Int0 中断下 不能实现数据乒乓存放