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