QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
5 E+ U, n& B- \* e0 M1 W4 b
6 Q' `7 X0 G* O# f[ 本帖最后由 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的读写程序:
1 P9 _% f- I/ B% Y6 X% o
7 v' t3 w) T4 f* S$ C
1 @/ [6 w8 ]; B  #define uchar unsigned char
" l1 C; ?! w; y" _  #define uint unsigned int" W3 b  _$ Y" Z: p( D' F: s
  #include <reg52.h>
9 H3 N; }" J9 Z+ p) E5 P' Z  #include <stdio.h>) G: i. R5 h8 j: F( p% w* A
  #include <absacc.h>
4 G7 f8 f& M6 x' m# t3 s5 r  sbit scl=P3^5;  //24c02 SCL' P2 _, q) i/ U
  sbit sda=P3^4;  //24c02 SDA' g+ t/ `1 a9 d
  sbit DOG=P1^7;  //狗
; L% p/ {. d4 y9 Q# U% X  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据, a4 {- j6 m$ v1 A7 r; Q
  void x24c02_write(uchar address,uchar info);  
! K9 D6 q' r3 s  //向24c02的address地址中写入一字节数据info
0 I6 V! A; b, h  W4 H" J  void x24c02_init();   //24c02初始化子程序
* `. P2 Y# M7 \2 y( J2 Q: C1 L" w  void delay1(uchar x);
; W6 Y* [8 o, M) v/ k0 j  void flash();
+ V$ y5 L# m5 N1 G- N: K' Q  void x24c01_init();( h: u; k* ~! `# W7 R7 b
  void start();
3 H, Q6 m9 I. W2 t: p  void stop();9 G' C7 ~* N5 s* U/ _! @! V0 X" }
  void writex(uchar j);2 G+ Q- h1 l  t/ _9 w
  uchar readx();
; v. Z0 J( f4 X, [9 m; R  void clock();
5 f  J2 t/ e. h3 M% b  void delay1(uchar x); m+ {# I' b, Z& b6 W. v- u
  {' ?5 g& e' h  ~/ b3 W
     uint i;* K% q+ v1 ^/ K1 T
     for(i=0;i<x;i++);  H7 e, c5 A" g* H/ z  Q
     DOG=~DOG;3 N1 V: z+ n" e  P" |: ]- }$ @2 A# C
  }, h1 [, S) A7 H0 D1 d+ D/ o
  void flash()5 f; l" ^& q" ~2 j) h+ I8 u
  {: P7 H. b) d1 u% [2 s- }8 v
     uchar u;
; V& f8 x1 q7 Q1 ]5 x2 s; b" r     DOG=~DOG;/ \0 b7 I) q: k( I' w9 I4 H& D
  }7 B5 o0 i6 j$ x2 E
  void x24c02_init()( Q1 n5 S! y5 o: T5 r. v% m8 k
  {, P  T# m5 P# b# x
     scl=1; flash(); sda=1; flash();
! Y1 S8 e6 ^' D5 p) @' ?: g. m  }. }8 h: q" p& x5 P! f+ L! I
  void start()
- o1 A4 f& [" |1 S( C) J3 p$ w6 H  {3 @% c! @) k" n' g; w1 h
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();0 o% E8 i; G9 K: Z) r( `  a, l4 z- q
  }* E0 C# E) q/ p9 q; @5 W& Q* R
  void stop()
! J9 L9 O: f0 w" w6 t6 S  {! @8 f! [5 q9 G3 Z* w. [. o
     sda=0; flash(); scl=1; flash(); sda=1; flash();
9 y8 C- ~9 z1 ^  }3 u+ ?- c- `; f$ t# G
  void writex(uchar j)
8 d4 s) v8 @! f' u( S8 w7 q# Q. Q  {
% v- o( N0 E, z  ~" l0 c     uchar i,temp;* v4 T& z* W& q3 B/ q, _2 d
     temp=j;
( ~' p, p# L( W- G! J     for (i=0;i<8;i++){
! S$ S" k* Z1 p/ i& s        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; & \& E+ b" M6 M' p) U' Z7 X0 C
  flash();7 s5 J5 ~" S7 G( V" a% L2 J! A
     }
, h7 W/ ]; Z/ D, G: r# G     scl=0; flash(); sda=1; flash();
0 m1 w$ g3 v2 E0 a( c; q5 K  }
6 p- v* G6 h. M  uchar readx()
; ]# j1 F  s  o0 l: b  {- T( p! i+ j+ B, F8 |6 I  d
     uchar i,j,k=0;
9 `* S$ B% b  X     scl=0; flash(); sda=1;1 b  h0 s. z) }* e
     for (i=0;i<8;i++){4 f/ c% m. v! N. ~; S7 [
        flash(); scl=1; flash();
- D9 t: O% S& m. I, `1 q        if (sda==1) j=1;/ L) L! o0 {2 G3 x& b" p8 e, s
        else j=0;  I6 o, B" f7 h+ O& m& E
        k=(k<<1)|j; scl=0;3 T( ^) r5 Z- U0 o3 r( T
     }
3 c$ L3 l8 O' |1 M% x/ P- E, m- A) H     flash(); return(k);
7 W; k# B$ M, o  }
* l& U6 o5 E: ^: h0 P& ?/ |. v* C  void clock()' U' {" k* w/ |# _' j9 Z
  {
$ z. Z' i5 l* |     uchar i=0;
5 a6 j' E& h( k$ }. a     scl=1; flash();
, C4 \5 [" F' e     while ((sda==1)&&(i<255))i++;% r2 F# s( l7 ?2 s$ y3 f  {
     scl=0; flash();
9 x' D, f. e$ W% a# a  }
2 i7 V' T4 r. [7 `  uchar x24c02_read(uchar address)* l% y, [' \; i" i0 J& E
  {
( e9 [4 h- ~3 `- [4 z) q7 `# h& I# x     uchar i;/ S7 |8 o2 P: m6 U
     start(); writex(0xa0);
' @; L# M0 G( H# X: Q     clock(); writex(address);
+ `9 \$ `! y# M4 a6 ~  O5 @7 ^     clock(); start();
7 x2 H! s2 ~5 K% _; T4 U/ }5 o( T9 d- a     writex(0xa1); clock();
* ^' b' K* I- \# ^" I  {     i=readx(); stop();
$ y3 X) q' N( }  o: E3 e4 V     delay1(10);
- A4 X; V: s) ^5 U& B' t# H     return(i);
4 V; x; ]' r# t/ d( d8 u  }/ b( l# `' P4 u2 m( _4 G4 n4 _# g
  void x24c02_write(uchar address,uchar info)
3 M$ T; f9 T! q% B2 t5 ?$ ?  {
* N6 @% d; D: n0 V1 F! X     EA=0;6 B2 S' }$ p3 r7 \
     start(); writex(0xa0);4 r( B* O- n/ r% H9 \" b
     clock(); writex(address);
( f& @' B' _& X( c  A# E6 t     clock(); writex(info);
, u- a$ _: ?8 |& h! P9 M! F' `     clock(); stop();
. v! p4 p" q- T% r* Z* @     EA=1;
, L: r& {8 Y! S" c, {% `     delay1(50);
- R. i8 l& |* j% M+ F9 _  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。% Q! B. |, @! A9 |6 ~% k
不过你想学好还是找本讲协议的书看一下
6 P$ z  A4 N% O. xI2C协议标准
2 a# B+ @: S1 Q% a" ^' o I2C协议标准.pdf (844.19 KB, 下载次数: 4)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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