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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
求助:IIC总线的程序LED没反应
* R% ^: \* x) z9 b& D+ [  q  Q" Z/ o( v, ^! D( R) P
弄了一天还是没亮,求指导,到底哪有问题??8 t! w: J$ D/ k4 _+ j% u3 b/ e* \
$ R6 X0 _2 i0 n/ {3 E. i

; f' y4 G, N' i% [4 I7 l) \/ |! G' \1 F$ X# w; G3 ^8 a# K
#include<reg52.h>
6 [1 Y: d9 x6 Q  T# F* U#define uchar unsigned char0 v3 J8 O  F- C% W2 A
#define uint unsigned int3 g4 m& }/ M4 Z& U& d) `) y
sbit sda=P2^0;                        
; C! |* [2 u' m" C8 Psbit scl=P2^1;
( t3 b% T, u2 L& E( Nvoid delay()6 U; K* M% |4 t9 ^& u, @' n, G% g
{ ;; }, g4 R& W, K  m) J9 F, A% \: K; B" W

3 v  t7 a( D  P* c5 F# b5 |+ O% Ivoid delay1ms(uint z)
+ ]& u3 j3 }* ?9 ?{
. `% w8 N' r: z  m/ e9 ^$ ^. w        uint x,y;- M( S1 ]4 {2 ^0 y- w7 [' m$ q  O
        for(x=z;x>0;x--)
+ Q  u" F+ ~- B3 p5 e3 u( ?( g                for(y=110;y>0;y--);
0 [! n% Y) ]1 A/ m8 E8 _- O( \/ B}* i- j' e- W5 Z2 T, e
void start()  //开始信号. o7 F. I- o6 R5 Z
{        
/ E. Q1 k- y* w# G3 S* b( i7 U        sda=1;7 R4 l% j8 u, a5 m
        delay();4 f: ]( {2 i) ]# i/ c: N9 c% l# o
        scl=1;5 p3 ]+ u5 {% b( H! d
        delay();
' Z8 ~& c, S/ y% u; D- N        sda=0;3 s" h: O! h2 F/ p" O4 I
        delay();! N6 t! S9 _$ I2 i2 F( C3 ?
}
: I6 I+ j" [- n1 z' `void stop()   //停止0 ^' @  ~1 [' Z% L. ^
{
4 g( D9 ?! B9 W+ ^$ B4 c        sda=0;
- j5 j( f7 F# h% I        delay();
% G0 ?8 w& U4 _8 v        scl=1;/ C" _; i# z; T/ B0 i# M
        delay();  H5 n- v. X+ K5 p. `4 @" I8 ~
        sda=1;9 R) Y8 y. E- ~6 l
        delay();" I8 A, R8 u2 l8 ?3 v: D7 _
}4 X9 `6 @8 ^8 Q! S% j' M# ~
void respons()  //应答
  U3 T5 D5 d- W  L  u9 [$ x{
' `$ D' v9 K4 a# z  l; P        uchar i;
& t; ^  j2 n7 R, X* Q        scl=1;
& ~% P* N5 N9 r7 o8 c& F: a( ^' P        delay();' G) r# n9 Q$ r8 @
        while((sda==1)&&(i<250))i++;
2 X* o- `* ?$ B' K        scl=0;  Z& t2 v2 V0 L5 c. s4 P" u1 {- A- a
        delay();
, S  t2 S) C' e% K$ q}4 q; `# ~- r0 H4 J4 l/ Y
void init()                          //初始化
4 _: @$ ]1 H% B7 p1 R{9 A/ [& h; |3 o" Y5 V& M
        sda=1;
1 v4 N4 ?  F, K% T        delay();
9 J! H  n9 O1 j+ j- m        scl=1;$ \/ e2 T& i! c6 Z: z
        delay();
# B" J9 ^- v4 [: y( ^}
# L* ~5 ?- Y5 Pvoid write_byte(uchar date)           //写数据
5 Z0 r+ O  _, B1 y{1 u, c, p  s6 ?, {, s
        uchar i,temp;
7 F9 N: s, [+ i9 g        temp=date;+ ~1 L/ r/ r& z1 V
        for(i=0;i<8;i++)
. d, p; u' b3 f- X9 n        {
/ T9 r) G3 X. a6 {8 u0 |- z. b                temp=temp<<1;
# q! M. ]8 l7 x" n' @' L1 u                scl=0;" D! U0 x8 R2 g# A+ C8 i4 q
            delay();
: O- n' T6 w" q) {7 t) `                sda=CY;
/ g- l- o' I  m' [1 ?                delay();
6 o9 X- e3 S% E+ H$ v; W: M                scl=1;% h8 u; {$ w3 c6 r& z1 |# y: b
                delay();- X& I8 X% p+ w  @2 m, X5 s
        }
/ d9 i" G: e) f# M& X- L$ S        scl=0;
5 T. j& Z) x" Z( M        delay();
" ~( k) x$ l" A3 N0 f# |4 Q' ?        sda=1;1 M9 y1 C' F" q# K8 x! p
        delay();
9 ]" W2 i  p8 h}6 u0 ]# n/ p4 H$ R) H, I) d
uchar read_byte()                                 //读数据) M, A  R7 f$ X3 \# x
{
1 a/ {# x/ V0 U% H9 d        uchar i,k;
* B4 m% E; V( }! Y        scl=0;" J* c0 X- t$ V# r, j% L1 J; \2 u
        delay();
) y4 ?, D6 }. P7 h% s& y        sda=1;" i% d( B. G0 [1 M) P
        delay();5 Z  O$ `6 a1 i' p% F& a4 \
        for(i=0;i<8;i++)1 [, V2 \7 z3 p) l* q
        {5 m' D! R; I9 ?3 w- |, |# F6 b
                scl=1;
- v/ e1 v& I! e6 B6 R& U) _                delay();        + |8 p  V% |. |/ j1 e. ~
                k=(k<<1)|sda;7 D! U. B1 R$ U0 I
                scl=0;
0 i' b2 W# b0 v. q- d                delay();        
! \! H* P) m' r        }
# Z2 j3 I  M, s        return k;
% K  v* V1 o3 D/ s3 D0 }% Y}
) w* n  `' }$ c' t! Y1 vvoid write_add(uchar address,uchar date): [7 }# i% r; z  H4 H
{
$ P7 Z( ~5 N# h( s  A( t        start();( V2 l7 h) r9 P
        write_byte(0xa0);# l9 p( P3 r' a% W  y( M
        respons();/ F" b8 J: ?9 O; o% R1 Z
        write_byte(address);
9 }0 H, U; T3 ?0 J/ v! E        respons();
6 B' S. j  x( \, ~        write_byte(date);
9 }  M- p# ^# o5 y2 h        respons();
( `4 o/ e6 a+ }) _- \9 ?( w        stop();
2 K. ]% A3 L& U. m* X" X8 b}
" x+ U$ D& x2 m& X! ~uchar read_add(uchar address)
8 P! T8 I( N  X  }1 X8 v* d. S{
, L9 J: J. k7 \8 Y/ C1 W        uchar date;
3 k) o/ c- U8 {/ D        start();
" J+ D+ _. m+ X- J, Z5 X) w0 Q! ~        write_byte(0xa0);* l- U# @1 @( X
        respons();9 w4 I2 y, R8 [0 {
        write_byte(address);! C% P2 N: a: v7 }8 O9 v
        respons();# v9 q5 L3 M* o' D" V. G! L" m, v$ i
        start();* A! Q# o$ p( B2 \1 o  N9 V4 \% @" p
        write_byte(0xa1);
3 ~- Z& z7 }4 ^4 n) y* H        respons();: @  X: V( F2 v9 ~# [7 H
        date=read_byte();
2 C  ^; R( `- K) s5 e        stop();
/ ?7 f' h; o& x' c2 b* r        return date;
. X% `8 w5 f- {& Q5 x- B/ W5 Q}9 _9 o" }% C+ R0 i
5 Y" Q. i2 G7 V
void main()
: S7 X! _  r. ]8 b4 y{3 H! L2 J+ T7 v# {. H/ S  n2 w
        init();
/ s: W( _& J3 y8 r! @        write_add(3,0xaa);8 P; `* d8 f& K2 r
        delay1ms(100);; ]2 F& i: x6 B. S
        P0=read_add(3);  E( ^4 {$ n9 Z: L
}
: z7 ]# ^6 Y- U7 _( p! A; p
( D# r5 P! O) }5 n3 b

! X/ N$ O/ F- q5 v/ J& j5 H7 l3 N

) l- e: E! u* G4 K

该用户从未签到

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
, y- t# B6 |8 B# p& v1 Q% R: }$ Q8 ?' ^在12M晶振测试下,void delay(){ ;; }执行时间为调用时间2us(LCALL)+返回时间2us(RET)=4us, 而按照I2c协议 ...
3 S- {8 H. Q: b; ^( x
好的,谢谢...原来是这样
! M7 o$ r4 Q0 F! {$ V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-13 11:44 , Processed in 0.140625 second(s), 30 queries , Gzip On.

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

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

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