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

中断函数问题

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    目的:单片机上电后,显示流水灯,按下按键后小灯全亮,然后返回主函数,继续显示流水灯。
    ! |; H2 p! l/ Z  a' F- H目前问题:按下按键后,小灯全亮,但松开按键后小灯还是保持全亮,没有恢复中断前的状态。# ~6 P  R! E/ B. {+ Y
    请问这是什么原因导致,以下是代码, Y; n  \' i5 S/ D2 N
    #include <reg52.h>4 M1 t4 |8 G0 T1 p
    #include <intrins.h>
    4 J. L. U6 f" u#define LED P04 |' @1 [, l& ]. N
    , F- m# k" v7 C8 w6 P
    sbit K1=P3^2;
    % z+ S; a9 g* B& cint a;* Y' Y& L6 {$ A, V1 J' n
    8 f. P  K4 ~; _+ F
    void delay(ms)0 @9 `4 c: g$ z# _; s
    {
    & T/ a. A$ r2 t6 d- C- \        int i;
    . h/ U$ q' c4 ~0 a, n' G3 Y; N2 o7 |/ j        while(ms--)
    1 J0 f, O' ~6 ]0 f$ v- b        {
    6 g" k: c6 M: B6 ?                for (i=0;i<100;i++)
    % k) p/ J  Q2 d7 X                {- ?# B/ r) r2 k  [# H: Z8 |+ ^
                            ;
    ) Y) K0 i6 N* S' C& w" l                }& l" X9 Q( x) a9 y
            }" h  ?/ l+ B: @0 s3 I0 A5 R. M  a
    }
    2 @; ?2 E- W1 `% |; t4 n, J* i5 v# r  o+ L/ p/ J3 ^! g
    void zhongduan()( H5 |0 V3 K2 o2 L
    {( j, J3 C; W2 a( d: N+ o0 F. h
            EA=1;
    7 n. g3 @4 `  l' ?- k        EX0=1;
    5 C/ s/ s9 F* @2 K$ U' k5 g3 g/ I}
    " H, ^1 O, U# r1 W
    0 D4 x. {. D  N& X  avoid main()
    7 G! E$ b+ L3 G' @: w# ?{; J( X; k& v5 O+ G4 u
            a=0;
      c# ?4 N4 W9 s( A) w! P        zhongduan();+ U% q4 ~' h4 q# x% }& ?5 U
            LED=0xfe;9 t" o& m4 R7 O* E
            delay(200);
    ' I; X, D$ r+ Z  Y/ J! |        while(1)
    - G7 d' F0 P4 l* `$ Y        {
    9 I9 j$ K) I; a- Q               
    9 c4 J4 W( {2 t8 E                for(a=0;a<7;a++)
    ! r% [- J3 e# N2 K                {% e* x' O* ^+ f2 u; D2 _4 J! r
                            LED=_crol_(LED,1);: ]; n7 }% x; \+ v; M
    3 j" `) W" t- d& ^" F4 b) w2 ~
                            delay(250);3 V' i2 x5 N2 N2 ^* s
                    }3 ^6 ?! D! N* i) X
                   
    . ^$ p+ K8 S& V9 R1 O" ?, n$ D8 U) J                for(a=0;a<7;a++)$ L4 t9 a# O. P3 s
                    {/ M# u+ Y: S' W* d5 V+ B/ q
                            LED=_cror_(LED,1);
    : r! E% p0 v- u! b
    2 k5 q6 @! C8 A8 o0 L+ n6 L! e, v                        delay(250);" e) T- T3 [: l9 B7 y, X' P/ }
                    }
    2 v0 X$ v$ d5 v0 K      9 G7 e0 U' O- @. C. A
    }
    + w0 T& {; ~, R7 N' e6 X}
    + C9 ^: x( D7 `% Z7 T% C- Qvoid init0() interrupt 0
    ! |; S! i# h# a# T' j{
    1 X8 G- n1 f% f0 b" O' K        if(K1==0)
    ) I, `7 L5 d2 ?  }        {
    ( X/ O0 T) g& V( z: r                delay(10);
    / Q; U. j8 ~$ }; w                if(K1==0)
    1 U, ?! I: \! J, n                {
    - Q8 q0 @; d' C, q2 A' g                        LED=0x00;
    / ^6 Z& q" [, u- q2 c+ F9 m                        delay(200);; I- s) l" a1 |3 I0 A' o, D
                    }0 n0 G$ r, h  q2 r; Z
            }
    / {+ C" E7 m3 @  w      
    5 M" z3 ]/ _# x4 T/ s8 ?6 j  z' P! J7 @}: J7 W. k/ }' C! C0 W+ C

    该用户从未签到

    推荐
    发表于 2022-12-30 11:11 | 只看该作者
      c, y8 y; i' C
    你在中断中已经改变LED状态0x00,出中断后LED没有恢复之前状态,主函数继续左(右)移0x00能有什么意义?
    $ T9 U( r- j; i* ]
    3 h7 o4 |0 c+ \3 T7 l- ]- zvoid init0() interrupt 0- n8 f/ Y- E! @$ t  a4 r9 ?
    {
    1 U3 K3 z1 M* n. d        unsigned char num;
    0 ~/ s  M0 F4 ]9 y! m
    ( ^' p/ D$ {, j7 B5 e6 V/ D        if(K1==0)
    6 A5 M4 b0 k; i* ^9 u        {+ w' z7 e& f* R! f3 }" o; m, F
                    delay(10);5 {# Y9 g" E" y( {1 G
                    if(K1==0)
    4 O+ _* e. R4 @: g; G& h$ d                {
    1 O* G* K, u9 i, |! E, I$ H" [8 C" J                        num=LED;//保存当前状态
    / ~  C: K& Y: Z" W                        LED=0x00;4 ?& D6 J0 |* _7 K# K, n) f' U
                            delay(200);
    8 b* V5 E: v* S) ~                        LED=num;//恢复之前状态
    4 C0 n9 T' b! X$ U                }1 t" N% t& a8 n2 K# f: x$ x5 \
            }
    7 ~1 i& O# x, R& e8 P& f}

    该用户从未签到

    2#
    发表于 2022-12-30 11:04 | 只看该作者
    0 m% Y7 c6 `- Z0 J
    void zhongduan()函数里少了个外部中断触发方式IT0=1;。

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-27 19:40 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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