⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex10-3.c

📁 《增强型8051单片机实用开发技术》例程代码
💻 C
字号:
#include "stc12c5a.h"
#include "intrins.h"

sbit  Begin_Led = P1^2;         	    	//系统开始工作指示灯 
unsigned char Is_Power_Down = 0;     		//判断是否进入掉电模式标志
sbit  Is_Power_Down_Led_INT0 = P1^7;  		//掉电唤醒指示灯,在INT0中
sbit  Not_Power_Down_Led_INT0 = P1^6; 		//不是掉电唤醒指示灯,在INT0中
sbit  Is_Power_Down_Led_INT1 = P1^5;  		//掉电唤醒指示灯,在INT1中
sbit  Not_Power_Down_Led_INT1 = P1^4; 		//不是掉电唤醒指示灯,在INT1中
sbit  Power_Down_Wakeup_Pin_INT0 = P3^2; 	//掉电唤醒管脚,INT0
sbit  Power_Down_Wakeup_Pin_INT1 = P3^3; 	//掉电唤醒管脚,INT1
sbit  Normal_Work_Flashing_Led   = P1^3; 	//系统处于正常工作状态指示灯
void Normal_Work_Flashing(void); 
void INT_System_init(void); 
void INT0_Routine(void); 
void INT1_Routine(void);

void main(void) 
{ 
	unsigned char j=0;
	unsigned char wakeup_counter = 0;     	//中断唤醒次数变量初始为0

	Begin_Led = 0;                        	//系统开始工作指示灯
	INT_System_init();     					//中断系统初始化

	while(1)
	{
		P2 = ~wakeup_counter;				//中断唤醒次数显示,先将wakeup_counter取反
		wakeup_counter++;    				//中断唤醒次数显示
		for(j=0;j<2;j++)
		Normal_Work_Flashing(); 			//系统正常工作指示灯
		Is_Power_Down = 1; 					//进入掉电模式之前,将其置为1,以供判断
		PCON = 0x02;   						//执行完此句,单片机进入掉电模式,外部时钟停止振荡
		_nop_(); 
		//外部中断唤醒后,首先执行上句,然后才会进入中断服务程序
		_nop_();  							//建议多加几个空操作指令NOP,以便观察
		_nop_();  							//建议多加几个空操作指令NOP
	}
}
void INT_System_init(void)		//中断系统初始化
{ 
	IT0 = 0;   					//外部中断0,低电平触发中断
	EX0 = 1;   					//允许外部中断0 中断
	IT1 = 1;   					//外部中断 1,下降沿触发中断
	EX1 = 1;   					//允许外部中断1中断
	EA  = 1;   					//开总中断控制位
} 
void INT0_Routine(void) interrupt 0   	//外部中断0服务程序
{ 
	if(Is_Power_Down)     				//判断掉电唤醒标志
	{ 
		Is_Power_Down = 0;
		Is_Power_Down_Led_INT0 = 0;  	//点亮外部中断0掉电唤醒指示灯
		while(Power_Down_Wakeup_Pin_INT0==0);  //等待变高
		Is_Power_Down_Led_INT0 = 1;  	//关闭外部中断0掉电唤醒指示灯
	}
	else
	{
		Not_Power_Down_Led_INT0 = 0;  	//点亮外部中断0正常工作中断指示灯
		while(Power_Down_Wakeup_Pin_INT0==0);  //等待变高
		Not_Power_Down_Led_INT0 = 1;  	//关闭外部中断0正常工作中断指示灯
	}
}
void INT1_Routine(void) interrupt 2   	//外部中断1服务程序
{
	if(Is_Power_Down)    				//判断掉电唤醒标志
	{
		Is_Power_Down = 0;
		Is_Power_Down_Led_INT1 = 0;  	//点亮外部中断1掉电唤醒指示灯
		while(Power_Down_Wakeup_Pin_INT1==0); //等待变高
		Is_Power_Down_Led_INT1 = 1;  	//关闭外部中断1掉电唤醒指示灯
	}
	else
	{
		Not_Power_Down_Led_INT1 = 0;  	//点亮外部中断1正常工作中断指示灯
		while(Power_Down_Wakeup_Pin_INT1==0);  //等待变高
		Not_Power_Down_Led_INT1 = 1;  	//关闭外部中断1正常工作中断指示灯
	}
}
void delay(void)
{
	unsigned int j,k;

	for(k=0;k<2;++k)
	{
		for(j=0;j<=30000;++j)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
}
void Normal_Work_Flashing(void)
{ 
	Normal_Work_Flashing_Led = 0;
	delay(); 
	Normal_Work_Flashing_Led = 1; 
	delay();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -