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

📄 eint2.c

📁 一个基于ARM单片机的红外解码的程序,红外时序通过串口发出,是红外解码的一个辅助助手,非常好用.
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Chenxibing
** Modified date:		2005-01-20
** Version:
** Descriptions:		外部中断唤醒掉电CPU,同时产生中断。
**
********************************************************************************************************/
#include "config.h"

//#define 	BEEP	1 << 7		// P0.7控制BEEP

extern uint8 RedStart;
extern uint32	Reddata;
extern uint8 KeyDown;
uint16	RedTime;
uint16	RedCnt;
uint8	Outdata[5];
uint8 const ASCII[]={'0','1','2','3','4','5','6','7','8','9'};
/*
*********************************************************************************************************
** 函数名称 :IRQ_Eint0()
** 函数功能 :外部中断0 EINT0服务程序
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************
*/
void  IRQ_Eint2 (void)	__irq
{
	/* 	等待外部中断信号恢复为高电平
	 	若信号保持为低电平,中断标志会一直置位。*/
	if ((EXTINT & 0x04) != 0)
	{
		EXTINT = 0x04;					// 清除EINT0中断标志
		T1TCR  = 0x00;					// 定时器计数器禁止计数
		RedTime = T1TC;					// 保存两次下降沿这间的时间
		if((EXTPOLAR & 0x04) == 0x00)	// 这次为下降沿中断
		{
			EXTPOLAR = 0x04;		// EINT2改为上升沿中断
		} else {
			EXTPOLAR = 0x00;		// EINT2改为下降沿中断
		}
		T1TCR  = 0x03;					// 复位
		T1TCR  = 0x01;					// 定时器计数器开始计数
		if((EXTPOLAR & 0x04) == 0x00)	// 这次为下降沿中断
		{
			UART0_SendByte(13);
			UART0_SendByte(10);
			UART0_SendByte(0xb5);
			UART0_SendByte(0xcd);
		} else {
			UART0_SendByte(0xb8);
			UART0_SendByte(0xdf);	
		}

		RedCnt = RedTime;
		if((RedCnt/1000) != 0)
		{
			UART0_SendByte(ASCII[RedCnt/1000]);
		}
		if((RedCnt%1000/100) != 0)
		{
			UART0_SendByte(ASCII[(RedCnt%1000/100)]);
		}
		UART0_SendByte('.');
		UART0_SendByte(ASCII[(RedCnt%100)/10]);
		
		UART0_SendByte(ASCII[RedCnt%10]);			
		//UART0_SendByte(ASCII[RedTime%10]);			
	}
	
	VICVectAddr = 0;								// 向量中断结束
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :演示外部中断唤醒掉电的CPU
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************
*/
/*
int main (void)
{
	PINSEL0 = 0x00000000;				// 管脚连接GPIO
	PINSEL1 = 0x00000001;				// P0.16连接EINT0
	IO0DIR  = BEEP;						// 设置BEEP控制口为输出,其余输入
	
	IRQEnable();						// 使能IRQ中断
	
	// 外部中断0初始化 
	VICIntSelect   = 0x00000000;		// 设置所有中断分配为IRQ中断
	VICVectCntl5   = 0x20 | 16;			// 分配外部中断0到向量中断0
	VICVectAddr5   = (uint32)IRQ_Eint2;	// 设置中断服务程序地址
	VICIntEnable   = 1 << 16;			// 使能EINT2中断
	//EXTWAKE        = 0x01;				// 外部中断0唤醒芯片
	EXTINT         = 0x04;				// 清除EINT0中断标志
	
	IO0SET = BEEP;

	while (1)	
	{
		PCONP = 0x00;					// 关闭定时器、RTC、UART等功能部件
		PCON  = 0x02;					// 系统进入掉电模式
		
		// 当系统被唤醒后,取反BEEP控制
		if ((IO0SET & BEEP) == 0) IO0SET = BEEP;
			else IO0CLR = BEEP;
	}

	return (0); 
}*/
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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