最近做一个程序发现两个问题。当有这语句时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通道的值
}
|