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

中断函数问题

[复制链接]
  • TA的每日心情
    开心
    2023-6-1 15:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2022-12-30 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    目的:单片机上电后,显示流水灯,按下按键后小灯全亮,然后返回主函数,继续显示流水灯。
    ' N1 I# e2 y8 _目前问题:按下按键后,小灯全亮,但松开按键后小灯还是保持全亮,没有恢复中断前的状态。8 I5 m' T0 [4 d) k8 j2 U
    请问这是什么原因导致,以下是代码
    / p+ ?% @% T8 h. q/ f, X. [( n#include <reg52.h>
    6 O* p; B" p. [: ]. R. d$ T' M- ^, s#include <intrins.h>8 w! X4 L$ S+ G4 d' c! ^
    #define LED P0
    . O& x0 y6 j9 d% p2 m4 N% @* i1 T. p* v. S
    sbit K1=P3^2;7 |- c: t1 ^- D/ r0 x3 E5 K5 B& c
    int a;$ A# z  ^- w- n- }" z8 T5 l3 ~6 R3 Y
    1 _! ^. v% J, d3 M& O
    void delay(ms)
    ; b% h% B$ [& a3 }* a{
    # R9 @4 \3 o5 ^9 c3 {: E        int i;
    2 n, T% j4 R4 E/ K4 I! p2 q        while(ms--)
    4 R+ W! {& H" Q        {
    / @* i' R9 d- F6 j' X                for (i=0;i<100;i++)+ o0 i; d: [- ?7 e, `9 J  g0 t% J
                    {' F% G$ A" Q4 b) n* ^
                            ;  P- b! Q0 a0 J' P/ e+ D
                    }
    & v+ S& v! ?1 z% B        }
    , u5 Y6 A; |3 a7 M- P}
    ' O& [0 m# L1 `, ^
    + p8 j% U. z$ Gvoid zhongduan()
    - Q2 L9 V9 V+ ]( s{
    2 V, Z/ p8 v( P* n9 c( m        EA=1;, a0 R( S" H" P$ }( k& K4 s8 C; J
            EX0=1;- Z6 _* Y3 L# w0 J. O
    }9 ^* B  E1 \. m( j+ y. I% b+ o2 z

    $ A9 j( p0 X2 @( N6 F1 e; r& fvoid main()
    ; q/ z( g) z; W% B6 m- {{- K7 k  i0 f$ O: r! m9 [
            a=0;
    # g, S; b& B" ]/ I% M        zhongduan();
    6 c+ @- w; Y: G$ Q7 k# W9 F+ V5 R        LED=0xfe;0 v0 Y# v+ }" C) _
            delay(200);: F" r: o$ X0 d4 ]. G" j
            while(1)# q* U, {$ x, {* ^
            {
    / F8 _1 e/ B9 A               
    ( l' o1 X' U" e! r3 N                for(a=0;a<7;a++)
    0 \8 o9 W% \/ d' C7 P4 z' F                {
    + e( H0 P9 P* Z6 h3 r' Y, z                        LED=_crol_(LED,1);
    9 q' x& F- j( O: [  \. Y! [9 v: Q& r9 D- k- G
                            delay(250);
    / j, B7 K: i/ B5 B, c, h9 U! \- l; y: V                }
    * ~6 m* m' Q2 H. m6 e* x               
    ; l. m; H7 j5 V/ k; Q9 c                for(a=0;a<7;a++)
      y  S' S7 B9 Z6 B                {
    . x- l; ?" k* h9 x                        LED=_cror_(LED,1);
    2 _  F! ^+ s. u9 _6 k2 P6 \" P$ Y7 g2 i7 Z( Y8 F
                            delay(250);
    - I2 {1 h9 n% g                }3 U( C* Z* L! z( k# l
          
    - ]; V- g/ N; }; u( t}- s- m+ a0 P! J$ o4 p% P- F
    }
    ' _: K& M! q7 L9 ?. tvoid init0() interrupt 0
    6 _/ s1 N: T+ {% p5 n! w0 e{
    7 `* t- Y/ G. |$ n8 w& o        if(K1==0)8 n& Z) n- w: Q0 c+ [  m+ k  F! O
            {9 f, `3 T9 u8 D9 |+ O
                    delay(10);5 h7 a$ O; [* m( v" K4 d
                    if(K1==0)
    7 s$ w  T' v0 I2 z                {
    7 A3 q* k4 V! \" |# z7 a                        LED=0x00;/ \9 m6 B- Q( z) m7 X* G2 O
                            delay(200);6 m5 A/ Y) A  \* C* r3 g, \
                    }2 C) s+ q% T3 [; n+ ]9 c
            }' y2 q3 W6 O/ q* D/ J! H7 L
          & C) E9 Z- p# P+ W6 N7 b4 f! F/ [4 C% T
    }  D8 t% P$ D: Y6 y/ K0 x' `  G

    该用户从未签到

    推荐
    发表于 2022-12-30 11:11 | 只看该作者

    ; g( W- \' I& O2 o( F* J你在中断中已经改变LED状态0x00,出中断后LED没有恢复之前状态,主函数继续左(右)移0x00能有什么意义?
    $ j2 x0 G/ d* T- r+ c- P& i  Z0 p) r. Y
    void init0() interrupt 0; l$ V2 x& \1 X9 Z# T
    {
    - h- Q8 \# D9 k+ d  w7 x6 w        unsigned char num;
    7 Y' |) ?  ~; Q; C8 m" h! A1 M8 [+ Y* j% f
            if(K1==0)4 P) i/ p" f; H) K: `
            {* d& a0 L6 T; g( B& y
                    delay(10);' g2 q: _/ ~/ f: W; N
                    if(K1==0)9 n" `$ e& u5 ?
                    {- T1 F$ h: q1 a5 ~3 x8 \( T
                            num=LED;//保存当前状态8 _+ ^! g4 L2 ~) m5 L, X( F
                            LED=0x00;
    7 v$ S: H4 P& `                        delay(200);
    9 M; T' Y8 b# `, |/ h                        LED=num;//恢复之前状态7 U$ P$ }7 M" W4 t$ W% Y- D
                    }$ }# a# y1 a& a
            }
    ) r. N1 H5 A7 _* l. [}

    该用户从未签到

    2#
    发表于 2022-12-30 11:04 | 只看该作者

      }# |) _3 Q/ M2 I8 ?( T; Wvoid zhongduan()函数里少了个外部中断触发方式IT0=1;。

    该用户从未签到

    4#
    发表于 2022-12-30 11:28 | 只看该作者
    中断处理要求时间越短越好,不要在中断里延时。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-24 02:29 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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