网站排名软件 利搜,做网站要源代码,网站规划建设实训报告书,wordpress评论插件目录源码EXTI.cEXTI.hmain.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 源码
stdint.h见【51单片机快速入门指南】1#xff1a;基础知识和工程创建 中断知识见【51单片机快速入门指南】3#xff1a;中断系统
将…
目录源码EXTI.cEXTI.hmain.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 源码
stdint.h见【51单片机快速入门指南】1基础知识和工程创建 中断知识见【51单片机快速入门指南】3中断系统
将外部中断0和外部中断1均配置为下降沿触发但外部中断1的优先级最高外部中断0的优先级最低。
EXTI.c
#include REGX52.H
#include intrins.h
#include stdint.h
#include EXTI.h//定义LED管脚
sbit D1 P2^0;
sbit D2 P2^1;//定义独立按键控制脚
sbit K3 P3^2;
sbit K4 P3^3;void Delay20ms() //11.0592MHz
{unsigned char i, j;i 36;j 217;do{while (--j);} while (--i);
}//P3.2
void EXTI0_Callback() interrupt 0 //外部中断0中断函数
{Delay20ms();if(K3 0){D1 !D1;while(K3 0);}
}//P3.3
void EXTI1_Callback() interrupt 2 //外部中断1中断函数
{Delay20ms();if(K4 0){D2 !D2; while(K4 0);}
}#if USE_EXTI2_EXTI3//P4.3void EXTI2_Callback() interrupt 6 //外部中断2中断函数{}//P4.2void EXTI3_Callback() interrupt 7 //外部中断3中断函数{}#endif#if EXTI_USE_STCsfr IPH 0xb7;
#endifvoid EXTI0_Init(uint8_t EXTI_Type, uint8_t Priority)
{#if EXTI_USE_STCIPH ~1;IPH | (2 Priority) 1;#endifPX0 (1 Priority); //设置中断优先级IT0 EXTI_Type; //触发方式EX0 1; //打开INT0的中断允许EA 1; //打开总中断
}void EXTI0_Switch(uint8_t Status)
{EX0 Status;
}void EXTI1_Init(uint8_t EXTI_Type, uint8_t Priority)
{#if EXTI_USE_STCIPH ~4;IPH | (2 Priority) 1;#endifPX1 (1 Priority); //设置中断优先级IT1 EXTI_Type; //触发方式EX1 1; //打开INT1的中断允许EA 1; //打开总中断
}void EXTI1_Switch(uint8_t Status)
{EX1 Status;
}#if USE_EXTI2_EXTI3sfr XICON 0xc0;sbit PX2 XICON^3;sbit EX2 XICON^2;sbit IE2 XICON^1;sbit IT2 XICON^0;sbit PX3 XICON^7;sbit EX3 XICON^6;sbit IE3 XICON^5;sbit IT3 XICON^4;void EXTI2_Init(uint8_t EXTI_Type, uint8_t Priority){#if EXTI_USE_STCIPH ~0x40;IPH | (2 Priority) 5;#endifPX2 (1 Priority); //设置中断优先级IT2 EXTI_Type; //触发方式EX2 1; //打开INT1的中断允许EA 1; //打开总中断}void EXTI2_Switch(uint8_t Status){EX2 Status; }void EXTI3_Init(uint8_t EXTI_Type, uint8_t Priority){#if EXTI_USE_STCIPH ~0x80;IPH | (2 Priority) 6;#endifPX3 (1 Priority); //设置中断优先级IT3 EXTI_Type; //触发方式EX3 1; //打开INT1的中断允许EA 1; //打开总中断}void EXTI3_Switch(uint8_t Status){EX3 Status; }#endifEXTI.h
#ifndef EXTI_H_
#define EXTI_H_#include stdint.h//使用外部中断2P4.3和外部中断3P4.2 貌似只有LQFP44封装的芯片才有普通的DIP40芯片没有
#define USE_EXTI2_EXTI3 1//使用STC单片机的4级优先级
#define EXTI_USE_STC 1#define EXTI_LOW_LEVEL 0
#define EXTI_FALLING 1#if EXTI_USE_STC//STC单片机的4级优先级#define STC_EXTI_Priority_Lowest 0#define STC_EXTI_Priority_Lower 1#define STC_EXTI_Priority_Higher 2#define STC_EXTI_Priority_Highest 3#endif//传统51单片机的2级优先级
#define EXTI_Priority_Low 0
#define EXTI_Priority_High 1void EXTI0_Init(uint8_t EXTI_Type, uint8_t Priority);
void EXTI0_Switch(uint8_t Status);void EXTI1_Init(uint8_t EXTI_Type, uint8_t Priority);
void EXTI1_Switch(uint8_t Status);#if USE_EXTI2_EXTI3void EXTI2_Init(uint8_t EXTI_Type, uint8_t Priority);void EXTI2_Switch(uint8_t Status);void EXTI3_Init(uint8_t EXTI_Type, uint8_t Priority);void EXTI3_Switch(uint8_t Status);#endif#endifmain.c
#include REGX52.H
#include intrins.h
#include stdint.h
#include EXTI.hvoid main(void)
{ EXTI0_Init(EXTI_FALLING, STC_EXTI_Priority_Lowest);EXTI1_Init(EXTI_FALLING, STC_EXTI_Priority_Highest);while(1){}
}实验现象
按下K3D0翻转按下K4D1翻转。 当按住K3时(处理外部中断0时)仍可响应外部中断1
当按住K4时(处理外部中断1时)不能响应外部中断0。