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

中断函数问题

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    目的:单片机上电后,显示流水灯,按下按键后小灯全亮,然后返回主函数,继续显示流水灯。
    % y3 ?3 e; X+ m/ g目前问题:按下按键后,小灯全亮,但松开按键后小灯还是保持全亮,没有恢复中断前的状态。
    8 x& U. |# j9 L' Z请问这是什么原因导致,以下是代码1 d4 I+ l5 b3 w% l0 T$ o
    #include <reg52.h>& [( {% B3 f, L* s7 r
    #include <intrins.h>; ]8 @9 [" @2 s2 \3 w" T1 P/ E' b* D
    #define LED P00 C+ \0 e* ~! j/ z* }4 {

    4 K6 I1 ]8 K5 I; z8 Q4 c# [5 q2 dsbit K1=P3^2;
    5 v* D3 L0 p" J2 I- ^# Q0 ?+ M; S- Mint a;( \. a: H1 U- Q; j8 p* I& m3 H

    : H6 }, B6 o9 F/ hvoid delay(ms)
    * e7 U$ P: s' ?: z4 q$ E6 r{
    , k' [: p  N8 Q) Q        int i;+ `) b9 }9 F0 O% N0 E3 ?% N# d
            while(ms--)
    4 V4 `# F: D% t+ x; {        {% u! S! i* E/ T
                    for (i=0;i<100;i++)
    0 Z5 @9 e4 k3 e% z                {8 j: B4 V8 V1 y, o
                            ;
    5 G& z: G: j0 n. D                }
    * w) g- ^" }, K4 T7 E& g; Z        }- {& H" q5 Q, p( c8 z7 \
    }8 W; k5 X1 [5 `- B; b& B) x
    4 Y  e7 r( U6 ]" m0 f- b: a& R  F
    void zhongduan()
    & [( V! h! `6 u5 ]3 `{. |5 }8 [3 o  X2 Z: @, ]' o) g
            EA=1;
    ! K% g8 \9 U3 B: `$ K5 f        EX0=1;6 H, R" {/ Q( ^1 Z/ ?
    }
    9 |  g0 W6 g/ g; f
      O! o5 x/ {3 j0 T- Z" o# ivoid main()
    / y) ~# Y6 @1 }5 A( S4 \& @{
    ( ?4 }, B/ i1 K" n1 L' ?) J% p        a=0;% n+ r! B$ [+ i( Y$ f
            zhongduan();& @* q* [5 `6 e7 j
            LED=0xfe;9 W8 B  Y, [0 t9 q
            delay(200);
    : `! a! h4 o; E9 @        while(1)$ y. X. a  ~+ V6 T% W7 |; U4 w# ^
            {
    4 N. l" b) A0 I8 Y8 E% H' r3 i( S1 u               & b3 R  s) Q8 u) \5 O0 U
                    for(a=0;a<7;a++)
    $ ?8 \/ T5 g1 K! k9 t                {
    ) m8 N/ L& O+ U1 v# M; H6 s" V                        LED=_crol_(LED,1);
    / i9 K4 L! E) C
    , d+ G; v: @) d" c3 z4 ^                        delay(250);
    9 g3 Y( L+ B3 Z: H9 a2 q                }) a8 T) k+ u" a6 x& g
                   
    8 J* h; n+ ^2 q5 D                for(a=0;a<7;a++)
    2 n. C& h' v: C# W- a0 f                {) b% _% a) n3 }/ Q: @3 q% d/ L
                            LED=_cror_(LED,1);7 E9 e" N) F- i" M) D0 g4 @  p

    & r- t/ z$ k% Z4 V: I                        delay(250);
    1 Z1 k/ G) _$ j. t                }
    7 v, l% N7 S0 W$ c( J; u& Q      
    4 r4 C$ j0 Y8 T/ p}
    ) Y0 i4 S: ~& H( \; y4 q4 I6 [}5 T# a0 I( g  i
    void init0() interrupt 01 K" N7 A$ o1 r: w  E5 [
    {
    " V% w- U* C" Q) T/ t  r        if(K1==0)+ O5 v6 A; ~, v
            {6 W0 G/ y  {" F
                    delay(10);
    : A. n3 }& y% O                if(K1==0)
    ! _$ s1 e- x* m# e                {$ e; @- c5 E. R0 X$ B) q% S# d
                            LED=0x00;
    ( k5 R6 S# R& x" b                        delay(200);
    - Z$ ?* f8 C/ H- d" i: h6 a                }
    8 @6 W( l- F% B* e, m6 a        }: o9 ~1 q6 a" \/ H9 z  @
          
    3 l& \1 M% v& s( M, F}
    ' r4 L; I: k, O5 u; R  d

    该用户从未签到

    推荐
    发表于 2022-12-30 11:11 | 只看该作者
    ) u- \) P7 G2 h! {5 i2 q0 @  I
    你在中断中已经改变LED状态0x00,出中断后LED没有恢复之前状态,主函数继续左(右)移0x00能有什么意义?
    9 _1 J" s9 V1 J& }" W1 a) p  M5 u  @2 K
    void init0() interrupt 0, r: O1 c# K/ C2 }$ @* |* N& f
    {
    4 @6 K- e  z8 \% Y% t7 b8 J        unsigned char num;
    ; @# C9 |& T. H# f* X5 z* x
    0 l  a( f4 @( k; J/ s        if(K1==0)8 O$ P! @3 @; M' t1 y
            {  n3 Q3 t  N0 Z* D+ \* d) x/ A
                    delay(10);
    ) H' Y) e/ ~- C                if(K1==0), J7 M1 l" Y6 p' l( v: I  A
                    {
    1 ]5 k' T, W! r* o                        num=LED;//保存当前状态* a, G( R* r; W, [
                            LED=0x00;
    7 y5 W1 z& s; P9 ]                        delay(200);
    ; x7 [$ ?* a1 e! {" D7 Y$ L( c$ j                        LED=num;//恢复之前状态
    # ]/ G) {6 S7 f                }3 Y8 Q' B. J- U6 b* Y/ {. o$ j
            }: |4 X4 F  B2 o0 B( \4 G1 b
    }

    该用户从未签到

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

    ' Y& m5 l# P2 I: }7 pvoid zhongduan()函数里少了个外部中断触发方式IT0=1;。

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-15 18:56 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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