| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 252 人关注过本帖
标题:单片机编程中延时中断程序中不能定义变量吗?
收藏  订阅  推荐  打印 
fzpxp
Rank: 1
等级:新手上路
帖子:1
积分:110
注册:2008-7-26
单片机编程中延时中断程序中不能定义变量吗?

延时中断程序中不能定义变量吗?如果定义了,程序好像就不执行中断程序了.如果把这个变量定义成全局变量就一切正常了,请问是这样吗?
实现的是数字从23递减,减到0后再重复循环.
如果中断中定义uint i=0;程序就不循环一直显示23
如果把uint i=0;定义成全局变量就一切正常

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code seg7[]=
{0X3F,0X06,0X5B,0X4F,
0X66,0X6D,0X7D,0X07,
0X7F,0X6F,0X77,0X7C,
0X39,0X5E,0X79,0X71};
uchar code seg7com[]={0Xfe,0Xfd,0Xfb,0Xf7};
uint shi;
uint ge;
uchar  temp;
uint i=0;
void delay(uint i)
{    uint j;
    for(;i>0;i--)
        for(j=100;j>0;j--);        
}

void display()            //显示
{         

        shi=temp/10;
        ge=temp%10;

       wela=1;
       P2=seg7com[0];  //选中第一个数码管位选
       wela=0;           //先选择为选再选择段选可有效防止鬼影

       dula=1;
       P0=seg7[shi];     //段选赋值
       dula=0;
       

        delay(50);
    
       wela=1;
       P2=seg7com[1];  //选中第一个数码管位选
       wela=0;

       dula=1;
       P0=seg7[ge];
       dula=0;
       

       delay(50);


}

void init()                    //初始化
{
   temp=23;
   P0=0x00;
   P2=0xff;

   EA=1;
   ET0=1;
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   TR0=1;

}

main()
{
  init();                //初始化
  while(1)
  {
      display();         //显示
  }
}

void intT0() interrupt 1
{    
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    i++;
    if(i==20)
      { i=0;
        temp=temp-1;
               if(temp==255)             //减溢出了
            temp=23;

       }
}
搜索更多相关主题的帖子: 中断程序中  定义变量  单片机  uint  延时  
2008-7-26 17:41
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.047699 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved