QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢6 V% {/ v6 m  l/ [; Z
3 B' l) b3 c, R
[ 本帖最后由 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的读写程序:; \3 o2 L3 t+ J0 k; K3 E

9 r( ]# T: Q1 k' b+ F
1 j  \: _0 s1 e4 i- j  #define uchar unsigned char
0 e" ?4 N1 q+ B) {) O) t% N  #define uint unsigned int, e! `' `& b9 o0 o. A
  #include <reg52.h>. ^: n4 j( A, l, l$ f5 V6 y
  #include <stdio.h>
+ H$ U" t' L; @) p$ d" i" a  o  #include <absacc.h>
  |* P* {# Q; M9 z" A  sbit scl=P3^5;  //24c02 SCL
3 ?+ D# K0 J0 ^! P7 O/ U" y" m3 q  sbit sda=P3^4;  //24c02 SDA( P4 M' q! W* S" D* U4 J: S- U
  sbit DOG=P1^7;  //狗
  ^4 Z& |! n+ W  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
" C6 D. n( p6 D  void x24c02_write(uchar address,uchar info);  ! g* ^; S0 D7 L6 [
  //向24c02的address地址中写入一字节数据info
& D8 q. o0 \6 R  void x24c02_init();   //24c02初始化子程序
( E# M6 P) ]: u9 p/ N6 R& H; N  void delay1(uchar x);
- D4 Q) \) H" F  void flash();
$ e$ E) V4 f3 Q7 _: f$ X) f4 P  void x24c01_init();, q2 a3 a" v3 c7 D- z2 X* O$ \, g! z
  void start();! h" k, @+ r: j8 i' ~
  void stop();! q6 o- b  X8 _* K1 `
  void writex(uchar j);' v, o. p8 ?9 K% ]
  uchar readx();
% R7 A$ {% o& ^/ j  void clock();7 O: b* \4 x7 b9 U4 S8 V* \
  void delay1(uchar x)8 Z) s3 N* x7 Q# j$ P+ I0 }
  {
3 e/ p$ j  K+ V- ]0 x$ ]     uint i;; ], G4 s( N3 c9 {# S
     for(i=0;i<x;i++);
  W, q7 w2 `: O  h     DOG=~DOG;+ k  j- V2 N. h# K. S, H' ^" b
  }
  |' D- I5 n% {$ ]( w  void flash()
- y: ^- j; v6 A' v  {4 L4 d. J6 Q! b8 ^$ F
     uchar u;
$ \% L- W2 ?% b1 M: x2 b5 V. `" t     DOG=~DOG;
" h  _9 B' c5 E0 B" Y* G  }# w( }( x* m% r3 G; @3 p% T9 }# h
  void x24c02_init()
! c, Z' c* X' `  {
; _+ t. ^: @8 X+ j     scl=1; flash(); sda=1; flash();0 x8 h; O/ j+ y' s
  }
& \. u; S; a  k  void start()9 j8 n: C: `1 ~9 }5 r
  {* p% g/ W1 g8 U! s' V" f; Z; [( T' x
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
+ W7 ]- d  `+ I. R1 P+ B/ F; ?  }
# q1 P' Y& x. r! B; R$ U7 {  void stop()
* f% y  c. x" a! q7 Y  {
" o8 A& ~) X9 [/ `* ]     sda=0; flash(); scl=1; flash(); sda=1; flash();& m1 O  K1 D, z) H) c
  }6 G1 @* @" x4 X* T
  void writex(uchar j)
& R7 ]" y) R& `4 c: ?2 P$ B  {
% f! a% _# ]& g4 K5 D9 s     uchar i,temp;, I3 J$ _) F, w( M( X( j* d
     temp=j;+ l! k8 S/ v( u+ g" m- L
     for (i=0;i<8;i++){
9 [8 M2 W* |  e# i- n0 g( l        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1;
9 R& n% h* K' F; Y& @5 ^  flash();
6 u& n& P; _6 A+ I# h, h- y     }
. n# c; \6 m: {, ~, L     scl=0; flash(); sda=1; flash();0 D5 w! }8 L/ R* O8 ^
  }3 a2 Y1 _5 x6 Z( O
  uchar readx()
- Z2 M( w4 J; U  @1 J  {9 ]# S+ ?9 ^; r, S. c
     uchar i,j,k=0;
, o8 G8 ]9 S4 o$ C1 S     scl=0; flash(); sda=1;
8 ?/ l7 }& b" }9 b3 B0 I! x2 ?     for (i=0;i<8;i++){
% l( q. `, K( R' `6 y        flash(); scl=1; flash();# G* o- f9 [! q
        if (sda==1) j=1;! _4 U: U- H0 I, r
        else j=0;
2 @7 D. j5 h4 w" P6 c        k=(k<<1)|j; scl=0;
1 d  D/ |" W2 e0 d5 q% `- K     }1 j" Z- _7 u+ s) Q
     flash(); return(k);1 o7 h% w* s" S* \
  }
/ [  t* s* G' z) H, R* i' V  void clock()9 c/ [! L/ Z# \4 O
  {
9 {6 q; [/ [. H! Z/ q1 Q* W     uchar i=0;1 O1 I; w/ ]8 Y8 x  L
     scl=1; flash();
0 @* M* {" X2 E     while ((sda==1)&&(i<255))i++;
: Q' T, M8 s* K0 y* r' S3 c+ D( T     scl=0; flash();
0 s* R: t( P( K4 s* H  m8 T& q0 x  }/ H" h+ G# w/ \1 u/ u& a
  uchar x24c02_read(uchar address)
& p9 o, _$ F" W$ D2 T  {& w& u6 V$ C( Y# @! Y% [* T
     uchar i;
& D% f. x2 P' ], l     start(); writex(0xa0);# W. N1 V/ l8 m2 z, z" ]
     clock(); writex(address);% P8 E4 y% R, K  E
     clock(); start();
8 `5 ?) |: B8 r& t3 S6 l     writex(0xa1); clock();$ [0 Q' a5 Y$ |
     i=readx(); stop();! L1 u+ x+ N& B! d
     delay1(10);: |0 u9 m& x) A/ B) x, Y
     return(i);& k: f1 r1 r2 O! M4 i! d- E# F
  }7 k  h$ G( S6 l6 E+ B% d) g# \* L4 @, E
  void x24c02_write(uchar address,uchar info)
" g% Q' i+ i9 T% Q, X+ W  {
' K6 N3 P8 }9 r" o' o4 Z     EA=0;; a- G4 Z# U/ `
     start(); writex(0xa0);
/ g4 E' c. o5 A# L     clock(); writex(address);/ _0 E& t* T  ?5 v9 u
     clock(); writex(info);6 z' H* B* J4 w2 O
     clock(); stop();
' O( L2 H- B1 M" \6 c. S5 y     EA=1;& [5 ]3 \; X4 L2 v, \' r, B! _
     delay1(50);
3 u( K) ~& e# b$ f! d8 V  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
9 y) Z9 `8 V0 n7 p: k不过你想学好还是找本讲协议的书看一下. |) V& O0 c; V+ K. g: r  f) W
I2C协议标准
+ ]- A+ }, f, |$ r' ^2 Y I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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