QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
) H/ g$ k, m/ c. u" W, ^( p! D5 G5 f+ u9 B! O5 D
[ 本帖最后由 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的读写程序:
) n2 p! M- V! S4 D6 B
( O8 Z$ X( ^# y/ \8 J4 k+ C6 t
9 b; ~( B) S6 w/ A# L5 k. b% _  #define uchar unsigned char
8 X% @: l8 K3 v5 F  #define uint unsigned int
  E. r1 P: i8 x3 Y3 _" }+ [5 f  V  #include <reg52.h>) y0 R+ t2 e1 f& M0 T+ D% v
  #include <stdio.h>1 O! ^# w# B7 h8 ?; D
  #include <absacc.h>/ k1 F& T% U5 Q0 J7 C4 G/ N
  sbit scl=P3^5;  //24c02 SCL
5 t/ F9 R* ~1 r( W- z0 k0 |! F1 i  sbit sda=P3^4;  //24c02 SDA
; C$ k% j* D, q) U. [  sbit DOG=P1^7;  //狗8 g% k$ K2 E2 C) l# d, y: b# V
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
8 t7 c$ ^- ?+ G' X  void x24c02_write(uchar address,uchar info);  
; `) ], g* ^* }: ]  //向24c02的address地址中写入一字节数据info
9 a7 j* b' P4 d1 e( L! M  void x24c02_init();   //24c02初始化子程序4 z, N( B1 ^1 ~" v$ E
  void delay1(uchar x);
, N& B+ X6 p# z' ^7 F  void flash();
3 U3 @0 W! U2 @- k, ^  void x24c01_init();
* ]) s; R7 n0 K# Q6 L3 T9 p. Z- W  void start();' J* E9 r8 W7 X/ a# @+ n7 A
  void stop();
) B7 I/ q% y6 ~* \3 \+ C7 r  void writex(uchar j);
. c& o6 u& I2 d/ S; w" |* J0 w  uchar readx();
1 q, T6 `& u( A. K& H  void clock();4 O& L' |- C  G8 \
  void delay1(uchar x)
5 `  G3 W. {7 y4 p  \+ R* }  {
; r( `& I( Q% b$ N8 w$ I8 J     uint i;
( C: U# U) B9 J1 R4 I) U     for(i=0;i<x;i++);
4 x) D/ @9 i$ A4 n! n, F     DOG=~DOG;1 \4 A+ n" J% ^9 m1 g
  }- T8 W6 t8 h1 v+ ^1 s
  void flash()
, p. `1 K1 C& _0 W: _, ~7 K  {5 `2 r* ~; D: ^/ }
     uchar u;# G4 P+ _: ^! e
     DOG=~DOG;5 ]# \5 l2 m0 q5 c
  }
& x. J- F5 a1 _( p4 Z  void x24c02_init()
8 ?2 Z; i9 n# |2 [- I% m  {$ V% I& \2 ~- I+ S. S
     scl=1; flash(); sda=1; flash();
9 w( ]1 M* K2 d# z, W4 Z  }4 [. U* d9 c  F4 s
  void start(): E2 k* v  C1 I; P
  {
, k: k2 ]7 W* Z; N6 P3 ^7 C     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
7 x$ c+ b* q% G; r# r" a( K7 O  }
2 t6 ^& c! o& j. O* S1 Z6 N; H  x6 W  void stop()
, I7 B4 }- [6 X$ k" b% e  {! z0 ~. G( Q/ @' p( _6 T5 Q
     sda=0; flash(); scl=1; flash(); sda=1; flash();+ X, S0 o# R# h, B" Y
  }
) N& B# J9 X' L6 u0 L( ^' e) [% K  E  void writex(uchar j)
/ N4 e2 W/ i( u5 f% R  {
# N% ?$ @- Y. Y     uchar i,temp;
& K& n0 \+ ~/ X3 H. i. P     temp=j;
- R4 C4 m1 H* a( g  L  l     for (i=0;i<8;i++){0 _; j+ q7 o( E! Z- S; ^: a
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; 6 @1 E+ K. k1 J( r* i+ L' Y
  flash();( ^% z+ E& m  p$ x4 }: W7 a! O
     }. l5 _" @1 ], n# U- p  Q" Y' E0 v
     scl=0; flash(); sda=1; flash();6 I+ W. T  y1 @; t9 X" A/ d
  }
0 `1 p& |4 B4 V7 V1 h  uchar readx()
; F- N0 ^& \4 ], n  {
' B" ]: g, ^5 f/ Y$ G" \3 N2 d) `     uchar i,j,k=0;6 G7 _! c3 e5 c: _" n# I; }
     scl=0; flash(); sda=1;
  C. a6 x( {6 ]; N2 r     for (i=0;i<8;i++){! v7 j$ A3 Y: ~' S" Z
        flash(); scl=1; flash();, D7 Y1 v7 r6 R- a/ R$ B0 Z
        if (sda==1) j=1;
! R+ z! g6 p+ H        else j=0;8 x& z2 V( H. y' l7 \: O4 }
        k=(k<<1)|j; scl=0;% t4 E% I( p; p8 K; c
     }
! l& |# G7 I& c8 O$ G% D' ]     flash(); return(k);: z- S6 f' V$ h8 l
  }4 d, m1 k  t$ H9 M+ F* M" [
  void clock()
7 n5 n# t3 d0 I; ~* }  {6 L. F7 `3 `# p, E1 Q1 R
     uchar i=0;9 `& T4 q) W/ r# W
     scl=1; flash();
5 U0 y3 o) Z- z3 N! W4 p. w     while ((sda==1)&&(i<255))i++;% e4 Z0 H: s! ?( m( L5 j* r
     scl=0; flash();, ~5 z: ^/ N1 n5 b& s9 l
  }$ U6 h5 D* d! n" ^* u7 C% j
  uchar x24c02_read(uchar address)  @; k% K5 q" m( h. W9 u, @/ Q
  {1 c0 G% ^# N% b. ^
     uchar i;
8 t3 u! L9 E$ V1 N; h     start(); writex(0xa0);
6 G: g% E4 R! A9 q# ^9 Z: I* y# o3 h# C     clock(); writex(address);7 x( ~* ~( `+ d( F  ]; i2 r' L
     clock(); start();
1 k; r+ @2 O9 X& Q     writex(0xa1); clock();9 G7 @! a/ _/ Q& _  @0 ]
     i=readx(); stop();
; v$ x2 W0 U* e$ p% I( K     delay1(10);6 y8 k' f' z9 `. b3 E$ w& R9 N2 ~
     return(i);
) {" e* C+ s, q  }
! w1 u0 k9 h7 |' m! P  void x24c02_write(uchar address,uchar info)$ ]. N; n" s# }/ p
  {
7 `8 w& b# U; a5 }& b# g     EA=0;) z6 f; D4 g- H8 Z, ^7 ~
     start(); writex(0xa0);
0 V+ O% P" \4 _9 T( y     clock(); writex(address);; L  W# p/ R0 ?) n
     clock(); writex(info);8 ~5 b% P6 U$ Y$ v3 Q) }, P! C
     clock(); stop();
# d; G. \4 I6 V' c0 {     EA=1;: a/ l# b6 P# C4 h
     delay1(50);% K0 s1 ^8 o+ S* z/ `
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
2 I7 R( R0 i1 H- H, ~% B* g+ v不过你想学好还是找本讲协议的书看一下
% P9 @; `+ M- X/ M. OI2C协议标准/ T, Q- |$ ], C
I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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