?? laserbeam.lis
字號:
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 + -