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

📄 main.c

📁 完整的周立功公司的LPC213X开发板的光盘内容
💻 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:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
/********************************************************************************************************
** 功能:使能定时器0和外部中断0,当定时器0控制LED1闪烁,外部中断0控制蜂鸣器。
** 说明:将跳线器JP8_KEY1、JP11_BEEP,JP12_LED1短接。
** 		 按住KEY1后全速运行程序,看LED1能否闪烁。
*********************************************************************************************************
*/
#include "config.h"

const uint32 BEEP = 1 << 7;					// P0.7控制蜂鸣器,低电平蜂鸣
const uint32 LED1 = 1 << 18;				// P1.18控制LED1,低电平点亮

void  Timer0_Handler(void);
void  Eint0_Handler(void);

/*
*********************************************************************************************************
** 函数名称:IRQ_Timer0()
** 函数功能:Timer0中断服务函数,取反LED1控制口。
** 入口参数:无
** 出口参数:无
*********************************************************************************************************
*/
void IRQ_Timer0(void)
{  uint32  i, bak;

   bak = VICIntEnable;						// 备份当前VICIntEnable的值
   VICIntEnClr = (1 << 4)|( 1<< 14);		// 禁止当前优先级中断及低优先级中断
   VICVectAddr = 0x00;						// 清除中断逻辑,以便VIC可以响应更高优先级IRQ中断
   
   i = IO1SET;								// 读取当前LED1控制值
   if( (i & LED1) == 0 )					// 控制LED1输出
   {  IO1SET = LED1;
   }
   else
   {  IO1CLR = LED1;
   }
   
   while( (T0IR & 0x01) !=0 )				// 等待外部中断信号恢复为高电平	
   {  T0IR = 0x01;							// 清除EINT0中断标志
   }
    
   VICIntEnable = bak;
}		



/*
*********************************************************************************************************
** 函数名称:IRQ_Eint0()
** 函数功能:外部中断EINT0服务函数,取反BEEP,允许中断嵌套。
** 入口参数:无
** 出口参数:无
*********************************************************************************************************
*/
void IRQ_Eint0(void)
{  
	uint32  i, bak;
   	bak = VICIntEnable;
   	VICIntEnClr = 1 << 14;			
   	VICVectAddr = 0x00;
   	
   	IRQEnable();							// 使能IRQ中断
   	
   	i = IO0SET;								// 读取当前BEEP控制值
   	if( (i & BEEP) == 0)					// 控制BEEP输出
   	{  IO0SET = BEEP;
   	}
   	else
   	{  IO0CLR = BEEP;
   	}
   
   	while( (EXTINT & 0x01) != 0 )			// 等待外部中断信号恢复为高电平	
   	{  EXTINT = 0x01;						// 清除EINT0中断标志
  	}
   
   	VICIntEnable = bak;
}
			

/*
*********************************************************************************************************
** 函数名称:main()
** 函数功能:初始化定时器0,设置定时器0中断和外部中断0。
** 使用说明:
*********************************************************************************************************
*/
int  main(void)
{
	T0TC   = 0;								// 定时器设置为0
	T0PR   = 0;								// 时钟不分频
	T0MCR  = 0x03;							// 设置T0MR0匹配后复位T0TC,并产生中断标志
	T0MR0  = Fpclk / 10;					// 0.1秒定时
	T0TCR  = 0x01;							// 启动定时器
	
  	PINSEL0 = 0x00000000;			
   	PINSEL1 = 0x00000001;					// 设置管脚连接,P0.16设置为EINT0
   	IO0DIR = BEEP;							// 设置B1控制口为输出,其它I/O为输入
   	IO1DIR = LED1;
   	IO0SET = BEEP;
   
   	IRQEnable();							// 使能IRQ中断
   	
   	/*  打开Timer0、EINT0中断(设置向量控制器,即使用向量IRQ) */
   	VICIntSelect = 0x00000000;				// 设置所有中断分配为IRQ中断
   	VICVectCntl0 = 0x20 | 4;				// 分配Timer0中断到向量中断0
   	VICVectAddr0 = (uint32)Timer0_Handler; 	// 设置中断服务程序地址
   	VICVectCntl1 = 0x20 | 14;				// 分配EINT0中断到向量中断1
   	VICVectAddr1 = (uint32)Eint0_Handler; 	// 设置中断服务程序地址
   	T0IR	 = 0x01;						// 清除Timer0
   	EXTINT   = 0x01;						// 清除EINT0中断标志	
   
    VICIntEnable = (1 << 4);
   	VICIntEnable =  (1 << 14);	// 使能Timer0、EINT0中断
 // 	VICIntEnable = (1 << 4) | (1 << 14);	// 使能Timer0、EINT0中断
   
   	while(1);								// 等待中断
   	return(0);
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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