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

51单片机红外中断INT0多次进入怎么解决

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    部分源代码:
      E/ Q, _- a$ E/ k2 w
      e& d6 m& [" P- i) C& K8 E0 a9 c* k2 w3 q
    void ReadIr() interrupt 02 O, j* m5 g, a7 u. P
    {
    $ ^2 t8 U; c) k: _& C2 H7 a        uchar j,k;, t# Q8 m6 ?% J+ k; }! r, m
            uint err;
    ! x9 s/ V/ R$ }! {* U+ k8 _; @  q6 i2 v8 s9 s- J1 m
            Time=0;+ i- k# a, k) R& q; M1 s0 D
                                                    
    6 P' c4 V! C, ]        delay(700);        //7ms: [8 m# [" a3 _/ r8 ]3 W$ i' L
            if(IRIN==0)                //确认是否真的接收到正确的信号" ~. ?. T& y6 a1 b+ O9 U7 U' v
            {         , H4 ?$ [8 i/ j( J% R' B+ F2 S
                   & b' S5 n) J( X7 H8 o% n
                    err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号: `9 i$ s" h* g! g
                    /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
    ' ~2 x7 e" O3 _  ^0 b6 i                侯,程序死在这里*/       4 L7 n' G6 ?: V  U/ F
                    while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                 * V/ K5 s1 P& n0 J/ e$ T& V
                    {                       
    % R) i3 C( Y% x+ P7 W. q0 `                        delay(1);
    ; d4 f# u8 f( x8 X/ h; ]                        err--;
    ( A. y4 i8 j3 ?$ k" C+ `7 }                }9 O" G6 y9 D0 `. D5 @8 C
                    if(IRIN==1)                        //如果正确等到9ms低电平$ M- M, i+ s& t, U% h6 v# y7 d
                    {7 i9 F: M- i: j7 E/ r# C. q2 v
                            err=500;
      E- I0 v% L7 c+ w& W2 M                        while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去
    . T* y  s: ?$ T                        {
      [/ z( N9 q" h                                delay(1);) o, ~/ a) H' l8 t! Q, y
                                    err--;: |8 f' M! r$ Z6 Z. ]: d# a5 r/ F* {
                            }$ L9 K: c, a0 @2 B, K1 r, ~
                            for(k=0;k<4;k++)                //共有4组数据
    $ W5 P2 l3 l. l4 _6 F/ Y( K                        {                              
    ' V# E2 ?7 @$ V0 v. n0 K! h                                for(j=0;j<8;j++)        //接收一组数据
    / w5 `; M$ i! c                                {
    # C! T7 {+ r0 Z; _6 ]
    / ]' E1 X3 _& G" @2 B1 c& l7 B# v                                        err=60;               ! J: k- t: W, ~- N6 W
                                            while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去+ a5 G. o& M( ~( N
                                            {9 U3 M4 E3 R# g; N* n
                                                    delay(1);
    ; C0 T+ e% Y. A. m                                                err--;, O. d4 T4 \* a0 U& Q
                                            }& D6 z6 x) p4 n% x; D9 ^0 Z
                                            err=500;% e, T5 g0 v! R& \
                                            while((IRIN==1)&&(err>0))         //计算高电平的时间长度。" U) w$ `5 B8 N# |! ~
                                            {  x; E* N4 w/ S9 ^
                                                    delay(10);         //0.1ms
    9 ~0 h2 ~, ^- K" r7 l, s. S                                                Time++;
    8 L- h3 j- Q0 s0 b                                                err--;  h+ u0 W, _" f0 O/ F4 L
                                                    if(Time>30); N4 w0 x3 a& f1 g# Z
                                                    {
    " K# L2 k' t' U* p0 N                                                        return;         //因为位1信号最长持续时间也只为2.25ms  超过3ms肯定接收失败+ c& c7 z6 i3 I9 ?& q: K, `
                                                    }
    9 y' b! @' [4 Q6 K  j+ G                                        }
    ; m2 j. q0 o. ~& t                                        IrValue[k]>>=1;         //k表示第几组数据
    % _8 ]+ o) G, @% j1 \+ N3 U8 g                                        if(Time>=8)                        //如果高电平出现大于565us,那么是1
    " W+ Y, H  o8 z9 l                                        {
    * N0 V- i1 y2 Q! a4 g                                                IrValue[k]|=0x80;5 ?* G8 S( a2 h
                                            }
    & {  J$ F' X, C' Q4 m% J                                        Time=0;                //用完时间要重新赋值                                                       - ^1 _0 t7 N0 J3 x' }: V) U
                                    }
    8 {/ |0 f5 s5 l                        }
    9 W, G% e  L! K# j' Q                }4 K+ m$ t5 c) z8 s& q3 N
                    if(IrValue[2]!=~IrValue[3])( u# g) E. `, }; F
                    {
    2 a2 T7 a% E7 L" z+ X7 L                        return;1 T% g3 W/ n6 g4 d
                    }
    8 ~+ O3 m7 s) a) _% {; N6 U        }
    " h8 H+ v" U% ^4 X( |        keystate=1;                       ; ~; d8 n* A5 ?% ?& _& I
    }1 g9 ]& Y( W9 c- I
  • TA的每日心情
    慵懒
    2022-1-21 15:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-7-19 17:01 | 只看该作者
    可以进中断后,EA=0;禁止中断,中断处理完后开中断,EA=1
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2022-7-19 17:04 | 只看该作者
    应该具体说是按一次红外遥控器的按键 多次进入了这个中断0

    该用户从未签到

    4#
    发表于 2022-7-19 17:15 | 只看该作者
    好像没有清中断标志位
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-15 04:34 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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