搜索
bottom↓
回复: 11

PIC单独取反端口指令问题

[复制链接]

出0入0汤圆

发表于 2009-12-5 09:18:14 | 显示全部楼层 |阅读模式
初学 PIC,现想单独取反PC口的第三,汇编指令如下

MOVF        PORTC,W
SUBLW        0XFF
ANDLW        0X08
MOVWF        PORTC

需要4个周期,请问是否还有更简的指令实现吗?

出0入0汤圆

发表于 2009-12-5 09:48:44 | 显示全部楼层
MOVLW   1<<3
XORWF   PORTC,  F

出0入0汤圆

 楼主| 发表于 2009-12-5 10:00:20 | 显示全部楼层
谢谢,我试下

出0入0汤圆

 楼主| 发表于 2009-12-5 10:15:02 | 显示全部楼层
一开始以为这样做会改变PORTC的内容,其实细想一下是不会的,看来是要补一下位操作知识才行了。再次谢谢 eduhf_123 经历 的回答.

出0入0汤圆

发表于 2009-12-5 10:39:55 | 显示全部楼层
不必客气。

通过数据手册可以知道,PIC的10系列、12系列、14000、16系列的单片机,是没有“读端口输出锁存器”这样的操作(或者隐含操作)的,所以无论是“读”指令还是“读-修改-写”指令,读的均是引脚状态。典型例子:对漏极开路输出且不使能内部上拉电路的引脚,如果锁存器为“1”但引脚被外部电路拉低,则读回来的将是“0”。

对有这种情况的IO端口,可在内存中开辟一个字节的端口数据“映射寄存器”,需要对端口进行任何写操作时先操作该“映射寄存器”,然后由“映射寄存器”向端口寄存器“单向”传递数据(单纯的读端口操作不受影响,直接读端口寄存器即可)。

出0入0汤圆

 楼主| 发表于 2009-12-5 22:43:05 | 显示全部楼层
谢谢。

出0入0汤圆

发表于 2009-12-6 02:21:00 | 显示全部楼层
"请问是否还有更简的指令实现吗?"

PORTC ^= (1<<3);

it works everywhere.

出0入0汤圆

发表于 2009-12-7 08:14:26 | 显示全部楼层
1楼错了!

可以是:
  MOVLW  0x8
  XORWF    PORTC,F   ; bit3取反
  ANDWF    PORTC,F   ; 清除其他bit

出0入0汤圆

 楼主| 发表于 2009-12-7 08:50:54 | 显示全部楼层
PORTC ^= (1<<3);

it works everywhere.
在PIC16 中没有单条指令实现该功能


ANDWF    PORTC,F   ; 清除其他bit
这条指令可以不要,要了反而把其它位都变成了0
因为:B 1111 1111 XOR B 0000 1000 = B 1111 0111
      B 0000 1000 XOR B 0000 1000 = B 0000 0000
可见其他位并没有影响
欢迎地讨论

出0入0汤圆

发表于 2009-12-7 11:56:24 | 显示全部楼层
...
ANDLW 0X08    ; 这里不是清除其他bit了吗?!
MOVWF PORTC

这说明你原来那段程序就在忽悠。

出0入0汤圆

 楼主| 发表于 2009-12-7 13:29:14 | 显示全部楼层
不好意思,我刚开始学,水平有限。我那段程序也是错的。

出0入0汤圆

发表于 2009-12-18 17:04:04 | 显示全部楼层
3) 尽管PIC单片机对寄存器有具体的位操作指令,如位置1指令BSF、位清零指令BCF以及字节取反指令,但没有对位取反的指令,对此可用异或运算指令XORWF配合二进制常数对寄存器的一位或多位进行取反,异或的逻辑关系是两数相异时输出=1,相等则输出=0,所以将某一位与1异或时即可将对应位取反,如需对RB和count的3、4位取反,可用以下程序实现:
                movlw                B'00011000'        ; 将常数000 11 000传送到W
                xorwf                PORTB,f                ; 原状态是011 01 001时,运算后变为011 10 001
                xorwf                count,f                ; 原状态是101 00 101时,运算后变为101 11 101
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 14:50

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

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