QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢  B& i( c4 ?# J3 D! _% E3 G5 b
2 ]# d' |8 V- s' N# c/ @( t
[ 本帖最后由 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的读写程序:9 ?9 V6 j9 I1 ?: v8 [

- @4 H% x; W! v. F$ ~  i4 w4 Q+ x
* s+ ?- C2 k: A  o% K  #define uchar unsigned char# e6 B6 t4 ?/ M% @% M* w. ^" F
  #define uint unsigned int
' u% g; a5 @( r) D5 {* F  #include <reg52.h>
2 P$ R9 w8 F3 n/ O  #include <stdio.h>
" s1 V0 V  \5 W2 W! C  #include <absacc.h>) S5 d( y  K0 ^
  sbit scl=P3^5;  //24c02 SCL1 }: s! Y* F0 B# @2 I# f
  sbit sda=P3^4;  //24c02 SDA& X0 S) w' X( `2 W" ^
  sbit DOG=P1^7;  //狗
) _$ _4 f' J3 K- H7 @  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
2 e( C( o9 m6 }" A  void x24c02_write(uchar address,uchar info);  6 E1 q+ F. e. x6 P
  //向24c02的address地址中写入一字节数据info
+ y3 w/ \) q; F  E* T1 R' V  void x24c02_init();   //24c02初始化子程序8 B# a9 Y6 {7 G- ?
  void delay1(uchar x);4 M* `& Q  ]1 b5 G
  void flash();
4 ]" ?* A9 {8 E1 |3 O  void x24c01_init();: ^9 O3 T& n+ H5 _) ^
  void start();3 L% k2 y/ n) F( N) X! L
  void stop();
1 Z( D# F% K! t: J! [* G  void writex(uchar j);
6 q$ m& H8 M' x: {  uchar readx();
4 c0 ^* _; |" @, V  void clock();. i5 }$ i4 J, L( d
  void delay1(uchar x)
9 q/ n0 I- _5 ]2 a6 p) I  {. h6 U% M& |8 u2 [7 b# C
     uint i;
1 X* X0 `9 T" u2 T     for(i=0;i<x;i++);7 U' O7 t4 r0 A5 y
     DOG=~DOG;4 I* L* P* r6 T' [) k2 f9 V
  }
$ U1 H+ X1 \2 X2 `) |& f  void flash()
* e# L/ K& C( n% P  {4 ]+ F2 W2 [" B& g: ^# B
     uchar u;
7 \% l' T) ]- X! _     DOG=~DOG;
' f9 S, d2 h7 T% B1 G  }
9 q+ [4 {3 z, o% B  void x24c02_init()
" t; `! z- C- t8 `3 T- {  {  C- C9 D# X& ?' v& c
     scl=1; flash(); sda=1; flash();* Q7 ]$ t5 _, k0 v( i
  }) [  w, h* [7 n. G3 Y
  void start()
; n: K: H4 Z1 Z$ }) L  {
5 f+ x7 x, ^5 u3 [     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
. P* }: U/ I4 a; A# S6 n  }
  F* a( Q' V- _' O& v  void stop()9 z- V0 D- t# H  M  }3 j  F) [
  {
) ^5 z0 G- u6 i( {) S     sda=0; flash(); scl=1; flash(); sda=1; flash();# \+ ~& }% N4 Q5 ^. N
  }/ |4 C2 X4 _; y2 G+ _
  void writex(uchar j)
& B4 ]2 b9 \) P: ]  {+ @& o6 F  E( U6 F  [) o
     uchar i,temp;
; c7 R) e& F' O: k7 w" P3 b0 U0 X7 u     temp=j;$ c( E  v/ U7 H7 @  Y
     for (i=0;i<8;i++){
) v0 I) O3 O# N+ c5 h        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; 8 j) a1 ^  X( l/ X4 W3 o
  flash();0 C1 B# B- L7 E" ^
     }
8 K4 U( B! I) v; B; y8 k     scl=0; flash(); sda=1; flash();
( e- K, a: y# |' u  }# {1 J7 Y# a9 T0 _, \  l
  uchar readx()
3 `& ?% B; c7 ]  {
" q5 a- P$ c9 I7 I: W. q0 v# t3 v     uchar i,j,k=0;
. C* }. F) A/ j/ z# ?7 q& h! U     scl=0; flash(); sda=1;' Z6 D0 [% N4 \0 T
     for (i=0;i<8;i++){
  F! E! t3 Q. J- u& s: Q$ S        flash(); scl=1; flash();
! k3 W# b4 q( U/ z5 P        if (sda==1) j=1;
- D% T3 S  h2 U1 a! ]        else j=0;
9 {0 L  z' p% I) }        k=(k<<1)|j; scl=0;
! c2 H5 w8 K9 Z5 M# `0 |     }
2 m; @  A; X9 ^- ~# i     flash(); return(k);
) c3 D  f/ y! \: ~- W% d  }/ E% P# }' ^. ^
  void clock()
$ J2 e9 B% s" l  R1 _4 q$ p  {
' ]& k6 E% i2 F) h" k, f  v) B     uchar i=0;, k  Y) D5 B7 G& p" n
     scl=1; flash();
& n5 ]* k, l+ G     while ((sda==1)&&(i<255))i++;+ Q0 f3 Q; M, y9 h% S* x; ~( z, B
     scl=0; flash();
1 f% V1 B$ @5 x  D5 k) p  }) k2 E( f5 A4 J. h
  uchar x24c02_read(uchar address)/ w* K! U5 n4 ?" ]4 S+ i  G) z
  {% b) |3 w! x& b/ X  n  I/ f
     uchar i;
# K6 v. E9 Q* ~# C4 ^" @     start(); writex(0xa0);
& b( b( q: q( |& U# K$ K     clock(); writex(address);7 L- U2 d5 u$ A# H& w0 Q( e$ x6 Z
     clock(); start();
, K( l1 q# X4 Y& _0 I     writex(0xa1); clock();% O, i* |6 `; ]' w% A( M0 O1 i
     i=readx(); stop();
1 {, i# v$ v( F4 |' D! Q% q8 Y4 G     delay1(10);
; c$ X  D% [- m; |4 d4 S7 @" f     return(i);. F7 N  [$ h; z
  }
( Q9 o/ V- V! B; T  void x24c02_write(uchar address,uchar info)+ t9 q; c- k2 [$ |! ], }5 T
  {
+ @( w  D" X4 q& ]3 x, b1 [     EA=0;
) b: N, H  T- J     start(); writex(0xa0);
4 S# J' r) _4 U* F4 N9 C0 \0 {( D     clock(); writex(address);7 E2 {' l, S! _- D! }! [
     clock(); writex(info);
! B0 b5 Q& I! U- \, t5 N* I. X     clock(); stop();4 L2 ^& L: |' V
     EA=1;1 K2 ~' }0 o& I1 S1 b! E
     delay1(50);3 s' R4 _7 {2 T4 Q9 b
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。5 ^& v6 B+ }' Q: D0 d! g% V/ H6 T
不过你想学好还是找本讲协议的书看一下- C* C# y# A# d; J4 v
I2C协议标准8 S' M, H, `  h/ S8 x3 e
I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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