13回答

0收藏

[求助] 51外部中断

51单片机 51单片机 4616 人阅读 | 13 人回复 | 2013-08-07

本帖最后由 Earduino 于 2013-8-7 14:50 编辑

     我想使用按键来触发2个外部中断,然后用定时器来计算按键按的时间,定时50ms然后每中断一次灯亮一次,来提示时间通过人眼给反应。
   程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^2;
sbit k2=P3^3;
sbit light=P1^0;
int num;
/*void delayms(unsigned int xms)//延时ms
{
    unsigned int i,j;
   for(i=xms;i>0;i--)
         for(j=110;j>0;j--);   
}*/



void main()
{  
EA=1;
EX0=1;
EX1=1;
TMOD=0X01;
TH0=(65536-45872)/256;//定时50ms
TL0=(65536-45872)%256;//定时50ms
IT0=0;//设置外部中断方式为低电平触发
IT1=0;//设置外部中断方式为低电平触发
   while(1)
    {
       
        light=1;//主循环一直灯灭

    }
}



void waibuzhongduan0() interrupt 0//进入外部中断0后控制定时器0开
{
    ET0=1;
       

}
void waibuzhongduan1()interrupt 2//进入外部中断1后控制定时器1开
{

    ET1=1;
       
}



void dingshiqi0() interrupt 1  //定时器中断中重新给初值,灯亮,通过和主程序灯灭给人提示时间
{
    TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        light=0;ET0=0;
}


void dingshiqi1() interrupt 3
{
    TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        light=0;ET1=0;
}
我用实际板子和按键测试,灯不亮,也没有其他现象,我的程序有问题还是什么,怎么改
分享到:
回复

使用道具 举报

回答|共 13 个

倒序浏览

沙发

anqi90

发表于 2013-8-7 13:57:02 | 只看该作者

本帖最后由 anqi90 于 2013-8-7 13:59 编辑

灯不亮的原因有很多啊,是LED的质量问题?单片机驱动电路问题?还是代码的问题?一步一步排查看看
板凳

treasuredog

发表于 2013-8-7 14:07:15 | 只看该作者

敢不也不贴这么长的代码,把你自己的分析先拿出来,自己都没分析就来问怎么回事。。。。
地板

Earduino

发表于 2013-8-7 14:30:57 | 只看该作者

treasuredog 发表于 2013-8-7 14:07
敢不也不贴这么长的代码,把你自己的分析先拿出来,自己都没分析就来问怎么回事。。。。 ...

有头绪就不会问了,
5#

Earduino

发表于 2013-8-7 14:31:47 | 只看该作者

anqi90 发表于 2013-8-7 13:57
灯不亮的原因有很多啊,是LED的质量问题?单片机驱动电路问题?还是代码的问题?一步一步排查看看 ...

led没问题。驱动?led都要驱动?
6#

anqi90

发表于 2013-8-7 14:37:25 | 只看该作者

Earduino 发表于 2013-8-7 14:31
led没问题。驱动?led都要驱动?

说是驱动,实际就是控制电路,直接控制单片机的引脚电平高低,看LED亮不亮
先确保这部分正常了再看定时器
尽量减少操作中的未知部分
7#

treasuredog

发表于 2013-8-7 14:42:12 | 只看该作者

Earduino 发表于 2013-8-7 14:30
有头绪就不会问了,

最其马把代码相应该有的注释加上,也就是把你自己的思路写上
8#

Earduino

发表于 2013-8-7 14:45:27 | 只看该作者

anqi90 发表于 2013-8-7 14:37
说是驱动,实际就是控制电路,直接控制单片机的引脚电平高低,看LED亮不亮
先确保这部分正常了再看定时器 ...

这些测过了。正常的
9#

Earduino

发表于 2013-8-7 14:52:20 | 只看该作者

treasuredog 发表于 2013-8-7 14:42
最其马把代码相应该有的注释加上,也就是把你自己的思路写上

注释加了,会帮忙看看吗
10#

treasuredog

发表于 2013-8-7 15:07:47 | 只看该作者

你最后两个定时中断函数,把ET0与ET1都=0,之后你在哪开了?你不开怎么查到外部中断?再者没发现你说的让light=0的语句
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条