打印

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

[复制链接]
2651|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; 去掉

使用特权

评论回复
5
bjc125| | 2009-7-6 17:03 | 只看该作者

恩 没有循环呀

使用特权

评论回复
6
九浩| | 2009-7-7 18:21 | 只看该作者

主程序里加延时

还要有循环

使用特权

评论回复
7
123294382| | 2009-10-7 18:54 | 只看该作者
看来真的是新手,能理解

使用特权

评论回复
8
NE5532| | 2009-10-8 22:08 | 只看该作者
闭门,思过,画流程图!

使用特权

评论回复
9
LZL_83| | 2009-10-25 15:34 | 只看该作者
上面的程序看过,我们都应该静下心来,耐心的审视一下自己的程序,呵呵,有时候问题就是出的这么简单

使用特权

评论回复
10
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

粉丝