QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 1680|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
* Y+ }! Y" ^4 M2 \# X( p: d+ u; d( I4 ]3 v
[ 本帖最后由 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的读写程序:
% c. n. t0 ]; B, ]
9 e2 ^8 x9 i. I4 K8 h$ L6 |) M2 o3 u
1 G5 k2 w6 Q1 Z( w, k  #define uchar unsigned char+ s/ W/ @8 }+ p0 U- g, e# D
  #define uint unsigned int
/ w3 o! C+ j9 ?  #include <reg52.h>" Q, L( p4 }& _9 c/ C) ?
  #include <stdio.h>( F* E7 ^# P# I; w* b& V
  #include <absacc.h>- y( ~4 B5 a  e: |9 m) a! u
  sbit scl=P3^5;  //24c02 SCL
& n& m$ A+ Z2 `( s  sbit sda=P3^4;  //24c02 SDA! N% t2 R, |6 Z* Z  Y& j2 d
  sbit DOG=P1^7;  //狗
5 v( F) L; H6 ~  k2 |! ]3 d  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
3 c; u4 t) B  k& i7 l) H  void x24c02_write(uchar address,uchar info);  1 v; X! p% b- j0 u  W' J
  //向24c02的address地址中写入一字节数据info
- c( k3 |/ |# s4 W$ j  void x24c02_init();   //24c02初始化子程序5 c! G4 |0 U1 I+ n/ C
  void delay1(uchar x);
+ i' [8 |9 ~$ O0 I! L7 O% M  void flash();: Z2 H2 ~, V0 u# i# s' I" }% s
  void x24c01_init();
' I: a- N. \$ B; X- `; d  void start();
$ z& D- |9 D9 M* H& L  void stop();( q- c/ w: J/ E. @3 |
  void writex(uchar j);3 _. W8 {3 V- q7 u8 e
  uchar readx();
7 Y3 {' ]& y! m4 G) J  y- R% T  void clock();+ a# |* _# X. h$ P1 j; q- B
  void delay1(uchar x)' F8 u: J6 ~3 c8 T% J  }+ \: h
  {$ h( U" y2 H, ]# G! D7 q0 f7 l) V
     uint i;
4 @* F1 }0 m& O' T     for(i=0;i<x;i++);% p  r: `  @* E( s
     DOG=~DOG;  }- l( c7 f" I4 O0 e% J/ C
  }  L5 v- _4 R2 h7 g
  void flash()
# P7 m% ~4 l- b1 ~7 P- E  {
9 a9 n4 w* @2 R) N3 v0 H     uchar u;
  l( F1 m- ^% w4 T* N     DOG=~DOG;' D8 ]7 D! G) v# t0 z
  }8 q/ O4 a2 m' e- M) e& Z. g. _
  void x24c02_init()
# W8 A& ^- t; v  {- j; @  P6 q3 B0 s' Y
     scl=1; flash(); sda=1; flash();
% I/ A8 f* Q$ u( ^; l* L  t  }1 y7 E2 i2 |% C0 [/ i. o4 h$ L
  void start()
! C2 \2 I! N3 ~  t9 Y. _  {
: X* j/ h1 `! |- H7 X3 ]! u" d     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
( }2 L& f* j, \* |1 f  }
6 i; j6 g4 V0 J2 j0 u  void stop()
4 u6 E# a' G- V' L  {0 I- E9 R$ W# R: l0 l- M" P) o4 ~
     sda=0; flash(); scl=1; flash(); sda=1; flash();
" @* @# y9 W& D% k; |' ?" H* d  }3 z- y( B" n$ W) `: O$ }
  void writex(uchar j)
) h- t7 ]. m5 W4 B- M& i2 Z$ p  {
( o5 d. N7 `" q% c     uchar i,temp;
8 r* H$ N5 q: u6 t     temp=j;
/ f+ j7 ^: N3 L. e4 _' K     for (i=0;i<8;i++){" L% ]# u2 s8 ?6 V- L
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; - \5 M: Z% v6 R
  flash();# |0 o3 F6 T0 a- u8 |
     }
6 b9 f  }! U, T% k     scl=0; flash(); sda=1; flash();& X2 P$ z$ h( W: \
  }
. s8 _* ~1 O% n$ A6 i; ^  uchar readx()/ o5 ?3 m$ v5 K0 C
  {
- V$ G- }7 O/ z, @( _. p     uchar i,j,k=0;
, ^+ n6 H) |0 ^$ e: I     scl=0; flash(); sda=1;$ _+ T/ T2 O0 I% k0 L' U: q
     for (i=0;i<8;i++){
2 \$ s: G, V2 V        flash(); scl=1; flash();
5 X& V; x; J9 C/ ]6 }4 ~4 q        if (sda==1) j=1;' g# b9 K/ u1 c5 Q" [
        else j=0;
5 G2 ]: n$ B; P8 C( o) B, Q! I/ A        k=(k<<1)|j; scl=0;
+ f9 H) l9 G& b4 ]     }4 H- V. f; i1 q. Q
     flash(); return(k);+ R5 }4 _1 E; l& T" k
  }5 ~( i; W" y2 p# {
  void clock()
$ u9 \: P8 p: K4 [$ A  {7 W; X- b6 i; `2 @* e5 ^8 X( F+ b
     uchar i=0;
7 y( i' C) A0 e( @3 l! t     scl=1; flash();
- b: D9 Y- Z( o8 F5 F     while ((sda==1)&&(i<255))i++;$ U$ A, y: D* c  v" B% i0 ~
     scl=0; flash();
# O! }5 ]9 y& t1 r5 E' v9 U" Q  }
( |( s2 T! z5 e2 s$ [+ ~  uchar x24c02_read(uchar address)* y1 j( C$ r0 i' _9 c
  {% L$ A6 H6 [& [- H3 p5 E8 ?: {1 l
     uchar i;
2 ^  L6 W& s* h) |: F     start(); writex(0xa0);
) V$ q& g, x" L/ n     clock(); writex(address);
$ b0 E  t7 H) v/ {1 z5 D9 i) y     clock(); start();  F) w, a0 X0 I& A5 T
     writex(0xa1); clock();
! H+ O  V: B' H" F$ }+ x0 P     i=readx(); stop();
8 W( k" B, T" J# k     delay1(10);% e$ s$ l* O& O/ a, v& h& a
     return(i);9 E9 ~3 x7 ]( p* W  u% ~
  }4 b4 ^+ O  n# V5 g
  void x24c02_write(uchar address,uchar info)
' U. q; h! I5 O9 u  {
) Q, G3 O$ }# l6 W7 o5 n     EA=0;
5 F& ^) X; H4 b8 t     start(); writex(0xa0);
! k& Y+ o# i4 [  P1 r* g5 n     clock(); writex(address);3 B1 c; u2 C. @# t9 @  o( Q
     clock(); writex(info);
' E. V# V, i! m+ C     clock(); stop();
; C- z2 J' k, \4 j! B, N4 I     EA=1;
- ?/ n  k3 @' F$ C  F. F     delay1(50);1 O/ M; w9 q) P. @9 Z, I8 q
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
5 I5 O. O4 \2 w' U不过你想学好还是找本讲协议的书看一下* b" d& v  B: H  W, r
I2C协议标准) A2 G# D6 A$ H, h1 [
I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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