智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 7242|回复: 16
打印 上一主题 下一主题

实用,经典的单片机编程要点[3]

[复制链接]

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
跳转到指定楼层
1#
发表于 2008-9-21 18:15:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
<H3 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 5.5pt; FONT-FAMILY: 宋体; mso-hansi-font-family: &#39;Times New Roman&#39;; mso-ascii-font-family: &#39;Times New Roman&#39;"><FONT size=4>单片机的IO口是标准的双向端口,首先要设置IO口的状态,即:输入还是输出</FONT></SPAN></H3><H3 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 5.5pt; FONT-FAMILY: 宋体; mso-hansi-font-family: &#39;Times New Roman&#39;; mso-ascii-font-family: &#39;Times New Roman&#39;"><FONT size=4>DDRx寄存器就是 单片机的端口方向寄存器,通过设置DDRx可以设置x端口的状态。<BR>DDRx端口方向寄存器相应位设置为1则对应的x端口相应位为输出状态,DDRx端口方向寄存器相应位设置为0则对应的x端口相应位为输入状态。<BR>例如:<BR>DDRA = 0xFF;&nbsp; //设置端口A所有口为输出状态,因为0xFF对应的二进制为11111111b</FONT></SPAN></H3><H3 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 5.5pt; FONT-FAMILY: 宋体; mso-hansi-font-family: &#39;Times New Roman&#39;; mso-ascii-font-family: &#39;Times New Roman&#39;"><FONT size=4>DDRA = 0x0F&nbsp; //设置端口A高4位为输入状态,低4位为输出状态,因为0x0F对应的二进制为00001111b</FONT></SPAN></H3><SPAN style="FONT-SIZE: 5.5pt; FONT-FAMILY: 宋体; mso-hansi-font-family: &#39;Times New Roman&#39;; mso-ascii-font-family: &#39;Times New Roman&#39;"><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><BR><FONT size=4>ORTx寄存器是 单片机的输出寄存器,端口输出状态设定好后通过设置PORTx可以使端口x的相应位输入高电平或低电平来控制外部设备。<BR>例如:<BR>PORTA = 0xFF;&nbsp; //端口A所有口线输出高电平</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>PORTA = 0x0F;&nbsp; //端口A高4位输出低电平,低4位输出高电平</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>小贴士:<BR>利用位逻辑运算符对特定的端口进行设定。</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>PORTA = 1&lt;&lt;3;&nbsp; //端口A第4位置为高电平,其它为低电平,应为00000001左移3位后是00001000<BR>PORTA = 1&lt;&lt;7;&nbsp; //同理,第8位置高电平</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>有时候我们期望端口某一位设置成高电平,但是其它位的高低电平要保持不变,如何做呢?C语言是很强大的,有办法!如下:</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>PORTA |=1&lt;&lt;3;&nbsp; //实现端口A第4位置为高电平,其它位的高低电平不受影响<BR>上面的语句是简化的写法,分解一下就是:<BR>PORTA = PORTA | (1&lt;&lt;3);&nbsp;&nbsp;&nbsp; //数字1左移3位后与端口A进行按位或,结果就是端口A第4位置为高电平,其它位的高低电平不受影响</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>那么大家就会问了,如何实现设置某一位为低电平,其它位的高低电平不变呢?建议大家思考1分钟再看下面的内容。</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>?<BR>PORTA &amp;=~(1&lt;&lt;3);&nbsp; //解释一下,首先将1左移3位变成00001000b,然后再按位取反变成11110111b,然后再与端口A做按位与运算,这样就实现了设置端口A第4位为低电平,其它位的高低电平不变。<BR>分解后的语句为:<BR>PORTA = PORTA &amp; (~(1&lt;&lt;3));&nbsp; //结果是一样的</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>将某端口相应位的高低电平翻转,即原来高电平变为低电平,低电平变为高电平.</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><BR><FONT size=4>PORTA = ~PORTA;&nbsp; //将PORTA按位取反后再赋值给PORTA</FONT></H2><H2 class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=4>按位逻辑运算还有一个异或,这个也非常有意思,它能实现电平翻转,有兴趣大家看看书</FONT></SPAN></H2>

6

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
681
威望
448
贡献
151
兑换币
0
注册时间
2010-1-10
在线时间
41 小时
17#
发表于 2010-1-21 18:34:27 | 只看该作者
学习了~~~~~
回复 支持 反对

使用道具 举报

4

主题

248

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2267
QQ
威望
447
贡献
1700
兑换币
2
注册时间
2009-3-15
在线时间
60 小时
16#
发表于 2009-4-18 15:10:24 | 只看该作者
这样说就容易白啦!
回复 支持 反对

使用道具 举报

21

主题

1019

帖子

0

精华

常驻嘉宾

我爱雯婕

Rank: 8Rank: 8

积分
4657
威望
2223
贡献
1682
兑换币
4
注册时间
2009-3-4
在线时间
376 小时
15#
发表于 2009-4-10 12:21:25 | 只看该作者
我拿
回复 支持 反对

使用道具 举报

0

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
791
QQ
威望
534
贡献
129
兑换币
72
注册时间
2009-4-4
在线时间
64 小时
14#
发表于 2009-4-6 19:57:45 | 只看该作者
受教了!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
威望
188
贡献
30
兑换币
8
注册时间
2009-3-5
在线时间
10 小时
13#
发表于 2009-3-17 20:23:08 | 只看该作者
讲的太好了,精辟!~!~!~!
回复 支持 反对

使用道具 举报

0

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1775
威望
1452
贡献
273
兑换币
4
注册时间
2008-3-4
在线时间
25 小时
12#
发表于 2009-3-15 18:19:44 | 只看该作者
顶~~
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
威望
234
贡献
54
兑换币
32
注册时间
2009-3-5
在线时间
10 小时
11#
发表于 2009-3-12 17:24:04 | 只看该作者
版主真强!
回复 支持 反对

使用道具 举报

0

主题

107

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
326
QQ
威望
298
贡献
22
兑换币
0
注册时间
2008-7-9
在线时间
3 小时
10#
发表于 2009-3-12 14:36:51 | 只看该作者
呵呵
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
威望
182
贡献
22
兑换币
0
注册时间
2009-2-23
在线时间
2 小时
9#
发表于 2009-2-24 22:25:30 | 只看该作者
受益非浅啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 00:46 , Processed in 0.101137 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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