QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
3天前
查看: 1690|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
+ z  w4 |2 I8 H* ?- S" S! f# ]3 T
4 `( l0 x: a/ s* t1 d9 N0 e4 ~[ 本帖最后由 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的读写程序:
" ?$ L. i( [4 f$ a3 c- @! \$ S2 L$ R0 k3 N2 ]/ }4 D# ^
" g1 Q! _5 O% w
  #define uchar unsigned char
- C; p* S1 t! G  #define uint unsigned int
+ b  [9 Q& R2 e+ I  #include <reg52.h>" V( |7 q, W1 d% ?' t
  #include <stdio.h>
' k) O; e. y4 B, |  #include <absacc.h># p2 }& j; \- U' Q6 x1 ~$ C! F
  sbit scl=P3^5;  //24c02 SCL
7 \! W% X6 W; L6 N  sbit sda=P3^4;  //24c02 SDA
% H% Z8 y: U7 e4 P  sbit DOG=P1^7;  //狗% O+ ]/ z7 y+ P% \- `  k/ k
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
. c& u% Z& c3 m  void x24c02_write(uchar address,uchar info);  
/ B- a, a8 Q/ \1 u, u3 M  //向24c02的address地址中写入一字节数据info  p- e! q" ]$ c" p
  void x24c02_init();   //24c02初始化子程序
% [# D- [% p. u  void delay1(uchar x);& b+ N5 D/ s; B& @% }3 t' z, x. G
  void flash();3 h8 s3 N- c# r# y% x
  void x24c01_init();
5 M* E" {% s7 d- ?8 C- z+ v2 K' h  void start();
" r3 m' M" N7 x' \  void stop();
1 C2 y, H# b& e$ `  void writex(uchar j);
& L6 ~- ~* ^' r+ E, p5 U: v  uchar readx();
+ x0 v' ^! \; d- C/ a3 W  void clock();
. j3 ^$ Q' Q' p0 M1 ?- a  void delay1(uchar x)
$ K4 W6 k4 e6 V; s' u7 s$ c  {
. U6 Y3 Y/ l. v     uint i;
- P5 X6 O4 {. F* D6 Q     for(i=0;i<x;i++);
% U* h$ Y& w7 m4 t7 {0 `) q     DOG=~DOG;. b* v# c" k; K! D; c0 `2 {# U+ F
  }2 u7 ^& h) ~7 Z/ J! n
  void flash()
: \+ U% W4 E; l7 n/ u, z7 w  {
0 b- G+ [' s1 l' [/ p& y     uchar u;
7 ?& L  e* ]+ U* A     DOG=~DOG;2 O" I+ ?8 |; s  _
  }3 Z9 R. N( U/ x9 _8 n0 Y
  void x24c02_init()
  m1 l1 a! I% a- Q* H1 W$ K$ z  {
; q3 V0 K# s2 i) |% q     scl=1; flash(); sda=1; flash();% M+ u7 Y! O1 E; |) X8 Z2 m
  }
. B2 u6 r1 J" h6 n7 u* f  void start()+ G- z, x/ M/ ~$ i3 p% R
  {! M2 k% I! F) a
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();! [, s% |. s5 Z4 i+ T: Y# y) o: b
  }* m* B; u1 h0 ^1 f2 S
  void stop()
' b5 J* `5 W0 x2 H5 B% `7 I% N! ~  {
' I% {2 u; i( [6 d8 H) D     sda=0; flash(); scl=1; flash(); sda=1; flash();0 c0 T3 ^$ }5 y/ l7 }
  }1 e* |  q8 Z  ~+ U/ ]. ^! d/ H, P
  void writex(uchar j)4 R" J+ h6 z$ O
  {$ v2 }7 b( L4 C
     uchar i,temp;
: s+ v9 B7 J* Z$ [' A8 q     temp=j;$ k$ x  C% x- c, O% f0 O
     for (i=0;i<8;i++){# y. ^, q& m' j* ^) n9 r' @
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1;
9 x& l- {7 {; S' m. e! L$ n0 U  flash();2 ^8 y0 I# J, y
     }, u# T, z) Y% j8 w! M6 e& T  \1 a
     scl=0; flash(); sda=1; flash();- M: ^* \2 F" {- u( p4 v
  }
+ }4 w8 K' d3 N! i3 |  uchar readx()# u( E- J; H- d2 w7 v
  {5 [; _8 B; W9 z4 A# U+ t6 i
     uchar i,j,k=0;& a2 [/ v# a, m1 D
     scl=0; flash(); sda=1;" `9 E1 u! Y; c2 x. e, i- o- x
     for (i=0;i<8;i++){
! f: K4 E% S! F1 E1 J5 h$ M' k        flash(); scl=1; flash();
3 i& z7 p0 S5 {9 X% d  P        if (sda==1) j=1;
) `  I& t7 A% j! f7 H        else j=0;- A3 {7 Z6 F/ p. E3 F+ [; }
        k=(k<<1)|j; scl=0;2 i9 u- c  {1 e3 y0 Q' P
     }7 H' }" a$ t  ^* j% L
     flash(); return(k);3 u/ S% O+ m  w
  }! V1 ~1 n- c: C
  void clock()
" M2 E/ F, b3 h% Q$ [5 A/ g0 }  {
5 w4 Q/ p) A, |: `, K     uchar i=0;  [# j! y3 ^2 B$ y
     scl=1; flash();
* d% g4 {% e, B5 C0 x6 [     while ((sda==1)&&(i<255))i++;
- y' }8 q" C$ V     scl=0; flash();
; a) T. T  I$ i4 w  }& W& c4 N0 f+ t0 H
  uchar x24c02_read(uchar address)
2 M1 ^  e! b, o" @2 j  {
1 }  E' ?. y( {4 @2 @; d3 h     uchar i;; d7 ?- M! U  r: `
     start(); writex(0xa0);
* H2 a! w- x% i     clock(); writex(address);- p+ s/ q  x* b: O, w: t% l
     clock(); start();
  q" z0 Y! k9 X* f     writex(0xa1); clock();$ _5 ^& L4 X' ~. A
     i=readx(); stop();
" l3 N3 {2 ^) K1 B     delay1(10);
( N8 O" [! t' G- z8 `  X) x     return(i);- j2 a/ ~2 ^- ?" J2 E
  }
& w/ a. H5 c6 c  void x24c02_write(uchar address,uchar info)  E% g& h" i( P
  {; ~3 R2 d- g. Y0 [! @. f6 `
     EA=0;" m9 l/ Y. d% e5 j* N, H$ q& A6 n
     start(); writex(0xa0);8 p+ S  ~) v# f* M9 O
     clock(); writex(address);; N! j( K' Q" b& ^+ p" `
     clock(); writex(info);
0 T3 ~! @% D2 Z: Y2 o     clock(); stop();
1 y& j. i* ?: o3 t; O* ]1 R     EA=1;) ~/ G3 Y7 b4 h% ?4 o% N$ ]  c$ N
     delay1(50);9 D; O% C8 y# r* v5 I! U4 _7 Q( K! k, H. Y
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。3 R; P) j6 I1 s7 v6 J+ Q
不过你想学好还是找本讲协议的书看一下
4 P8 \, j& y3 O8 [3 HI2C协议标准
. E/ t; T9 W9 K# k& G, G( ?( M I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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