⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 laserbeam.lis

📁 AVR单片机实现的窗户红外光报警器程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00AE 41F0              breq L25
 00B0           L27:
 00B0                   .dbline 50
 00B0           ;                     if((d!=a) || (b!=0xFF)){      //如果没有报警发生,并且产生了警情,就输出报警信号
 00B0                   .dbline 51
 00B0           ;                            Alarm1_triggered =1;       //标记产生了警情
 00B0 81E0              ldi R24,1
 00B2 90E0              ldi R25,0
 00B4 9983              std y+1,R25
 00B6 8883              std y+0,R24
 00B8                   .dbline 52
 00B8           ;                            Time_Alarm =0;             //报警计时器清0
 00B8 EE24              clr R14
 00BA FF24              clr R15
 00BC                   .dbline 53
 00BC           ;                        PORTC = PORTC | BIT(3);    //触发第一级报警
 00BC AB9A              sbi 0x15,3
 00BE                   .dbline 54
 00BE           ;                        goto AlarmStatus;
 00BE 29C0              rjmp L28
 00C0           L25:
 00C0                   .dbline 56
 00C0 CC0C              lsl R12
 00C2                   .dbline 57
 00C2           L22:
 00C2                   .dbline 44
 00C2 A394              inc R10
 00C4           L24:
 00C4                   .dbline 44
 00C4 8A2D              mov R24,R10
 00C6 8830              cpi R24,8
 00C8 30F3              brlo L21
 00CA                   .dbline 59
 00CA           ;                         }
 00CA           ;                         a = a<<1;
 00CA           ;             } 
 00CA           ; 
 00CA           ;           DDRB = 0;                  // 整个B口设置为输入
 00CA 2224              clr R2
 00CC 27BA              out 0x17,R2
 00CE                   .dbline 60
 00CE           ;             PORTB =0xFF;             // B口上拉电阻全部有效
 00CE 8FEF              ldi R24,255
 00D0 88BB              out 0x18,R24
 00D2                   .dbline 61
 00D2           ;             PORTC = PORTC & (~2);    // C口第2脚C1输出低电平
 00D2 A998              cbi 0x15,1
 00D4                   .dbline 62
 00D4           ;             PORTC = PORTC | 1;       // C口第3脚C2输出高电平
 00D4 A89A              sbi 0x15,0
 00D6                   .dbline 63
 00D6           ;             a = 1;
 00D6 CC24              clr R12
 00D8 C394              inc R12
 00DA                   .dbline 64
 00DA AA24              clr R10
 00DC 17C0              rjmp L32
 00DE           L29:
 00DE                   .dbline 64
 00DE           ;                 for(i = 0; i < 8; i++){
 00DE                   .dbline 65
 00DE           ;                     DDRD  = a;               // D口第i脚设置为输出 
 00DE C1BA              out 0x11,R12
 00E0                   .dbline 66
 00E0           ;                 PORTD = 0xFF;        // D口第i脚输出高电平,其他脚为输入脚,上拉电阻有效
 00E0 8FEF              ldi R24,255
 00E2 82BB              out 0x12,R24
 00E4                   .dbline 67
 00E4           ;                     DelayUs(50);         // 延时50微秒(20微秒不工作,25微秒以上就可以很好工作)
 00E4 02E3              ldi R16,50
 00E6 10E0              ldi R17,0
 00E8 8BDF              rcall _DelayUs
 00EA                   .dbline 68
 00EA           ;                     b = ~PINB;
 00EA 66B3              in R22,0x16
 00EC 6095              com R22
 00EE                   .dbline 69
 00EE           ;                         d = PIND;
 00EE 40B3              in R20,0x10
 00F0                   .dbline 70
 00F0 6C15              cp R22,R12
 00F2 11F4              brne L35
 00F4 4F3F              cpi R20,255
 00F6 41F0              breq L33
 00F8           L35:
 00F8                   .dbline 70
 00F8           ;                     if((b!=a) || (d!=0xFF)){       //如果没有报警发生,并且产生了警情,就输出报警信号
 00F8                   .dbline 71
 00F8           ;                            Alarm1_triggered =1;        //标记产生了警情
 00F8 81E0              ldi R24,1
 00FA 90E0              ldi R25,0
 00FC 9983              std y+1,R25
 00FE 8883              std y+0,R24
 0100                   .dbline 72
 0100           ;                            Time_Alarm =0;              //报警计时器清0
 0100 EE24              clr R14
 0102 FF24              clr R15
 0104                   .dbline 73
 0104           ;                        PORTC = PORTC | BIT(3);     //触发第一级报警
 0104 AB9A              sbi 0x15,3
 0106                   .dbline 74
 0106           ;                        goto AlarmStatus;
 0106 05C0              rjmp L28
 0108           L33:
 0108                   .dbline 76
 0108 CC0C              lsl R12
 010A                   .dbline 77
 010A           L30:
 010A                   .dbline 64
 010A A394              inc R10
 010C           L32:
 010C                   .dbline 64
 010C 8A2D              mov R24,R10
 010E 8830              cpi R24,8
 0110 30F3              brlo L29
 0112                   .dbline 78
 0112           ;                         }
 0112           ;                         a = a<<1;
 0112           ;             } 
 0112           ;        }
 0112           L19:
 0112           L28:
 0112                   .dbline 80
 0112 8881              ldd R24,y+0
 0114 9981              ldd R25,y+1
 0116 8130              cpi R24,1
 0118 E0E0              ldi R30,0
 011A 9E07              cpc R25,R30
 011C 31F0              breq L38
 011E 8A81              ldd R24,y+2
 0120 9B81              ldd R25,y+3
 0122 8130              cpi R24,1
 0124 E0E0              ldi R30,0
 0126 9E07              cpc R25,R30
 0128 49F5              brne L36
 012A           L38:
 012A                   .dbline 80
 012A           ; AlarmStatus:
 012A           ;          if((Alarm1_triggered ==1) || (Alarm2_triggered ==1)){
 012A                   .dbline 81
 012A           ;             Time_Alarm = Time_Alarm+1;         //报警时间计时
 012A C701              movw R24,R14
 012C 0196              adiw R24,1
 012E 7C01              movw R14,R24
 0130                   .dbline 82
 0130           ;             DelayMs(100);                      //延时100毫秒
 0130 04E6              ldi R16,100
 0132 10E0              ldi R17,0
 0134 70DF              rcall _DelayMs
 0136                   .dbline 83
 0136           ;             if((Time_Alarm>Alarm1_Time) && (Alarm2_triggered ==0)){   //触发第二级报警
 0136 0C80              ldd R0,y+4
 0138 1D80              ldd R1,y+5
 013A 0E14              cp R0,R14
 013C 1F04              cpc R1,R15
 013E 84F4              brge L39
 0140 0A80              ldd R0,y+2
 0142 1B80              ldd R1,y+3
 0144 0020              tst R0
 0146 61F4              brne L39
 0148 1120              tst R1
 014A 51F4              brne L39
 014C           X2:
 014C                   .dbline 83
 014C                   .dbline 84
 014C           ;              Alarm1_triggered =0;
 014C 0024              clr R0
 014E 1124              clr R1
 0150 1982              std y+1,R1
 0152 0882              std y+0,R0
 0154                   .dbline 85
 0154           ;                        Alarm2_triggered =1;
 0154 81E0              ldi R24,1
 0156 90E0              ldi R25,0
 0158 9B83              std y+3,R25
 015A 8A83              std y+2,R24
 015C                   .dbline 86
 015C           ;                        PORTC = PORTC & (~BIT(3));      //第一级报警时间到了,报警关闭(电话铃声)
 015C AB98              cbi 0x15,3
 015E                   .dbline 87
 015E           ;                    PORTC = PORTC | BIT(4);         //接通第二级报警
 015E AC9A              sbi 0x15,4
 0160                   .dbline 88
 0160           ;           }
 0160           L39:
 0160                   .dbline 89
 0160           ;                 if(Time_Alarm>(Alarm1_Time+Alarm2_Time)){
 0160 2C80              ldd R2,y+4
 0162 3D80              ldd R3,y+5
 0164 0E80              ldd R0,y+6
 0166 1F80              ldd R1,y+7
 0168 200C              add R2,R0
 016A 311C              adc R3,R1
 016C 2E14              cp R2,R14
 016E 3F04              cpc R3,R15
 0170 2CF4              brge L41
 0172                   .dbline 89
 0172                   .dbline 90
 0172           ;                Alarm2_triggered =0;            //清除报警标记,停止报警
 0172 0024              clr R0
 0174 1124              clr R1
 0176 1B82              std y+3,R1
 0178 0A82              std y+2,R0
 017A                   .dbline 91
 017A           ;                    PORTC = PORTC & (~BIT(4));      //第二级报警(高音量)时间到了,报警关闭(高声喇叭报警)
 017A AC98              cbi 0x15,4
 017C                   .dbline 93
 017C           ;                //if(Time_Alarm>600)PORTC = PORTC | BIT(5);    //接通第五脚进行报警(拨电话号码报警)
 017C           ;             }
 017C           L41:
 017C                   .dbline 94
 017C           ;          }
 017C           L36:
 017C                   .dbline 95
 017C           L17:
 017C                   .dbline 37
 017C 72CF              rjmp L16
 017E           X3:
 017E                   .dbline -2
 017E                   .dbline 96
 017E           ;       }
 017E           ; }
 017E           L15:
 017E 2896              adiw R28,8
 0180                   .dbline 0 ; func end
 0180 0895              ret
 0182                   .dbsym l Alarm2_Time 6 I
 0182                   .dbsym l Alarm1_Time 4 I
 0182                   .dbsym l Alarm2_triggered 2 I
 0182                   .dbsym r Time_Alarm 14 I
 0182                   .dbsym l Alarm1_triggered 0 I
 0182                   .dbsym r d 20 c
 0182                   .dbsym r b 22 c
 0182                   .dbsym r i 10 c
 0182                   .dbsym r a 12 c
 0182                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -