5024|11

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

哪位高手能通俗地讲一讲单片机端口的“读-修改-写 [复制链接]

哪位高手能通俗地讲一讲端口的“读-修改-写”特性及其导致的后及避免方法。

看了很多对这个问题的讲解,都是一知半解,讲的一头雾水。

期待高手出现。

最新回复

简单的讲,就是修改部分位,保留其余位。 2#楼的说法有问题,可以直接读端口   详情 回复 发表于 2009-5-15 10:20
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
PORTADAT |= 0x01;
PORTADAT = PORTADAT | 0x01;
上边就是读-修改-写,将PA0置1,其它不变(都为输出的情况下)
先把A端口数据读出来,用或的方式修改自己需要的管脚,再写A端口。
好处是不会更改你不想更改的端口。
否则如果你使用PORTADAT = 0x01则将PA0置1,其它A端口置0(都为输出的情况下)

 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
端口也要读-修改-写啊,好像端口一般这样做没有意义吧,硬件电路完成后,端口是输入 还是输出就已经定了,
你要读端口,说明端口是输入,那你把他读了又写东西,就又把他当输出,电路设计不好的话,可能烧芯片的,

要想对一个输出端口也楼上的这种功能,要在内存里设置一个变量,时刻保存端口的输出状态,修改的时候修改内存,然后把内存写到端口上,
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 pyj0314 的回复:
端口也要读-修改-写啊,好像端口一般这样做没有意义吧,硬件电路完成后,端口是输入 还是输出就已经定了,
你要读端口,说明端口是输入,那你把他读了又写东西,就又把他当输出,电路设计不好的话,可能烧芯片的,

要想对一个输出端口也楼上的这种功能,要在内存里设置一个变量,时刻保存端口的输出状态,修改的时候修改内存,然后把内存写到端口上,


完全不同意!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

5
 
引用 3 楼 Veabol 的回复:

完全不同意!
呵呵,我我觉得应该这样啊
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 pyj0314 的回复:
引用 3 楼 Veabol 的回复:

完全不同意!
呵呵,我我觉得应该这样啊

你可以找一些示例代码,很少会看到像你那样做的
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦,想起来了,不要意思:)
一个输出端口,要想得到它现在的输出状态,直接读相应的寄存器;
我把 读-修改-写 里的读 理解错了,理解成作为输入端口读取输入给单片机的信号了,
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
PORTADAT |= 0x01;  
|=是啥意思?

另外,端口的“读-修改-写”好像是处理器自己实现的,不用自己再写代码实现了
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

9
 
就是一条指令的操作,比如:
INFC PORTC,1
它需要先读回当前端口PORTC的值,这个读回的值受到外部硬件电路的影响,比如,您的PORTC.1口是接的是一个类似二极管的元件,这个元件把这个1电平拉到只有0.7V左右,可是明明是1电平,当读回时是1还是0呢?(读)

这个读回的值再执行相关操作,如上面的加1. (修改)

然后再写回到PORTC(写)

上面就是一个读修改写的过程
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
PORTADAT |= 0x01;
PORTADAT = PORTADAT | 0x01;
上边就是读-修改-写,将PA0置1,其它不变(都为输出的情况下)
先把A端口数据读出来,用或的方式修改自己需要的管脚,再写A端口。
好处是不会更改你不想更改的端口。
否则如果你使用PORTADAT = 0x01则将PA0置1,其它A端口置0(都为输出的情况下)
***********************************************************************

感觉好像刚好弄反了?
应该是要尽量避免读-修改-写造成的问题呀。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 
mark 下
 
 
 

回复

1

帖子

0

TA的资源

禁止发言

12
 
简单的讲,就是修改部分位,保留其余位。
2#楼的说法有问题,可以直接读端口
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表