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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
求助:IIC总线的程序LED没反应
7 Z# l- \( U9 {( e4 B$ Y
; {1 u3 m, o/ X1 ^7 F$ x- O5 H弄了一天还是没亮,求指导,到底哪有问题??
0 r1 k# X; {0 p1 S) W' p! H1 \( Z& \* L3 C+ J# J4 n7 R

9 L$ V& r4 R( S" i3 E" \5 q  z- H, ~! n) X' }& i. C% B1 q2 V
#include<reg52.h>
$ ~8 ?1 R$ U6 V" @. H$ d#define uchar unsigned char
7 T$ R$ i: ?$ d' Z. L" h& I* W#define uint unsigned int3 L; t' ~0 `! }5 o8 D8 r2 v) d
sbit sda=P2^0;                        
3 w9 b+ ]" d, P* R- k7 r( F6 Csbit scl=P2^1;  ^/ Q3 a' Z* K) ^# \( |
void delay()
3 {9 b/ _; Y5 c0 {{ ;; }! d9 d. ?: s9 K# o5 y" ~$ A3 w. w
, k/ ~' n: l* ?# z0 B! M$ [, V5 i
void delay1ms(uint z)1 y. C  L( W7 z, H5 M
{/ }1 c: w0 \. V! w
        uint x,y;
3 U% t& ?1 S( h6 t3 |5 W1 X: X- B7 m        for(x=z;x>0;x--)  g- {+ h  a$ c
                for(y=110;y>0;y--);4 C% c- [. @  ?. ^
}
. B3 l# Q# y% v* }void start()  //开始信号
+ F! E0 m) q3 d0 K2 v$ Q$ ]  e& V8 q5 C{        
6 y4 E1 E& B# v2 z# Z! J        sda=1;
9 B- R+ @* I- L$ |8 @9 K( b# b# `        delay();
8 C8 T" J; H: S% M$ d* k        scl=1;/ N+ ]& _" m# {$ i9 e  t
        delay();7 O! i/ q1 s' h3 e, R" M. v/ C
        sda=0;5 b& J6 t7 k2 |. r3 w
        delay();$ h0 K8 J6 f; Z+ j' ~/ o7 \
}  r0 B" I3 G/ {8 D
void stop()   //停止: p- Q; J9 P3 P% y* P, z( U7 R6 n
{1 U! z) V8 r& V3 Z  j" A
        sda=0;
4 ?! s0 Q& I8 d7 e2 q1 i$ q        delay();
/ B4 X* w5 H9 Q! z) k. y5 h        scl=1;
: O: ^4 J3 m0 x1 p# e7 e        delay();& S* [2 _! J7 \
        sda=1;- x3 E8 \) I: d! M! @! ~2 h
        delay();
" Y% s6 ^) T4 x1 U. z}
1 x. ^$ t! o1 V; _' G6 L+ @; ]void respons()  //应答
, ?3 e; \) h, G! `9 R1 z6 ~{
/ l0 k$ M" i7 ^$ o2 X        uchar i;
. f9 ~( z" W) T1 L$ M        scl=1;
# l& t) j+ J: B0 f3 q) a% a        delay();( i" Y' M; W+ t* `
        while((sda==1)&&(i<250))i++;
. k- n. K1 P2 O5 _+ Z" @6 x( n        scl=0;
! Z+ t6 _6 t6 R$ W        delay();
2 m6 ^" {$ Y; g5 B# \. }  @/ j}
3 P5 ]8 `! F" Zvoid init()                          //初始化7 K9 q7 n9 W# E
{
  L( q& n$ b, }0 O        sda=1;- b, L1 `: q8 \1 E
        delay();
3 k$ A  A  }6 X+ G+ V        scl=1;; W4 S0 e$ |1 |; N* o/ c
        delay();
7 T. `5 k5 \1 L6 ?+ d2 f3 v- h5 q2 `}
. s" W; e1 S8 M" Evoid write_byte(uchar date)           //写数据
0 P4 _1 |9 M( ~1 I/ D5 i{: K* b  @. f( ~
        uchar i,temp;5 z7 z* _: ~5 s1 [, [
        temp=date;! Y( K' p+ V# @0 D& j
        for(i=0;i<8;i++)' d# T$ e9 w9 M& M5 ~$ z) n
        {
0 @. u4 s/ i5 I# f& Q                temp=temp<<1;
, F/ l) v5 o6 B$ _) K) [) l) L                scl=0;% }6 F2 J! d- u3 j4 ]. }5 F
            delay();
9 N# _" x0 A" b! u                sda=CY;# H" {" y7 Y& t% a
                delay();
, A0 A4 m" D" I5 d- h5 x. }                scl=1;4 @4 X; P; m+ k( }% G! X
                delay();2 O2 A) l7 S# i5 J( u
        }
+ C+ N; J( B1 G# ~( }5 N        scl=0;
$ {& [2 a) |( }9 S2 u2 \        delay();0 Y& n5 L3 U' d( h4 W9 `
        sda=1;  K/ c7 `8 e" e
        delay();
5 l% O: m* e/ R: S! a& J0 F* C2 Z}% q) r& m: `: ^1 X
uchar read_byte()                                 //读数据$ t' y* X  W8 T- b( ~2 }
{
) w: e  f5 V  O# M# [5 H9 l        uchar i,k;, ?' L( ?- n- B, J
        scl=0;, [6 F( x" {8 u
        delay();% b9 A! }4 J) v; p
        sda=1;
( s" B# ?( p; V% I        delay();
/ T  f* u$ D* ~/ a# }        for(i=0;i<8;i++)4 ^2 J) e# U2 [. l9 I
        {
1 D, e# i+ N. D- o4 u5 |                scl=1;2 [# Y! ~- b$ M
                delay();        
/ \; m+ `* J3 S( z9 |6 ^2 O                k=(k<<1)|sda;* }' u8 U) {' D9 L& x
                scl=0;& c! A' a- d7 J& K
                delay();        $ c0 V; Q7 @, e0 e
        }0 k9 Y4 G' V5 j. M! j  W  @+ u
        return k;+ M8 `' [& j* f6 O  c  V
}  @, E8 W3 V* s( W
void write_add(uchar address,uchar date)
0 s& S; e) v0 U5 H( a, G{
  t1 I# d; h  l6 O. e( _        start();- Z0 Q2 `+ B. e: O
        write_byte(0xa0);2 U$ ~. x2 ]# s' D" S
        respons();: a8 O; o/ C% L) s2 i4 d; a
        write_byte(address);% S) g# X. V; F
        respons();$ e$ Q* }  C; N1 Z; Y
        write_byte(date);4 V0 F7 U6 ]5 g2 s
        respons();
, J# a$ Q$ J; t$ C; K        stop();1 o; v. z; c  R6 m( }5 ?
}& H+ K8 H2 P# A+ `8 A  z
uchar read_add(uchar address)  j9 }4 ?+ s& @* f
{* s+ X6 Q; ~* Q& L" ~
        uchar date;; j8 B0 F% A" I; _8 l/ F
        start();
9 h0 a4 `) m6 |& v        write_byte(0xa0);  s$ H0 s9 ]$ y. c
        respons();
+ s& y  O' Z, Y        write_byte(address);; Q$ |! @1 m/ D/ l
        respons();
1 B  K& B3 o8 _        start();
0 B* V5 Z. D; ^. P, F$ c        write_byte(0xa1);
+ j+ O; Y9 K* ?        respons();8 S: l6 I) T2 k) R3 |
        date=read_byte();# i$ G$ U0 O9 J! O- G9 J/ f
        stop();
9 T7 T6 g4 A$ Q& ^7 ]        return date;
9 j% `- L7 E8 a* U( i}4 _6 u$ S0 ^& p
/ r1 h" |9 x5 ]
void main()3 f' k3 s" d1 H
{
5 T  v: _5 W9 ]$ J7 H# @3 A        init();
4 w' a9 A$ T) T6 I* ~        write_add(3,0xaa);5 F2 l; B* ~3 A& Q0 p, b1 [. A
        delay1ms(100);
3 X* E7 A/ _  f0 X        P0=read_add(3);6 t! ^- \1 X& e  W
}/ ?* e8 H4 `$ x9 V2 A
8 [% X7 @2 @1 ?& c
7 {5 A0 q% P& X* c7 y' u
! V8 ]: d. Z4 C1 Y$ C. S

; K/ T2 D$ u: s1 ]+ i7 E$ P

该用户从未签到

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
- T  z0 x$ H% w5 a, s, f在12M晶振测试下,void delay(){ ;; }执行时间为调用时间2us(LCALL)+返回时间2us(RET)=4us, 而按照I2c协议 ...
6 E$ `- K# B. K% K8 X
好的,谢谢...原来是这样
- z) g& m  @$ m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-3 20:28 , Processed in 0.093750 second(s), 30 queries , Gzip On.

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

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

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