QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 1775|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
8 X( w& R8 S) R( A% s  m, l: `# [" P# ^, r2 d
[ 本帖最后由 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的读写程序:$ E2 u! }/ V* l/ P( K+ u7 m4 }

6 y4 r3 G& d8 u4 \* b7 r  ^. `9 z/ Q5 h& F4 t
  #define uchar unsigned char: s8 v0 T/ a  J2 q- [
  #define uint unsigned int
& E$ C8 P( O9 B2 D9 F; p  #include <reg52.h>6 G. G1 y7 g' j9 B
  #include <stdio.h>
0 U! S/ c5 j7 e5 X  #include <absacc.h>5 C  S$ U5 }& P9 X2 m+ k! a  i9 ^
  sbit scl=P3^5;  //24c02 SCL  V- |6 Q( `# d. n
  sbit sda=P3^4;  //24c02 SDA
' r% v2 p' Q, Z, ?+ n, d* Q0 q  sbit DOG=P1^7;  //狗
2 S4 S9 Y; L( D; z/ @) P, L: g  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
9 P* c* S! t$ M4 a# r  G( g. B. q  void x24c02_write(uchar address,uchar info);  
6 c  C' u4 K' C8 L  //向24c02的address地址中写入一字节数据info
% w  Q' U. _+ q5 f! s7 O' ~% s# a  void x24c02_init();   //24c02初始化子程序
! Y$ f8 [2 U8 c& E9 Q  void delay1(uchar x);1 ]% `# m! D7 [) Y- n, }! i
  void flash();( ]* \5 @/ ~& F; s& f
  void x24c01_init();; i7 q+ {- E' B! r7 J) A
  void start();6 I: N% E* Q8 a6 B
  void stop();
: P1 X' x6 E( n# c4 I  void writex(uchar j);/ m; b5 c9 H: w: Y+ ^* W$ s
  uchar readx();8 h( l6 ^5 p8 n: e* H+ B) _/ w2 x! J! F
  void clock();9 k/ R9 A7 J$ m& }( }
  void delay1(uchar x)9 Z1 ]7 M# [/ V) S1 J9 Q+ W' J
  {) ]" {5 H  x( |3 E8 C$ N6 h
     uint i;
/ I; W: _* U. v1 O6 z1 z6 o- D) u/ D     for(i=0;i<x;i++);  V- C" J7 i3 \$ ]
     DOG=~DOG;
5 K' [/ C1 P# b6 \  }
0 k9 {5 x  [! q, L  void flash()
: v) S% \7 g2 f$ r  {
& [: V% b- y: @     uchar u;0 v7 a- J4 B, k+ a+ i
     DOG=~DOG;6 j9 F! g/ h4 u# N
  }8 ~7 R) {' J( l
  void x24c02_init()
0 }4 c( O7 P1 a: R# Q  {( g  K& g5 P. E; ^( `8 y
     scl=1; flash(); sda=1; flash();! }3 s! j: X& o- U4 \
  }: ]# M* w7 Q/ i0 U* F0 h
  void start()
& ?- ?, L- Z) D- _0 Q# z9 m: }  {$ K5 E" ~8 K  @* d; U7 u) j1 M; ~4 W% l
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();+ }) @* p! i- v! D8 _! ~; \/ j- m4 K
  }
. J$ O$ {2 E+ i3 E' R' `: r! C/ Q  void stop()1 D0 t/ Y/ e2 G7 @3 L
  {
7 f: g5 j& b3 G! Y8 c& W) H9 ]     sda=0; flash(); scl=1; flash(); sda=1; flash();/ N8 d  v8 N  M
  }' {* r' L0 ~- [) [& T) e8 T
  void writex(uchar j)+ P9 T* z  H' Z2 q+ T7 S
  {
8 z1 u. D" z8 B% p% d+ k# n     uchar i,temp;
4 T  X8 Q. T* {" Y3 e  M. H8 B; q     temp=j;
: i& v3 v) h- k$ U0 t     for (i=0;i<8;i++){2 t2 r4 y. Z5 m. ]
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; # d3 e7 h& v3 g) t& \) N" W
  flash();  k% O* O1 S, Z! o
     }
2 e/ `5 j- ~, x. [+ ~) k) {/ @* D     scl=0; flash(); sda=1; flash();
/ f' j! x% ]( K  }
& l0 K7 K& c2 z" e3 ^  uchar readx()
8 F! D( k# Q# M: J8 H6 O+ o: h  {
7 d" N, k6 ?7 b4 {0 N6 J2 g     uchar i,j,k=0;0 O( i. {# ?7 ]5 @4 l
     scl=0; flash(); sda=1;
  b% \$ }# y  D0 K" T     for (i=0;i<8;i++){
) E* V- O% ?/ Q        flash(); scl=1; flash();
. H  p% \) ~  b% X& Q7 B  ?5 P        if (sda==1) j=1;
* i1 I6 l- [, x, i; J1 j        else j=0;- ^' g( b; m, [3 D
        k=(k<<1)|j; scl=0;
& F4 I8 j& `& P  @: z+ r: R     }2 ?7 B. z3 Y  v$ ~- }6 E
     flash(); return(k);& H% \0 ^/ g6 z; q1 P2 L' ]0 C- `
  }7 L: H1 l% N/ l
  void clock()* s1 b7 _( u" J2 v1 ^$ S* r& c
  {
4 E: n" H7 t& A8 ?8 H6 L0 e4 ~, {     uchar i=0;
4 }* D# c% m' U, _     scl=1; flash();
1 a* Q" N# s4 O     while ((sda==1)&&(i<255))i++;! I6 [$ o' W, S0 ?* g$ f; m
     scl=0; flash();
, x3 c  m! ^- v5 i( }8 S) o4 E' D  }, G4 V4 E6 i) v; N
  uchar x24c02_read(uchar address): y& I+ L; z# y+ o
  {8 b8 {, _/ F7 U9 i) ]
     uchar i;
" d7 }1 A4 ~- o% Y( [9 ?     start(); writex(0xa0);
. ~, [, r  W" R     clock(); writex(address);3 J, j$ f" |: N: ]$ @. |
     clock(); start();  \, G) r- Z, ~) e$ N, Y. p0 s
     writex(0xa1); clock();( i* M& @! V0 m" G5 @
     i=readx(); stop();
7 d+ h( [' g% E" U& G     delay1(10);
% s+ X4 }3 E/ C! F& ]$ J     return(i);
4 V# ^9 }% S) i  b  }
4 h" L, U5 Z& K7 I3 C' K  void x24c02_write(uchar address,uchar info)' F% E! I# _5 H: B
  {
  E. V2 }, V- z3 c. R     EA=0;
" u% \0 n- y1 {     start(); writex(0xa0);  S- r9 {3 n9 G1 ?( k& m1 L1 ^; ?* y7 P# M
     clock(); writex(address);
& O1 S; x& L9 {& S  a1 o     clock(); writex(info);! F. z+ _. T+ C# ]5 E
     clock(); stop();
1 r# Q& i: \) O% ~* ~9 Q     EA=1;
" w7 R# T3 ]5 U3 u3 j     delay1(50);
0 S& h: x" i8 l5 h$ ]9 }  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。6 ?  J; Q* x' H
不过你想学好还是找本讲协议的书看一下
1 g0 w* O7 @8 q! N' b7 VI2C协议标准; W' \% l) V+ u4 ?3 }
I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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