/****************************************Copyright (c)**************************************************** ** Guangzhou ZHIYUAN electronics Co.,LTD. ** ** http://www.embedtools.com ** **--------------File Info--------------------------------------------------------------------------------- ** File name: main.c ** Last modified Date: 2010-02-04 ** Last Version: V1.0 ** Descriptions: The main() function example template ** **-------------------------------------------------------------------------------------------------------- ** Created by: Lanwuqiang ** Created date: 2010-02-05 ** Version: V1.0 ** Descriptions: 添加用户应用程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ZhangNingbo ** Modified date: 2010-02-25 ** Version: V1.0 ** Descriptions: 16位定时0输入捕获中断示例程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ** Modified date: ** Version: ** Descriptions: ** ** Rechecked by: *********************************************************************************************************/ #include "..\config.h" /********************************************************************************************************* 宏定义和全局变量 *********************************************************************************************************/ #define BEEP (1ul << 7) #define BEEPOFF() GPIO2DATA |= BEEP /* 蜂鸣器关 */ #define BEEPON() GPIO2DATA &= ~BEEP /* 蜂鸣器开 */ volatile INT32U GuiCapFlag = 0; /* 定时器捕获中断标志 */ /********************************************************************************************************* ** Function name: myDelay ** Descriptions: 软件延时 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void myDelay (INT32U ulTime) { INT32U i; i = 0; while (ulTime--) { for (i = 0; i < 5000; i++); } } /********************************************************************************************************* * Function Name: timer0Isr * Description: TIMER0 中断处理函数 * Input: 无 * Output: 无 * Return: 无 *********************************************************************************************************/ void timer0Isr (void) { static unsigned char i; if (i == 1) { i = 0; TMR16B0IR = 1ul << 4; /* 清除CAP0.0中断标志 */ GuiCapFlag = 1; } i++; myDelay(10); } /********************************************************************************************************* ** Function name: timer0Init ** Descriptions: 16位定时器0初始化函数 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void timer0Init (void) { SYSAHBCLKCTRL |= (1ul << 7); /* 打开定时器模块 */ TMR16B0CCR = 0x06; /* 设置CAP0.0下降沿捕获中断 */ zyIsrSet(NVIC_TIMER16B0, (unsigned long)timer0Isr, PRIO_TWO); /* 设置外部中断并使能 */ } /********************************************************************************************************* ** Function name: main ** Descriptions: 通过中断方式实现定时器的捕获功能,用杜邦线连接JP14(开发板右侧)中的P0.2和KEY1(JP8) ** 短接JP8中的BEEP和P2.7,按键触发中断(按键存在抖动)因此在中断服务函数中添加一段抖动处 ** 理函数,每按下KEY1,蜂鸣器响一声。 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ int main (void) { targetInit(); /* 初始化目标板,切勿删除 */ pinInit(); /* 引脚初始化 */ timer0Init(); SYSAHBCLKCTRL |= (1ul << 6); /* 打开GPIO功能部件时钟 */ GPIO2DIR |= BEEP; /* 设置P2.7为输出 */ GuiCapFlag = 0; while (1) { if (GuiCapFlag) { GuiCapFlag = 0; /* 定时器捕获中断标志置0 */ BEEPON(); myDelay(500); BEEPOFF(); myDelay(500); } } } /********************************************************************************************************* End Of File *********************************************************************************************************/