导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助:关于I2C程序!

* 36465: 求助:关于I2C程序!

   senvic 
senvic发表的帖子 

 求助:关于I2C程序!
各位大虾,有个问题请教:关于I2C软件读写程序。
以下的原程序来自周立功的I2C读写的软件包,但是本人对其中的程序有点不解,请教
如下:

;读取字节子程序                    
;读出的值在ACC
;每取一字节要发送一个应答/非应答信号
;周立功原程序
RDBYTE: MOV  R0,#08H
RLP:  SETB  SDA        ;该处SETB SDA,我感到不理解。每次循环都把SDA置1那起不是
        NOP                 ;会影响到后面对于总线上的数据SDA的状态,造成读取错误?
        SETB  SCL          
        NOP
        NOP
        MOV  C,SDA         
        MOV  A,R2 ;另我觉得没有必要用到R2,感觉冗余? 
        CLR   SCL           
        RLC   A             
        MOV  R2,A
        NOP
        NOP
        NOP
        DJNZ  R0,RLP         
        RET

;以下是我修改后的程序,能否给我点意见?
;MODIFIED BY Senvic 2003-7-5
;
;RDBYTE:MOV R0, #08H
; SETB  SDA 
;RLP: NOP
; NOP
; CLR  SCL
; NOP
; NOP
; NOP
; NOP
; NOP
; SETB  SCL
; MOV C, SDA
; RLC A
; NOP
; NOP
; DJNZ R0, RLP
; RET


; 无子地址器件写1字节数据
; 入口参数: 数据为ACC、器件从地址SLA              
; 占用:  A、R0、CY
;周立功原程序
IRDBYTE: LCALL  START              ;START总线开始的条件
         MOV    A,SLA         ;发送器件从地址
         INC     A  ;请问这里加一什么意思?
         LCALL  WRBYTE                ;WRBYTE写字节子程序
         LCALL  CACK                     ;应答判断子程序,返回值为ACK
         JNB     ACK,RETRDB           ;ACK为判断应答子程序,ACK=1有应答ACK=0无应答
         LCALL  RDBYTE        ;进行读字节操作
         LCALL  MNACK           ;发送非应信号
RETRDB:  LCALL  STOP                ;结束总线
         RET


发表时间:2003年7月8日13:00:33

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  36546.[详细]RE:
摘要:每次循环都把SDA置1,主要是避免单片机IO口影响SDA......(46字)
- [a12345678][658次] 2003年7月8日

[上一篇帖子]:请教高手!如何解决HP网络分析仪存储和读取问题?请教高手!如何解决HP网络分析仪存储和读取问题? B
[下一篇帖子]:再用一片51做键盘显示、串行通讯