3939|9

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

交通灯 [复制链接]

麻烦大家看看为什么我程序烧进去却没有反应啊??想给予的功能是:P00~5:控制灯,P10~7:控制LED,P2.2、P2.3:左右位选,P3.2  P3.3中断
首先是:东的红亮难得绿亮,延时30,然后是东南黄灯亮,延时5S,再然后是东绿南红亮,延时30,最后是东南黄亮,延时5。弄了好长时间,麻烦大家了

程序如下:
#include
#include

#define uchar unsigned char
#define uint unsigned int
uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};

void delay(uint ms)
{
  uint i,j;
  for(i=0;i     for(j=0;j<1141;j++);
}

void IO_Init()
{
  P0=0x00;
  P1=0x00;
  P2=0x00;
  P3=0x00;
}


void show1(void)
{ uint i,j;
  
for(i=0;i<3;i++)
{
   P2=0x04;
   P1=table;
   for(j=0;j<10;j++)
   {
     P2=0x08;
         P1=table[j];
         delay(1000);
   }
   delay(1000);
}
P2=0X00;
}

void show2(void)
{  uint k;
   
    P2=0x08;
        P1=table[0];
        for(k=0;k<6;k++)
        {
         P2=0x04;
         P1=table[k];
         delay(1000);
        }
  P2=0X00;       
}

void interrupt_0(void)
{
  P0=0xff;
  while(1)
  {
    delay(200);
        P0=0x21;
        show1();
        P0=0x12;
        show2();
        P0=0x0c;
        show1();
        P0=0x12;
        show2();
       
  }
  delay(20);
}

void interrupt_1(void)
{
  delay(20);
  IO_Init();
}

void main()
{
    IO_Init();
  
    EX0=1;
        EX1=1;
        IT0=1;
        P3=0x04;//边沿触发
        IT1=1;
        P3=0x08;
        EA=1;
    while(1);
}


电路图:


最新回复

中断里面设一个标志位就好了, 然后出了中断再判断这个标志位。  详情 回复 发表于 2010-5-20 14:52
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的中断函数写错了应该是void ex0(void)interrupt 0 using 0
和void ex1(void)interrupt 2 using 0
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
在中断中的延时函数太多了!有可能没有延时结束就进中断,所以状态总不对!
定义一个25ms的中断,在里边作秒计时;和数码管显示的刷新!
在主程序中根据秒计时来作动作,
不要使用delay之类的程序在中断中!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主 完全可以直接 采用单线程,顺序执行下来就可以,
没必要用中断。

如果想用中断,一定要处理好,中断处理函数中的关中断,以及中断嵌套等问题。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
中断里面竟然有几个delay(20) ms,而且还有while。。。。。。。中断很多。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
使用中断,你竟然在中断里面延时。你可以在中断里面设置几个标志位,然后在住程序里判断标志位显示。你把中断函数设置好。其它问题你就好解决了。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
谢谢大家的帮忙
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
中断中用这么大的delay,不用看,设计肯定有问题!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
程序设计有问题,尽量用标志位,不能在中断中用延时
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
中断里面设一个标志位就好了,

然后出了中断再判断这个标志位。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表