新手上路
遇到简单问题
请教各位来了
先谢谢了!
问题如下:
//定时器的问题 16MHz晶振
//我认为是4.1 LED变化一次,但是实际上LED是 8 s 左右变化一次,
//改变 TCNT 数值时间也没有变化,哪里错了呢?
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
unsigned long int flag=0;
// ******** 中断函数 **********
#pragma CODE_SEG NON_BANKED
void interrupt 8 Timer0_ISR()
{
DisableInterrupts;
TFLG2 = 0x80;
TFLG1 &= 0x01; // Interrupt Flag clear
TCNT = 32768; //重新置数
if(flag == 1000)
{ // 0.0041s*1000=4.1秒 LED变一次
PORTB = ~ PORTB;
flag=0;
}
flag++;
EnableInterrupts;
}
#pragma CODE_SEG DEFAULT
//************ 定时器初始化 ************
void Init_ECT()
{
TIOS = 0x01; //select channel 0
TCNT=32768; //中断 0.0041秒 = (65536-32768)/8/1000000=0.0041s
TIE = 0X01; //tco 开中断
TSCR1= 0X80; //enable main timer
}
void main(void)
{
Init_ECT();
DDRB=0xff;
PORTB=0xf0;
EnableInterrupts;
for(;;);
}
|