51 Mikrocontroller-Interrupt-Kontrolllichtschalter

51 Mikrocontroller-Interrupt-Kontrolllichtschalter

1. Übersicht

In diesem Artikel wird die Verwendung von Interrupts in Mikrocontrollern vorgestellt und die Anwendung von Interrupts anhand eines kleinen Experiments erprobt.

2. Unterbrechung

Der Vorteil des Interrupt-Verarbeitungsgeschäfts besteht darin, dass es keine CPU-Ressourcen beansprucht. Erst wenn die Hardware ein Interrupt-Verarbeitungssignal sendet, verarbeitet die CPU die Interrupt-Anforderung.

3. Kontrolllichtschalter unterbrechen

3.1.Hardwareprinzip

Das Bild unten zeigt den Schaltplan. Von den 7 LED-Leuchten müssen Sie nur den 19-poligen P1.7 des Mikrocontrollers an die LED anschließen. Die anderen LED-Leuchten müssen nicht angeschlossen werden, da nur die P1. Der 7. Pin ist im folgenden Programm definiert. LED-Leuchten:
Wenn Sie möchten, dass alle 7 LED-Leuchten steuerbar sind, definieren Sie einfach die LED-Leuchten anderer Pins im Programm.

Fügen Sie hier eine Bildbeschreibung ein

3.2. Unterbrechungsmodus zur Steuerung des Lichtschalters

Im Programm INT_initwerden der allgemeine Interrupt und der externe Interrupt in der Interrupt-Initialisierungsfunktion aktiviert. Durch Drücken der Taste wird die Funktion ausgelöst INT_0und INT_1unterbrochen. Schreiben Sie Code in diese Funktion, um den Status des Lichts zu steuern. Erkennen Sie die Taste zur Steuerung des Lichtschalters durch Unterbrechung.

/*************************************************************
* 程序名:外部中断控制LED灯开和关
* 编写人:bruce
* 日  期:2023-11-26
* 修改日志:开始编写
/*************************************************************/

#include<STC12C2052AD.H>
sbit LED = P1^7;

/*********************************************************************************************
函数名:外部中断INT初始化函数
调  用:INT_init();
参  数:无
返回值:无
结  果:启动外部中断INT1、INT0中断,设置中断方式
备  注:
/**********************************************************************************************/
void INT_init (void){
    
    
	EA = 1;	//中断总开关
	EX1 = 1; //允许外部中断1中断    
	EX0 = 1; //允许外部中断0中断
	IT1 = 1; //1:下沿触发  0:低电平触发
	IT0 = 1; //1:下沿触发  0:低电平触发
}

/*********************************************************************************************
函数名:外部中断INT0中断处理程序
调  用:[外部引脚INT0中断处理]
参  数:无
返回值:无
结  果:用户处理外部中断信号
备  注:
/**********************************************************************************************/
void INT_0 (void) interrupt 0  using 2{
    
     //切换寄存器组到2

	//用户函数内容
	LED = 0;

}

/*********************************************************************************************
函数名:外部中断INT1中断处理程序
调  用:[外部引脚INT1中断处理]
参  数:无
返回值:无
结  果:用户处理外部中断信号
备  注:
/**********************************************************************************************/
void INT_1 (void) interrupt 2  using 2{
    
     //切换寄存器组到2

	//用户函数内容
	LED = 1;
}	

void main(void){
    
    
	INT_init();
	LED = 1;
	while(1){
    
    };
}

おすすめ

転載: blog.csdn.net/m0_38039437/article/details/134649512