大家好,我最近编了一个定时器的小程序,发现一些问题,还望高手给指点一下,程序如下:
void init(void){
SOPT1_COPE=0;
ICSC2 = 0x06;//使能外部晶振
ICSC1 = 0x00;
while(ICSSC_IREFST!=0);
while(ICSSC_CLKST!=0b00);
ICSSC_DRST_DRS = 0b00;
}
void time_init(void){
SCGC1_TPM2 = 1; //使能TPM2模块的时钟
TPM2MOD = 0x00ff; //设置TPM2的计数器为自由运行模式
TPM2C0VL=0xFF;
TPM2C0SC = 0x50;
TPM2SC = 0x0E;
}
void Delay(int n) //延迟程序
{
unsigned int i,j;
for(i=0;i<=n;i++)
for(j=0;j<=200;j++);
}
void main(void){
init();
time_init() ;
PTDDD=0xFF;
PTDPE=0xff;//开漏输出
EnableInterrupts;
while(1);
}
void interrupt VectorNumber_Vtpm2ch0 TPM_ISR()
{
TPM2SC_TOF = 0;
TPM2C0SC_CH0F = 0;
PTDD = ~PTDD;
TPM2C0VH=0x00; //设置100MS定时
TPM2C0VL=0xFF;
}
问题:1.这段程序是利用输出比较的方式定时一段时间。那控制定时时间长短的寄存器应该是TPM2C0VH和TPM2C0VL,但是我做实验验证,这个定时时间只同TPM2MD有关,不知道什么原因,大家帮我看下。
2.这段程序编写的实际的定时时间是理论上定时时间的64倍,应该是哪里有分频啦。但是我没找到,大家帮帮忙哈
我用的芯片是MC9S08LG32 |