QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
17小时前
查看: 1683|回复: 5
收起左侧

[讨论结束] 想学习I2C的编程,不知如何入手?

 关闭 [复制链接]
发表于 2008-6-19 14:50:34 | 显示全部楼层 |阅读模式 来自: 中国河南信阳

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
1 a+ y& g: d7 H! E7 [  Z! w6 y8 n7 G1 `4 c+ R1 P+ y
[ 本帖最后由 zhous_ch 于 2008-6-19 20:06 编辑 ]
发表于 2008-6-19 21:02:21 | 显示全部楼层 来自: 中国江苏南京
你说的是不是i2c串行总线啊,还是什么,恕我孤陋寡闻
 楼主| 发表于 2008-6-20 08:13:48 | 显示全部楼层 来自: 中国河南信阳
就是i2c总线,是不是有些厂商提供的程序可以直接调用
发表于 2008-6-20 18:52:05 | 显示全部楼层 来自: 中国山东泰安
看看i2c通信协议,然后看看一些单片机上的i2c程序。
发表于 2008-8-1 16:09:00 | 显示全部楼层 来自: 中国河南新乡
就是啊,首先你要看懂I2C协议,在就是根据某个芯片,看一下控制程序就大概可以了!下面就是24C02的读写程序:% o# v$ R! t9 m; h# C
; z/ O: D  R& T4 N9 [% T' t
: X/ M2 k  V: k9 _, x/ m7 [
  #define uchar unsigned char. O/ {% A- @9 F) E5 f5 d: I! L6 V- X
  #define uint unsigned int& D2 S& L2 \4 H
  #include <reg52.h>
& s( J# O! I2 E3 l) A  #include <stdio.h>
) K$ \- R' X0 C0 m6 N  #include <absacc.h>1 g% X! S, n" Q( b+ S0 ?( d3 b
  sbit scl=P3^5;  //24c02 SCL
$ t! ]: L8 h( f  sbit sda=P3^4;  //24c02 SDA+ D% ]3 s+ f! R% l* j; k/ h& k' C
  sbit DOG=P1^7;  //狗
: v  K9 C5 ~% ^  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据+ O. G2 t3 K9 Y! g
  void x24c02_write(uchar address,uchar info);  
' ~# ~( o- l. f. c& `  //向24c02的address地址中写入一字节数据info
; V0 k7 E) t  B/ j+ k9 |% @  void x24c02_init();   //24c02初始化子程序' u" _% ~; S+ q9 a  j/ }
  void delay1(uchar x);" {* t6 g1 c8 i# N: L
  void flash();+ L5 P. K8 P6 h$ G5 @8 L$ o/ a
  void x24c01_init();
& h. V; A+ M" f6 Z8 d  H3 o  void start();$ r1 Y- V6 S5 C8 x
  void stop();
) [% Q( Y: {4 B2 o+ Y  void writex(uchar j);, ?; i( V; X- p: e7 j# q
  uchar readx();
5 ^9 P9 i  p, j; P: d7 N  void clock();9 Y4 l3 M8 i% {* L0 P' a7 j8 _
  void delay1(uchar x)
$ Z0 [! b/ d0 v/ W* V  {
$ k6 B4 u" @- n, w% N     uint i;/ F3 C2 j& C, q$ j
     for(i=0;i<x;i++);
- D0 R6 p4 X+ s8 C. `2 f( H     DOG=~DOG;+ w  P, R5 n7 t* I2 d0 l
  }6 ?, m. `, ?7 N
  void flash()& E7 k5 j( Z" h# [, f4 O4 F/ Y7 A# I
  {
, @9 {6 [2 |& E- |9 P8 k! x. r) x     uchar u;! t1 b, M- g  y' c* |7 O+ ]
     DOG=~DOG;
( s, p- o+ L, o; _  }8 b# _. U' f3 O% Z6 {5 K- ^- l; w
  void x24c02_init()3 Y- T% s& G) f. B, B9 K
  {
; G/ _' U2 N4 F6 ?     scl=1; flash(); sda=1; flash();9 q( F) P1 ^4 l, `+ m
  }5 t$ v" @% p2 l$ ~/ L' _
  void start()
1 u4 H+ c- A) g( L/ |, s  {
9 ]+ t7 `+ O) E: k! ]/ {# ^     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();( K3 O- ^5 ?' a) U. l2 D
  }2 t3 ~6 @$ V( s" u- F$ Z1 C! i
  void stop()5 y5 H2 G5 ~8 I
  {3 v6 _* U0 E% q5 ?7 E
     sda=0; flash(); scl=1; flash(); sda=1; flash();2 a0 e8 p3 W  j
  }/ x4 u1 i6 k0 K5 w' A8 R8 t6 d
  void writex(uchar j)
  |: `2 k! i9 c* c  {$ e1 K- v7 B/ m3 O/ d$ c+ T1 d
     uchar i,temp;
1 d* L) P# k9 I% o1 p9 J& V     temp=j;2 V5 E2 x2 A6 \4 f/ p6 t# \6 ?' n- u
     for (i=0;i<8;i++){0 e" e3 p) n' \* n/ j5 N$ \# K
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1;
1 e! |% d" v, V! n  flash();' W# A$ o; d8 _4 ]
     }5 F- J! E5 ^% q: F3 w' y8 l. [8 p
     scl=0; flash(); sda=1; flash();
6 j$ P: `& {) m" S( B. s  }
6 t( z- C- i8 G2 Z, m! F  uchar readx()( I% k6 A1 V5 u, l
  {
4 w; \4 @$ d1 m1 J     uchar i,j,k=0;
& `8 V5 h) D5 C8 l     scl=0; flash(); sda=1;
9 S7 P9 f& b/ C$ B; c     for (i=0;i<8;i++){- v3 {( M# r5 g
        flash(); scl=1; flash();/ y$ L' B# Q9 d/ I7 C* B+ Y8 e
        if (sda==1) j=1;
) y9 R( \. f! H        else j=0;
6 z) |( i6 [- Z7 y0 u0 F        k=(k<<1)|j; scl=0;
1 D- W! @" H  l: r     }
. r& K( y( W: D; L9 W! s' }     flash(); return(k);
- ^  o  u4 U( f  }0 {, Q& {- Y! I3 D7 ]) |$ J
  void clock()5 l7 E# m. x1 d5 c
  {; R+ n+ \5 d4 [; s- u% {
     uchar i=0;
) ^" f2 ~' O; G, c     scl=1; flash();
* v+ _! t: Y2 Z4 V: C     while ((sda==1)&&(i<255))i++;
2 d" {0 B% f  f$ O! M0 ~; b     scl=0; flash();
+ |& C  }& U0 C) O8 g2 }  }, _/ g& ]: ^5 L' A7 c( z& F
  uchar x24c02_read(uchar address)
9 ~/ H9 [" f+ E$ Q' y5 F! D7 t  {
0 K+ R& x; a# U     uchar i;* T; ?( u4 \2 L' x( t
     start(); writex(0xa0);1 _4 `8 X/ N- V; m
     clock(); writex(address);
7 }0 y# t" h. Z# i( D( q, W& Y     clock(); start();: V  g6 A$ p1 I) B; b
     writex(0xa1); clock();
, ^9 l9 m2 B- ]. d1 j  B     i=readx(); stop();7 S! A; q; l2 O& O" q
     delay1(10);$ c  f* I; t* B; `% v0 d
     return(i);8 ^9 T+ z# B2 L% i
  }
' L) o( b  L# Q; g6 P& t+ a  void x24c02_write(uchar address,uchar info)* m& s1 j( ?5 r
  {
7 o( m# x' X# U& P& J  z" j1 ?( H     EA=0;
8 H' Z% T0 m9 p/ f% @     start(); writex(0xa0);1 I( W; [5 t7 [2 p6 h0 E
     clock(); writex(address);' o! x' I9 B7 E3 x
     clock(); writex(info);
% d: ~* f- ~2 h/ i; ]     clock(); stop();' H  m7 t2 m( c% u; ]1 N$ X4 _$ u
     EA=1;
, m8 L% c4 s! {' Y     delay1(50);1 L6 C7 _. c& N: ^$ [% a
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
) n; r# x/ y" L( b- z不过你想学好还是找本讲协议的书看一下
6 s5 O, E8 \; WI2C协议标准
& Q9 y- a  q9 a& N# R  i- D I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表