QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢/ n1 a, h9 `: r& ~6 ~2 ?: U
, `0 R# `) f. d# c4 r. \
[ 本帖最后由 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的读写程序:
/ Q6 M/ p2 x7 P. k6 G
# h& q& r* f& V# H" s2 z# |2 |5 [: n
0 B4 @5 t2 o1 Y- k  #define uchar unsigned char
. k" D& \3 q& ]- r8 A( t. x/ O# D  #define uint unsigned int
' o5 C5 T1 Z- ?% |) g: h  #include <reg52.h>
) \' j2 j! l% o9 E, ]! ~: N  #include <stdio.h>  z; ^  q: ?; `$ n$ e
  #include <absacc.h>
' Z! v3 [3 b$ q/ x+ l& ?  sbit scl=P3^5;  //24c02 SCL! I- N8 S1 ]. f
  sbit sda=P3^4;  //24c02 SDA( C) K2 e: U; o6 E& r$ |0 o
  sbit DOG=P1^7;  //狗
% C* N% a$ E' x/ A1 h  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据3 O% H7 |7 i- _1 ?
  void x24c02_write(uchar address,uchar info);  
8 O1 t. z9 r  K8 R* a; M8 S  K  //向24c02的address地址中写入一字节数据info
+ Y9 D1 g+ S2 Z$ Y7 ?( t8 Z$ e  void x24c02_init();   //24c02初始化子程序# Y( _7 n& H8 T0 R: E% j
  void delay1(uchar x);* r9 x) R5 F1 y  @* v% r7 ~* x
  void flash();5 a: i" I: f, y9 n- k9 a& t
  void x24c01_init();
& A) X0 P! J9 D* i1 M8 g6 S  void start();: j) E4 B7 t# |/ ]( S/ K
  void stop();
# `0 f8 J# X" u& t$ P  void writex(uchar j);0 \% O( F! u* P4 ?: {
  uchar readx();" J1 J$ P8 D7 k- j! D
  void clock();
4 Q! O$ q* C( @% s& L8 C0 M, i6 A  void delay1(uchar x)
& R# @( @+ P. s# b  {  z6 e. O$ ?: U! f, d
     uint i;
3 f* w3 U" E4 {7 \     for(i=0;i<x;i++);
- \% X  n9 n. P& v( K% p     DOG=~DOG;
: ^0 _4 j1 T4 Y1 b8 {# O, o6 H) S  }
  z3 z* r  W) ~# N  void flash()
9 R! Z3 R' L+ @- z5 D7 y3 n! {- |7 ?  {! S" g) j- N1 y, b+ _% A/ A
     uchar u;2 Y) }+ W1 B9 k% N" |
     DOG=~DOG;
5 b. ^% u( l' g" N9 _4 Z  }- s+ v5 P, }5 [/ {# O+ n
  void x24c02_init()" F: l$ S. N4 b3 v7 b
  {
, x! `* w2 `7 O! f; c; Y     scl=1; flash(); sda=1; flash();
% ~# c/ d& M0 X7 ?- G  }- x+ v/ D/ J7 O9 L+ g& f: j+ [
  void start(): P0 V$ }' G' n% Q' d4 p
  {$ f: F  u  X; r5 m9 e
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
  w: ^1 X- d* K$ R- [  }
) t3 G6 J8 e8 `9 r  void stop()* Z  K, o% y: z$ T
  {% O; B9 g/ i% b
     sda=0; flash(); scl=1; flash(); sda=1; flash();6 [# K/ g/ \& x( i3 @  L, J
  }
" f) a8 \2 @* D3 e  void writex(uchar j)
6 D5 m. ^7 w& ?- n" B  {
/ D1 }* ^& T$ Y" ~     uchar i,temp;/ @4 `4 o7 X: ?, a* z0 C/ @2 {. w$ h% ?
     temp=j;
, _8 d7 y7 z1 a6 |0 h; K     for (i=0;i<8;i++){! q8 j+ _- _# ?- R
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1;
, b5 z; [9 v2 G- Z  flash();
8 \8 ^9 t+ \, w  X2 J     }% q( a1 A5 h2 ?3 {0 e
     scl=0; flash(); sda=1; flash();
- k: W6 r- v7 V  }
! ]8 }2 i- q+ a% Q  uchar readx()# X" M& D$ O2 [( Z8 `
  {
- A& O9 C  \4 |& r; l7 T     uchar i,j,k=0;
! Q+ b6 }- S' }2 j$ x' A     scl=0; flash(); sda=1;% {) ?2 {5 U+ d% }' ?2 e
     for (i=0;i<8;i++){! o% [. y/ N2 y, C  r, u
        flash(); scl=1; flash();2 R6 o- ]- h( j- e% H" q- R  e
        if (sda==1) j=1;' V- M9 K. N1 y' ]1 d6 G
        else j=0;
0 f# d2 Z% X% R; _        k=(k<<1)|j; scl=0;
0 G: V  R) [- s+ r1 f8 s' a     }
: ]  j3 [/ M6 X. E; z5 c     flash(); return(k);  |3 B1 h! a* A% f# `/ a9 H
  }
' U3 V7 M% a! h; F2 m. d) D4 W  void clock()
7 S% h9 R3 G" Q( L, ~  {
9 U3 S# B2 e. o6 m) L0 t% B8 B     uchar i=0;% N) R' M& C( K7 R# }5 V
     scl=1; flash();
2 D% V# u7 v. s4 v     while ((sda==1)&&(i<255))i++;3 Z1 d9 W' e+ A# c* m2 ?
     scl=0; flash();
1 v9 U2 {% i" N9 |+ I. i, S) v  }
' u+ f# E' t2 h0 G  Y3 Q  uchar x24c02_read(uchar address)2 S5 V6 {0 b4 x! c7 k& C
  {, M$ b( t* X- r# x
     uchar i;7 ?( U! A: B% P  K! t% P
     start(); writex(0xa0);
& f6 S; F* M3 L% ~9 j5 q0 Y     clock(); writex(address);
$ f! e! P) d1 r- @     clock(); start();
- k5 ^# R9 b" |1 F* H     writex(0xa1); clock();
7 U6 @/ @- ]6 ?) ]$ ~( P& ]     i=readx(); stop();6 J4 J# J/ }% o
     delay1(10);! P% M1 I. m" [# b
     return(i);
$ ^0 o8 h8 f0 @+ D  }
' U3 @+ o1 A7 d/ U3 N5 b  E' l  void x24c02_write(uchar address,uchar info)
& |! t5 s) m: U* v4 z+ Q% C  {
4 F2 U$ e# E% N7 H* J     EA=0;
; K* c5 I7 u" ^* |% V     start(); writex(0xa0);, d# x- a( o; u* M1 U9 U4 Y+ Z2 r
     clock(); writex(address);
' \4 O/ R; a8 c+ t7 n; T6 t8 B     clock(); writex(info);) L! \$ D, [/ r
     clock(); stop();; r2 U" a7 H, S# H& v- H
     EA=1;6 w1 |9 u9 J% i) W+ B; S' Z) b, x
     delay1(50);; D. `5 U. n, ^8 h( [
  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
% \, {  {0 W4 T7 E/ z1 S6 ^! l& F不过你想学好还是找本讲协议的书看一下' z: R$ K  j( s" [& c, T9 r
I2C协议标准1 F( r9 m& F: G  A: M
I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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