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

中断函数问题

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    目的:单片机上电后,显示流水灯,按下按键后小灯全亮,然后返回主函数,继续显示流水灯。
    2 n2 g4 d% L6 d$ Z) E( R目前问题:按下按键后,小灯全亮,但松开按键后小灯还是保持全亮,没有恢复中断前的状态。) Z6 l3 R3 V9 t) O
    请问这是什么原因导致,以下是代码
    9 ]; p# `3 C- M% Q#include <reg52.h>
    7 T7 ?$ W5 O& G; P: B) o, i" c# ]#include <intrins.h># [$ C6 O( N$ H' W& F' S3 O4 W5 `
    #define LED P0: m9 \5 ]! L$ g7 {3 D

    : k! i1 ^. o" O# B. a5 @& {9 }% L! U: Zsbit K1=P3^2;
    ) b$ c) {8 }# y* Hint a;; ~. C% T! S, f8 D5 |1 h

    $ K$ s8 l4 w, W7 Z1 D, D& _$ |* m, fvoid delay(ms)0 ~$ ~: \5 y$ m" }/ A* u
    {
    1 J0 `) X6 j- s7 T+ _$ h        int i;3 L8 D0 c, k5 F4 ]
            while(ms--)
    . P. J1 E* A1 z: ~' g        {
    / H7 |5 l4 i$ Y7 c  h6 D0 {2 A                for (i=0;i<100;i++)
    * P. g: d; w  A2 x                {2 C1 D) z3 _& M5 J) `2 A4 K8 [
                            ;
    ' ^) ^/ P9 F8 l# Z1 v                }
    9 C" E3 r8 c! _8 A        }
    + S2 q  A4 W3 F  q- Y}
    ! L  s8 f) p7 F% `# N, l" F2 f. E* F
    void zhongduan()
    ) m' t' ?: F) @$ Z! ]& o6 ~{
      L- Q2 n7 ?% X3 Q        EA=1;% e- F2 H5 N2 P& k. r" ^
            EX0=1;# ~3 e  `7 H9 @0 i- ]( A
    }
    8 H5 K, ?9 A& Z( S, v) u) K
    ' X* ~% m3 |6 H. @1 n5 t, Xvoid main()
    ; V( O! C5 O9 H9 y; L- V0 }{
    / E. F# `! |& a, n- i        a=0;  t5 I  I& T/ X$ o
            zhongduan();/ N0 N5 g8 k- w" D: y! }7 v6 c# Y
            LED=0xfe;
    , k5 p" q# E3 ~        delay(200);
      h/ M$ i9 h* y! f3 L) j# l4 B        while(1)0 }0 {7 L# A2 a' \
            {
    5 o2 f3 p! P8 ]. {               
    - [: u2 m  X7 w- V  E! o                for(a=0;a<7;a++)
    6 j) `3 P2 M; A: ^: @                {
    0 C7 M5 v: d, f, [! i                        LED=_crol_(LED,1);
    ' Y& e2 {7 @4 c9 a" @9 F
    1 @3 ~$ s" {4 h1 {                        delay(250);
    $ @" G! @6 H' o# q' @                }3 C% w$ m& G& l4 T5 B) E. n  s
                   
    ' i* F$ m5 S1 M6 r- X) l+ `                for(a=0;a<7;a++)# I  H" s5 Q, F( i% e! c$ \& Z0 e
                    {: y: ?$ y2 Y7 ?4 R  N7 C9 Q! S
                            LED=_cror_(LED,1);
    9 |* v/ }9 ?) k6 }9 e3 @) p3 w5 j
    4 H1 R0 h: {; h: t) b/ G                        delay(250);3 a. d4 D' d# V  z6 _1 ~
                    }+ @. l* Q% L! l
          
    ; `& y. |, h, t0 G' Y/ N}) E8 j; y9 k& |& l8 c4 `  O
    }) ?/ ?2 C" U7 a- G4 Z/ N9 s, A' X
    void init0() interrupt 05 b' |1 H$ B6 y
    {* y- r  C1 ~; \& Z
            if(K1==0)7 Y4 j5 ^6 l( @( P
            {( V1 c! @' o9 J! d+ g: v
                    delay(10);
    : t5 l" A) J, [                if(K1==0)8 H0 G  R7 ?( w! ~
                    {
    ; f7 x( p# ?& N8 b" e% s4 N& z                        LED=0x00;" T7 d0 A& V! y
                            delay(200);
    % I& u! d/ W% ?0 u5 G0 t                }# ~& k9 Q$ n, x9 B8 L4 M
            }8 n5 E  u, g3 V
          
    * E* S$ H) j9 _# d  H" g1 P}9 q3 H. I0 ~  h& i% U# \/ e% B

    该用户从未签到

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

    : e, r6 `/ d( u- y8 P# [你在中断中已经改变LED状态0x00,出中断后LED没有恢复之前状态,主函数继续左(右)移0x00能有什么意义?6 J# F# A* @) x; y) Z# Y. b
    ! w- ]7 E$ k; V# S
    void init0() interrupt 0
    : W' B, w" {4 ]7 {2 V) d: L1 h+ o{: l$ H3 d- J/ Q- i
            unsigned char num;
    5 R( l" Y) b+ f/ c2 ^9 f6 F
    ' Y5 Q: o$ A3 j% L/ u0 M0 y) C        if(K1==0)
    ; ~' h$ \5 N7 M6 j        {; I' ?% [, T6 a: {/ d2 n
                    delay(10);6 ?5 c* b  v6 v$ E+ l
                    if(K1==0)
    " O) [. m, D6 @9 ^# ?                {
    5 u1 i* l2 d- Z- ?6 I                        num=LED;//保存当前状态8 ]5 `# M4 N3 r, o: i
                            LED=0x00;
    # r3 B! P3 U; ~. M2 w& _1 {. I                        delay(200);+ `7 x" |  g" N9 I' z5 X) \: j$ f
                            LED=num;//恢复之前状态
    3 M) H' L- Y6 b5 _: U+ Q0 y                }0 M- P4 k6 a3 `5 z( F- s9 |- w
            }
    " m+ E/ J4 ~- a) i7 M+ c8 j}

    该用户从未签到

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

    ( I! |6 x; g. [void zhongduan()函数里少了个外部中断触发方式IT0=1;。

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-29 15:48 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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