程序代码如下。不知道是什么原因使得标志位无法清除,哪位达人解答一下啊 #include <hidef.h> /* common defines and macros */ #include <mc9s12dg128.h> /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12dg128b" /****************************************************************** *函数名:PLLINIT *入口参数SNNR寄存器值,REFDV0寄存器值 *出口参数: 无 *功能描述:使用PLLCLK,时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1) *******************************************************************/ void PLLINIT(uchar SYNR0,uchar REFDV0) { CLKSEL=0x00; //disable pll; CLKSEL_PLLSEL = 0; PLLCTL_PLLON = 0; SYNR = SYNR0; // REFDV = REFDV0; PLLCTL = 192; //0xC0 CME=1,PLLON=1 PLLCTL_PLLON = 1; while(!CRGFLG_LOCK); CLKSEL_PLLSEL = 1; } /****************************************************************** *函数名C0_Init() *入口参数无 *出口参数: 无 *功能描述:设置IOC通道为比较输出,当成功发生匹配时OC0输出翻转 *******************************************************************/ void OC0_Init() { TIOS_IOS0=1; //定义IOC0作为比较输出 TCTL2_OM0=0; //OC0输出翻转//00:与输出引脚断开;01:翻转;10:输出清零;11:输出置1 TCTL2_OL0=1; TC0=10000; //输出占空比为15.3%的方波 TTOV_TOV0=1; //Enable toggle on OC0 } void main(void) { /* put your own code here */ DisableInterrupts; DDRB_BIT0=1; PLLINIT(24,5);//6M晶振获得25M总线频率 TSCR2_TOI=1; //允许定时中断 TSCR2|=3; //预分频器输出时钟频率为P时钟的1/8,定时器溢出时间为21.97ms OC0_Init(); TSCR1_TEN=1; //TIMER ENABLE EnableInterrupts; for(;;) {} /* wait forever */ /* please make sure that you never leave this function */ } #pragma CODE_SEG NON_BANKED void TOI_ISR(void) //定时器溢出{ DisableInterrupts; TFLG2=0x80; //对标志位清零 PORTB_BIT0=!PORTB_BIT0; EnableInterrupts; } |