QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
7 [" V7 T; t" G$ j4 `
$ d, g3 ]" I5 A* h/ A( P[ 本帖最后由 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的读写程序:
* b& R  }) ^! I6 y
. B: N1 a* I! ^
6 s9 T; Q; @5 P& e* K  #define uchar unsigned char. z$ \' }- h5 F% m
  #define uint unsigned int
4 \9 F  B+ E) `. \5 M/ `* c( n' d! v  #include <reg52.h>+ l* K1 F, X* \2 s
  #include <stdio.h>2 E9 W. h0 [7 Z
  #include <absacc.h>
: p/ _) t. I6 l4 w  sbit scl=P3^5;  //24c02 SCL
, s' P# x. ^: q: u$ [1 J( ~  sbit sda=P3^4;  //24c02 SDA
) O- Z" b! G) d( o( @  sbit DOG=P1^7;  //狗6 q8 Y! s% @& {8 M" v
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据! `$ {6 [, e0 W: M$ J8 L7 u! c
  void x24c02_write(uchar address,uchar info);  
+ v; v7 f8 z9 E  //向24c02的address地址中写入一字节数据info
6 E3 Y" e) L* }  void x24c02_init();   //24c02初始化子程序. H7 h0 r5 k9 h7 t$ L2 _' A4 N
  void delay1(uchar x);
5 |, b$ j) _4 a1 |0 t  void flash();
' N: s- c* L$ ~3 _' }/ t  void x24c01_init();2 F# m) p& r8 O) F  g8 T4 E
  void start();
3 G  r- [" N! {; t# m$ P+ I  void stop();- d) J- ]. A: P: h* X6 f
  void writex(uchar j);
4 X1 Z0 B# [  _  }+ K1 q7 q( x  uchar readx();( U1 F8 F. J- H1 c7 |( [) \
  void clock();/ X; b# U5 |6 i6 c6 N
  void delay1(uchar x)' Y( T  ~" o7 ~/ M
  {" }4 S* `! Y/ S8 b
     uint i;0 a; e8 V% H. a0 R6 s9 {: I
     for(i=0;i<x;i++);1 T# O* [. U& ]% [/ I: p+ ?
     DOG=~DOG;/ O& J$ ?1 P! b* j. h
  }
/ u* p2 G7 R( N  J3 b. X/ g  void flash()
( S7 V* O: H8 D+ [$ p  {
8 a  a( y+ v- n) a2 f     uchar u;
2 ?  i1 H+ M' }     DOG=~DOG;
, n1 N8 G$ Q9 [* e1 B" B  }1 p5 S! j" Y$ V8 S! m
  void x24c02_init()" h' ~, E7 H6 J
  {  w- K. C: e2 O! Y
     scl=1; flash(); sda=1; flash();  W  D6 x/ U* g$ X
  }
$ g. _% F3 G/ s0 U2 b  void start()" F+ ]4 y1 g+ [
  {2 S- U& l; [7 g' k" r
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
$ W& e# \  {, ?& n) j, q+ K* c  }# @! [0 U/ l" g
  void stop()
- C& @. g2 H* C/ y; y7 N  {
* i' F* I1 I' Z     sda=0; flash(); scl=1; flash(); sda=1; flash();3 a  V0 D7 B0 I& [5 x
  }- Q2 @6 V% t$ h
  void writex(uchar j)
0 Z* N, @; h6 b+ ^9 y. U( N+ Q  {
( S7 R0 {/ L' z2 Q     uchar i,temp;
# L# ?6 l: y8 u     temp=j;
9 @* J* m/ R0 u' O2 ~% `3 g     for (i=0;i<8;i++){# q, q- p9 N+ V3 ~8 y& x" b
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; / r& Q* E' G# F( e
  flash();" ?. N4 Z0 a9 ]# O! E9 J( U! d  n
     }8 @& B9 N5 \& A8 q. W" A: W0 l: e
     scl=0; flash(); sda=1; flash();
# x0 N- K0 a; [  i' x  }4 j9 j4 B/ T+ q( Z' N9 |& R
  uchar readx(): t) X% u: @! L  R* M
  {/ k; {' q& w8 l/ {3 R1 v% j2 P8 w
     uchar i,j,k=0;! {- O: ~; e% B( u! g
     scl=0; flash(); sda=1;0 r  v) W! k; j2 k1 G9 y* x; [% ]
     for (i=0;i<8;i++){0 ~+ A! A% C7 E3 e5 H8 ?
        flash(); scl=1; flash();5 F$ F& N- x) z# [9 c! U
        if (sda==1) j=1;
! R1 n$ ~6 C9 C+ T        else j=0;
% l+ R8 W- M' s        k=(k<<1)|j; scl=0;1 x; P0 A* r8 b8 B7 }0 E1 Z
     }, \8 L4 ^2 \- z8 T
     flash(); return(k);
( {2 Q7 g0 q4 o9 ~$ V7 ]* Z  }
, ^' s) f6 D: u& [  void clock()
9 P" n* i2 F5 U+ O9 n- x$ H& Z" c  {
5 e$ D9 O$ r/ ]9 B" u     uchar i=0;& `9 o0 g! S1 u5 K
     scl=1; flash();: Y. m3 m  X3 Q, S
     while ((sda==1)&&(i<255))i++;. B1 @$ y' P% M. b2 j, u, b
     scl=0; flash();
4 F$ o: Z9 s6 `5 m4 p" Z- I  }
! `3 ^! N# {. |+ E" }& q, l  uchar x24c02_read(uchar address)
, @, j( a, f, V" k  {% `2 l: Y  V5 S( V% K
     uchar i;
- [) A' a/ F' |$ J  K4 D, w     start(); writex(0xa0);
, \. @/ c5 y& Q( F3 p2 }     clock(); writex(address);  u1 w7 u4 V8 e% S# ^
     clock(); start();6 n! v" N, {# E/ S
     writex(0xa1); clock();
% V1 \; o6 ]; x2 r* _! r     i=readx(); stop();
- \3 e7 J5 E3 l1 Y% x     delay1(10);
0 h/ ]( y$ S& I# n: S7 q     return(i);
9 W) F! X9 R: }* M: }; V4 O  }% b5 j* w/ ]- z9 i  j6 B# u
  void x24c02_write(uchar address,uchar info)8 p6 ?4 ]% W( O3 A& C9 L3 d4 z
  {
$ Q* q7 B  H& [1 N+ J( x1 T     EA=0;0 G) l  p% R9 t0 Y
     start(); writex(0xa0);/ l1 |+ y$ [0 p  t7 Z$ M1 g! P
     clock(); writex(address);; k3 v# \/ `! f$ w7 k5 [( ~/ `5 R
     clock(); writex(info);: l, ~* m- G' h3 y& a# E* Q
     clock(); stop();  P+ |2 a! p/ v  q6 K! _) h
     EA=1;
* a2 B+ z; }( y     delay1(50);
1 j1 g! d" Q. e4 a  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
! N( y4 ~( e# D9 l4 l6 i不过你想学好还是找本讲协议的书看一下) p7 E% `7 \' l; U! Y) ^5 {0 u5 x7 @
I2C协议标准
  h. [- W5 j5 N+ h; Z* _3 P' | I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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