QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢. @$ G, q1 V" H+ P: z; d
2 P6 G% x" D* V8 K$ V- t6 ^
[ 本帖最后由 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的读写程序:; @7 e  X% P  Z3 u1 Z  I/ ^( V

. B1 i. q3 ?+ C3 a+ U& H
# \8 ~1 p4 A! q7 L6 d3 h7 Q" ^  #define uchar unsigned char
& p! `7 G& J7 q# }3 M  #define uint unsigned int$ W3 h/ }, g: u! G, z6 s
  #include <reg52.h>7 _; g8 H$ v! I( K$ Y9 B
  #include <stdio.h>: n+ R- \6 L4 ^3 Z4 i5 [3 \
  #include <absacc.h>7 ~8 E$ W2 c3 c. Z% Z4 [$ T5 E' \
  sbit scl=P3^5;  //24c02 SCL
7 Y: E2 T5 C. n1 V2 L  sbit sda=P3^4;  //24c02 SDA4 Y4 e+ z" X9 \, i5 M
  sbit DOG=P1^7;  //狗
, Z- \- Q1 Q% D: \/ p8 V" \  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
, o( m; A6 y" i6 c  void x24c02_write(uchar address,uchar info);  
: W9 Z  a; h% u8 j  //向24c02的address地址中写入一字节数据info+ P( F: _0 T% ~/ d" ^& F4 ?
  void x24c02_init();   //24c02初始化子程序( ]* @" @/ S, {- G, c1 j" c" Q
  void delay1(uchar x);# K2 O8 \* G& ?4 w
  void flash();
) G  h6 D" P) @* P. b4 b, y  void x24c01_init();
1 D. W' Z8 h- f( O3 I5 i  void start();7 s% Z1 B' _7 k2 r) ]4 f3 @$ b
  void stop();
5 ^+ `! Y' p2 u) ~3 a" ?3 x" O+ y1 ?  void writex(uchar j);
  L6 n+ F: J  {  uchar readx();
8 Z! j$ ^2 U& W8 Z& b) m) a7 n  void clock();& Y. _; S& t1 j* l3 W# i
  void delay1(uchar x)
0 e. B3 B5 C% p3 _# J  {
" j" ?0 z& v3 h& l' x9 w     uint i;
! v: H: ~" X& e: B     for(i=0;i<x;i++);
& I" y) C- a2 }& R- I- f5 e     DOG=~DOG;# |9 J9 D. U: _' a6 `& ?
  }
+ B$ W4 d# |% V  B! U6 O  void flash()% B- E$ U  i/ N) x/ Z
  {
4 B4 N( o2 T+ ~) A     uchar u;
) ^4 B% e1 e3 I" Q8 ]# D/ `: A     DOG=~DOG;
) N; g, a' r9 M0 h/ H( X2 q  }
! D+ H# ]) ~$ ?0 x7 o* ~1 _. P% S  void x24c02_init()* y2 h) d% {, T( `& T8 }; L' T/ I
  {
8 i+ L+ c% F/ {1 x0 |! Q8 g     scl=1; flash(); sda=1; flash();
" l7 |0 ~( m0 A  }' f8 D+ k7 r2 M- x
  void start()
% }6 N0 e1 L0 g% \& z$ U. [  {# Q. a2 o, g' `: \8 A
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();! H' X6 D' K, K+ n" K7 ^
  }$ S2 l" X) q1 I2 N
  void stop()
' p& E3 m+ q3 I# g- [: T: F8 }  {
6 T* A( T# s# _, m0 T     sda=0; flash(); scl=1; flash(); sda=1; flash();
: [( t/ y% |- {7 x- A  }
0 |1 R& m: _; i9 L6 u# |  void writex(uchar j)+ C6 \7 f# o; z, A5 U! K2 ^
  {
7 X7 h  F2 R# _+ S) o     uchar i,temp;! Q) j( B( J; f* _) R0 P  d+ V0 {
     temp=j;- {" ]% B& ?: x4 \% C
     for (i=0;i<8;i++){
  j7 u1 C4 i! e- ~7 v0 s        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; ! C9 ?9 l: B2 i' D. Q
  flash();
5 C; y& k* w+ u. d     }0 |3 u! K3 A  |5 f: X
     scl=0; flash(); sda=1; flash();
+ C0 e' n7 z, d1 x( a5 A; M  }
; W$ `5 Y7 J( L. r2 ^1 f  uchar readx()
1 j7 Z1 {9 B1 Z% b  {, j$ f7 p' H8 X0 o; o
     uchar i,j,k=0;
7 f2 B+ n/ E7 a! Z7 e$ g     scl=0; flash(); sda=1;" P/ j% _. L1 v2 [; ^' y
     for (i=0;i<8;i++){% Y: V* Z. _& x5 p
        flash(); scl=1; flash();
& q1 N# J0 L( N* {& k! h        if (sda==1) j=1;+ i. x" _# V/ R: U7 S
        else j=0;, Z9 F, V( B; ~
        k=(k<<1)|j; scl=0;' v, L! T. m' J, j* b
     }+ C% m3 B$ |+ Q+ s# U7 ]
     flash(); return(k);: {  L: h( e* A2 f- k% Y7 a  q
  }
4 \7 j) \4 ?! O8 A& M  void clock()& j8 Q' t* k7 r+ h  k& g- n6 t8 i
  {
! N! n& S% \1 m. n6 L     uchar i=0;
% T; U0 B  B) g9 P8 y# Z     scl=1; flash();
, m9 L1 O" b( W     while ((sda==1)&&(i<255))i++;+ [2 H1 q  `, N3 h
     scl=0; flash();
. N% o  B, V' m7 _3 n" t  }
3 ~1 k& g: h7 k' S- h) s  e% g  uchar x24c02_read(uchar address)
7 s; s8 Y& N( k+ R# i1 P  {' ]9 \8 z2 h$ b+ ^: i
     uchar i;6 P7 z7 u3 o0 g3 H- d# e4 O
     start(); writex(0xa0);
. i/ p# ?4 s3 h1 i1 e     clock(); writex(address);
0 G" d2 X, B( H  O- ~6 n2 R     clock(); start();7 @+ r0 ]5 p$ `  _' w6 G" t/ r
     writex(0xa1); clock();4 o; E' p1 M  ?' |, k6 N. X3 P& H* u
     i=readx(); stop();- F  x; E! K" J5 t
     delay1(10);  ?; I% z, {* x% l
     return(i);& I) M6 _# e3 _7 c4 T
  }
+ O8 H' u; L4 u/ J  void x24c02_write(uchar address,uchar info)' M+ b# @" t" w; V: I
  {
: m  Z( _; b, ]  Z2 @5 p, l     EA=0;! o7 N" ?- x8 W& h
     start(); writex(0xa0);: ?: x# B& ?; N
     clock(); writex(address);
9 v$ [5 [* f3 ]9 Q& p     clock(); writex(info);+ p/ w* W, X9 Q' K
     clock(); stop();. {/ y  o! I. o3 }( q. d1 s
     EA=1;
( u3 e3 q3 [6 j0 T/ g- P# Q     delay1(50);
3 S% a  Y$ Z" \: V+ H  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
2 L6 }7 H5 N" x6 J% X: `' |不过你想学好还是找本讲协议的书看一下
, T( W! L9 B6 J  xI2C协议标准1 t2 u& B) w. ^, l% f6 o1 x- V$ ]
I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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