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

 *第46418篇: I2C读写问题

  
楼 主:ningling_21 2007年2月5日18:59
 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  

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

  
2楼:ningling_21 2007年2月6日13:11
 各位大侠帮帮我啊
知道的大侠帮下忙了,先谢谢了...
  
3楼:ningling_21 2007年2月7日12:45
 [求助]谁帮忙找出原因或发个程序给我啊?
各位帮帮忙啊?也可以QQ交流啊,QQ-674174862


  
4楼:ningling_21 2007年2月8日10:34
 请求指点
求大虾指点迷津,QQ-674174862
  
5楼:ningling_21 2007年3月1日19:54
 请求指点
请求各位大虾指点迷津。。。。。。。。。
  
6楼:ningling_21 2007年3月2日08:06
 请求指点
请求大虾指点。。。。。。
有个三极管各脚电压:1=-6V,2=-6.2v,3=-9v
请问哪个是e,b,c?
  
7楼:ningling_21 2007年3月27日12:51
 请指点迷津
请大虾指点迷津.......

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

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


[上一篇主题]:lm224电路没有看明白? 请大家看看

[下一篇主题]:出售二手holtek烧写器