微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51的外部中断问题求解

51的外部中断问题求解

时间:10-02 整理:3721RD 点击:
用的板子是HC6800-ES V2.0,是教程里的一个例子,目标是开始led流水灯右移,按下k3后左移,按下k4后再右移。现在问题是开始只按k3或k4没反应,按下k4并同时按k3,led才能变为左移,再之后无论怎么按k3,k4,led都不变了……

是你自己马虎所致!是你自己马虎所致!是你自己马虎所致!
你写的第一个错误:
sbit K3=P3^3; //INT1
sbit K4=P3^4; //T0,这一点从你最后一张图片里即可看到。
应改为: //请看独立键盘图片!
sbit K3=P3^2; //INT0,右移
sbit K4=P3^3; //INT1,左移
你写的第二个错误:
while(1)  {
          if(KeyValue)
          GPIO_LED=_crol_(GPIO_LED,1);    //下一行没有延时函数,LED会急速运行你自然是无法看到了!
else
          GPIO_LED=_cror_(GPIO_LED,1);
          Delay(20);                                  //这一行虽然添加了延时函数,但参数较小!
        }
          至于怎么改就不需要我多说了吧 ~~~^_^~~~

程序如下:
#include <reg51.h>
#include <intrins.h>
#define GPIO_LED P2

void IntConfiguration();         //中断程序
void Delay (unsigned int n);                //延时程序

sbit K3=P3^3;
sbit K4=P3^4;
unsigned char KeyValue=0;
/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main (void)
{
        GPIO_LED=0xfe;
        IntConfiguration();
        while(1)
        {
                if(KeyValue)
                GPIO_LED=_crol_(GPIO_LED,1);
                else
                GPIO_LED=_cror_(GPIO_LED,1);
                Delay(20);
        }
}
/*******************************************************************************
* 函 数 名         : IntConfiguration
* 函数功能                   : 中断
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void IntConfiguration()
{
        IT0=1;
        EX0=1;
        IT1=1;
        EX1=1;
        EA=1;
}
void Int0() interrupt 0
{
        Delay(1);
        if(K3==0)
                KeyValue=1;
}
void Int1() interrupt 2
{
        Delay(1);
        if(K4==0)
                KeyValue=0;
}
/*******************************************************************************
* 函 数 名         : Delay
* 函数功能                   : 延时 10*n ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Delay (unsigned int n)
{
        unsigned char i,j;
        for(;n>0;n--)
                for(i=130;i>0;i--)
                        for(j=38;j>0;j--) ;
}

这是独立按键,led原理图,k3连接p3.2 k4连接p3.3




你这样粘程序没人会看的,说说问题的关键,具体现象

是我自己粗心了,谢谢解答!

谢谢解答!另外我试了一下这个延时函数参数够了(大概200ms),前面写的太粗心了……谢谢啦!^_^

上一篇:+蜂鸣器实验
下一篇:+DHT11实验

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top