打印

中断疑问

[复制链接]
1094|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dianyuanchen|  楼主 | 2010-9-28 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两个中断程序中,为什么一个中断子函数给定时器重赋值,另一个没有重赋值呢?
中断程序一
#include <AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
unsigned char second;
unsigned char tcount;
void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
tcount=0;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
  if(TF0==1)
  {
   tcount++;
   if(tcount==20)
   {
    tcount=0;
    second++;
    if(second==60)
    {
     second=0;
    }
    P0=dispcode[second/10];
    P2=dispcode[second%10];
   }
   TF0=0;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
  }
}
}
中断程序二
#include <AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
unsigned char second;
unsigned char tcount;
void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
tcount=0;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
while(1);
}
void t0(void) interrupt 1 using 0
{
      tcount++;
      if(tcount==20)
      {
          tcount=0;
          second++;
          if(second==60)
          {
                second=0;
           }
          P0=dispcode[second/10];
          P2=dispcode[second%10];
       }
       TH0=(65536-50000)/256;
       TL0=(65536-50000)%256;
}

相关帖子

沙发
dianyuanchen|  楼主 | 2010-9-28 15:26 | 只看该作者
对不起,搞错了,应该是
#include <AT89X51.H>
unsigned char tcount2s;
unsigned char tcount02s;
unsigned char ID;
void main(void)
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
        ET0=1;
        EA=1;
        while(1);
}

void t0(void) interrupt 1 using 0
{
        tcount2s++;
        if(tcount2s==40)
        {
                tcount2s=0;
                ID++;
                if(ID==4)
                {
                        ID=0;
                }
        }
        tcount02s++;
        if(tcount02s==4)
        {
                tcount02s=0;
                switch(ID)
                {
                        case 0:
                        P1_0=~P1_0;
                        break;
                        case 1:
                        P1_1=~P1_1;
                        break;
                        case 2:
                        P1_2=~P1_2;
                        break;
                        case 3:
                        P1_3=~P1_3;
                        break;
                }
        }
}

使用特权

评论回复
板凳
roy13543826592| | 2010-9-28 15:58 | 只看该作者
如果你是2s中断一次的话,进入中断服务程序之后就要重新赋值啦.可能是漏了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

粉丝