📄 timer0中断.c
字号:
/**************************************************************
实验名称:定时器0中断实验
实验目的:熟悉定时器0的使用
实验准备:带中断的程序应该运行在FLASH模式下
实验日期:2008,3,30
作者: 刘启明
***************************************************************/
#include <iolpc2132.h>
#include <inarm.h>
#define BEEP 1 << 7 // P0.7控制蜂鸣器,低电平蜂鸣
#define Fpclk 12000000
/*****************************************************************
** 函数名称 :IRQ_Timer0()
** 函数功能 :定时器0中断服务程序,取反LED控制口。蜂鸣或闪烁
** 入口参数 :无
** 出口参数 :无
*****************************************************************/
#pragma vector=0x18
__irq __arm void IRQ_Timer0 (void)
{
T0IR_bit.MR0INT = 1; /* 清除中断标志 */
if (IO0PIN_bit.P0_7==1)IO0CLR = BEEP;
else IO0SET = BEEP; /* BEEP取反LED */
VICVectAddr = 0x00; /* 通知VIC中断处理结束 */
}
/*****************************************************************
** 函数名称 :main()
** 函数功能 :使用定时器实现1秒钟定时,控制LED闪烁。中断方式。
** 调试说明 :需要将跳线0。7连接LED。
*****************************************************************/
void main (void)
{
PINSEL0 = 0x00000000; /* 设置管脚连接GPIO */
IO0DIR = BEEP; /* 设置BEEP控制口输出 */
IO0SET = BEEP;
//T0IR_bit.MR0INT = 1;
/* 定时器0初始化 */
T0TC = 0; /* 定时器设置为0 */
T0PR = 0; /* 时钟不分频 */
T0MCR_bit.MR0RES = 1; /* 设置T0MR0匹配后复位T0TC,并产生中断标志 */
T0MCR_bit.MR0INT = 1;
T0MR0 = Fpclk/2; /* 0.5秒钟定时 */
T0TCR_bit.CE = 1; /* 启动定时器 */
/* 设置定时器0中断IRQ */
__disable_interrupt(); // 关中断
VICIntSelect = 0x00; /* 所有中断通道设置为IRQ中断 */
VICVectCntl0_bit.NUMBER = 0x04; /* 设置定时器0中断通道分配最高优先级 */
VICVectCntl0_bit.ENABLED = 1;
VICVectAddr0 = (unsigned int)IRQ_Timer0; /* 设置中断服务程序地址 */
VICIntEnable_bit.INT4 = 1; /* 使能定时器0中断 */
__enable_interrupt();
while (1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -