3365|6

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机中断 [复制链接]

请问这个程序 中断是怎样进行的??
什么时候有中断申请,是从TR0=1开始就申请中断了吗???
什么时候响应中断
帮帮忙,一个人很难学...


#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,num;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
        num=0;
        aa=0;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;//定时器0
        temp=0xfe;
        P1=temp;
        dula=1;
        P0=table[0];
        dula=0;
        wela=1;
        P0=0xc0;
        wela=0;
        while(1)
        {
                delay(1000);
                temp=_crol_(temp,1);
                P1=temp;
                }
}

void delay(uint z) //延时
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void timer0() interrupt 1  
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        aa++;
                if(aa==40)
                        {
                                aa=0;
                                num++;
                                if(num==16)
                                        num=0;
                                dula=1;
                                P0=table[num];
                                dula=0;               
                        }        //中断1秒,数码管加1
}

最新回复

up  详情 回复 发表于 2009-5-1 01:13
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
定时器中断。
设好定时器初始值 TH0/TL0,开始启动定时器0。
当TH0/TL0溢出,就是超过最大值时,会产生中断,定时器0的中断位被置1,单片机就跳转到对应的中断地址开始执行中断程序。

TR0只是使能定时器0。EA=1; ET0=1;是允许定时器0产生中断。
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我最近也刚学单片机,学习一下.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 shuiyan 的回复:
定时器中断。
设好定时器初始值 TH0/TL0,开始启动定时器0。
当TH0/TL0溢出,就是超过最大值时,会产生中断,定时器0的中断位被置1,单片机就跳转到对应的中断地址开始执行中断程序。

TR0只是使能定时器0。EA=1; ET0=1;是允许定时器0产生中断。


1.TR0=0就启动定时器,开始计时了吗??
2.如果有两个定时器,那也是不是同时进入中断子程序?

如:下面
过一秒钟时,数码管LED减一次数,同时锋鸣器响一下

过一秒,数码管减一次,显示X1;然后再过一秒,锋鸣器响一次,为Y1,
是不是 :这样过一秒钟就出现   X(n),与Y(n+1)?
还是:   X(n)与Y(n)
        

#include
unsigned char number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char table[]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd};
sbit d1=P3^4;
#define uchar unsigned char
#define uint unsigned int
uint shu;
uchar bai,shi,ge,t0,t1;
void inti();
void delay(uchar time);
void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);
void main()
{
        inti();
        while(1)
        {
       display(1,2,3,bai,shi,ge);
        }
}
void timer0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    t0++;
    if(t0==20)
    {
       t0=0;
       d1=0;
       delay(5);
       d1=1;
    }
}  
void timer1() interrupt 3
{
          TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        t1++;
        if(t1==2)
        {
                t1=0;
                shu--;
                if(shu==111)
                {
                        TR1=0;
            TR0=0;
                }
                bai=shu/100;
                shi=shu%100/10;
                ge=shu%10;
        }
}  
void inti()
{
        t0=0;
    t1=0;
        shu=567;
        TMOD=0x11;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
    TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
    ET0=1;
        ET1=1;
    TR0=1;
        TR1=1;
}
void delay(uchar time)
{
        uchar i,j;
        for(i=time;i>0;i--)
                for(j=110;j>0;j--);

}
void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge)
{
        P1=table[0];
        P2=number[aa];
        delay(1);
        P2=0xff;

        P1=table[1];
        P2=number[bb];
        delay(1);
    P2=0xff;

        P1=table[2];
        P2=number[cc];
        delay(1);
        P2=0xff;

        P1=table[3];
        P2=number[bai];
        delay(1);
        P2=0xff;

        P1=table[4];
        P2=number[shi];
        delay(1);
        P2=0xff;

        P1=table[5];
        P2=number[ge];
        delay(1);
        P2=0xff;
}
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主该找本基础书先看一遍
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
TR0=1就启动T0了
两个同时中断的可能性很小,如果真的这样,那就要看谁的优先级高
优先级相同,T0的先得到响应
 
 
 

回复

97

帖子

7

TA的资源

一粒金砂(初级)

7
 
up
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表