程序不能进入定时器中断,不知是否是设置有问题?
使用6M晶振
#include "sfr62p.h"
/*************************************************************************/
//定时器模式,中断A0
#pragma INTERRUPT/B vect 21 ms_timer_a0
void ms_timer_a0(void){
ta0 = 24000-1; //1msec @24MHz
if(beep_time==0)beep=1;
else beep_time--;
}
/*************************************************************************
等待20ms,直到PLL时钟稳定
*************************************************************************/
void pll_stable_20ms(void)
{
//TA0MR:定时器A0模式寄存器
ta0mr = 0x80; //定时器模式,32分频
ta0 = 3750-1; //20ms:@6MHz, f32
ta0ic = 0x00; //Level 0
tabsr = 0x01; //TimerA0启动
while(ir_ta0ic == 0){} //延时20ms;Vcc = 5V
tabsr = 0x00; //TimerA0停止
ir_ta0ic = 0; //清中断标志位
}
/*************************************************************************/
//寄存器初始化
void mcu_init(void)
{
prc0=1;//允许写PRC0
prc1=1;//允许写PRC1
pm0 = 0x00; //单芯片模式
pm1 = 0x08;
cm0 = 0x08; //主时钟
cm1 = 0x20; //系统时钟为主时钟
plc0 = 0x12;
pm2 = 0x00;
plc0 = 0x92; //PLL时钟启动
pll_stable_20ms(); //等待20ms,直到PLL时钟稳定
cm1 = 0x22; //系统时钟为PLL时钟
pclkr = 0x03;
prc0=0;
prc1=0;//PRCR禁止写
adcon2 = 0x01; //AD4分频;端口P10;采样保持
adcon0 = 0x02; //软件触发;单次模式;通道2
adcon1 = 0x28; //不使用ANEX0和ANEX1;Vref;10位模式
//定时器设置
ta0ic = 0x01; //有中断请求,LEVEL 1
ta0mr = 0x00; //定时器模式,f1
ta0 = 24000-1; //1msec @24MHz
ta0s = 1; //start counting
}
/*************************************************************************/
void main(void)
{
mcu_init(); //寄存器初始化
while(1){
}
} |