智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

请各位大侠指教啊~~

[复制链接]

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
QQ
威望
226
贡献
42
兑换币
20
注册时间
2008-4-2
在线时间
4 小时
跳转到指定楼层
1#
发表于 2008-4-10 17:28:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<>#include &lt;hidef.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>#include &lt;mc9s12dg128.h&gt;&nbsp;&nbsp;&nbsp;&nbsp; <BR>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"<BR>//前排传感器的变量<BR>unsigned char AD_F[7]={0,0,0,0,0,0,0};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>unsigned char AD_FMAX[7]={0,0,0,0,0,0,0};<BR>unsigned char AD_FMIN[7]={200,200,200,200,200,200,200};<BR>unsigned char AD_FMAXMIN[7]={0,0,0,0,0,0,0};</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>char i;<BR>unsigned char NEW=0;&nbsp; //有新AD数据产生的标志</P><P>&nbsp;</P><P>/******************************************************/<BR>void Init_PLL(void)&nbsp;&nbsp; //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)<BR>{<BR>&nbsp;REFDV=1;<BR>&nbsp;SYNR=2;<BR>&nbsp;while(!(CRGFLG&amp;0x08));<BR>&nbsp;CLKSEL=0x80;<BR>}<BR>/********************************************************/<BR>/*******************************************************************/<BR>void Init_AD(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>{<BR>ATD0CTL2_AFFC=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //快速标志位清除<BR>ATD0CTL2_ASCIE=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使能序列转换结束中断<BR>ATD0CTL3=0X38;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //一次转换序列为1次转换,若为7次(后排)则为ATD0CTL3=0X38;<BR>ATD0CTL4=0X85;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //8位精度,2个AD时钟的采样时间,5分频<BR>ATD0CTL5=0X90;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //右对齐,无符号结果第1次从AN0开始<BR>}<BR>/**********************************************************/<BR>void delay_us(int time)&nbsp;&nbsp; <BR>{do<BR>time--;<BR>while(time&gt;1);<BR>}</P><P><BR>/***************************************************************<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AD转换序列结束中断处理函数<BR>/***************************************************************/<BR>interrupt void&nbsp; AD_ISR()<BR>{ATD0CTL2_ADPU=0;&nbsp; //关AD转换<BR>&nbsp;PWME=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //关PWM信号<BR>&nbsp;AD_F[0]=ATD0DR0;AD_F[1]=ATD0DR1;AD_F[2]=ATD0DR2;AD_F[3]=ATD0DR3;<BR>&nbsp;AD_F[4]=ATD0DR4;AD_F[5]=ATD0DR5; AD_F[6]=ATD0DR6; <BR>&nbsp;NEW=1;<BR>&nbsp;CRGINT=0x80;&nbsp;&nbsp; //开实时中断<BR>&nbsp;<BR>}<BR>/***************************************************************<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实时中断初始化函数<BR>/*************************************************************/<BR>void Init_RTI(void) <BR>{ <BR>&nbsp;RTICTL=0x50;&nbsp; </P><P>} <BR>/*********************************************************<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实时中断处理函数<BR>/*********************************************************/<BR>interrupt void RTI_ISR(void) <BR>{<BR>&nbsp;<BR>&nbsp;PORTA=0X01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 关后排开前排通道<BR>&nbsp;CRGINT=0x00;&nbsp;&nbsp;&nbsp;&nbsp; //关实时中断 <BR>&nbsp;PWMCNT7=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;PWME=0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开红外传感的PWM调试信号,开始新一轮的发光采样<BR>&nbsp;delay_us(150);<BR>&nbsp;ATD0CTL5=0X90;&nbsp;&nbsp;&nbsp; //右对齐,结果为无符号数,单转换序列,多通道转换从AN0开始<BR>&nbsp;ATD0CTL2_ADPU=1; //开通AD转换功能<BR>&nbsp;CRGFLG=0x80;&nbsp;&nbsp;&nbsp;&nbsp; //清本实时中断标志</P><P>}</P><P>/******************************************************<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pwm初始化<BR>/******************************************************/<BR>void Init_pwm(void) <BR>{ <BR>PWME=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //初始化时关闭所有的PWM通道<BR>PWMCTL=0x80;&nbsp;&nbsp;&nbsp; //通道6,7级连<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //PWMCLK=0x00;选择7通道时钟为B<BR>PWMPOL=0x2A;&nbsp;&nbsp;&nbsp; //极性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>PWMPRCLK=0X10; //时钟B频率为系统总线时钟的1/2<BR>PWMPER67=24000; //设置7通道的PWM频率为500HZ,即周期为2毫秒<BR>PWMDTY67=1200; //设置低电平占空比为5.5%,即低电平时间为110微秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>}<BR>/***************************************************/<BR>&nbsp;//找到每个传感器在赛道上的最大最小值&nbsp;&nbsp;&nbsp; <BR>&nbsp; void find_mm()<BR>&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(NEW==1)&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;7;i++) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(AD_F<i>&gt;AD_FMAX<i>) AD_FMAX<i>=AD_F<i>;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(AD_F<i>&lt;AD_FMIN<i>) AD_FMIN<i>=AD_F<i>;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AD_FMAXMIN<i>=AD_FMAX<i>-AD_FMIN<i>;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NEW=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; }&nbsp; </P><P>/******************************************************<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主程序<BR>******************************************************/<BR>void main(void)<BR>{<BR>&nbsp;DDRA=0XFF;<BR>&nbsp;PORTA=0X01;<BR>&nbsp;Init_PLL();<BR>&nbsp;Init_RTI();<BR>&nbsp;Init_AD();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;Init_pwm();<BR>&nbsp;HPRIO=0XD2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ATD0中断优先<BR>&nbsp;EnableInterrupts;<BR>&nbsp;PWME=0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打开7通道<BR>&nbsp;delay_us(150);<BR>&nbsp;ATD0CTL2_ADPU=1; //打开AD转换通道&nbsp; <BR>&nbsp;while(1) <BR>&nbsp;&nbsp; {&nbsp; find_mm(); //找到每个传感器在赛道上的最大最小值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; }<BR>}</P><P>为什么这个程序PWM7出来只有1V多,这样正常吗?还请问这个程序进入各中断的顺序是怎样的啊?请各位大侠指教</P>

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
QQ
威望
226
贡献
42
兑换币
20
注册时间
2008-4-2
在线时间
4 小时
2#
 楼主| 发表于 2008-4-14 17:39:57 | 只看该作者

Re:请各位大侠指教啊~~

<>请高手赐教啊~~</P>
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
QQ
威望
226
贡献
42
兑换币
20
注册时间
2008-4-2
在线时间
4 小时
3#
 楼主| 发表于 2008-4-29 03:30:04 | 只看该作者

Re:请各位大侠指教啊~~

pwm7的高电平为1V
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
QQ
威望
226
贡献
42
兑换币
20
注册时间
2008-4-2
在线时间
4 小时
4#
 楼主| 发表于 2008-4-29 03:31:09 | 只看该作者

Re:请各位大侠指教啊~~

pwm7出来的高电平为1V
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
QQ
威望
226
贡献
42
兑换币
20
注册时间
2008-4-2
在线时间
4 小时
5#
 楼主| 发表于 2008-4-29 03:32:30 | 只看该作者

Re:Re:请各位大侠指教啊~~

pwm7出来的高电平为1V
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
QQ
威望
226
贡献
42
兑换币
20
注册时间
2008-4-2
在线时间
4 小时
6#
 楼主| 发表于 2008-4-29 03:33:10 | 只看该作者

Re:请各位大侠指教啊~~

<>pwm7出来的高电平为1V</P>
回复 支持 反对

使用道具 举报

0

主题

294

帖子

1

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
4132

特殊贡献奖章

QQ
威望
2661
贡献
1407
兑换币
33
注册时间
2007-11-22
在线时间
32 小时
7#
发表于 2008-4-21 20:29:42 | 只看该作者

Re:请各位大侠指教啊~~

1V是平均值,还是均方值?
回复 支持 反对

使用道具 举报

1

主题

66

帖子

0

精华

高级会员

Rank: 4

积分
524
QQ
威望
341
贡献
81
兑换币
12
注册时间
2010-10-11
在线时间
51 小时
8#
发表于 2010-12-2 19:59:19 | 只看该作者
高手啊,能写出这样的程序!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 22:28 , Processed in 0.184095 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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