QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
2天前
查看: 1688|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢' t0 M: @# n0 K( i0 @: E9 R: n1 \
5 d( b3 c0 ]/ v% r/ I# 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的读写程序:
  b5 ~" b1 |3 f. W, k
+ I2 G# `0 h/ n3 n3 Y) N8 n
9 J! g- Y3 F! X, B7 g6 P" ]( t4 X  #define uchar unsigned char5 ?6 f, n" b, Z
  #define uint unsigned int
. v* Q7 i  V0 n! w4 Y1 s$ m# z; {! g0 y  #include <reg52.h>
& \+ ^* e7 V( u3 q/ @; Q  #include <stdio.h>
! Z0 O% E- T+ E/ A9 P  #include <absacc.h>/ H9 O! f7 {$ O! Y; o3 n" v1 p
  sbit scl=P3^5;  //24c02 SCL
: |" F: _+ W# F9 a. g  B0 f  sbit sda=P3^4;  //24c02 SDA
: v6 |$ q4 K; Y. ~* d+ e& g  sbit DOG=P1^7;  //狗
9 G$ ]; ?* p2 L3 n) M/ }! \/ C  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据+ A9 I1 ]) S/ a0 y( A' h# }
  void x24c02_write(uchar address,uchar info);  1 t: c& W% B( |& C
  //向24c02的address地址中写入一字节数据info% {+ y1 v( f7 W7 I7 |
  void x24c02_init();   //24c02初始化子程序% h9 Y6 }' t% c* M0 }" n" ~
  void delay1(uchar x);/ f  H) t; B4 c* }" }( w/ s
  void flash();, e+ l* J9 ^7 I& d) ~0 m
  void x24c01_init();
, T0 [1 N4 t! n. A7 ?& B( T  void start();8 x! z5 T+ @' B+ m: F
  void stop();+ N) G/ k, F0 A, N$ J+ S
  void writex(uchar j);
, M/ I7 ^3 y/ u' T" _) W  uchar readx();* B6 N8 o6 L1 A! a
  void clock();2 ~: M: L( b  o+ N  w
  void delay1(uchar x)
1 ?1 b) I: Q  D9 j  S: q. y  {5 @! z, Q2 S7 r; S% _( V' v' k
     uint i;4 @5 T" j0 n- b
     for(i=0;i<x;i++);" k+ R. K# A: K" T" D5 u
     DOG=~DOG;
5 T# {, D. x, m4 ^. N  }8 n2 F& {1 {5 p# v& a
  void flash()
* L7 D6 D+ z/ \  {
/ H0 O4 b# m9 X3 X4 m     uchar u;. p) m0 l' B: H9 |% F4 H) a
     DOG=~DOG;! \& K, c5 N& r6 |
  }7 a, a: V4 o; \: r
  void x24c02_init(). f! p( \# e; z7 O! K  f
  {
7 d  N: a2 ~- v- K9 E+ l+ y     scl=1; flash(); sda=1; flash();
+ R! x4 p3 {6 E: M  }1 N. ^0 H9 v" W; ]3 j
  void start()& X1 i8 i3 s. O
  {+ \+ S: W9 v: d; N; ^
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();7 A/ b8 R0 m1 M+ D
  }. [$ ?& A/ V- s& W" D9 @# i
  void stop()
) z6 u" P, }+ r! j) h  {9 {) s- m; E: q
     sda=0; flash(); scl=1; flash(); sda=1; flash();
" J4 Z0 d$ x8 r& [  }
/ X- o3 c' G3 m) A" M  void writex(uchar j)
, H. S0 K% i7 I  {6 W# R1 S/ A# ^% `  r  ^/ O
     uchar i,temp;3 O" k7 i) y/ ~# e$ w; ~
     temp=j;6 g3 v" D( C2 d
     for (i=0;i<8;i++){
  ^& w! h/ t4 w9 X        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; ( n: a) a/ l  U) N5 {; j  u, ?
  flash();
. v( j7 n2 v4 U) ?' v$ B     }
# L; W  q1 p. h     scl=0; flash(); sda=1; flash();
4 P6 }; _$ |9 m6 F  }8 {/ v) J1 L% x. i0 \
  uchar readx()
9 w2 C7 H) g0 a* \# Z3 ^2 x  {  A' p6 V& k/ `
     uchar i,j,k=0;. c; D2 g7 ~0 ~  Q: z' x
     scl=0; flash(); sda=1;
/ v9 i6 ^- a) z* _1 f     for (i=0;i<8;i++){
" @+ K; a  M. ?        flash(); scl=1; flash();
8 m* [- N4 V" e# R  L7 N        if (sda==1) j=1;; _2 A. h- ]4 }5 P  c- @
        else j=0;& R6 S+ d$ H/ ~2 \
        k=(k<<1)|j; scl=0;4 i! n9 c; k( M) Q
     }
4 ~; q+ V+ L5 D5 x     flash(); return(k);+ N5 p& X( }+ l! f$ h/ D% N
  }
8 ^8 W  G- H- W  void clock()7 L6 `  v% ?6 W6 y# f
  {
) h# |% _3 o, b  ~7 U  c- k     uchar i=0;
0 \( D7 w# s# l# |) M/ O     scl=1; flash();
" C) J* s$ u- l4 X% W! w     while ((sda==1)&&(i<255))i++;
" T) F7 q9 T* f5 E     scl=0; flash();7 v/ a5 Q& k3 x8 Y
  }
% _1 R# S0 S: _/ z  uchar x24c02_read(uchar address)) d' A. y4 @: g  I9 H
  {
3 C- P9 m1 Y! b     uchar i;2 M# z5 O$ A* U' Y; \, X8 H! D- S
     start(); writex(0xa0);! Y7 r) x' k& W
     clock(); writex(address);& E! u3 }" |, F- J- [( d
     clock(); start();8 T# {: y4 r2 C
     writex(0xa1); clock();. ^) ~  q+ K. n+ A) S: q) a
     i=readx(); stop();
2 v% r3 I: C2 j9 ~% E     delay1(10);9 ^) \( s+ m4 n3 f' ?* N
     return(i);- d9 o/ b- I- g# R
  }
% }* _8 E  u3 O$ ]3 H5 K  void x24c02_write(uchar address,uchar info)
" e; P/ l0 _7 U3 U3 q5 D/ v  {
* D3 G5 r2 D, q% w     EA=0;( ^& H: f6 |% A6 p- l! A$ t: K0 n
     start(); writex(0xa0);: g% _0 c  |: M; A' R
     clock(); writex(address);
4 B& C& G/ {! f) l8 Z1 S& Q     clock(); writex(info);
  r8 a/ f) c1 d1 d* `     clock(); stop();
' _5 U9 @, Y4 O; o5 ^" `2 A3 R, G     EA=1;
; Y2 y- s1 T/ s     delay1(50);7 l3 W- I6 M8 O+ L/ N6 T  A7 x
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。) c2 d+ B: }( B/ m- C6 P" F
不过你想学好还是找本讲协议的书看一下! ~% z/ j! h' j3 `
I2C协议标准  c+ l1 Z0 i2 n4 V9 ^* v
I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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