51_外部中断

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/**********************51单片机学习例程************************
*  平台:Keil U4 + STC89C52
*  名称:Key1按下LED左循环,Key2按下LED变右循环
*  编写:Tony
*  日期:2022-2-10
*   QQ : 674749794
*  晶体:12MHZ
*    变更记录:无
******************************************************************/
#include<reg51.h>
#include<intrins.h>
 
#define GPIO_LED    P1
//外部中断的IO
sbit Key1=P3^2;
sbit Key2=P3^3;
 
void IntConfiguration();
void Delay(unsigned int n);
unsigned char KeyValue=0;
/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/
void main(void)
{
    GPIO_LED=0X01;
    IntConfiguration();
    while(1)
    {
        if(KeyValue)
            GPIO_LED=_crol_(GPIO_LED,1);
        else
            GPIO_LED=_cror_(GPIO_LED,1);
        Delay(2000);       
    }  
}
/*******************************************************************************
* 函 数 名         : IntConfiguration()
* 函数功能         : 设置外部中断
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void IntConfiguration()
{
    //设置INT0
    IT0=1;//跳变沿出发方式(下降沿);IT0=0--->低电平触发中断
    EX0=1;//打开INT0的中断允许。
    //设置INT1
    IT1=1;
    EX1=1;
     
    EA=1;//打开总中断   
}
/*******************************************************************************
* 函 数 名         : Delay(unsigned int n)
* 函数功能         : 延时
* 输    入         : n
* 输    出         : 无
*******************************************************************************/
 
void Delay(unsigned int n)   //延时50us误差 0us
{
    unsigned char a,b;
        for(;n>0;n--)
        {
        for(b=1;b>0;b--)
        for(a=22;a>0;a--);
        }
}
/*******************************************************************************
* 函 数 名         : Int0()    interrupt 0
* 函数功能         : 外部中断0的中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
 
void Int0() interrupt 0 //外部中断0的中断函数
{
    Delay(1);    //延时消抖
    if(Key1==0)
        KeyValue=1;
    IE0=0;      //中断请求标志位
}
/*******************************************************************************
* 函 数 名         : Int1() interrupt 2
* 函数功能         : 外部中断1的中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
 
void Int1() interrupt 2//外部中断1的中断函数
{
    Delay(1);       //延时消抖
    if(Key2==0)
        KeyValue=0;
    IE1=0;
 
}

  

posted @   xiaoberber  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示