打印

51单片机中断函数里使用全局变量出错

[复制链接]
4902|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quzhanguang|  楼主 | 2013-4-17 01:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 quzhanguang 于 2013-4-17 01:09 编辑

读取的全局变量总是错的

后来老师往 int i 前面加了data就好了额。不知什么原理求解

#include "reg51.h"

data int i=0;
void delay()
{int i,j;
for(i=100;i>0;i--)
{for(j=10;j>0;j--)
        {
               
                }
                }        
        
}

void timer_int()
{
        TMOD=0x01;
    TH0=0xf8;
    TL0=0x8c;

        EA=1;
    ET0=1;
    TR0=1;
}


main()
{


  P1=0x00;
  timer_int();


  for(;;)
     {
        if(P2==0xfe)
          {i=1;}
        else if(P2==0xfd)
          {i=2;}
        else if(P2==0xfb)
          {i=3;}
        else{i=0;}
        
        delay();
        
     }
        
        


}


void TIMER() interrupt 1 using 2
{


if(i==0){ P1=0xff;}

else{
   if(i==1){  
           TH0=0xff;
        TL0=0x09;}

   else if(i==2){  
           TH0=0xfc;
        TL0=0x44;}
   else if(i==3){  
           TH0=0xfc;
        TL0=0xac;}

    P1=~P1;
        }





}


相关帖子

沙发
南宫云明| | 2013-4-17 08:13 | 只看该作者
是不是因为全局变量i和delay函数里的局部变量i使用的存储区冲突了。。。你把data改成xdata,idata,pdata等试试看。。。看看效果有什么变化没。。。

使用特权

评论回复
板凳
F8023M| | 2013-4-17 09:40 | 只看该作者
我觉得加volatile就行了

使用特权

评论回复
地板
quzhanguang|  楼主 | 2013-4-17 11:19 | 只看该作者
南宫云明 发表于 2013-4-17 08:13
是不是因为全局变量i和delay函数里的局部变量i使用的存储区冲突了。。。你把data改成xdata,idata,pdata等 ...

不是这个问题,名字改成其他的也不行。

加个data之后就都可以了

使用特权

评论回复
5
zhao3462910| | 2013-4-17 12:02 | 只看该作者
delay函数里的局部变量里的i和全局变量i这样不好吧。。
1.  把局部变量i改成其他的变量名。
2.  然后在全局变量int i 前加volatile....    volatile int 1

看以上方法可行吗?

使用特权

评论回复
6
SunFans| | 2013-4-17 16:55 | 只看该作者
唉,代码规范很重要呀……
https://bbs.21ic.com/icview-467576-1-1.html

使用特权

评论回复
7
ayb_ice| | 2013-4-17 19:05 | 只看该作者
本帖最后由 ayb_ice 于 2013-4-17 19:07 编辑

非原子操作引起的
原程序修改一下也行的,读写那个变量时关中断,完成后再恢复中断即可

使用特权

评论回复
8
slotg| | 2013-4-17 19:38 | 只看该作者
看不出有加data的必要? 是不是项目设定上的问题, DEBUG后用反汇编看一下程序码就知道了.

使用特权

评论回复
9
28182900| | 2013-4-18 13:49 | 只看该作者
xdata?

使用特权

评论回复
10
余寒| | 2013-4-18 15:26 | 只看该作者
哪个高手来看看,我也想知道为啥

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

280

帖子

1

粉丝