首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]问个小问题~~

[求助]问个小问题~~

刚刚开始学飞思卡尔的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;
}

}

谢谢~~
不太明白你的问题到底是什么。TC7设置为某个值后,TCNT运行到这个值就会复位,也就一直产生溢出中断。同时中断后TCNT会继续运行,仿真时可能看不到它被复位的瞬间值。
海纳百川  有容乃大
我理解的是TCNT到达TC7后应该就会复位,那么TCNT的值应该不会比TC7的值要高吧?假如我TC0的值比TC7的值高,那个对于TC0就不会产生中断。我这样理解不知道对不对呢?但仿真的时候我看到TCNT出现比TC7高的值。所我不理解。
TIOS=0x01为什么?
海纳百川  有容乃大
哈哈~我也发现了这个问题,就是那个TIOS惹的祸,谢谢~但再问一下,关于OCTM和OCTD的,假如我把上面改正了,并在TSCR1 = 0X80; 后面加入 OC7M=0x01; OC7D=0x01;那么在发生TC7比较匹配时是不是OC0引脚就会变为1?还要设置其它的控制字么?

[此贴子已经被作者于2006-12-26 12:20:46编辑过]

这些数据手册中都有,我就不多说了...
海纳百川  有容乃大
返回列表