我选用的是mc9s12d64,现想用其输出比较功能实现连续的方波输出,我所写的程序如下,但不能实现,请各位高手分析分析: static word time1,time2;/*首先定义两个用于控制主循环时间的变量*/
void main(void) {
asm{ //系统的晶振是16MHZ,经过锁相环倍 LDAB #1 //频后系统时钟为48MHZ而总线时钟为 STAB REFDV //24MHZ,这段代码的功能就在于此, LDAB #2 //并且也没有任何问题! STAB SYNR // loop: BRCLR CRG**, #$08,loop // BSET CLKSEL, #$80 // }
TSCR2 = 0x05;/*本句话设定ECT主定时器的工作频率,因为总线时钟为 24MHZ,分频后为3/4MHZ,即:4/3us TCNT自加一次, 这句话也没问题,是经过验证的*/ TIOS = 0x20;/*设定PTT5为输出比较功能,没有问题*/ /****************************以上是初始化吧*************************/ while(1){ asm{ //本段代码是用于将主循环控制在10ms而记录 ldd TCNT //和主定时器的初始时刻,没有问题 std time1 // } //
asm{ movb #$08,TCTL1 /*首先将OC5的事件设定为OC5清零*/ ldd TCNT //这段代码是设定相对于主定时器的事件 addd #10 //触发时刻,但时间比较短,也就是能立 std TC5 //将PTT5置成低电平 nop nop nop movb #$0c,TCTL1 //这段和上面一样,但是是将PTT5置成高 ldd TCNT //电平,也就是等待相对主定时器比较长 addd #3000 //的时间将PTT5置为高电平,但也没超出 std TC5 //10ms }
asm{ //本段代码是和前边那段代 ldd TCNT //码共同控制主循环10ms的 subd time1 //这也没有问题, std time2 // } // while(time2<7500){ //等待主循环到10ms asm{ // ldd TCNT // subd time1 // std time2 // } } }
}
按照我的目的,主循环10ms,而低电平持续时间为4ms,那么高电平时间为6ms,这样就能输出连续的矩形波,可是多次测试都不能实现,总时输出低电平,搞的我很烦,希望高手能帮我分析分析,提出好的方法来,谢谢了。 |