智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3119|回复: 4
打印 上一主题 下一主题

问几个关于C语言编程的问题 请高手帮帮忙

[复制链接]

0

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
威望
193
贡献
22
兑换币
0
注册时间
2008-10-29
在线时间
0 小时
跳转到指定楼层
1#
发表于 2008-11-12 03:38:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<><FONT size=4>#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 */</FONT></P><P><FONT size=4>#define PORTB&nbsp; (*((volatile unsigned char *)(0x0001)))//<BR>#define DDRB&nbsp;&nbsp; (*((volatile unsigned char *)(0x0003)))<BR>#define TSCR1&nbsp; (*((volatile unsigned char *)(0x0046)))<BR>#define TSCR2&nbsp; (*((volatile unsigned char *)(0x004D)))<BR>#define TSCR3&nbsp; (*((volatile unsigned char *)(0x004F)))<BR>#define TCNT&nbsp;&nbsp; (*((volatile unsigned short *)(0x0044)))<BR>int counter;<BR>void TimeOverflow(void){<BR>&nbsp; <BR>&nbsp; while (TCNT!=0x0000);<BR>&nbsp; while (TCNT==0x0000);<BR>&nbsp; counter++;<BR>&nbsp; if (counter==8) PORTB=0x7e;<BR>&nbsp; if (counter==7) PORTB=0xbd;<BR>&nbsp; if (counter==6) PORTB=0xdb;<BR>&nbsp; if (counter==5) PORTB=0xe7;<BR>&nbsp; if (counter==4) PORTB=0xe7;<BR>&nbsp; if (counter==3) PORTB=0xdb;<BR>&nbsp; if (counter==2) PORTB=0xbd;<BR>&nbsp; if (counter==1) PORTB=0x7e;<BR>}<BR>void main(void) {<BR>&nbsp; /* put your own code here */<BR>&nbsp; EnableInterrupts;<BR>&nbsp; TSCR1=0x80;<BR>&nbsp; TSCR2=0x03;<BR>&nbsp; counter=0;<BR>&nbsp; DDRB=0xff;<BR>&nbsp; PORTB=0xff;<BR>&nbsp; for(;;) {<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; TimeOverflow();<BR>&nbsp;&nbsp;&nbsp; if (counter&gt;=8){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; counter=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TSCR2=0x05;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }<BR>}</FONT></P><P><FONT size=4></FONT>&nbsp;</P><P><FONT size=4>我想问一下#define PORTB&nbsp; (*((volatile unsigned char *)(0x0001)))&nbsp;&nbsp; 这条语句中“(*((volatile unsigned char *)(0x0001)))&nbsp;”什么意思?我可以这样写吗?#define PORTB&nbsp;&nbsp;0x0001&nbsp; </P><P><BR></P></FONT>

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
197
威望
175
贡献
22
兑换币
0
注册时间
2008-11-26
在线时间
0 小时
2#
发表于 2008-11-26 19:42:31 | 只看该作者

Re:问几个关于C语言编程的问题 请高手帮帮忙

<>肯定不行!</P><P><FONT size=4>#define PORTB&nbsp;&nbsp;0x0001 的话,编译器直接就将“0x0001”替换"PORTB"了。 这样,在赋值的时候,显然是错误的。</FONT></P><P><FONT size=4>#define PORTB&nbsp; (*((volatile unsigned char *)(0x0001)))&nbsp;&nbsp; ,是对PORTB 的地址定义,因为硬件地址已经映射在了RAM里面。 (*((volatile unsigned char *)(0x0001)))&nbsp;&nbsp;就是将物理地址“0x0001”转化为RAM里对应的地址单元。这个过程就是一个指针定位的过程。 </FONT></P><P><FONT size=4>这样再给PORTB=0xff 赋值时就正确了。</FONT></P><P>&nbsp;</P>
回复 支持 反对

使用道具 举报

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
3#
发表于 2008-11-12 05:31:13 | 只看该作者

Re:问几个关于C语言编程的问题 请高手帮帮忙

<><FONT size=4>(*((volatile unsigned char *)(0x0001)))</FONT></P><P><FONT size=4>unsigned char *是指针定义</FONT></P><P><FONT size=4>volatile 是不易变的,IDE不会自动优化.</FONT></P><P><FONT size=4>(*((volatile unsigned char *)是指针的内容.</FONT></P><P><FONT size=4>不能写成这样: #define PORTB&nbsp;&nbsp;0x0001,好好领会一下吧.&nbsp; </FONT></P><P><FONT size=4></FONT>&nbsp;</P>
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
威望
193
贡献
22
兑换币
0
注册时间
2008-10-29
在线时间
0 小时
4#
 楼主| 发表于 2008-11-18 05:15:27 | 只看该作者

Re:问几个关于C语言编程的问题 请高手帮帮忙

<>在C语言中不是可以吗?能给详细讲解一下吗?谢谢&nbsp; !!!&nbsp;</P>
回复 支持 反对

使用道具 举报

1

主题

29

帖子

0

精华

高级会员

Rank: 4

积分
689
QQ
威望
202
贡献
475
兑换币
0
注册时间
2008-12-24
在线时间
6 小时
5#
发表于 2009-3-11 17:51:55 | 只看该作者
c是的好好学啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 06:50 , Processed in 0.128066 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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