QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
9 b4 l: b& J  ?5 n! a& D6 Z# @: y: m* V3 N
[ 本帖最后由 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的读写程序:
8 Z6 M; o! M1 R. h; y) v+ ?
' Q) }% m8 X% l( i+ ^' `  v
; k2 k/ l/ k. m% Y, M5 V; Q( i  #define uchar unsigned char
+ n1 [; ~( Q# \- d" r2 q5 x6 w: K  #define uint unsigned int0 j: i+ F; _2 _" ^3 ~  C
  #include <reg52.h>
! U: {5 x& p: v! B0 U  #include <stdio.h>- p) A$ p! b. {$ n, i
  #include <absacc.h>6 q. l  `5 I2 G, n6 F3 r
  sbit scl=P3^5;  //24c02 SCL+ [% E5 u' V- |" Z8 ^2 H
  sbit sda=P3^4;  //24c02 SDA
# g% ^$ {9 ^! T- v  sbit DOG=P1^7;  //狗
1 J, n: s' C# Y0 {2 f7 H0 ~/ p  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
$ q, _! d: B% T; h& ^. j  void x24c02_write(uchar address,uchar info);  6 n( g. K9 i0 }3 c! \5 |6 W
  //向24c02的address地址中写入一字节数据info9 E8 j6 L5 A# `- `
  void x24c02_init();   //24c02初始化子程序4 e5 x6 b1 S4 M$ i. n+ S8 c
  void delay1(uchar x);
$ _+ E5 o' a1 \" ~- N( w! }  void flash();  p% ?8 R# J, H
  void x24c01_init();
; d1 n5 d0 G  v; M7 ]1 B  void start();
; d3 S7 g/ L( t4 T  c) b  void stop();
9 l+ T2 U- r- g+ A3 ^  void writex(uchar j);4 k* r! \0 |7 h& p8 M, r+ e
  uchar readx();! `9 C. ~, g5 G, D
  void clock();
" Z6 {1 s5 N/ ?5 m" J  void delay1(uchar x)5 f$ Z8 K9 O' e; ~  F) G! o
  {- i9 {& r! ~& Z# j3 D: p0 ^
     uint i;
* ~* M8 G# ?6 P     for(i=0;i<x;i++);* M" C8 d7 @1 t" x
     DOG=~DOG;
* C2 M, k1 F) f6 K  I, q  }
; u, y( ^: c, G! D% |; Y+ K  void flash()
/ b2 I" Y! n; S& s# x  {
" o& O: P8 [5 D2 O! B6 t2 @     uchar u;
5 k" o9 Y6 ~; b. `# J     DOG=~DOG;; r5 T# X  P+ Z
  }
7 G- u, Q% v" y$ _/ `  void x24c02_init()2 a$ o. u% Z6 z0 ?& h$ h5 S" j
  {
( G: {6 W* a! p     scl=1; flash(); sda=1; flash();
7 i: I0 z: Q) E. B  }
- w9 u! X% Q& _8 R/ p) m  void start()+ H9 }3 O& ?% H( a
  {
2 `0 j) }" N+ w' V3 |! G; H. L) K     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
$ i$ v, Z3 x5 }4 I% ~  }
4 |  q1 i, K% G7 v" c  i- H  void stop()
  Q7 {5 g8 u9 B! \  {. }% u. L( v1 E5 \3 \
     sda=0; flash(); scl=1; flash(); sda=1; flash();
7 }4 `! r6 B: t! W+ L! Z2 A  }+ o. o$ |' _; I. a3 z9 D8 f! s
  void writex(uchar j)
- h6 N( N$ F8 u. U  {
! T4 c8 _& u  f0 S     uchar i,temp;
- d" g' b$ ^6 M4 w8 I     temp=j;  d% _8 H3 M1 f5 `
     for (i=0;i<8;i++){
1 ]# W0 `2 A( q4 w        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1;
# a/ B+ @8 f1 _' I  flash();
1 M9 X/ ^3 T, D     }
# j9 A+ g. ^  r$ K2 J9 v     scl=0; flash(); sda=1; flash();
8 D8 o7 i( z( U1 o  }
7 _: j3 h2 ~. L  uchar readx(); q( h% T9 _* u$ G9 y+ V
  {
7 X( r. \' t, @$ a' U     uchar i,j,k=0;
3 R+ Y! J7 q; b* }     scl=0; flash(); sda=1;
' H) }' |' p( y     for (i=0;i<8;i++){8 Y) a2 _: n# @/ t' r5 N/ F( K2 k2 v
        flash(); scl=1; flash();1 V( I% |$ h3 `" z! W' c  E) P1 O
        if (sda==1) j=1;" f  P/ c3 ]6 R
        else j=0;: H, A5 h4 \9 N  \1 u9 {
        k=(k<<1)|j; scl=0;
5 i' }1 x6 q! |# _4 B& S     }: z9 ^- s7 Z- j: t* E
     flash(); return(k);
- l3 b; D) z6 V* c# r- Z# p9 `  }1 `7 H6 ~8 j/ |  Y- E
  void clock()0 b. j( F  }% p5 l
  {
9 ~. G( A4 O; a1 B+ P     uchar i=0;$ s$ @7 }+ r" O# j: b  E( a# P+ d
     scl=1; flash();! W- }+ j. _3 g1 @) K+ }
     while ((sda==1)&&(i<255))i++;* {; _8 n9 e+ h
     scl=0; flash();2 E/ P8 ^# y5 n( u' z
  }) J- H* ^/ z9 T( |
  uchar x24c02_read(uchar address)
9 t5 C) r" b, D6 n7 ], p% `  {
# r% y' e9 Z0 K" O     uchar i;
% ?9 O5 l! I( a4 j" A/ o     start(); writex(0xa0);
0 A1 a4 U* i5 E# a     clock(); writex(address);7 B3 M+ V- f4 h1 W2 `! t
     clock(); start();
( j0 l' J7 P' g6 I     writex(0xa1); clock();3 T, [0 J" A8 T# X* h" N: B+ C, t
     i=readx(); stop();# H4 r# B  V7 P  [) Q
     delay1(10);( B4 U: q1 m8 _0 t+ o. W* E9 y+ ?' p
     return(i);, [% S5 j( H/ l
  }
8 P$ A, l1 s1 @, ^; q( A  void x24c02_write(uchar address,uchar info)) f- I" X* n; U7 i
  {/ T5 f% [' C! B* W& @; Z
     EA=0;
! Y2 V( v5 K) j     start(); writex(0xa0);% g% t+ Z4 R3 V  o/ h1 E: ^7 D
     clock(); writex(address);0 a% q/ H0 x' S/ O% [% f0 ^
     clock(); writex(info);3 \$ G% n& F  K5 A  G
     clock(); stop();# y/ l8 o2 M! h
     EA=1;
( \" P, d8 C) _+ b0 a5 A; S: k     delay1(50);
3 }0 I( ], O6 y+ ]6 L$ N- n2 |  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
) [* S$ H' P3 g: g  q, i8 N( w. Y不过你想学好还是找本讲协议的书看一下% F) C8 Y6 W" O+ M
I2C协议标准5 d( G; ?9 X/ T/ {- [. [/ t6 Y; _
I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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