QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢/ ]2 W$ _( y$ j. ~- e8 K

# \1 @& @& o- m( R5 r# {1 ~[ 本帖最后由 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的读写程序:
0 r* z7 b7 F9 T, B7 c& [8 `# @" A0 s* J( v) ]0 u- A

8 _3 R# a4 x# A* c2 P( l  #define uchar unsigned char$ w" k- A- o' Y+ z. z
  #define uint unsigned int% }! J' h( {1 G/ {$ M& [% t; @4 ]4 H
  #include <reg52.h>
5 j4 j" P* ]6 l  #include <stdio.h>
/ A5 E: K2 t# f9 o' O; m# }# l  #include <absacc.h>
/ [1 q  x" {6 V  sbit scl=P3^5;  //24c02 SCL
# J1 _" ?5 A$ N1 t6 d; y5 V  sbit sda=P3^4;  //24c02 SDA8 ?& y7 H( n" V0 J
  sbit DOG=P1^7;  //狗& p  N' p1 _  r, k
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据+ e; ~8 K) Z! V' r5 X( ?
  void x24c02_write(uchar address,uchar info);  
" P( K0 P0 a8 z6 {9 k0 t) [: i& I  //向24c02的address地址中写入一字节数据info
% ~" H2 ^: V2 T; [& V4 h0 C5 \  void x24c02_init();   //24c02初始化子程序* z) K! }1 [) \# _. `0 i5 b5 P
  void delay1(uchar x);% ^! H8 ~* ~& y; E0 g! x  ~
  void flash();
  u1 D9 g# z9 I2 F# |; l) Z1 M  void x24c01_init();, q2 D: `% M# ]) U* j
  void start();3 `7 c+ R8 p2 J
  void stop();3 F; x6 [; l3 b* j. d, P
  void writex(uchar j);7 |0 S  Q; D1 q  y
  uchar readx();
% x+ N7 `. n. [1 h7 \6 s  void clock();5 X' j& \! Y! ?
  void delay1(uchar x)
+ [+ G4 X' q- o3 A! [- e  {0 Z; R9 j9 t; o
     uint i;/ _3 T# X4 @* ?3 e
     for(i=0;i<x;i++);
" a' n+ K. i0 R9 K" w" J+ H) _     DOG=~DOG;
" y$ l, w/ a7 q) M- T6 I1 F& B  }
- d4 h+ F( {& S" U$ Y$ O( I  void flash()
2 O# [$ ]0 R* y5 k% t4 K1 X  {* l! U& T3 s/ j# |# j3 f; w' l$ H9 H
     uchar u;
& [$ W7 \- l. ?2 A5 P% n0 z( J) s* E     DOG=~DOG;# [( B+ B8 E0 ~, G
  }$ M, I4 }% I3 [9 v
  void x24c02_init(): I& y6 N* S. h, ]4 m  }& _7 ]
  {. _: {: s8 B, K5 Z! G& d+ T2 r$ u# c
     scl=1; flash(); sda=1; flash();! F8 d0 p6 x7 S
  }! S. ]+ Z8 j, a3 I0 |( @
  void start()* ^  f$ ~, `4 [$ a1 n1 M
  {
1 D* o' d/ d# r  G! [" ?9 }     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
8 Z# f$ A5 Y& G  C  }: b4 `( y1 I8 q2 H
  void stop()! [) ~5 x& J4 f0 B, Q1 D
  {0 I1 t) g9 {) T4 F& d
     sda=0; flash(); scl=1; flash(); sda=1; flash();
) P# U# B1 l9 z  }
/ g) r& k) l- E* w" K$ i  void writex(uchar j)
& _; q- s: ~. V8 `  {+ F) h' t& g+ U  N& D* ^
     uchar i,temp;) d5 D1 b3 r( z3 [* d
     temp=j;8 c; x! [7 Z+ a  s% A% D% I" @8 Z
     for (i=0;i<8;i++){
0 b) D6 }/ E( J" q, f9 H& H5 X        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; / D0 d/ h! k4 E/ k$ u
  flash();/ e. T" l4 N5 ]. z8 [& |
     }
/ \! b* Z3 }" O; b0 L& I5 \% o$ I     scl=0; flash(); sda=1; flash();# g& w5 a4 [; q7 N- V
  }: }9 a! R  f4 `& @# n+ a/ M
  uchar readx()
- J4 z, B6 H1 w6 d. v: N; b  {
1 F6 ?. S0 c) ]4 R" h- B5 O     uchar i,j,k=0;0 A- Q1 \+ U9 [8 O4 A% Y3 E( U6 X  h7 a
     scl=0; flash(); sda=1;
- E1 k' w/ r: G     for (i=0;i<8;i++){. k$ H# K; m/ J  t+ U0 T6 @- |% r
        flash(); scl=1; flash();
4 {7 @# G) X' P! S. s2 P        if (sda==1) j=1;. P0 A. s- Q; O) f) D9 |8 ^
        else j=0;
$ X% h- E% U" h* ^        k=(k<<1)|j; scl=0;5 o$ ]1 j& @3 B: E
     }
  S" X4 y. r3 `# Q+ q% ^     flash(); return(k);
9 T! z5 B* ]" U9 A4 J& O  }
9 J0 g1 x$ M$ t$ N# \2 a7 ^* [* s  void clock()
' x2 v* W. Z1 D* G6 C  {# G3 q6 o6 X7 U5 C; }7 @
     uchar i=0;
2 @( ^  b& j2 d# s# k! I     scl=1; flash();; T6 V* i5 I1 v
     while ((sda==1)&&(i<255))i++;
0 m( |1 n. V) g. S) {     scl=0; flash();
. h$ R, s2 X! W$ q  }4 Z9 `1 `* K! v
  uchar x24c02_read(uchar address)
  X5 o4 o/ I: e; O  {
3 m& R$ T% K/ a' e2 p( ]     uchar i;
  h1 C4 l( Y. q% V4 y     start(); writex(0xa0);
9 U* Y/ C* F2 v) v     clock(); writex(address);4 x) g0 X8 p8 h4 T% R7 \
     clock(); start();2 x. G8 M5 A/ m. G/ j6 s
     writex(0xa1); clock();0 j' V- o2 ?/ F, u" d+ S6 W; F
     i=readx(); stop();/ @5 x, V9 f5 U* f; o: e
     delay1(10);; w# S1 S4 |* T  k' S& I
     return(i);
& R5 }0 i7 B' Y3 H/ H: C: A  }9 b( I5 j8 \! |$ W6 I& |7 b
  void x24c02_write(uchar address,uchar info)) [. }' [/ V, ^3 x% p! \# s+ K, W
  {! N2 e; O- g8 y! e
     EA=0;
0 [: r$ f& V9 j% ^+ d0 z     start(); writex(0xa0);
5 A. f+ L/ {1 Q6 Q' J$ Z     clock(); writex(address);
# {; l1 i( Q6 ?2 g& L4 K9 w     clock(); writex(info);
9 d1 k9 n( ^' g# N% u) `     clock(); stop();0 A# z& U  `$ o5 r' }
     EA=1;* r- g3 a( m9 h. n6 F
     delay1(50);- x# d0 J9 j/ _# O, z! i
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
, k" y$ l% ~0 a1 Y" R不过你想学好还是找本讲协议的书看一下- y. r) T) K6 m/ ^1 Q) O# Y
I2C协议标准
8 v& c* I; r$ T* [, n5 D# p I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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