打印

I2C通讯相关**

[复制链接]
3116|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cgkdxx|  楼主 | 2007-7-19 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, LLC, RS, ST, TE
write24:mov  r0, #40h;RAM首地址
        call wrdat
    ret



read24: mov r0, #40h
    call  rddat
    ret


;***********************************************************************************************************
wrdat:  lcall st24
        mov   a, #0a0h;命令
        lcall wbyte
        mov   a, #08h;24c02首地址
        lcall wbyte
        mov   r6, #025;**********25个参数

wr1:    lcall st24
        mov   a, @r0
        lcall wbyte
        inc   r0
        djnz  r6, wr1
        lcall stop24
    ;djnz  r6, wr1
        ret

rddat:  lcall st24
    mov   a, #0a0h
    lcall wbyte
;    mov   a, zc1
        mov   a, #08h
        lcall wbyte
        lcall st24
        mov   a, #0a1h
        lcall wbyte
    mov   r6, #025
rd1:        lcall rbyte
    mov   @r0, a
    inc   r0
    djnz  r6, rd1
    lcall stop24
    ret

wbyte:  nop
    mov  r3, #08h
wby0:   nop
    lcall delll
        clr   scl
        lcall delll
    rlc   a
    mov   sda, c
    setb  scl
    djnz  r3, wby0
    clr   scl
    lcall delll
        setb  scl
    lcall delll
    jb    sda, $
    clr   scl
        nop
        nop
     ret

rbyte:  nop
    mov  r3, #08h
rby0:   clr  scl
      lcall delll
    setb  scl
    lcall delll
    mov   c, sda
    rlc   a
    djnz  r3, rby0
    clr   scl
    lcall delll
    setb  sda
     lcall delll
    setb  scl
    nop
    nop
    ret

st24:   clr  scl; start
    call delll
     setb sda
    call delll
    setb scl
    call delll
    clr  sda
    call delll
    clr  scl
    nop
    ret

stop24:    clr  scl;stop
    call delll
      clr  sda
    call delll
    setb scl
    call delll
    setb sda
    call delll
    clr  scl
    nop
    ret

delll:  nop
        nop
        nop
     nop
        nop
        nop
        nop
      ret

相关帖子

沙发
winloop| | 2007-7-19 14:26 | 只看该作者

汇编,头疼:(

使用特权

评论回复
板凳
conwh| | 2007-7-19 14:38 | 只看该作者

什么叫25个参数?

        mov   r6, #025;**********25个参数

wr1:    lcall st24
        mov   a, @r0
        lcall wbyte
        inc   r0
        djnz  r6, wr1
        lcall stop24
    ;djnz  r6, wr1
        ret
===============================================
最多才能写16个字节
你再看下IIC的协议吧。这里有相关的程序,你可找下。

使用特权

评论回复
地板
cgkdxx|  楼主 | 2007-7-19 15:18 | 只看该作者

谢谢两位!!

哪里有程序?  谢谢!

使用特权

评论回复
5
ayb_ice| | 2007-7-19 15:24 | 只看该作者

2402的页大小应该是8个字节吧...

使用特权

评论回复
6
conwh| | 2007-7-19 15:40 | 只看该作者

我记得是16个字节

使用特权

评论回复
7
cgkdxx|  楼主 | 2007-7-19 15:48 | 只看该作者

有个例程说连续写8个,

我现在是写不进,读的全是5,
连续写要怎样弄?谢谢!!

使用特权

评论回复
8
conwh| | 2007-7-19 17:16 | 只看该作者
9
程序匠人| | 2007-7-19 17:49 | 只看该作者

I2C通讯相关**

日志标题 作者 日期 评论 
[原创] I2C的C程序模块(基于msp430) cxjr 9-17 0 
I2C总线原理及应用实例 cxjr 7-31 0 
基于WinCE的I2C驱动程序设计 cxjr 6-25 1 
绝对好用的I2C读写程序。已测试。(masufang博云天) cxjr 4-19 1 
在PC上用并行口模拟I2C总线的C源代码 (21icbb... cxjr 4-19 0 
i2c虚拟总线通用软件包(qinguoxi) cxjr 4-19 0 
公交语音提示(2) (I2C驱动程序) cxjr 2-21 0 
I2C模拟函数 cxjr 11-20 0 
i2c cxjr 11-18 0 
《I2C通信技术》大全 cxjr 7-31 0 
MCS-51单片机模拟I2C软件包(V1.1)(c) cxjr 8-27 0 
在微机上用并行口模拟I2C总线(c程序) cxjr 8-27 0 
在51上用P1口模拟I2C (c语言) cxjr 8-17 1 
I2C串行总线标准驱动程序(C51) cxjr 8-8 0 
HOLTEK 主I2C的代码 cxjr 6-3 0 
HOLTEK 从I2C的程序 cxjr 6-3 0 
PIC:又一个读写I2C程序 cxjr 6-2 0 
PIC:另一个读写I2C程序 cxjr 6-2 0 
PIC:读写I2C程序 

相关链接:http://www.mcublog.com/blog/blog2006/cxjr/archives/2006/17845.html

使用特权

评论回复
10
cgkdxx|  楼主 | 2007-7-19 19:02 | 只看该作者

非常感谢二位!!

匠人的网里病毒好多啊,嘿嘿

使用特权

评论回复
11
cgkdxx|  楼主 | 2007-7-19 19:11 | 只看该作者

我是不是要连写3次啊?谢谢

使用特权

评论回复
12
程序匠人| | 2007-7-19 23:13 | 只看该作者

是MCUBLOG里的病毒

如果你直接在匠人的百宝箱21ic主站中搜索以上相关**,应该没有病毒。

使用特权

评论回复
13
conwh| | 2007-7-20 06:11 | 只看该作者

你们的病毒是怎么放进去的?

使用特权

评论回复
14
cgkdxx|  楼主 | 2007-7-20 09:41 | 只看该作者

conwh通宵?

使用特权

评论回复
15
gyt| | 2007-7-20 10:02 | 只看该作者

大仙不睡觉:)

使用特权

评论回复
16
古道热肠| | 2007-7-20 10:29 | 只看该作者

最好用C做驱动程序

  

使用特权

评论回复
17
conwh| | 2007-7-20 11:11 | 只看该作者

呵呵,睡了会。倒塌了,急着赶一个样品,用实验板搭,可

折腾人

使用特权

评论回复
18
cgkdxx|  楼主 | 2007-7-20 11:26 | 只看该作者

pcb可以加急,第二天就能拿到了

谢谢诸位,调通了,也发上来
;---------------从24C02整组读数据------------------------
RD_INI: LCALL    DELAY
RD_AREA:LCALL    DELAY
        LCALL    aSTART
        LCALL    DELAY
        LCALL    WRITE            ;24C02信息的读入
        LCALL    DELAY
        LCALL    ACK
        LCALL    DELAY
        JC       RD_AREA
        MOV      R2,     #8
        CLR      SDA              ;起始地址为00
ADDR_0: LCALL    DELAY
        LCALL    DELAY
        SETB     SCL
        LCALL    DELAY
        LCALL    DELAY
        CLR      SCL
        LCALL    DELAY
        DJNZ     R2,     ADDR_0
        LCALL    ACK
        LCALL    DELAY
        JC       RD_AREA
        LCALL    DELAY
        LCALL    aSTART
        MOV      R0,    #40H       ;存储首地址
        MOV      R3,    #25         ;连续读8个字节25
        LCALL    DELAY
        LCALL    READ
        LCALL    DELAY
        LCALL    ACK
        JC       RD_AREA
RD_R_0: LCALL    DELAY
        LCALL    DELAY
        LCALL    RD_INFO
        LCALL    DELAY
        INC      R0
        DJNZ     R3,    RD_R_1
    LCALL    ACK_2
    LCALL    DELAY
        LCALL    STOP
        RET
RD_R_1: LCALL    ACK_1
    SJMP     RD_R_0
;---------------24C02开始--------------------------------
aSTART:  SETB     SDA
        SETB     SCL
        LCALL    DELAY
        CLR      SDA
        LCALL    DELAY
        CLR      SCL
        RET
;---------------24C02读命令字----------------------------
;片选为"00"
;--------------------------------------------------------
READ:   MOV      A,     #10100001B
        MOV      R2,    #8
RD1:    RLC      A
        MOV      SDA,    C
        SETB     SCL
        LCALL    DELAY
        CLR      SCL
        LCALL    DELAY
        DJNZ     R2,    RD1
        RET

;---------------24C02写命令字----------------------------
;片选为"00"
;--------------------------------------------------------
WRITE:  MOV      A,     #10100000B
        MOV      R2,    #8
WR1:    RLC      A
        MOV      SDA,    C
        SETB     SCL
        LCALL    DELAY
        CLR      SCL
        CLR      SDA
        LCALL    DELAY
        DJNZ     R2,    WR1
        RET

;---------------24C02结束--------------------------------
STOP:   CLR      SDA
        SETB     SCL
        LCALL    DELAY
        SETB     SDA
        LCALL    DELAY
        RET

;---------------24C02的应答信息--------------------------
ACK:    SETB     SDA
        SETB     SCL
        LCALL    DELAY       
        MOV      C,   SDA
        LCALL    DELAY
        CLR      SCL
        RET
ACK_1:  CLR      SDA    ;应答
        SETB     SCL
        LCALL    DELAY
        CLR      SCL
        LCALL    DELAY
        SETB     SDA
        LCALL    DELAY
        RET
ACK_2:  SETB     SDA    ;非应答
        SETB     SCL
        LCALL    DELAY
        CLR      SCL
        CLR      SDA
        LCALL    DELAY
        RET

;---------------24C02的单字节读--------------------------
;R0:数据的存储地址
;--------------------------------------------------------
RD_INFO:SETB     SDA
        LCALL    DELAY
        MOV      R2,    #8
        MOV      A,     #0
RD_I_0: SETB     SCL
        LCALL    DELAY    
        MOV      C,     SDA
        LCALL    DELAY
        CLR      SCL    
        RLC      A     
        LCALL    DELAY
        DJNZ     R2,    RD_I_0
        MOV      @R0,   A
        RET

;---------------24C02的单字节写--------------------------
;R0:数据的读出地址
;--------------------------------------------------------
WR_INFO:;MOV      A,    @R0
        MOV      R2,    #8
WR_O_0: RLC      A
        MOV      SDA,    C
        LCALL    DELAY
        SETB     SCL
        LCALL    DELAY
        LCALL    DELAY
        CLR      SCL
        LCALL    DELAY
        DJNZ     R2,    WR_O_0
        RET

DELAY: NOP
       NOP
       NOP
       NOP
       RET

;**************************************************

write24: ;call WR_INI
    MOV      R0,    #40H 
    mov      r1,    #00h
    mov      r6,    #25
WR_INI1: LCALL    DELAY
        LCALL    aSTART
        LCALL    DELAY
        LCALL    WRITE
        LCALL    DELAY
        LCALL    ACK
        LCALL    DELAY
        JC       WR_INI1
        
    mov      a, r1;#00h;ram addr
        LCALL    WR_INFO
        LCALL    DELAY
        LCALL    ACK
        LCALL    DELAY
        JC       WR_INI1
        ;MOV      R0,    #40H          ;读出首地址
        ;MOV      R3,    #1           ;连续写8个字节
xxxx:   mov      a, @r0
        LCALL    WR_INFO              ;写一个字节
        LCALL    DELAY
        LCALL    ACK
        LCALL    DELAY
        JC       WR_INI1
        INC      R0
        ;DJNZ     R3, xxxx
    inc      r1
        LCALL    DELAY
        LCALL    STOP
    LCALL    DELAY
    LCALL    DELAY
    LCALL    DELAY
    lcall    delay
    djnz     r6, WR_INI1
    nop
    ret

25个连写,原来程序是页写,我弄成字节写,可任意改字节数

再次感谢各位!!谢谢!!

使用特权

评论回复
19
程序匠人| | 2007-7-20 23:54 | 只看该作者

有始有终,好样的!

使用特权

评论回复
20
hotpower| | 2007-7-21 00:06 | 只看该作者

025应该是8进制数吧

使用特权

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

本版积分规则

192

主题

1126

帖子

0

粉丝