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

 *第14198篇: 求助:关于I2C程序!

  
楼 主:senvic 2003年7月8日13:00
 求助:关于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

  
2楼:a12345678 2003年7月8日23:23
 RE:
每次循环都把SDA置1,主要是避免单片机IO口影响SDA

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:请教高手!如何解决HP网络分析仪存储和读取问题?

[下一篇主题]:重定位是怎样一个过程?