打印

51端口锁存器的值...

[复制链接]
2640|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayb_ice|  楼主 | 2007-7-28 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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 | 只看该作者

这是唯一可接受的方法!

使用特权

评论回复
5
ayb_ice|  楼主 | 2007-7-29 07:40 | 只看该作者

如果这样的话...

直接用JBC不就搞定了:
    SETB    CY
    JBC     P00,RESTORE
    CLR     CY
RESTORE:
    MOV     P00,CY
    RET
我主要是感觉51为什么没有考虑这样的指令....
另外也不知道是不是自己不知道有这样的指令...

使用特权

评论回复
6
dengm| | 2007-7-29 10:27 | 只看该作者

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

使用特权

评论回复
7
ayb_ice|  楼主 | 2007-7-29 10:44 | 只看该作者

修改一下

    SETB    C
    JBC     P00,RESTORE
    CLR     C
RESTORE:
    MOV     P00,C
    RET
这样就快些了...

使用特权

评论回复
8
dengm| | 2007-7-29 10:54 | 只看该作者

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

使用特权

评论回复
9
ayb_ice|  楼主 | 2007-7-29 11:02 | 只看该作者

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

使用特权

评论回复
10
sibaidong| | 2007-7-29 11:40 | 只看该作者

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

  51运行一条指令过程在是有很多动作的!其中在访问IO口这一系列指令中就有包含了将IO口预置为1的这一步!所以你不可能不改变其寄存器!

使用特权

评论回复
11
mannerfh| | 2007-7-29 12:00 | 只看该作者

不是指令的错吧

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

使用特权

评论回复
12
ayb_ice|  楼主 | 2007-7-29 13:09 | 只看该作者

随便说说

可能有些人还没有理解我的意思吧...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15464

帖子

34

粉丝