请单片机老手帮忙看看咋回事? 怎么中断点不了LED呢?

[复制链接]
3582|10
 楼主| gomcu 发表于 2009-7-5 21:21 | 显示全部楼层 |阅读模式

请各位兄弟姐妹帮忙看一下,我的程序是想通过中断INT0点8个LED,编译没有错误。但是中断INT0一拉低,8个灯闪一下就灭了,为什么没有保持亮的状态呢?
俺们是新手,请大家指点一下,看看哪处出了问题?不胜感激!!!


程序如下:

#define uchar unsigned char 
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> 

sbit P00 = P0^0; 
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;

bit ldelay=0; 

void main(void) // 主程序
 {
  uchar code LEDp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  uchar LEDi;
  
  IT0=1; 
  EX0=1;  
  EA=1; 
  
    if(ldelay==1)
         {
            ldelay=0;    
            P0=LEDp[LEDi];
             LEDi++;
            if(LEDi==8)
             { LEDi=0; }
          }
 }

//外中断0
int0() interrupt 0
{
ldelay=1;
}
ningling_21 发表于 2009-7-5 22:00 | 显示全部楼层

整个程序只执行一次?

c4fantasy 发表于 2009-7-6 08:48 | 显示全部楼层

while(1)

while(1){***};。。。。。。。单片机是一个大循环
程序厅人 发表于 2009-7-6 13:04 | 显示全部楼层

LZ

1,IF里面加延时,
2把中断里面ldelay=1;改ldelay=~ldelay; IF里面的ldelay=0; 去掉
bjc125 发表于 2009-7-6 17:03 | 显示全部楼层

恩 没有循环呀

九浩 发表于 2009-7-7 18:21 | 显示全部楼层

主程序里加延时

还要有循环
123294382 发表于 2009-10-7 18:54 | 显示全部楼层
看来真的是新手,能理解
NE5532 发表于 2009-10-8 22:08 | 显示全部楼层
闭门,思过,画流程图!
LZL_83 发表于 2009-10-25 15:34 | 显示全部楼层
上面的程序看过,我们都应该静下心来,耐心的审视一下自己的程序,呵呵,有时候问题就是出的这么简单
zhenxing2000 发表于 2009-10-25 16:33 | 显示全部楼层
将你的程序改成定时器0中断了:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code LEDp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar a,b;

void delay(uchar x)        //延时程序
{
  uchar i,j;
  {
          for(i=x;i>0;i--)
           for(j=110;j>0;j--);
  }
}

void main() // 主程序
{  
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
      IT0=0;
          TR0=1;
          ET0=1;  
          EA=1;  
          P2=0xff;
while (1)
        {
           if(b==20)
           {   
               b=0;
                     for(a=0;a<8;a++)
                            {
                                        delay(500);
                                        P2=LEDp[a];
                                        delay(500);
                 }
                               
                    }
                 }
}
//外中断0
void int0() interrupt 1
{
      TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          b++;

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部