本帖最后由 njulazy 于 2010-8-18 13:27 编辑
在使用该芯片时,在keil3中如需使用中断需要如何设置呢,源程序为示例程序,不存在错误,可是烧入芯片就是没有中断,还需要做什么吗?请高手帮忙!
示例如下:
#include "config.h"
#define BEEP (1 << 27) // P1.27控制BEEP,低电平蜂鸣
/*********************************************************************************************************
** 函数名称: IRQ_Timer0
** 函数功能: 定时器0中断服务程序,取反蜂鸣器控制口。
** 入口参数: 无
** 出口参数: 无
*********************************************************************************************************/
void __irq IRQ_Timer0(void)
{
if ((IO1SET & BEEP) == 0)
{
IO1SET = BEEP; // 关闭BEEP
}
else
{
IO1CLR = BEEP;
}
T0IR = 0x01; // 清除中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
/*********************************************************************************************************
** 函数名称: main
** 函数功能: 使用定时器实现1秒钟定时,控制蜂鸣器。中断方式。
** 调试说明: 需要将跳线组JP1上的P1.27和BEEP连接。
**********************************************************************************************************/
int main(void)
{
PINSEL3 = 0x00000000; // 设置管脚连接GPIO
IO1DIR = BEEP; // 设置BEEP控制口输出
IO1SET = BEEP;
/* 定时器0初始化 */
T0TC = 0; // 定时器设置为0
T0PR = 0; // 时钟不分频
T0MCR = 0x03; // 设置T0MR0匹配后复位T0TC,并产生中断标志
T0MR0 = Fpclk / 2; // 0.5秒钟定时
T0TCR = 0x01; // 启动定时器
/* 打开IRQ中断 */
IRQEnable(); // IRQ中断使能
/* 设置定时器0中断IRQ */
VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断
VICVectPri4 = 00; // 设置定时器0中断最高优先级
VICVectAddr4 = (uint32)IRQ_Timer0; // 设置中断服务程序地址
VICIntEnable = 1 << 0x04; // 使能定时器0中断
while (1);
return (0);
} |