打印

中断中调用延时函数出现的问题

[复制链接]
3437|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51yao|  楼主 | 2008-6-18 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做一个程序发现两个问题。当有这语句时uchar table[4]={0};在中断中调用延时函数delay时,进入延时函数delay会出现死循环,少了uchar table[4]={0};就不会有这问题。是不是因为存储冲突啊?第二个问题,同样有这语句时uchar table[4]={0};在主函数调用延时函数就不会有问题,这是为什么?请大家指点。
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define  IN0 XBYTE[0x7ff8]  //设置AD0809的通道0地址
sbit ad_busy=P3^2;          //EOC状态
sbit LED=P3^5;
sbit OE=P1^7;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit P2_7=P2^7;
uchar table[4]={0};
uchar xdata *ad_adr;
uchar b;
uchar a;
void delay(uint u)
{
   uchar y;
   while(u--)
   {
      for(y=0;y<125;y++);
   }
}

void ad0809(uchar idata *x) //采样结果放指针中的A/D采集函数
{
    uchar i;
    
    ad_adr=&IN0;
    ad_busy=1;
         *ad_adr=0;           //启动转换
  

}
void int_0() interrupt 0 using 1
{
       LED=!LED;  
       OE=0;                    //读有效
       a=*ad_adr;               //读取数据
       ad_adr++;
       P0=a;//在此调用液晶
       if(a>=0x70) LED1=!LED1;
       if(a<=0x7f) LED2=!LED2;
       delay(5);
       OE=1; 
}

void main()
{

     static uchar idata ad[10];
     P2_7=0;
     //P1=0;
     //OE=1;
     LED=0;
     IT0=1;
     EX0=1;
     EA=1;
     //ad_busy=0;
     //P1=0;
     while(1)
     {ad0809(ad);         
      }              //采样AD0809通道的值

}

相关帖子

沙发
ayb_ice| | 2008-6-18 10:01 | 只看该作者

先去掉using 1试试

使用特权

评论回复
板凳
dld2| | 2008-6-18 10:09 | 只看该作者

中断中不应该延时

基本设计原则

使用特权

评论回复
地板
51yao|  楼主 | 2008-6-18 10:31 | 只看该作者

去掉就行了。

去掉就行了。那是为什么啊?还有,假如我保留using 1,如果中断之前对table[4]进行赋值,中断中调用delay就会有问题。不赋值就没问题?

使用特权

评论回复
5
eledong| | 2008-6-18 10:51 | 只看该作者

TO ls

建议看看有关寄存器组的**
http://blog.21ic.com/user1/4695/archives/2008/48272.html

使用特权

评论回复
6
ayb_ice| | 2008-6-18 11:39 | 只看该作者

不真正懂USING的最好不要用

使用特权

评论回复
7
gyt| | 2008-6-18 11:44 | 只看该作者

赞同6楼

使用特权

评论回复
8
51yao|  楼主 | 2008-6-18 14:01 | 只看该作者

谢了

虽然看了不太明白,但以后我会注意的。

使用特权

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

本版积分规则

42

主题

148

帖子

0

粉丝