找回密码
 注册
关于网站域名变更的通知
查看: 559|回复: 2
打印 上一主题 下一主题

求助:IIC总线的程序LED没反应

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-10 09:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
求助:IIC总线的程序LED没反应  u  ?8 R8 i0 {; I, ~1 o
( v6 L# q' v7 I( f
弄了一天还是没亮,求指导,到底哪有问题??
  H! s, j8 l( F# P! l, S
  u+ f/ _8 i) X9 t& [
! _  p: z$ n, U- ?. q, X
* [' l6 z  `; n% ]#include<reg52.h>. v9 W8 J7 V" y" a8 P! C& F- k5 P
#define uchar unsigned char
0 k/ y' N0 A/ R: s1 {6 P#define uint unsigned int
! s$ O" I$ X- X9 m  rsbit sda=P2^0;                         7 M& v" d! q3 ~2 B2 W
sbit scl=P2^1;
, ]% u7 S2 Y, ^0 [7 P( `& k: Q8 q* avoid delay()
6 p6 i( P2 D, g% R{ ;; }2 G. I, J( z7 C$ f  }9 ^

8 W# P! B" [1 {0 Fvoid delay1ms(uint z)
- M+ [4 v+ I  y: H7 [{
. Z  u4 O: v* Q& k% X6 I        uint x,y;
& `$ C' d: z5 n. M        for(x=z;x>0;x--)! V& p6 q: }' @, n2 F
                for(y=110;y>0;y--);
2 S( d8 C" r* B; j" t1 @}
5 G. z( y  L0 N4 z0 A- s3 [" S/ bvoid start()  //开始信号; d9 E5 D% }+ w: w) X/ p" X- b6 K
{        
# d1 b7 X1 ~" ^8 v, L; w( z0 O2 c. p( A- [        sda=1;
, o$ b5 b% U9 F5 j        delay();
( o, j0 C8 e, Y9 B$ v6 n% G9 h        scl=1;
+ l& m: {( j, a& |! H5 X' @6 `7 C# |        delay();1 M9 s6 J7 L. i% O
        sda=0;
6 ~4 |; w4 e. C- i7 J        delay();
3 m, j: J& B/ @5 B}
4 J' _  o: [+ \4 O( Z8 J0 tvoid stop()   //停止; [8 }& l: H# R; M
{
8 C7 j* I5 u8 Q/ V5 S        sda=0;
# z3 j& a9 ~' ?" W( f3 f7 W        delay();
1 X7 `! C, W8 l% e        scl=1;- S/ _* z$ H- B: I6 H1 p
        delay();
" c3 |' r; [" f& b' a5 _5 v& ?        sda=1;
0 ]4 q8 q, h/ y2 M% R        delay();
  n, d9 l! f9 |. \}6 p4 g. L- @- }: S" c
void respons()  //应答
' A  |6 [8 |. L" \0 a& Z% k{
0 V8 z# i. w# K, w        uchar i;5 E; Y- v% N* e" p+ F* E
        scl=1;  [- z4 J& l5 X& h2 i! e  Q
        delay();, W: d; ~. y- N7 U+ V( h8 c
        while((sda==1)&&(i<250))i++;
9 o  ?+ ~3 j3 r: C( O0 d" j$ b        scl=0;# A% y, _( @0 n: [$ V
        delay();! F' B: K" `; H. k3 f
}
; ^" O8 U' N  Jvoid init()                          //初始化' z4 \4 t) I& u3 b' }+ s$ h) ]
{
1 `% N+ q& j' F1 @' s3 S' }        sda=1;
- S7 j7 g8 p) m        delay();( p. k4 y) q' J0 J- V5 x, v
        scl=1;6 j1 i/ k/ l" P& |$ w1 Z  ~) ?7 ^
        delay();$ Y  ^5 `7 J7 k/ w
}" p+ Y. J0 [# V" C% ~/ L" ^
void write_byte(uchar date)           //写数据
( ]0 A7 K/ e. r{
  I" q9 U1 h6 t) |+ N) [        uchar i,temp;- m# p; V. K! p7 I) I& a) L/ t
        temp=date;
2 g- _/ A5 g. h" O9 J8 |% f/ m- |        for(i=0;i<8;i++)( z* i$ r& ~3 O4 }4 S
        {. h* D7 A4 f  v
                temp=temp<<1;5 [3 @$ c- y- T' [# d' D  [7 T
                scl=0;' O" r5 P/ H+ h3 R  I, P& S
            delay();
4 s+ n8 F* a6 n7 n5 _: j                sda=CY;: ]. X% L: r3 F$ u5 B, U3 p
                delay();
; E$ M; K0 n9 [" @; f                scl=1;) C! Z+ z6 A  t
                delay();( v* j+ d" A) Q$ n2 B
        }1 H4 r( d* k7 N. t. S% t! c& L
        scl=0;
* t+ Q8 U  |6 J  u: ~        delay();
2 o: L: ]2 J, C" k, m4 F        sda=1;
, a3 o( u/ l1 I9 f) M7 P; `/ j0 R        delay();" i! _7 o) }* r6 p+ k
}
( z3 H, h1 ~4 e4 |uchar read_byte()                                 //读数据2 n2 F8 n  f0 E
{4 D* m9 C4 m& S3 C
        uchar i,k;
' C4 w' O1 o! R  a5 d+ K        scl=0;
( C5 p# K4 P" y7 r5 L! V; E1 C        delay();
: S7 h% S  J9 m4 Y/ r' e        sda=1;
- r; d. s+ x7 f" V$ x        delay();9 Y# Z6 O1 I2 s3 c' K5 V' o
        for(i=0;i<8;i++)
" }- A9 J3 H& O0 W8 n6 p" _0 R        {
1 C" f6 x6 ?; u  a                scl=1;5 W# L/ Y( q% [" I
                delay();        ' P- s$ i$ W7 v& v; t# q) N! [, n
                k=(k<<1)|sda;* u- r4 P6 s5 B% |$ W
                scl=0;
7 {+ O& U7 ?: F0 `9 c                delay();        # x! L, a! a* u6 l) A) r
        }
  B- w6 e" `2 j: ~( d+ s        return k;
+ O/ E1 P! z; r' V2 ]: i}  I/ b' t  W2 F& Z3 a8 U
void write_add(uchar address,uchar date)7 J; ]# T! U* e- u0 \) I* O1 |
{! z' P+ g3 c5 {# H% m
        start();
) r7 o, z* X6 ?4 u        write_byte(0xa0);) O* k0 A6 ^- O3 H9 I
        respons();, d4 }1 K' Y6 s5 t, U$ g. E) _& G) h3 u
        write_byte(address);
, v8 i# s) @$ m( W        respons();& A3 a( X$ X7 n& m: ^7 d8 O6 f
        write_byte(date);
6 |. w- ^0 o; E" C3 u8 A        respons();+ l4 n. O( i; r7 a# |* Q1 u2 K/ {
        stop();9 d/ n. n" ?2 _: ^% T9 h6 V
}
$ s# h3 a4 c5 q: m% @2 S) O9 ouchar read_add(uchar address)- j5 G" S# q% d, |5 J& m
{, r0 M/ e) d# z- _- M
        uchar date;
+ d) G  ?9 E; t$ d* q  n3 q        start();
( R. o$ j1 j7 y8 `/ A& h* t        write_byte(0xa0);; w$ o0 C" m) b4 {0 h' B5 \
        respons();, c0 K% c6 Y: \$ K
        write_byte(address);4 {, d; l. ~- J$ w  ~' w
        respons();
* t8 \; B% D; H4 r5 p        start();$ W9 m, X# m0 f
        write_byte(0xa1);
2 T  R) d  {5 \! i9 I        respons();7 k2 {" k+ M, k# v! t5 v
        date=read_byte();+ K; L  H$ y; m  {- u7 h
        stop();2 V9 X1 f+ p, G  v1 E9 F# y
        return date;
2 X! {" Z! v# ], X: q% y}$ w2 o4 M( P5 P( K2 O
5 t6 M7 ?/ b4 Z7 e' m
void main()
# C- [6 i, L  n{
% j% n0 T6 I2 S4 d* o# j        init();
* s' k5 z" a6 a. }0 z6 t        write_add(3,0xaa);* l5 {* R! C( {3 s1 |1 W: {
        delay1ms(100);6 a% \' ^) l* x# d
        P0=read_add(3);- Z* T8 [; C5 u) A' \
}
) n7 p$ ?; W# E
: G" q9 m9 D3 ~" B
* e3 ]* K4 x1 L4 N
+ O, i' j. r$ L9 u& X9 q
! v8 l& |# G! }- f( {

该用户从未签到

2#
发表于 2019-4-10 09:38 | 只看该作者
在12M晶振测试下,void delay(){ ;; }执行时间为调用时间2us(LCALL)+返回时间2us(RET)=4us, 而按照I2c协议延时应>4.7us。可以在关键延时的地方加上5个_nop_()语句(需要包含intrins.h)。

点评

好的,谢谢...原来是这样  详情 回复 发表于 2019-4-10 10:22

该用户从未签到

3#
 楼主| 发表于 2019-4-10 10:22 | 只看该作者
helendcany 发表于 2019-4-10 09:38# M% ]# R! h9 r
在12M晶振测试下,void delay(){ ;; }执行时间为调用时间2us(LCALL)+返回时间2us(RET)=4us, 而按照I2c协议 ...
# W( j  G# D$ y6 ~* L2 {  i* N
好的,谢谢...原来是这样
1 R/ R: B2 I9 E) Y! N9 r6 U
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-27 20:41 , Processed in 0.140625 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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