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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
求助:IIC总线的程序LED没反应
3 W% G7 u1 ^4 W7 T0 |$ A5 |' L- i& \# a4 ?2 B
弄了一天还是没亮,求指导,到底哪有问题??' S- O2 ]% B( V8 }3 j
9 @. t* @( C. h
- q8 f3 X& l0 ]* u/ U

, a: q) E: w( L, q, E+ Y  ?#include<reg52.h>+ ~* h" s; G& z9 n0 W5 G
#define uchar unsigned char1 D% z! {# U; R* }$ K% T
#define uint unsigned int
3 q0 T" O, K$ g' ksbit sda=P2^0;                        
* E1 @( ?+ r2 G' F- rsbit scl=P2^1;
: f4 T" y0 {  Nvoid delay()
; j9 V* G. _' k( w8 t{ ;; }: _/ o  n2 i8 O5 _

% O, t" q9 `4 A$ b: @9 Cvoid delay1ms(uint z)' B+ _+ o2 F3 y- M0 K
{
/ y& G" _5 A0 h3 p0 r- A; }        uint x,y;$ k! I) T8 {4 t2 m  O2 A/ w/ m
        for(x=z;x>0;x--): e5 J6 S4 w6 ?$ t8 I! \
                for(y=110;y>0;y--);* n  R6 w, N( ?; w
}
) c8 G5 A- D$ [2 }void start()  //开始信号
$ {9 B4 Y# x3 O* f: E' M0 Z{        
6 G" S5 ]9 i+ D/ _, Z* s. I  O! p        sda=1;) d8 Q9 w1 `1 e9 l- S' b
        delay();2 r' D, v7 ]6 `
        scl=1;4 O' I1 Z+ W0 D/ [( v
        delay();
& i% [+ _% R8 a& ^; ]        sda=0;$ T8 V0 S9 G* s6 \
        delay();3 Z! Z% r+ r. T, q% K; ?6 T5 j6 f/ {9 @
}  j" S" L6 a  n5 }9 @1 `' d
void stop()   //停止
3 x! a* N2 Y4 E# r( x{
- j6 f% w/ f! |4 I$ p. i1 E1 I        sda=0;. d: m' M$ O9 c9 }
        delay();( u5 w' x4 x6 J) P) ]
        scl=1;
5 n8 h" z: V% G% E0 A( ^        delay();
( u+ \8 B) E( f        sda=1;: a0 R) Y8 ?4 B% ~6 ?  `
        delay();# d# ?- v+ C* ]$ R% b
}
9 R  M" `! {' x$ s' k' Mvoid respons()  //应答" @( {8 z7 n1 Q6 J
{
( H7 L: A8 n6 S7 v( k: K7 a        uchar i;
2 m' V' E. W2 ^: k        scl=1;1 Q) `8 z! R! C: h
        delay();0 s/ V" z+ B" b& f
        while((sda==1)&&(i<250))i++;- C, s) c* j* M% v0 X+ V9 V7 s1 u# J9 i
        scl=0;0 J: l& f" C, x# K( V, F4 u7 ^4 e
        delay();, h. S  D, `* V) C
}
. O$ I1 v% X" L  |" k1 D" Q2 cvoid init()                          //初始化
, E, L, |" n( f  z# M- ~% Z' N{
4 i; v- w5 Y, x- M. E; G0 S. u9 G+ p. @        sda=1;, N* T7 x& G) ^* q  J" D
        delay();
" L# i5 L: \5 z* ^* i        scl=1;! X& |5 d- n# H
        delay();
7 }% L9 k# U/ I, ~}
1 _3 W0 w6 u, Q0 x. dvoid write_byte(uchar date)           //写数据
1 {9 y7 T# H; e3 C{
3 L3 q% E7 \. f) Z        uchar i,temp;
8 O' o4 J% u+ T0 J# s& q- F) o        temp=date;
2 ~" V6 _8 ]( y2 f! e( b        for(i=0;i<8;i++)
0 `5 N$ f$ I* N, f, i$ `        {7 Y" V1 {5 _  H4 b
                temp=temp<<1;
& `( [+ L0 C  `& x1 k# v                scl=0;
) l0 ^% v. q8 M* s* {            delay();
9 t( L  |& A) ]$ v/ d3 |                sda=CY;
0 b7 p: B- z- l7 ^2 N% G9 j5 I                delay();
! N2 t, @1 A( @) [                scl=1;1 t2 S& V- |7 c$ E8 {; c
                delay();
5 n6 s, b0 v) P) z        }
- y1 y* R  M6 ]" H5 s4 }4 N9 N  p        scl=0;7 y' Q6 U, M7 I7 Q" r: x) ^
        delay();
8 b7 n% t0 u% h* L        sda=1;
$ }# b/ R, N! V0 n) ]4 j7 ?; b1 ~        delay();* G6 V. M# M- N8 c, L; y
}
, p, C9 f+ B& m& R8 suchar read_byte()                                 //读数据
. a( h' |% ^2 S$ r: @8 c7 U8 r{7 q" l  k8 x' |; n' }0 O1 g
        uchar i,k;' G7 P! w) [3 w5 I4 E5 u, B
        scl=0;" I5 V) b- s! b# y; {9 I
        delay();
2 R! a3 d; C& P, I        sda=1;1 ?' @" z0 I- z
        delay();# t1 d' V; k( o1 U
        for(i=0;i<8;i++)" P5 G( v5 J4 ]* ^8 T7 k7 T
        {
3 `: ?3 C* M; i                scl=1;
& e! K/ x2 x6 y# v0 s                delay();        
( i. O, J$ Y4 i& Y. L; s                k=(k<<1)|sda;
; s: n% {. ~) R- w7 y! T' Q                scl=0;
& Y) U6 Z* c+ i. H; l                delay();        1 D- s2 V% h5 @8 h9 q
        }
! ~3 d: |; t: `+ X2 S        return k;
& L% M4 m$ J9 w6 U! S}
6 D  O2 E4 W& H' _void write_add(uchar address,uchar date)4 L* @/ b2 z; Z$ V( m
{
1 T6 F( T: g8 w        start();, I" B- r6 s6 d- E
        write_byte(0xa0);
% s) l3 {- T4 s) i: P% m$ s        respons();3 O+ @7 d; M3 w, r& q7 g
        write_byte(address);. S& A8 J7 f( G" [$ o0 @4 p
        respons();/ |' n6 v7 T! |8 N+ J2 H( l3 m" y
        write_byte(date);
+ s4 v0 x* h7 y1 I, j. i8 z, t& X6 N        respons();
9 x: u2 e& n- O# Y# e4 O" v        stop();" `) D" x5 s: S4 H
}
' E8 G" U/ u+ j" e; P8 E# e% ~uchar read_add(uchar address)5 [! ]' W' V: e) G
{
% T* Q& T' w9 |& G        uchar date;5 ^! \! k  K; A3 F
        start();
! B' d. h0 Y( o" y6 c2 l' T, U7 @        write_byte(0xa0);
% g0 {2 x1 {2 Q7 ]" U9 x        respons();! @# c( \6 V2 R. ?! P: V
        write_byte(address);/ U7 \2 y( A8 R( K1 Y# L
        respons();
5 U  e% @0 ]' ?6 D( m3 m* ^/ O# Z, h        start();! m9 C& a& r1 B8 f; _6 U
        write_byte(0xa1);( x( P% r' I7 B
        respons();
: B8 w' l6 c* Y% \        date=read_byte();
  t$ o" s8 Z2 s% c$ r        stop();
7 b6 m: q0 @  g! Z, }, N+ }% f        return date;
. E- b' ]+ w' |% N}' _- g) a  b$ y* j! D  u7 P

: t  w, A- u4 }& r! fvoid main()
$ G$ ~0 y# `) z8 o$ {{
+ C( O. W: B; \- D! n- z) a        init();
7 p( r8 R6 o& r+ q2 A2 _# l6 D( q        write_add(3,0xaa);3 y, K% G, i& q) [' T& u/ e+ A
        delay1ms(100);' J8 @) L- a' J% ?
        P0=read_add(3);3 X8 r1 Y! t9 H3 \5 G, ]6 Q1 R& y
}
( s8 V0 Z" [& g+ V" E" m
3 G. b+ e3 C7 Q7 Q) ^& I
) D6 I. M2 {7 F8 Z5 j
' u. j4 `2 x0 d& n! ?- p
8 J% F9 a* y1 x

该用户从未签到

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
8 k0 [5 n$ I" l0 P; A, c在12M晶振测试下,void delay(){ ;; }执行时间为调用时间2us(LCALL)+返回时间2us(RET)=4us, 而按照I2c协议 ...
0 G2 n. o2 [/ a7 e; c7 F2 {
好的,谢谢...原来是这样- _2 n( }% S9 w6 p8 T# V! H7 x5 @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 22:19 , Processed in 0.156250 second(s), 31 queries , Gzip On.

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

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

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