51端口锁存器的值...

[复制链接]
3677|11
 楼主| ayb_ice 发表于 2007-7-28 15:06 | 显示全部楼层 |阅读模式
在不修改51端口锁存器值的情况下好象真的不能把值读出来...
dengm 发表于 2007-7-28 18:02 | 显示全部楼层

我给你读 1 bit

      P_1    bit P3.4

READ_P_1:  ; TO C
     MOV C, P_1
     JC READ_P_1_EX
       JBC P_1, READ_P_1_A  
         SJMP READ_P_1_EX
READ_P_1_A:
       SETB P_1 
       SETB C
READ_P_1_EX:
     RET

;---------------------------------
READ_P_1:  ; TO C
     MOV C, P_1
     JC $ + 11
       JBC P_1, $ + 5  
         SJMP $ + 5
       SETB P_1 
       SETB C
     RET
;========================
READ_P_1:  ; TO C
     JB P_1, READ_P_1_B
       JBC P_1, READ_P_1_A
         CLR C  
         SJMP READ_P_1_EX
READ_P_1_A:
       SETB P_1
READ_P_1_B:
       SETB C
READ_P_1_EX:
     RET

 楼主| ayb_ice 发表于 2007-7-28 18:58 | 显示全部楼层

随便说说

你这也修改了,只是又修正了而已....
dengm 发表于 2007-7-28 19:16 | 显示全部楼层

这是唯一可接受的方法!

 楼主| ayb_ice 发表于 2007-7-29 07:40 | 显示全部楼层

如果这样的话...

直接用JBC不就搞定了:
    SETB    CY
    JBC     P00,RESTORE
    CLR     CY
RESTORE:
    MOV     P00,CY
    RET
我主要是感觉51为什么没有考虑这样的指令....
另外也不知道是不是自己不知道有这样的指令...
dengm 发表于 2007-7-29 10:27 | 显示全部楼层

MOV P00,C 为 2 周期指令 vs setb p00 为1周期指令

 楼主| ayb_ice 发表于 2007-7-29 10:44 | 显示全部楼层

修改一下

    SETB    C
    JBC     P00,RESTORE
    CLR     C
RESTORE:
    MOV     P00,C
    RET
这样就快些了...
dengm 发表于 2007-7-29 10:54 | 显示全部楼层

要确认pin 被 外电路拉低了才能 jbc !!

 楼主| ayb_ice 发表于 2007-7-29 11:02 | 显示全部楼层

JBC本身就是访问锁存器....

sibaidong 发表于 2007-7-29 11:40 | 显示全部楼层

要达到楼主的意思就去改一下51的IO口设计了!

  51运行一条指令过程在是有很多动作的!其中在访问IO口这一系列指令中就有包含了将IO口预置为1的这一步!所以你不可能不改变其寄存器!
mannerfh 发表于 2007-7-29 12:00 | 显示全部楼层

不是指令的错吧

我觉得这不能说是51指令的错,是51端口的硬件设计的问题,P0口就应该可以的吧! 不知道对不对!呵呵!

 楼主| ayb_ice 发表于 2007-7-29 13:09 | 显示全部楼层

随便说说

可能有些人还没有理解我的意思吧...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15494

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部