搜索
bottom↓
回复: 19

在网上看了好久还是没搞清PIC I/O的“读、修改、写”开个贴讨论讨论。 【恢复】

[复制链接]

出0入0汤圆

发表于 2008-11-5 13:15:49 | 显示全部楼层 |阅读模式
试用了PIC以后,发现PIC的IO有点特殊,就是输出的时候要读一下IO脚的状态,再改变。具体是怎么回事搞不清楚,请知道的朋友过来给我上上课啊。。

本贴被 vincent.r 编辑过,最后修改时间:2008-11-05,13:16:03.

出0入0汤圆

 楼主| 发表于 2008-11-10 09:11:13 | 显示全部楼层
多谢 rqiang。  

出0入0汤圆

发表于 2008-11-8 17:46:45 | 显示全部楼层
之前听Microchip的工程师说,Microchip系列的单片机IO口操作都是要遵循 读--修改--写 的操作顺序

出0入0汤圆

发表于 2008-11-8 13:54:43 | 显示全部楼层
我怎么就没有遇到这问题呢...先做记号

出0入0汤圆

发表于 2008-11-7 09:24:16 | 显示全部楼层
呵呵,对这样问题没有研究,有时间要向阿莫请教请教才行。我有时只是拍拍产品样品或原材料,关于这些,阿莫可以给我等菜鸟上上课

本贴被 rqiang 编辑过,最后修改时间:2008-11-07,09:25:19.
头像被屏蔽

出0入0汤圆

发表于 2008-11-7 08:48:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2008-11-6 22:36:32 | 显示全部楼层
600W数码相机照的,没有阿莫那样的拍照水平,将就一下看看吧,应该看的清楚

出0入0汤圆

发表于 2008-11-6 22:32:16 | 显示全部楼层
不好意思,昨天的网络有些问题,今天补上:

点击此处下载 ourdev_486426.pdf(文件大小:444K) (原文件名:PIC单片机端口读修改问题.pdf) 

出0入0汤圆

 楼主| 发表于 2008-11-6 16:44:16 | 显示全部楼层
正在等待   【7楼】 rqiang   ...... 

出0入0汤圆

 楼主| 发表于 2008-11-6 10:37:44 | 显示全部楼层
好像上面写的详细一点。



有没有遇到过以上情况的兄弟?



有的话,说说是怎么解决的。

出0入0汤圆

 楼主| 发表于 2008-11-6 10:35:34 | 显示全部楼层
/***********************************************************以下为网络信息*********************************************************** 

何谓读-修改-写,导致的问题及其解决之道:



1.  只要PICmicro的命令,所处理的FILE (暂存器,内存,和I/O的统称),其最终的值,和命令处理前的值有关,那么,这种命令便是所谓的读-修改-写命令。因为这类命令的操作,可以再细分为三个小步骤,即是读(READ),修改(MODIFY),接著才是写(WRITE)。 

如:ADDWF,DECF,IORWF,XORWF,BSF,BCF,‥‥等等皆是。

    在使用这类命令的时候,如果所处理的FILE是I/O, 就必须要特别小心。因为,假设任务电压为5V;而您在PORTB的8支脚,没有串接电阻,分别接了8颗二极管(也许是LED)到地。如果,您在先前下了 "BSF PORTB,0"这条命令,使得PORTB第0脚上的LED亮了。当您再运行了”BSF PORTB,1"这条命令后,虽然PORTB第1脚上的LED亮了,但是,PORTB第0脚上的LED却会熄掉。原因是因为,运行”BSF PORTB,1”时,会先将整个PORTB的值往回读,而它读到的PORTB第0脚,却是相当於低电位(被二极管拉为0.7V)。当它再把整个PORTB 的值写出去的时候,PORTB第0脚就被写成低电位,自然灯就熄了。

    解决之道是:串电阻,或者不要直接对I/O作读-修改-写命令。



2.  另外还有一类要注意的状况是:如当您将”BSF PORTB,0”和”BSF PORTB,1”两条命令连在一起,没有空运行时,纵使您没有上一段所述线路设计不良之状况,有时候您也会发现PORTB, 0的高电位也会不见了。导致这个现象的原因是:因为也许您这两支脚的外面接了长导线,有相当大的电容、电感性会阻止电位的变化;而且,PIC命令运行是在最后1/4周期时”写出”,而在第一个1/4周期时”读入”,PORTB,0还来不及升至高电位,便被下一个命令读回去了。

    解决之道是:通常在两道命令间插入个NOP命令就可以了。

*************************************************************以上为网络信息***********************************************************/ 





本贴被 vincent.r 编辑过,最后修改时间:2008-11-06,12:59:40.

出0入0汤圆

 楼主| 发表于 2008-11-6 10:16:10 | 显示全部楼层
正在等待   【7楼】 rqiang   ......

多谢       【8楼】 chuyu111 刘抗抗。

本贴被 vincent.r 编辑过,最后修改时间:2008-11-06,10:16:33.

出0入0汤圆

发表于 2008-11-5 18:02:37 | 显示全部楼层
原來衹有portx,trisx這兩個寄存器

從18f開始多加了個  latx  

出0入0汤圆

发表于 2008-11-5 17:42:10 | 显示全部楼层
稍等,等晚上有时间再拍照贴上来,

出0入0汤圆

 楼主| 发表于 2008-11-5 16:32:31 | 显示全部楼层
【3楼】 headwolf_83 

PIC18/30/24/33/32都是3个. 

PIC16是两个。输出的时候时候直接输出就可以了(保证方向寄存器为输出)。一些使用技巧,建议看张明峰的<<PIC单片机入门与实战>>,里面对PIC16系列的使用讲述的很清楚。 









"3个"、"两个"说的是不是寄存器?

出0入0汤圆

 楼主| 发表于 2008-11-5 15:24:01 | 显示全部楼层
/***********************************************************以下为网络信息***********************************************************



PIC芯片的IO口寄存器只有两个,一个方向寄存器,一个数据寄存器,其中数据寄存器有两个功能,写为输出值,读为引脚物理值,而修改IO口值时会先读入引脚值再进行修改然后再写出,这样在以下情况下会引起无意识的误操作:



假如PA0、1、2、3皆设为输出且输出高电平,但由于外部原因使得引脚电平并没有达到PIC认可以的高电平值,比如没有串电阻或电阻太小而接到LED或NPN基极,这样当需要把其中一个脚清零时,比如BSF PA,0时,PA1、2、3也会被清零,原因是PIC先读入了引脚值,而引脚值对PIC来说是0,所以……,大家可以小心了!



另外在连续使用改写(变成另一种电平)单个引脚指令时同样会存在误操作,比如:



BSF PA,0 (或 BCF PA,0)



(加入NOP——》就没问题了!:))



BSF PA,1 (或 BCF PA,1)



结果将会使PA0被清零,而不想要的1,这时因为从写入到输出高电平需要时间,所以如果连续操作必须在中间加入NOP/CLRWDT,这样才不会有问题发生!



而AVR有3个寄存器,方向、数据、引脚、功能分开,清楚明了,使用更方便可靠!不过新版的AVR写引脚寄存器时会引起数据寄存器翻转,即1变0,0变1,所以使用时可别写错地方了噢!:)



*************************************************************以上为网络信息***********************************************************/



本贴被 vincent.r 编辑过,最后修改时间:2008-11-05,15:27:11.

出0入0汤圆

 楼主| 发表于 2008-11-5 16:29:45 | 显示全部楼层
可不可以把这部分拍个照片贴上来啊。

张的书很好,可是手头没有,网上也没有电子版的。

谢谢了。

出0入0汤圆

发表于 2008-11-5 16:26:15 | 显示全部楼层
嗯,这本书我也有,上面讲的比较清楚,在P163页

出0入0汤圆

发表于 2008-11-5 16:14:46 | 显示全部楼层
PIC18/30/24/33/32都是3个.

PIC16是两个。输出的时候时候直接输出就可以了(保证方向寄存器为输出)。一些使用技巧,建议看张明峰的<<PIC单片机入门与实战>>,里面对PIC16系列的使用讲述的很清楚。

出0入0汤圆

 楼主| 发表于 2008-11-5 15:25:10 | 显示全部楼层
以上是网上找来的,大家讨论讨论。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 01:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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