QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 1771|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢" W% {9 H: l; Z) a) q

, Q- G9 U& g; r& |# u, U[ 本帖最后由 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的读写程序:
- J; |/ x1 B& D& V7 Q) u4 n
8 V; J3 v+ Z+ K7 p( ?$ O+ m- @
& G' H1 E4 _4 R6 I& ]( }  Y  #define uchar unsigned char
% I& |, N- n* m* E7 B/ x  #define uint unsigned int( b# r( P4 v6 U" N1 N& p" h5 T
  #include <reg52.h>
6 N2 v" l2 B: U  #include <stdio.h>, Q: n( i0 q' `0 Q" W; ^; k
  #include <absacc.h>
+ f  y$ \* _$ v- h, W  sbit scl=P3^5;  //24c02 SCL& \* m' O6 c# e4 k. Y# o! K" g4 H8 S
  sbit sda=P3^4;  //24c02 SDA
# q$ t' Y9 D& X- ?' ~  sbit DOG=P1^7;  //狗& l1 s  o, U7 @! i& p( g+ q4 _
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据/ I/ i) j; `9 t/ A
  void x24c02_write(uchar address,uchar info);  + M0 o- m9 B: F5 A
  //向24c02的address地址中写入一字节数据info) \) H+ T) E6 E* i
  void x24c02_init();   //24c02初始化子程序
, j3 z0 g( I8 S! x2 k9 q' }2 @4 |  void delay1(uchar x);
1 ]' s2 L+ _: \# }) j& [  void flash();
! N! l* f* f# {4 B' ?; K  void x24c01_init();
0 f0 W2 U! L7 ^: y  void start();- l, c) ^0 O7 L) Y4 b
  void stop();
8 @5 f6 C% D; K. g  void writex(uchar j);/ M$ x6 H% L8 M/ A" Z8 _+ z4 `
  uchar readx();
) ~# L* M7 _7 n: T; f  void clock();0 a6 R5 ~# m& K% J- ^9 s3 K! m
  void delay1(uchar x)
! T3 T! u0 J( W: ]  {
& G2 r* b) o5 e- P) c3 y     uint i;7 X: B' O& }* ?0 q' E
     for(i=0;i<x;i++);
8 q2 H( u' h% p$ ^8 D8 U     DOG=~DOG;
7 V4 ?* a! r2 F8 ?0 a+ A* P. _  }
# g$ u& L2 }0 Y" ~9 u. Q# u  void flash()
0 V6 D: m' ?3 M1 `$ D: Z9 \6 e  {9 |* K; ?1 y  K+ _
     uchar u;
7 K% f/ r7 T3 Y2 L' X; `     DOG=~DOG;: _* E% s# a3 w5 c1 f7 F4 ~
  }
. Z( x/ I5 w0 C& {1 n- \4 D  void x24c02_init()
+ A8 ?, l8 C+ B6 G! E' i  {  [0 G/ K/ v% C, Z
     scl=1; flash(); sda=1; flash();
1 z; S$ }: k; P$ Q9 F  }5 |+ N+ E: O, H
  void start()
+ M. X, Y1 [' c) X' o6 ^1 ^  {4 B6 [) [5 n7 Q7 \$ S
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();* b/ z* F4 G% G
  }1 f% _# ?$ O$ Z2 o) @/ n
  void stop()2 |3 e2 J: I; t0 `6 c/ S
  {% a( ?& ^" \+ G' Q, K
     sda=0; flash(); scl=1; flash(); sda=1; flash();0 }* T5 @$ y( e0 `4 {$ f2 B# |
  }
1 T1 p8 @6 g' P0 \9 y  void writex(uchar j)
! \/ o, L; b- z2 ]8 p. ^  {
8 A! k# z" [3 Z     uchar i,temp;6 F- @. N+ I0 T6 S
     temp=j;7 e4 g5 d# R2 L3 h3 H; }' L
     for (i=0;i<8;i++){$ B; J7 e3 l2 S* g
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1;
1 ~" r2 G1 n6 L" m: q7 |, W  flash();
1 r0 k' x1 y8 n! }; ^: p     }
6 \0 }- e5 u% K. b! V( C7 w/ m% P     scl=0; flash(); sda=1; flash();  i8 W  C. E2 r! H
  }1 ~. I7 T* j3 {/ m& ?8 r
  uchar readx()
# k  [6 c$ E6 c  {
4 s: z3 y' }6 T' |. u     uchar i,j,k=0;
7 @+ }( ~8 h& J1 X) y& b     scl=0; flash(); sda=1;. {2 A, C3 r4 h5 j: S" d
     for (i=0;i<8;i++){
3 O) T# a, ]$ b0 A" m        flash(); scl=1; flash();8 ^# J7 w" l$ Y# M! I
        if (sda==1) j=1;/ y6 B% h/ S+ {& ~. i
        else j=0;: a+ J; m  W2 I9 l+ @
        k=(k<<1)|j; scl=0;
1 m& g" e2 m4 J( \/ ?     }8 H: D& A7 y' L5 \  Q( E) F
     flash(); return(k);' z5 z+ p& K) O7 @" y' ^( f
  }+ R/ W: M* w  O  i
  void clock()
. V2 [  j3 G/ @. z! b' c# g1 H  {
0 W( @" [- a. a* C: B7 `! I9 J1 _     uchar i=0;3 ]  r/ ^, S1 s" r# K/ V
     scl=1; flash();
7 F0 `& w$ D# n& e; r: k) Y# ]6 m     while ((sda==1)&&(i<255))i++;
% i$ c2 Y8 z' B     scl=0; flash();- W( }# F3 J% a0 f* f6 W7 N3 T. z
  }
8 V$ U& y$ I# T# T9 A  uchar x24c02_read(uchar address)
4 G( N6 n$ y; }+ v% ^0 J$ R  {2 Y' k1 U1 a$ t& |- u
     uchar i;
8 M. Z( `* {- i6 d     start(); writex(0xa0);
! N8 {% W6 s3 T6 a     clock(); writex(address);
, k, h3 L& V2 |# ?0 g* n     clock(); start();* i7 {* i- U: ^
     writex(0xa1); clock();) w6 y& ]* k" V/ n5 t
     i=readx(); stop();4 [6 X. Z9 Q3 x# @
     delay1(10);. Q' J& o: s3 N
     return(i);
3 y+ b: V- F# r  }
8 U& }; n! L. W9 N: _: c+ d+ A  void x24c02_write(uchar address,uchar info)( L: @/ w$ c# Y, J5 k& N6 e( x! \! h
  {
1 U7 q, I! N7 A7 h$ N% z$ k     EA=0;
0 Y0 G1 e) h. [6 R     start(); writex(0xa0);3 b1 J* s; V' S/ u
     clock(); writex(address);3 J9 r- F* K; N
     clock(); writex(info);
" k: H( r4 |& v& T: s) o9 ~     clock(); stop();
$ p# k2 H, j9 Y) \     EA=1;
$ E" r& m: z. z, x0 W, x' _     delay1(50);2 T3 U/ Q6 o$ V7 a2 {  t& B
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。$ j! B' T! _' z$ z# s' \4 w" e
不过你想学好还是找本讲协议的书看一下
* U' d" B5 y' G. W! l% e, LI2C协议标准8 M0 e- x+ k  I/ }
I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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