打印
[51单片机]

单片机可以在外部中断0的程序里开定时器0吗?

[复制链接]
3170|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
余健芝23|  楼主 | 2016-7-3 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//我这个程序功能是让数码管和led灯同步跳动,P0是led灯,P2是数码管,但是仿真时发现外部中断0没反应?不知道是哪里的问题?

#include <reg51.h>
void delay(unsigned char c);
char table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };//0,1,2,3,4,5,6,7,8,9
int a,b,d,e,f,g,h,i,m,protect1,protect2,protect3,protect4,protect5;//全局变量
void main()
{
        P1=0x00;//数码管位
        TMOD=0x01;//t0方式1
        EA=1;//开总中断
    ET0=1;//定时器0允许
        EX0=1;//外部中断0
    IT0=1;//下降沿触发
        TH0=0x9E;//十六进制的9E58是40536,说明定时器0定时了25000.                                       
          TL0=0x58;

       
        for(d=5;d>0;d--)               
        {
                P0=0xf6;
                P2=table[d];
                  delay(2);
        }
               
       
       
        while(1)
        {
                for(e=10;e>0;e--)               
                  {P0=0xf3;                                       
                    P2=table[e-1];
                    delay(2);
                }
               



                for(f=3;f>0;f--)//南北黄灯闪烁3次;0.5秒亮 0.5秒灭             //(3)
                {
                        P2=table[f];
                        P0=0xf5;        //亮
                        delay(1);
                        P0=0xf7;//灭
                        delay(1);
                       
                }
               
               
               
                for(g=10;g>0;g--)                //南北红东西绿
                  {
                        P0=0xde;                                       
                           P2=table[g-1];
                           delay(2);
                }



               


               
                for(h=3;h>0;h--)//南北红灯、东西黄灯闪烁3次共3秒                     //(5)
                {       
                        P2=table[h];
                        P0=0xee;//亮
                        delay(1);
                        P0=0xfe;//灭
                        delay(1);
                }

        }
}


void delay(unsigned char c) //定时器0.25s
{
for(b=0;b<c;b++)
{
        for(a=0;a<20;a++)
        {
                TH0=0x9E;//十六进制的9E58是40536,说明定时器0定时了25000.                                       
                  TL0=0x58;
                  TR0=1;//开定时器0
                  while(!TF0);//等待溢出
                  TF0=0;//溢出标志置0
                TR0=0;
        }
}
}



void int_0() interrupt 0//外部中断0 救护车                 
{
/*protect1=a;
protect2=b;
protect3=TH0;
protect4=TL0;
protect5=P0;
*/
//for(m=5;m>0;m--)
//{
        P0=0x00;
        //P2=table[m];   
        //delay(1);
//}
/*
a=protect1;
b=protect2;
TH0=protect3;
TL0=protect4;
P0=protect5;
*/
}

相关帖子

沙发
余健芝23|  楼主 | 2016-7-3 10:33 | 只看该作者
中断里的东西被我简化了,想试试中断能不能进去,发现外部中断进都没进去

使用特权

评论回复
板凳
huangxz| | 2016-7-3 11:09 | 只看该作者
在中断里面可以打开定时器的,干啥都可以

使用特权

评论回复
地板
余健芝23|  楼主 | 2016-7-3 11:48 | 只看该作者
余健芝23 发表于 2016-7-3 10:33
中断里的东西被我简化了,想试试中断能不能进去,发现外部中断进都没进去 ...

但是我这个中断怎么进不去呢?你能帮我看看是哪里的问题吗?

使用特权

评论回复
5
玄德| | 2016-7-4 11:01 | 只看该作者

中断进不去,和能不能开定时器没关系。
看触发信号对不对,
然后查中断设置。

使用特权

评论回复
6
coody| | 2016-7-4 13:06 | 只看该作者
任何地方都可以开停定时器

使用特权

评论回复
7
ningling_21| | 2016-7-4 14:19 | 只看该作者
余健芝23 发表于 2016-7-3 11:48
但是我这个中断怎么进不去呢?你能帮我看看是哪里的问题吗?

是不是没有触发信号导致没进外部中断

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝