PIC单独取反端口指令问题

2020-02-10 08:33发布

初学 PIC,现想单独取反PC口的第三,汇编指令如下

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

需要4个周期,请问是否还有更简的指令实现吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
su_mj000
1楼-- · 2020-02-11 07:59
1楼错了!

可以是:
  MOVLW  0x8
  XORWF    PORTC,F   ; bit3取反
  ANDWF    PORTC,F   ; 清除其他bit
jiangxingyuan
2楼-- · 2020-02-11 08:15
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
可见其他位并没有影响
欢迎地讨论
su_mj000
3楼-- · 2020-02-11 13:13
 精彩回答 2  元偷偷看……
jiangxingyuan
4楼-- · 2020-02-11 15:15
不好意思,我刚开始学,水平有限。我那段程序也是错的。
youmcu
5楼-- · 2020-02-11 17:20
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

一周热门 更多>