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

中断函数问题

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    目的:单片机上电后,显示流水灯,按下按键后小灯全亮,然后返回主函数,继续显示流水灯。$ e; s! T% u: R( s
    目前问题:按下按键后,小灯全亮,但松开按键后小灯还是保持全亮,没有恢复中断前的状态。% O- D8 x( [: y# E" L8 e' k- s" ~" Y
    请问这是什么原因导致,以下是代码
    * I2 {- m3 u' J* b( L1 ]9 q. G#include <reg52.h>+ c0 V2 F% s: B4 C0 d% G$ N
    #include <intrins.h>% ?1 e, W! C& d$ [+ l$ C
    #define LED P00 e! Y" a1 A3 T) T  m, b

    ' W2 ^, ^. |0 Z- W% t/ X, _. V% ^sbit K1=P3^2;
    ! E- t+ C7 |7 z$ fint a;% X* X) X& e  x: J

    : @/ E3 o4 O& ovoid delay(ms)
    7 ?, j. A6 ^' m2 |{/ [. S2 k  k( u  y  w! c; p5 {
            int i;0 N. z: l, f4 ~8 o9 }: b: b
            while(ms--)
    9 g0 p' B) B, b. e; a        {' T! x2 N' W0 U$ {5 x
                    for (i=0;i<100;i++)
    9 G* _6 I, ?5 z. C2 O                {
    & ?' s$ ^) h5 q4 s" _                        ;
    : [0 W) Y$ g9 i, H                }; T$ c" |' b7 u+ t- a; }5 S
            }1 L: D* D( Y1 p: J
    }
    6 t) \/ Q, d) G# z* m$ S5 ^/ }6 k* |$ }( b! w
    void zhongduan()
    : a6 ]2 g! N) ~1 T0 ^/ x5 M) t  {{) l/ L: J$ X3 q  S% ~
            EA=1;
    ! g5 J  d" J7 F; s+ V7 u* t0 y        EX0=1;
    : v$ ]7 J0 e. U' A1 h9 Y( P; n}
    # C( A2 }% M) o+ m- `" [0 s# v3 g* J9 O9 s# Z% f! u( w
    void main()+ q1 [) b4 u3 e  S- {' P
    {( f# [3 M' x, x5 z1 ~' K/ \
            a=0;
    ) I, x$ V7 a2 U4 V        zhongduan();
    ) S5 J& h3 L0 z) a( d( G& a        LED=0xfe;% K, I1 {" }6 y
            delay(200);
      N9 x" M9 i6 N        while(1)
    - b; ]- J; ~) n2 c$ i% U        {4 w0 D; y+ C% Q% C5 z
                     e6 V' z5 X) f" ]2 f# q
                    for(a=0;a<7;a++)
    - _7 ?( U" b" }3 r" T                {
    : P& S! ?5 G, B. }                        LED=_crol_(LED,1);
    ' K, X% j0 m4 c& X1 `
    3 T2 P+ j1 i0 x$ j- F                        delay(250);
    % U: s' q4 N' A" v6 v( k% N                }$ c& J/ B' s( l$ b$ Z0 k. \
                   
      V5 y; Q, X/ i/ K                for(a=0;a<7;a++). K1 D) U# W/ W4 o. ~( u( ^% X
                    {% v8 T! m. Y# ^( F! B* g# V
                            LED=_cror_(LED,1);  M* B9 W) a) B6 D" ~

    ! h/ H! c! M" U8 R1 o# \; \2 |                        delay(250);' s/ \% |9 b* [0 L
                    }
    % M' }* L# [' v( i; W      
    2 D. h& {8 Z/ d- n, E}
    ( k% G2 V: `) q! `) r7 B) E! c}9 r: k3 d2 j- n/ e
    void init0() interrupt 0
    & o0 J& n/ U) A- d{& ~1 [; @* k( |# ^; E
            if(K1==0)
    " O  z% O2 G7 Z, B" g) Q; h        {# L7 P9 G8 K1 L' P. T
                    delay(10);
    5 r& k; l; {- k  m                if(K1==0), Y; ~6 g( O3 \" |4 D
                    {
    5 }/ r  R2 c2 [. z3 @2 o( M                        LED=0x00;7 |( E% o. q% m6 e, F; W- y
                            delay(200);6 P( `1 I9 I6 j' F4 T+ i
                    }" S2 g$ l/ s( f) P
            }
    8 N5 o0 F; M9 ^  [3 O      
    8 S6 Y; Y! q7 ~+ R( m) L: \}7 [) Q7 v0 p& U0 j: F

    该用户从未签到

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

    - R  ]- L$ ]: D6 D' V你在中断中已经改变LED状态0x00,出中断后LED没有恢复之前状态,主函数继续左(右)移0x00能有什么意义?+ F1 z! p' S8 w. f& L
    6 i/ g2 ~1 y, G1 x- U
    void init0() interrupt 0
    2 U8 O  X3 }, |+ h; q8 E{  E3 X5 F& P1 F3 F8 F) ]! P; R! ~: B
            unsigned char num;# u8 |5 N2 m' I" V" i  \" p

    1 M" H* z7 C0 Z: n6 k6 X; L        if(K1==0)
    ( _+ s# X6 D; m  j        {
    / |2 P& d. E) |! I                delay(10);# ?: B. f4 L  M# E
                    if(K1==0)( x# z* @" C' w* `
                    {7 g  m2 \* L! H2 R
                            num=LED;//保存当前状态4 X/ k2 \7 l' {) V% ~  r: [
                            LED=0x00;; l9 h& d0 T2 Y  t* j8 H/ x
                            delay(200);
    1 w$ [' E* A. k' o1 w$ y, r  _, _% `                        LED=num;//恢复之前状态/ c- ~! Y  r5 J/ n( @" [3 ^; ?1 M6 b, t
                    }6 Z- _% V; d5 O4 |/ a
            }4 x: w: A$ \/ M( u2 o
    }

    该用户从未签到

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

    5 R' j5 u, ^! Q# P2 svoid zhongduan()函数里少了个外部中断触发方式IT0=1;。

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-9-10 11:40 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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