智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4454|回复: 7
打印 上一主题 下一主题

求各位高手指教,感激不尽啊——————

[复制链接]

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
199
威望
177
贡献
22
兑换币
0
注册时间
2009-1-11
在线时间
0 小时
跳转到指定楼层
1#
发表于 2009-1-11 22:57:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<>这段代码是要测量脉冲的宽度,用定时器溢出中断来进行中断次数记录,最后用中断次数乘以定时器每一溢出所需时间的脉宽。元件是mc9s12dg128b,飞思卡尔的芯片。检查了N*N次,都有这样一个错误:</P><P>L1822: Symbol _FUFLOAT in file .....(FILE NAME) is undefined.</P><P>求各位高手指教,感激不尽啊——————</P><P>&nbsp;</P><P>#include &lt;hidef.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* common defines and macros */<BR>#include &lt;mc9s12dg128.h&gt;&nbsp;&nbsp;&nbsp;&nbsp; /* derivative information */<BR>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"</P><P><BR>unsigned int tofcnt;<BR>unsigned int pw;</P><P>void MCUInit(void){<BR>&nbsp;&nbsp;&nbsp;&nbsp; asm cli;<BR>&nbsp;&nbsp;&nbsp;&nbsp; DDRB=0XFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp; PORTB=0XFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp; asm sei;<BR>}</P><P>&nbsp;</P><P>void ECTInit(void) {<BR>&nbsp;&nbsp;&nbsp; asm cli;<BR>&nbsp;&nbsp;&nbsp; TIOS=0X00;<BR>&nbsp;&nbsp;&nbsp; TSCR1_TEN=1;//定时器使能<BR>&nbsp;&nbsp;&nbsp; TSCR1_TSWAI=0;<BR>&nbsp;&nbsp;&nbsp; TSCR1_TSFRZ=0;//冻结与等待模式下正常计数<BR>&nbsp;&nbsp;&nbsp; TSCR1_TFFCA=1;//自动清零<BR>&nbsp;&nbsp;&nbsp; TCTL3=0XFF;<BR>&nbsp;&nbsp;&nbsp; TCTL4=0XFF;//同时捕捉上升沿下降沿<BR>&nbsp;&nbsp;&nbsp; TIE=0X00;//各通道不允许中断<BR>&nbsp;&nbsp;&nbsp; TSCR2=0X07;//禁止中断,128分频<BR>&nbsp;&nbsp;&nbsp; TFLG1=0X00;//通道无中断<BR>&nbsp;&nbsp;&nbsp; TFLG2_TOF=0;//定时器溢出中断标志位<BR>&nbsp;&nbsp;&nbsp; TC0=0; //输入捕捉寄存器0置零<BR>&nbsp;&nbsp;&nbsp; //DLYCT=0X00;//延迟计数256总线时钟<BR>&nbsp;&nbsp;&nbsp; asm sei;<BR>}</P><P>&nbsp;</P><P><BR>void main(void) {<BR>&nbsp; unsigned int ini_time=0,end_time=0,time=0,count=0;<BR>&nbsp; float pw=0.0;<BR>&nbsp; MCUInit();<BR>&nbsp; ECTInit();<BR>&nbsp; tofcnt=0;<BR>&nbsp;&nbsp; <BR>&nbsp;EnableInterrupts;</P><P>&nbsp; while(count!=2) {<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(TFLG1=0X01)&nbsp;&nbsp; //脉冲由IC0通道输入捕捉<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TFLG1=0X01;//清零<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time=TC0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; while(count==1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ini_time=time;//记录脉冲开始时定时器值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(TFLG1=0X01)&nbsp; //检测下降沿是否到来<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TFLG1=0X01;//清零<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end_time=TC0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TSCR2 |=0X87;//允许定时器溢出中断&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; count=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp; TSCR2 &amp;=0X87;//禁止定时器溢出中断<BR>&nbsp;&nbsp;&nbsp;&nbsp; pw=(tofcnt*65536-ini_time+end_time)*128/8000000;<BR>&nbsp;&nbsp;&nbsp;&nbsp; pw=SCI0DRL;;//等待发送&nbsp; <BR>&nbsp; }<BR>&nbsp; /* please make sure that you never leave this function */<BR>}</P><P>&nbsp;</P><P>#pragma CODE_SEG__NEAR_SEG NON_BANKED<BR>void interrupt 16 TofItrpt(void) {<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; asm cli;<BR>&nbsp;&nbsp;&nbsp;&nbsp; TFLG2_TOF=1;//中断标志位清零<BR>&nbsp;&nbsp;&nbsp;&nbsp; tofcnt++;<BR>&nbsp;&nbsp;&nbsp;&nbsp; //SCI0DRL=tofcnt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; //PORTB=tofcnt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; asm sei;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>}<BR>#pragma CODE_SEG DEFAULT</P><P>&nbsp;</P>

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
2#
发表于 2009-1-12 21:07:50 | 只看该作者

Re:求各位高手指教,感激不尽啊——————

<>没见过,重新建个工程,代码考过去。把.c .h文件组织好。</P><P>这个应该不是语法问题。</P>
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
199
威望
177
贡献
22
兑换币
0
注册时间
2009-1-11
在线时间
0 小时
3#
 楼主| 发表于 2009-1-12 23:28:07 | 只看该作者

Re:求各位高手指教,感激不尽啊——————

<>我又试了一次,新建的工程还是一样的错误。把下边这个算脉宽的式子注释掉,程序没有问题。说白了,主函数最后不能出现溢出中断次数(tofcnt)和脉宽(pw)这两个变量,我都快崩了,调了几个下午了.............................................................................................</P><P>&nbsp;&nbsp; pw=(tofcnt*65536-ini_time+end_time)*128/8000000;<BR>&nbsp;&nbsp;&nbsp;&nbsp; pw=SCI0DRL;;//等待发送&nbsp; </P><P><BR>&nbsp;</P>
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
199
威望
177
贡献
22
兑换币
0
注册时间
2009-1-11
在线时间
0 小时
4#
 楼主| 发表于 2009-1-12 23:38:28 | 只看该作者

Re:求各位高手指教,感激不尽啊——————

<>补充一下,</P><P>L1822: Symbol _FUFLOAT in file .....(FILE NAME) is undefined.</P><P>指的是main.c.o. 这个文件没有定义,链接时出的错误,编译没问题</P><P>&nbsp;</P><P>&nbsp;</P><P>我无言啊,这个事情,请各位大侠帮帮忙吧</P>
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
199
威望
177
贡献
22
兑换币
0
注册时间
2009-1-11
在线时间
0 小时
5#
 楼主| 发表于 2009-1-13 04:55:12 | 只看该作者

Re:求各位高手指教,感激不尽啊——————

对照着其他可链接的程序,基本已经找到答案了。就是,那个算脉冲宽度的式子只能另用一个函数表达,这个函数不能有返回值,否则就链接报错。自然地,脉冲到来时定时器时间和脉冲结束定时器时间需设为全局变量,这时只能在新函数中计算和打印了,具体原因就不知道了,大家可以看看。
回复 支持 反对

使用道具 举报

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
6#
发表于 2009-1-14 02:32:39 | 只看该作者

Re:求各位高手指教,感激不尽啊——————

<>哦?这样。不过你的程序函数看起来很怪。</P>
回复 支持 反对

使用道具 举报

80

主题

1045

帖子

0

精华

跨届大侠

北京龙邱智能科技有限公司

Rank: 10Rank: 10Rank: 10

积分
10332

论坛元老奖章

QQ
威望
2905
贡献
6151
兑换币
4515
注册时间
2008-6-7
在线时间
638 小时
7#
发表于 2009-1-14 18:35:50 | 只看该作者

Re:求各位高手指教,感激不尽啊——————

<>pw=(tofcnt*65536-ini_time+end_time)*128/8000000;</P><P>你这个语句存在很多隐患,你里面用的数据“太大”,tofcnt*65536远大于16位,所以PW,TOFCNT定义为32位更合适,同时,尽量减少大量的乘法和除法运算,采用移位操作,效率会有很大的改善。</P><P>你改变一下编成风格,看起来会舒服点儿,否则别人帮你的时候会“很累”,读别人的代码挺难的。</P><P>加油!!!</P>
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
199
威望
177
贡献
22
兑换币
0
注册时间
2009-1-11
在线时间
0 小时
8#
 楼主| 发表于 2009-1-15 17:51:39 | 只看该作者

Re:求各位高手指教,感激不尽啊——————

好,我会的,这个程序我已经换了一个思路去编,比这简单多了,以后我一定把程序写得“通俗”一些!谢谢鼓励!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-5 05:32 , Processed in 0.436126 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表