找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2060|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机外部中断与定时器中断不好使

[复制链接]
跳转到指定楼层
楼主
ID:493535 发表于 2019-5-6 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
交通灯控制器,用的外部中断控制模式转换,但是外部中断1不好使,没反应把外部中断改为定时器0就可以

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa;                                
sbit nb=P2^2;
sbit dx=P2^3;
sbit shi=P3^6;
sbit ge=P3^7;                                                                    
bit  flag=0;
sbit P10=P1^0;                                                                //外部中断扩展所需的口
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
                                                                            //定义IO口
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};         //数码管段码
void delay(uint z);
void display(uint n);
void yellowa(void);
void yellowb(void);
void timer0();
void redgreena();
void redgreenb();                 
                                                    //模块函数
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==18)
  {
   aa=0;
   flag=1;
  }
}
void display(uint n)                            //数码管显示函数
{
   while(!flag)
   {
    shi=0;ge=1;
    P0=table[n/10];
    delay(5);
   ge=0;shi=1;
    P0=table[n%10];
    delay(5);
   
   
    //shi=1;ge=1;
    }
   if(flag==1)
      flag=0;
}
void redgreena()                               //主干道红绿灯以及时间
{  uint num;
   num=15;
   display(num);
   while(num<=15&&num>=0)
   {  num--;
        P2=0xfc;
        display(num);   
   }
   ;
}
void redgreenb()                               //次干道红绿灯以及时间
{  uint num;   
    num=10;
   while(num<=10&&num>=0)
   { P2=0xcf;   
    display(num);
    num--;
   }
   
}
void yellowa(void)                            //主干道黄灯以及时间
{
    uint a;
  for(a=4;a>0;a--)
  { P2=0xfc;
    dx=1;
    delay(100);
   dx=0;
   display(a);
  }
}
void yellowb(void)                           //次干道黄灯以及时间
{
     uint a;
for(a=3;a>0;a--)
  {  P2=0xcf;
    nb=1;
    delay(100);
    nb=0;
    display(a);
  }
}
void int0() interrupt 2          //紧急模式与夜间模式函数
{     
  if(!P12)
{     
   P2=0x0c;
}
   if(!P11)
{      
    P2=0x03;
   }
}

void main()
{
  uint num;
  num=0;
  aa=0;
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;
  EX0=1;
  IT0=0;
  EX1=1;
  IT1=0;
    PX1=1;
  PT0=0;
                                                //中断初始化
  while(1)
  { //P1=0x00;
   P2=0xff;
   redgreena();
//P0=1;   
   yellowa();
   redgreenb();
   yellowb();         //函数流程
           }
    }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2019-5-7 11:21 | 只看该作者
“外部中断1” 发生中断的条件是什么呢?你给它条件了吗?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表