打印

如何用输出比较实现连续的方波输出?

[复制链接]
3361|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
swainliu|  楼主 | 2007-7-6 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我选用的是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,这样就能输出连续的矩形波,可是多次测试都不能实现,总时输出低电平,搞的我很烦,希望高手能帮我分析分析,提出好的方法来,谢谢了。

相关帖子

沙发
swainliu|  楼主 | 2007-7-6 16:37 | 只看该作者

错误到底在哪里呢?

使用特权

评论回复
板凳
arab| | 2007-7-6 17:16 | 只看该作者

回复

为什么不用PWM模块直接输出呢?设置几个寄存器初始化就可以直接输出了.

使用特权

评论回复
地板
张明峰| | 2007-7-7 10:27 | 只看该作者

思路不对

建议用输出比较中断响应,在中断服务程序中设置下一个要输出的电平和时间点。上面的流程有点乱,看不太懂。

还有,既然用了C,为什么几乎全是嵌入汇编?

使用特权

评论回复
5
swainliu|  楼主 | 2007-7-8 15:48 | 只看该作者

PWM占空比调整的精度不够,用中断也是一样的。

刚开始用C了,后来又才这样的,都一样的结果,这样更能清楚知道是那儿的错误啊,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

44

帖子

0

粉丝