以下是新唐M051单片机定时器3的 周期模式测试程序 成功版: 
#include "SmartM_M0.h" UINT32 i =0; 
/**************************************** 
*函数名称:TMR3Init 
*输    入:无 
*输    出:无 
*功    能:定时器3初始化 
******************************************/ 
VOID TMR3Init(VOID) 
{ 
    PROTECT_REG 
 ( 
  /* 使能TMR0时钟源 */ 
     APBCLK |= TMR3_CLKEN; 
  /* 选择TMR0时钟源为外部晶振12MHz */  
  CLKSEL1 = (CLKSEL1 & (~TM3_CLK)) | TM0_12M;  
  /* 复位TMR3 */ 
  IPRSTC2 |=  TMR3_RST; 
  IPRSTC2 &= ~TMR3_RST;  
  /* 选择TMR3的工作模式为周期模式*/  
  TCSR3 &= ~TMR_MODE; 
  TCSR3 |=  MODE_PERIOD;   
  /* 溢出周期 = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/ 
   /* 溢出周期 = (1/12MHz) * (0 + 1) * (12000*500)=500ms (0.5S)*/ 
  TCSR3  = TCSR3 & 0xFFFFFF01;  // 设置预分频值 [0~255] 
  TCMPR3 = 12000*500;        // 设置比较值 [0~16777215] 
  TCSR3 |= TMR_IE;     //使能TMR0中断 
  NVIC_ISER |= TMR3_INT;  
  TCSR3 |= CRST;      //复位TMR0计数器     
  TCSR3 |= CEN;      //使能TMR0 
 ) 
} 
/**************************************** 
*函数名称:main 
*输    入:无 
*输    出:无 
*功    能:函数主体 
******************************************/ 
INT32 main(VOID) 
{ 
     PROTECT_REG            //ISP下载时保护FLASH存储器 
  (        
   PWRCON |= XTL12M_EN;      //默认时钟源为外部晶振 
   while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz时钟稳定       
   CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟  
   P2_PMD = 0x5555;       //P2口设置为输出模式 
      P2_DOUT= 0x00;        //P2口输出低电平 
  ) 
  TMR3Init();   
  while(1) 
  { 
   if(i > 7) 
   { 
      i = 0; 
   } 
  } 
} 
/**************************************** 
*函数名称:TMR3_IRQHandler 
*输    入:无 
*输    出:无 
*功    能:定时器3中断服务函数 
******************************************/ 
VOID TMR3_IRQHandler(VOID) 
{ 
 /* 清除TMR3中断标志位 */ 
 TISR3 |= TMR_TIF; 
    P2_DOUT = 1UL<<i;         //P2口输出相应的电平 
 i++; 
} 
 
 |   
     
  
 |