智能车制作

标题: 再论ECT,详细讨论累加器,个人心得 [打印本页]

作者: whut_wj    时间: 2008-7-2 20:44
标题: 再论ECT,详细讨论累加器,个人心得
<><BR><FONT size=3>前几天对ECT比较概括地讨论了一下其功能作用,虽然给出了PACB16位测速的原代码,论坛和博客上有不</FONT></P><P><FONT size=3>少朋友对累加器有不少疑问,还有朋友发邮件给我。现在将问题一一说明。</FONT></P><P><FONT size=3>1、脉冲累加器有哪些?是用来干什么的?<BR>&nbsp;&nbsp; 在HCS12DGXXX里,ECT有两个16位脉冲累加器,有4个8位脉冲累加器。这里的多少位,是说明结果寄</FONT></P><P><FONT size=3>存器是多少位的。16位的脉冲累加的结果可以达到65535,8位的可以达到255<BR>&nbsp;&nbsp; 一般是用来测外部脉冲信号个数和频率的。比如测速,速度传感器把速度转化为脉冲,测得脉冲就可</FONT></P><P><FONT size=3>以知道速度了。还有一些传感器,比如测功率的芯片,输出也是脉冲,通过单位时间里测脉冲的个数,便</FONT></P><P><FONT size=3>知道负载的功率了。</FONT></P><P><FONT size=3>2、累加器,输入捕捉,IO口跳变引发的中断三个都可以记脉冲,如何利用?<BR>&nbsp;&nbsp; 首先要明确,中断是除CPU之外的资源,当中断申请了并允许中断之后CPU便放下手上的活先完成中断</FONT></P><P><FONT size=3>里的事情,所以:中断不能太多,PC跳来跳去没有好处;其次,中断在精简,这里有几个原因:大家想一</FONT></P><P><FONT size=3>下,假如,优先级一样的两个中断,间隔很短的时间触发,但前一个中断太长了,迟迟没有RTI跳出来,</FONT></P><P><FONT size=3>那么后一个中断就牺牲了。中断有它的实时性.再就是降低主函数的效率。<BR>&nbsp;&nbsp; 而累加器就是解决了这个问题。它是单独的一个模块,无需进中断(溢出中断稍后再谈),在定时范</FONT></P><P><FONT size=3>围内直接取累加结果,有效地提高了程序的效率。但是累加器有它自身的缺陷,精度不高。一是因为它</FONT></P><P><FONT size=3>自身可能做过些数据的处理,二是16位累加器先取高位和先取低位的结果在高频脉冲情况下可能不是一</FONT></P><P><FONT size=3>样的。<BR>&nbsp;&nbsp; 输入捕捉也可以记脉冲,IC功能比较地强大。通过分频的设置就可设置自由计数器的参考时间,自由</FONT></P><P><FONT size=3>计数器提供时间参考。比如前一个脉冲的下降沿进了中断,此时TCNT为data1,后一个肪冲的下降沿也进</FONT></P><P><FONT size=3>了中断,此时TCNT为data2,那么data2-data1就是二者的间隔时间。但是会有个问题,如果data2比</FONT></P><P><FONT size=3>data1小,即TCNT溢出了一次,怎么办?这个不用但心,无符号数的情况下,14-15=254.对于16位的数</FONT></P><P><FONT size=3>运算一样的道理。呵呵,TCNT溢出一次好解决,多次呢?对了,TOF溢出中断,记录TCNT溢出的次数,再</FONT></P><P><FONT size=3>做运算就行了。但是似乎没有那个必要了,TCNT本来就是16位的,这样一来,data2-data1就不知道是多</FONT></P><P><FONT size=3>少位了。<BR>&nbsp;&nbsp; 至于PortH,PORTJ,这几个I/O端口的中断相当于FS8位MCU里的键盘中断,做脉冲记数理论上也可以,</FONT></P><P><FONT size=3>但是必需要提供参考时间。但是仔细一想,何必呢?用它做其它的事,资源利用分配合理才行。有现成</FONT></P><P><FONT size=3>的脉冲累加器不用,用它干嘛。用PORTH PORTJ口做外部硬件触发中断最好,比如摄像头的行中断,场中</FONT></P><P><FONT size=3>断;检查键盘是否按下等等。</FONT></P><P><FONT size=3>3、脉冲累加器,用8位还是16位?<BR>&nbsp;&nbsp; 这个要看怎么分配单片机的资源了。首先,8位的有4个累加器,16位的只有两个。如何选用PT0-7口</FONT></P><P><FONT size=3>的通道要具体情况具体分析。但有个原则:高频脉冲用16位的,低频的用8位的。8位的比16位的精度要</FONT></P><P><FONT size=3>高,据我个人测试,16位的在1S时间内有2%-3%的误差,8位的比它少。但是16位有它的优势,几乎不用</FONT></P><P><FONT size=3>考虑累加器溢出的情况。</FONT></P><P><FONT size=3>4、如何初始化累加器?<BR>&nbsp;&nbsp; 有以下几点需要配置:1、使能;2、设置上升沿下降沿触发计数;3是否级联;4结果寄存器清0<BR>至于ICSYS里的PACMX位看情况了。 </FONT></P><P><FONT size=3>5、8位累加器溢出的问题。<BR>&nbsp;&nbsp; 8位累加器是有溢出中断的,但只有PAC1和PAC3才有。具体的使用方法是:PACMX 为1,PAOVF为PAC3的</FONT></P><P><FONT size=3>溢出标志位,中断地址是$FFDC, $FFDD,PACTL (PAOVI)必须使能;PACMX = 1, PBOVF为PAC1的溢出标志</FONT></P><P><FONT size=3>位,中断地址是$FFC8, $FFC9,PBCTL (PBOVI)必须使能.<BR>&nbsp;&nbsp; PACMX=0时,默认情况下,上面的溢出中断指的是16位累加器的溢出中断。</FONT></P>
作者: LCL_data    时间: 2008-7-3 05:18
标题: Re:再论ECT,详细讨论累加器,个人心得
谢谢啊~,受益匪浅啊~<br>
作者: liudan    时间: 2008-7-3 06:07
标题: Re:再论ECT,详细讨论累加器,个人心得
<>楼主真是大好人,,,,,</P>
作者: zsy7758758    时间: 2008-7-4 02:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: lfm3399    时间: 2009-2-16 13:47
高!
作者: 法布里加斯    时间: 2009-2-16 15:24
博客上已拜读
作者: nilelixp    时间: 2009-2-16 18:34
原来如此!
作者: big_student    时间: 2009-3-12 10:11
ect一头雾水,不过看过好多楼主的文章还是有收获的,多谢了!
作者: xbsf-写轮眼    时间: 2009-4-6 22:20
收获颇多!
作者: 刘雪磊    时间: 2009-4-27 18:51

作者: sehszf    时间: 2009-5-3 18:21
无符号数的情况下,14-15=254.对于16位的数?
楼主我觉得因该是255才对啊
256+14-15=255
我这样没错吧 ?
作者: 月亮    时间: 2009-5-24 12:57
谢谢楼主,我想问个问题,累加之后的数,怎么通过串口发送到计算机?
作者: tanfanqiong    时间: 2009-5-24 18:48
支持
作者: liang88889999    时间: 2009-9-13 22:03
先看一下
作者: 786892880    时间: 2009-9-28 12:40
好好研究一下。。
作者: yecheng110    时间: 2009-9-28 14:01
好东西
作者: wokao    时间: 2009-9-28 14:03
受益了!
作者: lzfpw    时间: 2009-10-16 13:47
不错不错!!!
作者: starjiajia    时间: 2009-10-17 20:21
谢谢
作者: choncan    时间: 2009-12-16 14:51
ect
````
作者: lhl3108003039    时间: 2010-1-29 11:36
LZ辛苦啦
作者: kenuo1991    时间: 2010-3-23 20:30
回复 1# whut_wj


    写的太好了……
作者: chaoyueziwo    时间: 2010-4-11 23:03
谢谢啊
作者: tianshupei88    时间: 2010-4-14 21:28
看帖必回
作者: huachou    时间: 2010-4-18 19:01
感谢啊  收获挺大的
作者: 姚先生    时间: 2010-4-21 13:18
太感谢了
作者: feiyangxiaomi    时间: 2010-4-21 21:57
看了
作者: zhixiaolei    时间: 2010-4-21 23:03
xs128也适用吗
作者: 147leslie    时间: 2011-2-6 23:38
好!
作者: 夜马行空    时间: 2012-2-9 20:28

作者: zsk-    时间: 2012-5-1 23:56
顶!!!!!!!!!!!!!!!

作者: ……    时间: 2012-5-28 18:26
楼主的文章真难看啊
作者: 迯χIηɡ魜    时间: 2013-8-5 10:59
请问怎么设置xs128捕捉特定端口的跳变沿的呢
作者: smartcarkh    时间: 2013-8-11 21:04

作者: 小橙子    时间: 2013-10-6 10:20





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