QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
2天前
查看: 1718|回复: 5
收起左侧

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

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

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

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

x
我想学习I2c的编程,不知如何入手,哪位能否给点儿指导,谢谢
2 I, B8 X9 R+ B1 E. m" u* K: c  n
[ 本帖最后由 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 j& W! U( @8 L: n, N9 E! o* w# @5 U% g5 j, ]: E8 t1 O. J

6 L" U* O" C7 k/ `1 g  #define uchar unsigned char
8 l7 M) v" u0 M1 Y' U6 H8 L  #define uint unsigned int
" m  R/ X( a' h* ~. ~3 \# Z  #include <reg52.h>
8 h) d/ t( A9 U; s$ ^7 j: l  #include <stdio.h>
5 z& ^5 C9 Q! P9 S- Z. b% O  #include <absacc.h>- Y- ~& R# z: _( v' \
  sbit scl=P3^5;  //24c02 SCL
* l7 F- v8 `+ u( ^* ~+ Y4 |9 e  sbit sda=P3^4;  //24c02 SDA
# U- j$ y& Q) P1 ^& c  sbit DOG=P1^7;  //狗0 M  G) h8 I% |1 w0 M; I3 j/ x
  uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据* x' ?: o* q0 _1 U$ n: [9 t" ~
  void x24c02_write(uchar address,uchar info);  
# R! v! {, n) q2 K- l  //向24c02的address地址中写入一字节数据info
/ {0 F! |$ Y' z( f, Z7 I  void x24c02_init();   //24c02初始化子程序
/ A' P" b5 O# @' \  void delay1(uchar x);: I* Q3 T. {% t2 ~( {, h% j) B
  void flash();8 g' ~0 I" X1 A7 V: j
  void x24c01_init();
% {; f+ ^! v$ L6 \; z  void start();
. Z% d" R/ r! m& A! n4 C7 Z  }  void stop();4 U. ?/ q9 ^* x' _4 y
  void writex(uchar j);) Z1 ?8 N. x: c. c8 R8 W% F3 e6 _' j
  uchar readx();
! A4 P7 ~/ |  {( _. X7 B* o2 ~  void clock();8 Q+ R0 K3 H( W* D0 h# l
  void delay1(uchar x)9 G9 O% ]( h- T% D
  {. @, }" O4 n6 m! v
     uint i;
, E4 {2 L0 n% p' t9 m     for(i=0;i<x;i++);- K5 X' M( `$ o: `0 C& J! Z
     DOG=~DOG;7 N, [2 b( a4 D. q. y- z5 [1 |* c
  }7 b- o4 A+ S7 ~4 ?# m  Z* i* e' G
  void flash()
( }. ~/ [* K# J1 `- k* _9 s, c" W  {& a9 Q" L! d( w" n0 L. V# ^
     uchar u;
& @' z1 z8 X$ F0 W) x$ f     DOG=~DOG;# \! J; J/ p) j8 b5 U. E6 \
  }
; h7 p1 Z& N: V1 M5 @, ^  void x24c02_init()
1 Z/ P/ }) k9 w6 N1 f! t% D  {
4 o. o" ~" G3 Z" x/ R     scl=1; flash(); sda=1; flash();
7 u. B' V1 ^( F0 J/ z  }8 W' j) ^4 S1 c; H3 k
  void start()& j3 A9 V, s; I
  {$ u( e) C( `; X2 n  ]. C
     sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
& A- D, E& F  Z4 ^  }# L7 u4 Y( e3 A. B, l* A- L5 H
  void stop()
8 R% G; M; q, t. ?3 A  P, V' g  {
5 Q# ~! W/ _6 [( W( R     sda=0; flash(); scl=1; flash(); sda=1; flash();) T! \& M+ y2 n
  }
! r1 S4 p+ @# Y; G- L, l  void writex(uchar j)
4 m5 ?( {' A- O$ X+ Q7 S  {1 \) b# q/ ?% J- p. m$ [
     uchar i,temp;! v/ {% f7 G, D: r# i- a5 n) `
     temp=j;
9 Q* m8 b/ Q" C     for (i=0;i<8;i++){( q( `' \) `# w! @7 T  u
        temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; 5 t! A- u- ~& C: r& R
  flash();8 E) v" X+ Q  F  M9 G
     }
% l* [- c4 t$ ^" X- f, B     scl=0; flash(); sda=1; flash();
' @. ^) s' x2 r) w2 [  }4 i) H- F+ V7 v+ u4 V
  uchar readx()
0 u# P0 \/ q: X  {
" f  t& u4 g2 z/ p) L0 C/ r$ Y     uchar i,j,k=0;
7 \' _0 w& R" R6 G0 r     scl=0; flash(); sda=1;
* U- z& [+ N4 C9 S) _     for (i=0;i<8;i++){
* S* m" T4 p3 T* e% Q& V        flash(); scl=1; flash();* a2 m1 T; m) ?
        if (sda==1) j=1;! N1 N, J! W  A# E  m7 A
        else j=0;
6 C% i2 m& X; O+ O        k=(k<<1)|j; scl=0;% \1 K% s+ F# `' d8 L
     }
8 r  T$ l% F0 I0 T# Z     flash(); return(k);
' _+ L. e' n5 ~- m8 H0 L1 _  }: r( H$ e: k# e" i
  void clock()
  V* S  E* ]3 z0 e  {
( q! U5 I' n! D- m1 K     uchar i=0;8 q& s" Y0 h* B
     scl=1; flash();7 K6 \* {+ f" K4 n
     while ((sda==1)&&(i<255))i++;
1 }/ j% @( M. I' I8 K- Z4 K+ O. s, z- @     scl=0; flash();/ k  F" i3 X4 g5 w* f* w  J
  }
" A# ^! g) f* K% A9 U+ D  uchar x24c02_read(uchar address)6 s" K/ f7 Y( u4 L3 W; K$ u; |, _1 A: J
  {3 T2 ?. F5 P( c: [* m( m8 O/ P
     uchar i;
- l4 e  V! [* K" ]  L/ j+ o" O0 R     start(); writex(0xa0);
6 H& `! g- c6 a" E     clock(); writex(address);2 F8 u7 w2 G6 l
     clock(); start();
  s1 g1 s" s/ ~9 p     writex(0xa1); clock();
5 @  Z- w  \0 C* S2 a% r     i=readx(); stop();
0 G: E" X9 x+ B     delay1(10);& w+ t7 M/ g6 n7 `# X
     return(i);
1 R9 u$ K* d+ b9 M, H+ Z  }* s2 a3 V, z! q  A
  void x24c02_write(uchar address,uchar info)$ ~, h3 b+ V& m+ D+ T% C
  {' c0 S! w: d+ B& ]- S5 l/ s
     EA=0;6 V$ C- L: g8 _/ Q1 Z. ~! ]* @4 s' i
     start(); writex(0xa0);
$ H. U% G" |% W     clock(); writex(address);
5 L3 s% M! M  @0 Z     clock(); writex(info);
( |1 g8 C+ e* {4 Y+ [8 K) c2 X     clock(); stop();0 V0 e3 t/ n% G$ g( w
     EA=1;
% [; n8 d8 B- }3 G% A5 S8 `     delay1(50);
5 L0 t( m2 ?0 o$ d6 ?% c1 z$ p+ \+ o  }
发表于 2008-8-1 21:24:14 | 显示全部楼层 来自: 中国江苏苏州
i2c 的软件模拟程序不难的,网上原程序多的是。
% a' F# D6 k2 X7 s# l不过你想学好还是找本讲协议的书看一下
$ H4 E. M; M0 ~) n, j1 e$ F! FI2C协议标准
6 M/ x& `% E+ ]) ^0 c5 k! E4 K+ s I2C协议标准.pdf (844.19 KB, 下载次数: 3)
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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