搜索
bottom↓
回复: 2
打印 上一主题 下一主题

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

[复制链接]

出340入0汤圆

跳转到指定楼层
1
发表于 2023-12-14 11:07:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入57汤圆

2
发表于 2023-12-14 12:01:04 | 只看该作者
125*8+3*2+1>999
数组溢出,AD数值把后面的变量覆盖了。

出340入0汤圆

3
 楼主| 发表于 2023-12-14 12:46:56 | 只看该作者
本帖最后由 ajfan 于 2023-12-14 12:51 编辑

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

感谢楼上,赠出我仅有的40汤圆,请笑纳。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-15 13:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表