QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
6 O5 p4 k! x" U  T( f) k
4 u' b9 c. F. f5 g[ 本帖最后由 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的读写程序:5 p6 K) z6 V. q3 H3 l

, X# _; l- O* V' t- P6 v6 l+ Q! M" Z/ ^6 p+ s
  #define uchar unsigned char
- E9 i" U! b, [2 h6 `& D  #define uint unsigned int" @, B; f8 r1 a. J. F
  #include <reg52.h>; c2 T! v5 e( Y1 R; I
  #include <stdio.h>, S6 }, z2 V5 Q; L% H
  #include <absacc.h>
; t( N5 S" Z, E8 S7 X8 a  sbit scl=P3^5;  //24c02 SCL5 \3 M4 J9 U: I* F. {
  sbit sda=P3^4;  //24c02 SDA
. S; O, g1 g0 ?0 t$ S  sbit DOG=P1^7;  //狗2 {) w- W5 O" o7 ^; _, {
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
- c& M0 I2 J' L9 g- ~  void x24c02_write(uchar address,uchar info);  
* f6 v, p7 J: _( P0 V! o  //向24c02的address地址中写入一字节数据info
( |) M" h3 P: K5 j  void x24c02_init();   //24c02初始化子程序
5 d* @  s* U7 T) e  void delay1(uchar x);5 ~4 H! S8 w! m/ ?; c2 d
  void flash();2 \! }. e( y$ u! i# T# }
  void x24c01_init();
9 b/ w+ y' D1 l; I  u  void start();
0 q' s( o' S! i. [$ m% X- {* X  ~  void stop();2 X  e. C# _. S$ W' U
  void writex(uchar j);+ D1 L9 c3 _* G* }" T" {/ |
  uchar readx();
- B# w  i: _9 ]  void clock();; h. y) V6 ^* j  u& {: f
  void delay1(uchar x)5 |( E0 C) ?$ F% y( v2 ?, @/ W9 s
  {
5 R" ?# P3 t1 C$ `5 ]/ s     uint i;
' q2 `% w5 h. z- F! Z; d/ M" X- O& D0 J     for(i=0;i<x;i++);- z6 j' ^0 m( Z7 b  c) D# j( p
     DOG=~DOG;  Q2 S3 q7 ]% q" U& L2 z8 {9 q+ N
  }
, K7 F3 V3 o9 w0 k. \6 }' R9 @% I  void flash()
+ a  E$ n* I  h; N& m4 N  {) R- i) N( P& w; ?* U( @( m* l) E
     uchar u;
. R2 x' p: a8 K; R& j: n0 z; @9 f! g     DOG=~DOG;, c8 M5 l7 {- y
  }6 H) W# u- z9 u1 |
  void x24c02_init()) L! K7 T* p0 ^+ A
  {" H% F- q9 N5 b3 U
     scl=1; flash(); sda=1; flash();# l  p+ T0 g# c( v3 }( f8 l
  }$ v; Z* [& j# b. \
  void start()
. F( c# ~4 U* b  {3 R  L8 k. D: t+ X
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();# O6 @- i9 Z( z6 b2 m9 i
  }
  |  K5 ]$ ?# X& C+ o2 m  T  void stop()( K' k5 k4 E5 O( c) J
  {
6 {0 J, R9 ~% z     sda=0; flash(); scl=1; flash(); sda=1; flash();0 z0 D" g8 a2 X# ^! o
  }% ~9 Z$ ~* I( i/ I- c- q
  void writex(uchar j): `- \2 P) e4 Y. `7 q1 y$ \  L1 s
  {7 f# J9 {  ^+ k- O* H4 R0 e
     uchar i,temp;- E0 A  J. X8 M- _* \2 B& E
     temp=j;! F% B0 R; v9 @9 g$ Z3 R' R, G% c
     for (i=0;i<8;i++){
1 z9 [" e. H6 O1 g        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; ; Y" B  t8 J: z9 A! |/ h% r5 m& n
  flash();
7 d0 l' a2 h2 E* B. ]     }+ I! Z2 I3 l6 J9 A6 a
     scl=0; flash(); sda=1; flash();
0 v3 p# Y1 D5 k3 b  }
$ B; J( ~+ n2 |* Z) W1 y& s! _  uchar readx()1 S' ^  }" X5 o) X& |7 G
  {/ z1 B5 }- s% {% G" C# b
     uchar i,j,k=0;$ C& b, Q2 l1 \
     scl=0; flash(); sda=1;
% d4 U) ?( ?' U. o8 o; Z6 F     for (i=0;i<8;i++){" r& k* X0 |% m$ W8 S" J. t  \
        flash(); scl=1; flash();
$ W6 s! o# U9 k4 J2 D/ c- z        if (sda==1) j=1;
0 j2 [8 m7 I6 L: ]) t  ^) n        else j=0;
, G) j( a, I  [( g5 c        k=(k<<1)|j; scl=0;( e% @. G  u: j3 j
     }
2 |9 C4 u* c& w$ K( t     flash(); return(k);
% a; F/ w. q- t& J5 j0 O  }8 }+ j/ V0 c  Z' x- g/ N- X4 Y5 _$ o
  void clock()7 P' H3 f$ ?0 x' y& M
  {) b% P# _. g9 \$ H, k
     uchar i=0;5 N" a5 {' |# s. K5 X. Q
     scl=1; flash();* v' @/ V: u: D) c+ V5 S1 k
     while ((sda==1)&&(i<255))i++;& {# I# `! D7 S, A5 N, k$ H
     scl=0; flash();
: P! u0 Y! x9 ?, f9 O4 t, a  }/ I  k$ \2 \) l" ^' B# r/ D' F9 q
  uchar x24c02_read(uchar address)4 y8 _0 H; U/ ], N3 K
  {% I" O5 O. [  Q2 p" D& x
     uchar i;
4 I" v3 J" \2 z: @/ D4 ?     start(); writex(0xa0);
$ ^- b3 ?0 q% |' r4 N' n     clock(); writex(address);) F3 W7 S! O$ z4 Q4 L! h  l3 [
     clock(); start();
2 h* f6 M; _6 ~$ e' s! r     writex(0xa1); clock();
8 R$ e% y5 a( W9 @( K  k# N, S     i=readx(); stop();
0 Y+ f+ ^, K# S: i0 k+ n: ?+ X     delay1(10);
; a1 \/ h8 j. }     return(i);
, e; \6 ?3 v) S  G7 ]+ Y' g! Q  }
3 A( k$ a/ d6 M0 Y  void x24c02_write(uchar address,uchar info)
% i5 B: N1 ~( H% G* g  {
; E# a) h, H0 w! o- N0 S; C/ L; n     EA=0;
1 p7 M# M" ?; j9 h" i' c' H  A     start(); writex(0xa0);
8 k8 {8 e' |7 }& ?$ l0 f     clock(); writex(address);9 T) L) T% p' Y- H* q  v7 b
     clock(); writex(info);
) x9 p$ a: K9 N( c( P- ?0 ^     clock(); stop();
# b6 a( S% P6 ?) ?9 \     EA=1;
& g9 A. k. V: k' v     delay1(50);% n- Q, j: K. P3 w& i2 ^1 l+ O
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
* l, N( X) B6 `& _8 u& V' Y不过你想学好还是找本讲协议的书看一下8 v, {$ m. z. ]9 S) |# Y
I2C协议标准( R1 M3 E5 E9 {6 L/ \
I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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