导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→I2C读写问题

* 102600: I2C读写问题

   ningling_21 
ningling_21发表的帖子 

 I2C读写问题
硬件用AT24C08+AT89s52,p0.6(scl)p0.7(sda),写入数据时出错,如:
要写#C3H,而实际写入的却是#87H
  写#3CH, ------------------     #79H
  写#18H,-------------------     #31H
  写#81H,-------------------    #03H等等....

请各位帮忙找下原因所在,不胜感激!

程序如下:
;主程序,向AT24C08内部的61H单元写一个字节#18H
rwtes: mov r4,#61h
   rts: nop
        mov 3fh,r4
        lcall fenli
        mov i2c_data,#18h
        mov iic_addr,r4   ;子地址
        lcall writei2c    ;写数据
        lcall del_5ms                  
        lcall fenli0
        ret    
        
;写一个字节;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
writei2c:lcall iic_sta           ;启动总线
          mov iic_wdata,slaw      ;寻址字节(写)
          lcall wr_vdat           
          cpl ledr
     wrc: lcall cack              ;检查应答? dot1=1没有应答 dot1=0应答
          jb dot1,wrc             ;没有应答重新发送
          mov iic_wdata,iic_addr  ;存储单元寻址
          lcall wr_vdat
          mov iic_wdata,i2c_data
          lcall wr_vdat
    wt:   lcall cack
          jb dot1,wt
          lcall iic_sto           ;释放总线
          setb ledr
          cpl ledg
          ret
;写数据子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wr_vdat:
        mov r7,#8
        mov a,IIC_WDATA
 wrlp:  rlc a
        jc  wr1
        clr vdat
        nop
        setb vscl
        nop
        nop
        nop
        nop
        clr vscl
        djnz r7,wrlp
 rrt:   ret
 wr1:   setb vdat
        nop
        setb vscl
        nop
        nop
        nop
        nop
        clr vscl
        ;clr vdat
        djnz r7,wrlp
        ajmp rrt
  ;读取一个字节;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
readi2c: lcall iic_sta         ;启动
          mov iic_wdata,slaw
          lcall wr_vdat         ;发寻址字节(写)
          ;clr ledr
          lcall cack            ;检查应答
   cr:    jb dot1,readi2c       ;dot1=1没有应答,重新读
          mov iic_wdata,iic_addr;发送子地址
          lcall wr_vdat
          lcall cack            ;检查应答
          jb dot1,cr
          lcall iic_sta         ;重启总线
   cr1:   mov iic_wdata,slar
          lcall wr_vdat         ;发寻址字节(读)
          lcall cack            ;检查应答
          jb dot1,cr1
          lcall read_data       ;读取数据到IIC_RDATA
          MOV 3eH,IIC_RDATA
          lcall fack            ;发送应答位
          lcall read_data       ;再读一次数据在iic_rdata
          clr ledb
          lcall fnack           ;发送非应答
          lcall iic_sto         ;结束数据传送
          ret
 ;读取数据子程序
read_data:
        mov iic_rdata,#00    ;清空
        mov r7,#8
  lop1: setb vdat
        setb vscl
        mov c,vdat
        mov a,iic_rdata
        Rlc a                ;
        mov iic_rdata,a      ;     
        nop                  ;
        clr vscl             ;     
        djnz r7,lop1
        ret  

请各位帮忙找下原因所在,不胜感激!


发表时间:2007年2月5日18:59:13

  
回复该帖

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

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

  102645.[详细]各位大侠帮帮我啊
摘要:知道的大侠帮下忙了,先谢谢了.........(31字)
- [ningling_21][1048次] 2007年2月6日

  102674.[详细][求助]谁帮忙找出原因或发个程序给我啊?
摘要:各位帮帮忙啊?也可以QQ交流啊,QQ-674174862   ......(49字)
- [ningling_21][938次] 2007年2月7日

  102694.[详细]请求指点
摘要:求大虾指点迷津,QQ-674174862......(28字)
- [ningling_21][838次] 2007年2月8日

[上一篇帖子]:好东东支持!!!
[下一篇帖子]:11谢谢楼上哦关键就是因为在家里没有芯片可换啦,还有,测什么电压呢?嘿嘿。我有些笨