智能车制作

标题: 9s12xs128中的计数器 [打印本页]

作者: wanglin0215    时间: 2010-3-27 22:37
标题: 9s12xs128中的计数器
哪位高手能传授一下如何使用9s12xs128中的计数器。感觉书上说得有些乱,我只想实现定时计数功能,如何使用ECT模块?
作者: Kevin.Gjp    时间: 2010-3-27 23:09
同样疑惑!
作者: i852774842    时间: 2010-4-9 21:33
datasheet
作者: zhoulxm    时间: 2010-4-10 20:24

作者: l7q3    时间: 2010-4-12 21:05
xs128没有ECT模块,而是分成了PIT和TIM两个模块。PIT的作用是产生周期中断,与51单片机的定时器功能一样,只是不需像51那样在中断中要重赋定时器初值。计数是在TIM中实现,xs128只有16位一个脉冲累加器PACA(与IOC7脚相连),而dg128还有PACB,比如你用光电编码器测速,编码器传回一系列脉冲,由PACA记录脉冲数,有一个脉冲就记一个数(这与你设定的触发沿有关)。另外,每个引脚都有一个对应的TCx寄存器,当相应引脚触发时,TIM模块中的自由计数器TCNT中的计数值就存到对应的TCx中(读回TCx),再触发一次TCNT再存入TCx(再读回),两次相减就为两次触发的间隔时间。
作者: wanglin0215    时间: 2010-4-13 19:21
回复 5# l7q3


    那请问 有定时器模块吗?我想在一定时间内产生中断,在中断程序中读取基数器内的值,然后清中断。
作者: l7q3    时间: 2010-4-16 17:15
你的想法可以,你所说的定时器模块就是PIT,比如要让单片机每50ms产生一次中断,按照Datasheet上的公式计算出你要写入PIT寄存器的值,也就是PITMTLD和PITLD这两个寄存器,对他们赋值后别忘了选通计时通道、开中断等等。发生中断后,在这个PIT中断函数中读PACNT就行,并清除PIT的中断标志。在xs128中,定时器用的是PIT模块,脉冲计数用的是TIM模块内的脉冲计数器PACNT;不像dg128,这两个功能都在同一个ECT模块中完成。在这一点上要跳出按dg128的思路去想xs128误区
作者: wanglin0215    时间: 2010-4-17 00:04
回复 7# l7q3


    我还是有些疑虑,我看的手册上说只有TIM模块,用的是PT0~PT7口,你说的PIT模块是指什么?我觉得应该还是TIM模块吧,只是使用内部定时中断?
作者: l7q3    时间: 2010-4-17 15:18
你到飞思卡尔官网下一个XS128手册,完整的大约9.2M,里面第347页就是:Chapter 12  Periodic Interrupt Timer (S12PIT24B4CV1),简称PIT。PIT模块没有外部引脚与之对应,它只起到单片机内部定时中断的功能。比如通过光电编码器(它传回的脉冲信号接在PT7,PACNT与PT7相连)测速时,定时计数初始化时既要配置PIT,又要配置TIM中的PACTL寄存器(此寄存器使能脉冲计数),PIT中断内读PACNT。
可能我对你在一楼提得问题有些误解,你要用定时计数做什么?是测速吗?是不是要在某段固定时间内读回计数值?这个计数值是不是与外部与元件(比如光电编码器)有关?
作者: wanglin0215    时间: 2010-4-17 18:08
回复 9# l7q3


    谢谢大侠,我是想测速,在某段固定时间内读回计数值,这个计数值与光电编码器有关。
作者: l7q3    时间: 2010-4-18 10:55
不客气
作者: huachou    时间: 2010-4-19 15:15
楼上的大侠 让我受教了  谢谢
作者: zhanggang269    时间: 2010-4-21 17:15
都来贴一帖!
作者: sixi2010    时间: 2010-4-23 17:43
学习中
作者: wangguoxiao    时间: 2010-4-24 00:34
解答很详细
作者: aren3    时间: 2010-4-24 07:46
学习了!
明白多了,谢谢!
作者: xianglong    时间: 2010-4-24 15:24
谢谢
作者: rcsun    时间: 2010-4-30 07:50
xuexi
作者: zhizhi    时间: 2010-5-6 22:30
正解
作者: lshzhangkai    时间: 2010-5-7 11:51
路过,记下了...
作者: lanshh    时间: 2010-5-9 11:22
xiexie
作者: lanshh    时间: 2010-5-9 11:22
谢谢
作者: lanshh    时间: 2010-5-9 22:23
没有ECT啊
作者: Cedar    时间: 2010-5-10 16:11
谢谢楼主啊
作者: 安杰    时间: 2010-5-13 12:23
budong
作者: ssdkzh    时间: 2010-5-21 00:22
茅塞顿开
作者: zhizhi    时间: 2010-7-15 20:50
受教了。。。。。。。。。
作者: xiaofei558008    时间: 2010-7-16 01:30
PT7计数!
//计数器初始化
        void PAInit(void)
        {
       
        TSCR1_TFFCA=1; //快速清除flag:PAOVF PAIF
       

        TIOS_IOS7=1; //单独使用16位脉冲累加器
        OC7M_OC7M7=0;; //注意此时必须令IOS7=1,OC7M7=0,OM7=0,OL7=0
        TCTL1_OM7=0;
        TCTL1_OL7=0;
       
        PACTL_PAMOD=0; //事件计数方式
        PACTL_PEDGE=1; //PT7引脚上的出现上升沿时脉冲累加器计数器加1
        //PACTL_PAOVI=1; //允许脉冲累加器产生溢出时引发中断
        //PACTL_PAI=1; //允许PT7引脚上出现上升沿时引发中断
  PACNT = 0x0000;
        PACTL_PAEN=1; //启动脉冲累加器A
        }
作者: hcx8911    时间: 2010-7-16 20:15
这才是真正的帖子,谢谢!
作者: 清水鱼儿    时间: 2010-7-21 08:56
谢谢
作者: xueyaping    时间: 2010-11-11 13:01
谢谢大侠
作者: zhangjiarui    时间: 2010-11-28 20:09
好,谢谢
作者: 求学6    时间: 2011-2-18 12:04
谢谢,豁然开朗了
作者: bhwxl    时间: 2011-2-26 13:57
回复 9# l7q3


    请问一下,当PIT模块关闭重启或某一通道关闭后重新使能,micro timer和对应通道的timer是不是重新开始计数?还有重新使能会不会占用很长时间?我用示波器测,发现计数结束关闭模块然后再使能,周期比预算的要大很多倍。这是怎么回事?谢谢大侠
作者: 夏欢    时间: 2011-2-26 14:01
学习了
作者: sajoenklgfja    时间: 2011-3-14 19:04
l7q3  是高手啊,解释得很清楚明白,谢谢啦
作者: 雾里飘月    时间: 2011-3-16 10:01
回复 1# wanglin0215

你多多的去看别人的程序,一般他们的程序都有注释的,看着程序去找寄存器,一般的使用方式都是固定的
作者: 范莹    时间: 2011-3-16 14:56
受教。。。。。。
作者: xujiahua1231    时间: 2011-3-18 19:47
谢谢 收益很多 学习
作者: qaabq    时间: 2011-7-11 13:42
谢谢
作者: liuofsanzhong    时间: 2012-1-4 18:39
好帖得顶!!!
作者: 顺⑦.zì繎.    时间: 2013-8-8 21:36
l7q3 发表于 2010-4-12 21:05
xs128没有ECT模块,而是分成了PIT和TIM两个模块。PIT的作用是产生周期中断,与51单片机的定时器功能一样,只 ...

大侠,我想请问一下,如果要用计数器计一下输入的高电平的时间宽度,需要怎么样做呢?或者有没有更好的方法?





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2