QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
20小时前
查看: 1685|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢5 F2 N' a4 q" z2 f; c0 N, h$ C
5 o& ^5 ^2 V( B! d( H  ]; \
[ 本帖最后由 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的读写程序:: V& L9 Y7 Z8 d7 [7 D; f3 L. Y

9 u3 Y/ ^9 V/ p/ {* ]/ J6 E5 }- E% h4 b8 r. l+ l& h8 H% D  C
  #define uchar unsigned char
+ B3 U0 s. ~) x, d  k  #define uint unsigned int" i8 \; C" x  `# D; R; V
  #include <reg52.h>
( B7 L$ {! z. t6 t6 r  #include <stdio.h>& W) Y  ]( F6 _6 y! r% v. \
  #include <absacc.h>- ^# m; C6 ?/ C2 \
  sbit scl=P3^5;  //24c02 SCL
8 N! R9 @: d2 X" P, v& k' E) ?  sbit sda=P3^4;  //24c02 SDA
1 Z. _) I* P4 e$ I9 o  sbit DOG=P1^7;  //狗* D, Z, @) X3 w4 q, V0 q) f# {
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
- g2 f5 _% J# p! J, G# T  void x24c02_write(uchar address,uchar info);  9 P6 \4 r9 P, n5 Z  C+ N4 M+ c0 x
  //向24c02的address地址中写入一字节数据info1 G9 ~- m6 g) I4 a' q8 v# J
  void x24c02_init();   //24c02初始化子程序6 V7 U5 P, X2 u8 \% J/ y
  void delay1(uchar x);& I2 f1 G1 R/ t! p) y, H3 e$ G5 p
  void flash();
" l# ~. M5 J2 p- ~9 D. \$ X; w  void x24c01_init();% ~. O, X( j  \) E1 Q$ P% l
  void start();
/ y* m+ ?' L8 M& l2 g+ j* V% u$ L  void stop();- R' q1 J* G% ?3 P; G$ |
  void writex(uchar j);
5 b  g6 k2 r3 V  uchar readx();
) o. p( H& q7 [* ~  void clock();# V. \7 b/ N; Y8 O: j. p$ D4 I
  void delay1(uchar x)
) k- n+ `* r: O: Z+ K! i2 F+ _  {4 W" u; n3 ]! J3 v9 H" J3 `% o4 L
     uint i;
# W8 O9 O# o( i, D$ s# \- ^- a7 F/ M     for(i=0;i<x;i++);
2 G# o+ Z' z# U6 N$ G     DOG=~DOG;( S5 R9 A* T! i
  }, u+ M% x( X9 X- H8 F- F
  void flash()
, N( {3 P+ P0 T  {
- c) t1 {& z: L- o     uchar u;0 k9 r; m: J1 i( W7 `4 }7 W
     DOG=~DOG;+ n6 q. m" s) e1 i/ t4 W
  }
- d1 M5 |; Q( O7 v  void x24c02_init()6 }$ |- v& z7 i) s5 K; c* _% a6 A
  {( F. w; M9 s! E# L
     scl=1; flash(); sda=1; flash();  z# y8 V" Q9 i3 X& M
  }
, t3 _! _# O, b' J  void start()
2 C" y0 I9 Q, {6 B+ e" l. a  {0 {$ O2 T  L: m. v4 E4 k0 ?* _
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
8 [% o* |. H$ A7 D  |2 N# y) e/ i: }  }# _$ \! }0 U0 ^
  void stop()2 {& d! w/ X& _) E3 g
  {/ _$ R+ M7 f9 l3 h% k
     sda=0; flash(); scl=1; flash(); sda=1; flash();* `; Y! ?5 h8 d
  }9 @" ^/ W% f% p9 x* |
  void writex(uchar j)
7 s% k" L! u; z9 H  {
, n. h8 `  @: O- B5 h     uchar i,temp;! H9 `1 S1 [5 t( b9 D" a
     temp=j;
+ `2 ]- y+ c0 ]4 _% x) ]! ^     for (i=0;i<8;i++){
/ o' \2 ~9 L9 o& }: W4 {" g. h5 j% O4 ]% ^        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; 5 A4 ~7 u& a+ [+ W
  flash();9 R$ N: ^4 I" x7 @3 X* D) U
     }
. F7 {! k% E' e" b. E     scl=0; flash(); sda=1; flash();
; k& @' Y0 g; r  }" {9 F' C4 _+ L" m! I/ H
  uchar readx()
; D. O) [) w- ]5 M) v( @4 h6 b7 @  {. P1 _" p# S: b: ^0 H
     uchar i,j,k=0;) I+ C' |. [8 G+ ~& e
     scl=0; flash(); sda=1;
; q0 D1 C( F) }: O     for (i=0;i<8;i++){+ C, a& H7 ^8 P+ W. |
        flash(); scl=1; flash();
9 ?( N8 ^0 y5 x        if (sda==1) j=1;; H, e0 f0 ^) h# q
        else j=0;& T. K) }5 t& w, Q
        k=(k<<1)|j; scl=0;
, @9 i3 P. Q8 I1 K& k; W     }
8 z; p# r4 i; D7 R7 w& Q# V. m     flash(); return(k);' u8 @8 T( l  o. M2 b8 i' Q& t8 M2 f
  }
: q! i* y& u3 b- R+ Q3 y6 \+ r  void clock()% L# f) z- O, @
  {
" B8 z& u2 k: K. w- m% D     uchar i=0;  C  _+ n4 f+ G
     scl=1; flash();
4 z; m8 G2 {" j     while ((sda==1)&&(i<255))i++;
) ^$ B3 L! V+ F6 t+ u1 a) V; C     scl=0; flash();
7 }4 o5 ]" P( P( Y# z( v5 s  }. w+ Q& b6 i$ r' E
  uchar x24c02_read(uchar address)
% p. {& [5 K/ ]9 C5 \4 b; R' }& {  h  {* p9 }' ^& W# _
     uchar i;) G, ]9 [) [2 B; a" |
     start(); writex(0xa0);
: k0 D  E9 c7 P     clock(); writex(address);" O# x$ J/ e( {: E9 t7 b
     clock(); start();7 n, [. y' @( W
     writex(0xa1); clock();
& z) O% O6 k* q/ s& i* D     i=readx(); stop();
7 i2 ~, @& B+ B" g0 j     delay1(10);
, g9 R+ L$ M/ ]+ \+ `4 U     return(i);
8 v# f6 w& K. s  }& i5 Q+ K& B1 j0 N; C$ f
  void x24c02_write(uchar address,uchar info)! z0 c# {+ `/ e( F3 o& [6 c" Z
  {
) c; b" Y( A. ^$ j% J     EA=0;
5 d! p' g: X1 b! O     start(); writex(0xa0);+ \( `: L5 n% |
     clock(); writex(address);
  F- M" x4 T1 @4 \  q4 W( y, a1 E$ A     clock(); writex(info);
, q. E7 `6 E$ D     clock(); stop();! B- \/ K3 K8 Q" N* J
     EA=1;$ ?9 v1 D& z& c6 D
     delay1(50);/ G* Y; }0 o! \7 |/ V  _+ Z
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
4 A, Q( X- {; J. T0 s# |& t不过你想学好还是找本讲协议的书看一下
7 X' V0 b1 N$ pI2C协议标准) T# h) |6 N; @6 Z' a
I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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