现在想用sh79f1615的time0实现10mS定时中断,定时器甚至为工作方式1,系统时钟为内部27Mrc。硬件电路,没有接外部晶振,XTAL1和XTAL2悬空用JET51仿真器,通过ISP51软件对整个flash区域编程下载程序,代码选项“OP_OSC”设置为oscillator1 is internal 27M RC,oscillator2 is disabled. 但是测得的中断频率几乎是10mS的四倍。请指出问题出在哪?
代码如下:
//====时钟分频=====
#define CLK_DIV1 0X00
#define CLK_DIV2 0X01
#define CLK_DIV4 0X02
#define CLK_DIV12 0X03
#define Bank0 INSCON &= 0xbf
#define Bank1 INSCON |= 0x40
//时钟通道2
void Init_Clk2(unsigned char Pscr)
{
unsigned int i;
Bank0;
CLKCON = 0X00 ;
CLKCON |= (Pscr<<5) ;//分频设置
CLKCON |= (1<<3) ; //打开OSCXCLK
for(i=60900;i>0;i--) ;
CLKCON |= (1<<2) ; // 把它作为振荡(OSCSCLK)时钟
}
unsigned int uiSysTime = 0;
void time0_Initial(void)
{
IEN0 = 0xc2; //打开定时器0中断和总中断
TMOD = 0x01; //设置Timer0工作方式为方式1
TCON1 = 0x04; //将系统时钟作为定时器0的时钟源
TL0 = 0x1b; //设置Timer0定时器初值为0xa81b,10mS溢出中断一次
TH0 = 0xa8; TR0 = 1; //打开Timer0
}
void Timer0_ISP(void) interrupt 1
{
EA = 0;
TF0 = 0;
//-------------------
uiSysTime++;
if((uiSysTime%100==0)&&(uiSysTime != 0))
{
P0=P0^(1<<5);
}
//-------------------
EA = 1;
}
void main(void)
{
Init_Clk2(CLK_DIV2);
time0_Initial();
while(1)
{
}
}
///////////////////---------------------///////////////////////////
|