Board logo

标题: 求助mc9s12dg128b定时重装问题 [打印本页]

作者: tanny123    时间: 2007-10-8 22:34     标题: 求助mc9s12dg128b定时重装问题

新手上路
遇到简单问题
请教各位来了
先谢谢了!

问题如下:

//定时器的问题 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(;;);

}


作者: strongchen    时间: 2007-10-9 09:53

用输出比较功能产生定时中断的基本概念是,TCNT计数器自由运行,当其值等于通道寄存器的值时,产生比较事件,即产生中断。
作者: tanny123    时间: 2007-10-13 00:36

哦, 那么TCNT=32768;这句就不需要了 是吧
就说定时始终是65536到0了?
作者: tanny123    时间: 2007-10-13 00:46

还有
另外一个问题 (mc9s12dg128b)
我用PWM设定了1Hz 50%的方波 用B口LED可以显示变化像现的对的
但是用示波器检测不出来方波
看到的是像正弦波 又像三角波的10Hz的波形
且几乎每个引脚都是一样


最大的问题 烧程序后和没烧程序是一样的

但是为什么有可以实现LED的1Hz变化呢?
(示波器应该没有问题)

请大虾们指点迷津,先谢谢了!
作者: strongchen    时间: 2007-10-15 10:00

你的示波器探头的接地连接似乎有问题吧。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0