首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

一个关于单片定时器中断的典型错误

一个关于单片定时器中断的典型错误

  分析一下以下程序以下程序为什么会间断的现实40(本想编成40S倒计时)提示:问题出在延时子程序
#include
#define uchar  unsigned char
#define uint   unsigned int
sbit p14=P1^4;
sbit p13=P1^3;
uint  i,t,z=50;   
void delay()
{
while(z--); }
unsigned char code tab[] =
{
                0XC0,//;0
                0XF9,//;1
                0XA4,//;2
                0XB0,//;3
                0X99,//;4
                0X92,//;5
                0X82,//;6
                0XF8,//;7
                0X80,//;8
                0X90,//;9
};
void main()
{i=40;
t=0;
  TMOD=1;//设置定时器0为工作方式1
  TH0=(65536-46080)/256;//定时50ms高8位求模
  TL0=(65536-46080)%256;//定时50ms低8位求余
  EA=1;//开总中断
  ET0=1;//定时器0中断
  TR0=1;//启动定时器0
while(1)
  {
   if(t==20)//50ms中断20次
   {
    t=0;
    i--;//倒计时总数每秒减1
   }
   if(i>0)
   {
    p14=0;//数码管个位位选关闭
    p13=1;//数码管十位位选选通
    P0=tab[i/10];//显示十位数据
    delay();
    P0=0xff;//关闭数码管段选
    p14=1;//数码管个位位选选通
    p13=0;//数码管十位位选关闭
    P0=tab[i%10];//显示个位数据
      delay();
    P0=0xff;//关闭数码管段选
    }
   else{i=40;}
    }
}     
   
void timer0() interrupt 1//定时器0中断入口
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
返回列表