QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 1773|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
! W. j9 D6 m& ]" S7 M
' K5 H, D: p% E' \6 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的读写程序:' d3 t8 c  T* b0 ^+ X* u

+ m- a8 f9 {& M' e1 m# L
, I$ l  v8 o2 g$ H4 `6 i  #define uchar unsigned char- V9 c& q$ b! t9 i8 X
  #define uint unsigned int/ q5 O5 o# T0 m1 _' n% d
  #include <reg52.h>1 U& T, G! p, C1 r% x( `- ^+ \
  #include <stdio.h>
- ~" L- u. Y; n  #include <absacc.h>4 [  S: A1 C5 o; G& x1 x
  sbit scl=P3^5;  //24c02 SCL3 z5 i- `! ~1 @! q2 J: ?9 \2 D
  sbit sda=P3^4;  //24c02 SDA
3 F) I# v- O) S8 B  sbit DOG=P1^7;  //狗
5 u! T6 d8 K3 G  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据7 a4 Z5 _+ r; J9 N
  void x24c02_write(uchar address,uchar info);  
: t$ _, O$ t) y  //向24c02的address地址中写入一字节数据info
% s. I4 C& N0 ^3 H- B% _9 J  void x24c02_init();   //24c02初始化子程序
" _/ r% f. k. L7 C- p  void delay1(uchar x);9 X4 X% z8 Q" C5 u
  void flash();3 s4 o/ I0 l0 i. u& N! w5 F; k
  void x24c01_init();4 Y- D& Q! t" C: u! c9 E" }# p6 H
  void start();
" _' C. ^) R. L. r, Z0 I2 U  void stop();, H+ e% @  j4 y
  void writex(uchar j);
* k+ x' l- \: b6 z  uchar readx();
7 e4 x' _7 u, u! b; u  void clock();
) R: Y! c" W( b& C& ?  void delay1(uchar x)
; @& r- \8 O$ M& C) f  {. i5 q# V/ T+ A
     uint i;4 j( p) Y% b) o2 s
     for(i=0;i<x;i++);1 W8 B7 Z" D& Z: i* Y/ `: N
     DOG=~DOG;2 w: y* p+ k, X2 h; w, l6 {/ X
  }
, L) o" Q+ O$ F  void flash()
$ [$ k' e" T0 s; b8 f: Q  {1 M4 T0 m; a8 q# z# ~
     uchar u;! p$ ?( L; H: ?" X
     DOG=~DOG;
1 M. \+ h+ Y1 U% H  }
* g  k  G( m' P  void x24c02_init()6 {5 R: r+ E. U8 l' z
  {4 a# w% ^' e1 @3 z
     scl=1; flash(); sda=1; flash();
2 B9 S- I4 f* S  }% {1 j4 r: @" j% T! \7 S% u
  void start()' ]: a* Y9 e# b, b: j
  {
" z4 J( }: m7 `. D' X     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
  s1 T6 J6 i: T1 \$ Z7 b  }
- c0 ^8 w- Y& H9 m7 \3 @1 L9 n  void stop()
. H. d5 Q8 k, {) [  {
1 y% U5 `& J0 h) U+ F     sda=0; flash(); scl=1; flash(); sda=1; flash();
* K; i: {* ?) i* a  }
4 b# N  ]4 z( w9 K- s  void writex(uchar j), p/ D4 k# w0 R' y- F1 V: e
  {
: a4 g) E  F. x/ v: E' C- _     uchar i,temp;
/ P4 _- P: _! K6 B# e     temp=j;% n  s" X2 B. s
     for (i=0;i<8;i++){
6 `. A' u4 m/ [- Q        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; 0 ]% b1 c% {" r/ K
  flash();8 j  Q0 s- {& e
     }
5 g/ z- Z! l" l     scl=0; flash(); sda=1; flash();
0 X& H" ^( s) h: g- L& M# v  }' f4 h' e0 a) H8 U
  uchar readx()
+ d0 M+ I1 y! ]/ m  {
* X. e; k( x6 R$ _6 Q' J  z# `- ]/ ?     uchar i,j,k=0;
1 t; P* ^9 e) Z; |6 i! P2 K: p5 Q( ~6 |     scl=0; flash(); sda=1;
2 t3 v1 U8 W2 n     for (i=0;i<8;i++){
; ~0 y2 P' m4 Q        flash(); scl=1; flash();
% }% x% v4 o5 }7 ?2 a1 r+ ^% g9 B        if (sda==1) j=1;
" P5 t. g) @* @1 Z5 A) O6 N+ M! z        else j=0;
" ^. B* p  k* `        k=(k<<1)|j; scl=0;7 m1 O. U5 P$ R; L2 t* |
     }
- C% w' i" [4 p) p3 N! Y6 e, p     flash(); return(k);
4 d! {5 `8 L1 k7 w5 h  }4 ~' o. W; Y1 x4 W! j) g. z5 K' \
  void clock()
9 j3 v5 X, K8 s; K  {
0 o( I6 T1 b! h9 @     uchar i=0;4 b% m6 S9 L  J& ?
     scl=1; flash();
- W, B/ \, J5 [8 `! p     while ((sda==1)&&(i<255))i++;; _9 D: z3 v, d: t* S" L
     scl=0; flash();% H) ^7 j3 z: c  U  C$ Z' B
  }9 r) Y  h5 k+ ?! n& s9 {
  uchar x24c02_read(uchar address)
2 w6 c1 v1 p* s  h( O+ g  {
9 P3 ]# W3 }3 D% ^     uchar i;
0 {% U! E7 m- G6 S& E" ?; l     start(); writex(0xa0);
( S" V; s  M2 b+ f     clock(); writex(address);( {" u' u: e8 X) t9 ]" B
     clock(); start();
! g/ U# K6 n) y- P& S% Z  K     writex(0xa1); clock();! s  w7 H+ }! c1 X! U# s
     i=readx(); stop();
, J. ~- ?; w+ I/ J4 d, M: z4 R% b     delay1(10);9 f1 I4 J' g% \
     return(i);* F8 o9 E7 U% V' q6 B
  }1 D4 ^% b$ w$ o( |4 \* a7 |
  void x24c02_write(uchar address,uchar info)
' A$ C. X! U2 U) q+ B8 i  {0 |5 [8 u7 S" r2 l: J
     EA=0;4 t  P, Y( n( l- F/ l
     start(); writex(0xa0);9 V& P! L) l3 d5 V4 q
     clock(); writex(address);
1 L8 M, V- t1 T0 q     clock(); writex(info);4 m9 l0 W6 J" `- m6 m) @  H
     clock(); stop();
% E3 y0 I! n0 A( X5 V5 @     EA=1;9 I  V' L, a# ^
     delay1(50);
) ]+ P/ L: Y  L9 c. o8 Q+ Q8 p  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。. R" F8 I: V7 s) f- g& Q2 n8 ]0 c3 t
不过你想学好还是找本讲协议的书看一下7 z0 ~8 Q) x: V
I2C协议标准  u5 S1 g6 @* g. e
I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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