标题:
[求助]问个小问题~~
[打印本页]
作者:
xiaohe1985
时间:
2006-12-25 18:10
标题:
[求助]问个小问题~~
刚刚开始学飞思卡尔的s19 单片机,在练习中用了TSCR2 中的TCRE 置位,因该按说明是到达TC7的值后TCNT就会自动复位到0000。(希望我没有理解错),但为什么我用CodeWarrior仿真中它没有复位。程序是从网上找的,我该了数据看看各个功能。程序如下:
#include
/* common defines and macros */
#include
/* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
static int waittime = 0;
static long absoluteTime = 0;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void ECT_ISR(void){
TFLG1 = 0x01;
//我在这里设置了断点,它每次都能够进来。
waittime++;
if(waittime>=200) waittime=0;
PORTB = waittime;
}
#pragma CODE_SEG DEFAULT
static void ECTInit(void) {
TIOS = 0x81; //这句话必须写在前边,不然无法把数据写入TC0,TC7
TC0 = 0xffff; // Store given value to the compare register
TC7 = 0x7700; //
就是这个值 ,我改变了后应该不会再达到
//FFFF产生中断 吧?但为什么我可以一直中断呢?但假如我
//设置为0000,它(TCNT)就一直在0000维持。
TSCR2 = 0x0f; // 把TSCR2中TCRES置位,定时器计数达到TC7数值后,自动复位tore given value to the prescaler
TFLG1 = 0x01; // Reset interrupt request flag
TIE = 0x01; // Enable interrupt
TIOS = 0x01;
TSCR1 = 0X80; // Enable Timertimer enable
}
void main(void) {
DDRB = 0xFF;
PORTB = 0x00;
PORTB = 0xFF;
ECTInit();
EnableInterrupts;
while(1)
{
absoluteTime++;
if(absoluteTime==5000000)
DisableInterrupts;
}
}
谢谢~~
作者:
strongchen
时间:
2006-12-26 09:23
不太明白你的问题到底是什么。TC7设置为某个值后,TCNT运行到这个值就会复位,也就一直产生溢出中断。同时中断后TCNT会继续运行,仿真时可能看不到它被复位的瞬间值。
作者:
xiaohe1985
时间:
2006-12-26 10:02
我理解的是TCNT到达TC7后应该就会复位,那么TCNT的值应该不会比TC7的值要高吧?假如我TC0的值比TC7的值高,那个对于TC0就不会产生中断。我这样理解不知道对不对呢?但仿真的时候我看到TCNT出现比TC7高的值。所我不理解。
作者:
strongchen
时间:
2006-12-26 11:19
TIOS=0x01为什么?
作者:
xiaohe1985
时间:
2006-12-26 12:20
哈哈~我也发现了这个问题,就是那个TIOS惹的祸,谢谢~但再问一下,关于OCTM和OCTD的,假如我把上面改正了,并在TSCR1 = 0X80; 后面加入 OC7M=0x01; OC7D=0x01;那么在发生TC7比较匹配时是不是OC0引脚就会变为1?还要设置其它的控制字么?
[此贴子已经被作者于2006-12-26 12:20:46编辑过]
作者:
strongchen
时间:
2006-12-26 14:46
这些数据手册中都有,我就不多说了...
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0