QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
1天前
查看: 1686|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢( D, h+ j1 I# H% Z, O$ {
: ^8 f* J+ \% Q; }
[ 本帖最后由 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的读写程序:) M$ m" ]' G4 M7 r( B/ E9 L0 \/ x
3 n9 C! r! y' `+ U0 D+ ]

* a1 x2 [1 t+ c* t: e# q) y  #define uchar unsigned char3 A  T" g  }1 E( V# y0 D3 G
  #define uint unsigned int
/ K: y* o2 p/ M6 [  #include <reg52.h>8 m. r& ?3 q+ j! x5 B" h
  #include <stdio.h>
6 p, N" f: x& f9 o. J  _& J  #include <absacc.h>
- Q! i7 v  ?. l7 f. E& [  sbit scl=P3^5;  //24c02 SCL2 }: e- d1 C, t$ P7 S1 p' Q
  sbit sda=P3^4;  //24c02 SDA
% e1 w5 R0 w3 n% m  sbit DOG=P1^7;  //狗- a# W$ P3 q- G2 O
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据, Q7 D; P5 W3 A* K
  void x24c02_write(uchar address,uchar info);  2 A" b* I5 g2 j/ i, S
  //向24c02的address地址中写入一字节数据info
4 m2 K; n+ N7 v2 n% |% N  void x24c02_init();   //24c02初始化子程序* E7 p* T# S8 Y4 X
  void delay1(uchar x);
7 j/ s3 N& ^" X5 w/ ]3 Q  void flash();
9 @: g$ p$ A2 P0 C% @7 C9 G  void x24c01_init();
$ s) g$ ]7 \6 q% W4 e7 Y% B  void start();
5 r. b. i2 ^6 p5 K8 J; d2 w  void stop();
- h- n0 @; g! K( o$ {) X  void writex(uchar j);
* K# b& I$ M, h: y  B  f  uchar readx();
& M! e5 Q% c! P2 z( i  void clock();
2 w! m. n0 U* a* }1 Q0 o: L1 V) Q3 S  void delay1(uchar x)% B: C$ @# `# j) B8 p% u
  {
* {/ R0 ~5 K/ Z     uint i;
% ?9 u( A) H1 }+ ]4 n0 H. c( R( k     for(i=0;i<x;i++);
0 O. v. w' `3 a) I  [. i% w! p     DOG=~DOG;
* s+ m# |$ Q+ K! w2 f; _+ x  }7 |' H% R# w+ v, n
  void flash()
. v9 C+ i# D9 @" P$ D  {
: A! i/ N& q7 @+ @) N     uchar u;
7 E$ j  _7 m; n1 m2 n3 q, F, q     DOG=~DOG;
7 N% A" n! M' M$ V  P( S. K$ l  }* ]8 f$ x6 z$ Z7 S# ~
  void x24c02_init()* ]0 j5 F! `3 a2 a
  {
+ n8 u! Q# A) s4 E     scl=1; flash(); sda=1; flash();8 ?- z7 C2 X$ K$ Z( K) q) f
  }2 z3 ^. I1 U- s6 ~- j  e! ~
  void start()2 p, |4 S8 ]. D7 @
  {
# e0 o4 f0 o4 O- s     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();: A( u9 q5 x4 y/ ?
  }$ A2 g0 L8 Q; x: `4 Z
  void stop()( W. _  L5 m, D  O& W
  {) Y) m8 [; @% R& y* g) r# |" G5 {
     sda=0; flash(); scl=1; flash(); sda=1; flash();
8 M# r9 C" X5 Z) `  }/ f/ U5 c1 T( I. d
  void writex(uchar j)1 R+ s6 H6 ?5 T
  {
. w% |9 S# f8 C* U5 ?* }     uchar i,temp;; _( C! r0 v8 Q6 H9 O: {
     temp=j;
, p* W5 o$ `$ s' F  k& N+ J     for (i=0;i<8;i++){  k9 {( J4 K. X0 O4 h
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; : D! H) g# `9 h% y6 G
  flash();/ H7 U. C5 b% l
     }
3 T! x6 R, |& y3 p     scl=0; flash(); sda=1; flash();+ J3 o7 p2 n% ]! S1 U% \' C5 _5 S$ \
  }& V( o& j) I8 f( ]: i2 T& y9 Z4 N
  uchar readx()
8 [/ t  p+ w; v* w7 F  {# g" Z& k, W- W9 I  z3 D( M
     uchar i,j,k=0;& t5 J8 h  J  m! z4 C1 O: Y5 q
     scl=0; flash(); sda=1;
/ k5 K2 r* x' Q8 X" b! X     for (i=0;i<8;i++){! X/ x; C- Q2 F) P* c* a$ _% Y
        flash(); scl=1; flash();; A1 _# D' y3 J# o
        if (sda==1) j=1;1 W8 I5 t1 ?9 f% X2 n
        else j=0;9 y! a4 R- j% }9 u% O* W+ w9 D2 ?" B4 ]
        k=(k<<1)|j; scl=0;
( B5 y2 @3 z& p6 J0 B7 m3 u# ?     }# H# x) q4 E" L! r+ l
     flash(); return(k);
5 m  ]  a/ n/ [9 g8 k  }  x' p1 J! Y7 h6 D5 X8 \" N6 ?: {
  void clock()
+ |" T( L: Z& f0 l# Z1 k1 u# h  {
0 p4 A% ?+ n0 _3 m6 u     uchar i=0;
/ _0 s4 E" v2 Q9 h) i7 Z6 f     scl=1; flash();: [" m: @2 G" v2 ~: A
     while ((sda==1)&&(i<255))i++;
  A6 D$ W- C4 Q4 O! `     scl=0; flash();; }! F8 j/ f  K$ w: `; U4 a7 s& i$ i
  }
7 K) H3 M' m" }" o1 }* c" h  i  uchar x24c02_read(uchar address)6 c7 U$ \7 w0 \# [$ K- n: k
  {
9 c8 |0 t7 y# q9 i- `+ N$ R     uchar i;0 g) @/ Q. i( L( t: Z" r( q  w$ \
     start(); writex(0xa0);6 G$ t1 J' n& z& y& h8 @; |" l
     clock(); writex(address);
+ w8 n6 w9 K8 P8 |     clock(); start();
& U) F9 m2 ~. E. x9 j     writex(0xa1); clock();) e9 m! \/ ?, o) ?
     i=readx(); stop();
/ n, s" V" R0 ?8 t/ h7 A) L     delay1(10);
8 t4 {' x* q! L* d' l4 Z( }     return(i);) a" Z5 p% N# D7 W- B  o
  }
: i& ^4 t( i8 w  void x24c02_write(uchar address,uchar info)
( _1 T3 N8 C0 D% v; I, G, X! u  {
9 h4 Z' u: O$ l; w& G( g6 F     EA=0;, w0 U9 G1 I0 a" f+ s
     start(); writex(0xa0);6 c* L3 L7 p3 L9 l( ]! P
     clock(); writex(address);
9 W  A# I  b7 N. a) b4 M8 @     clock(); writex(info);. {# x) K+ Q* c0 y, c
     clock(); stop();0 h$ }4 U5 ?' `4 G
     EA=1;, t8 r4 f/ ~3 U
     delay1(50);
6 v( {* Z" j6 c+ l' D3 [' i/ T$ X  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
4 @8 N0 x8 T2 C! R不过你想学好还是找本讲协议的书看一下5 \4 I# X6 N* }# o# g9 L9 {! H
I2C协议标准- W8 E; x' H9 K, @: _8 y+ U  k
I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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