?? hongwai.lst
字號:
__start:
__text_start:
72 EFCF LDI R28,0xFF
73 E2D1 LDI R29,0x21
74 BFCD OUT 0x3D,R28
75 BFDE OUT 0x3E,R29
76 51CE SUBI R28,0x1E
77 40D0 SBCI R29,0
78 EA0A LDI R16,0xAA
79 8308 STD Y+0,R16
7A 2400 CLR R0
7B E0E0 LDI R30,0
7C E0F2 LDI R31,2
7D E012 LDI R17,2
7E 30E0 CPI R30,0
7F 07F1 CPC R31,R17
80 F011 BEQ 0x0083
81 9201 ST R0,Z+
82 CFFB RJMP 0x007E
83 8300 STD Z+0,R16
84 EEE4 LDI R30,0xE4
85 E0F0 LDI R31,0
86 E0A0 LDI R26,0
87 E0B2 LDI R27,2
88 E010 LDI R17,0
89 E000 LDI R16,0
8A BF0B OUT 0x3B,R16
8B 3EE4 CPI R30,0xE4
8C 07F1 CPC R31,R17
8D F021 BEQ 0x0092
8E 95C8 LPM
8F 9631 ADIW R30,1
90 920D ST R0,X+
91 CFF9 RJMP 0x008B
92 940E 0095 CALL _main
_exit:
94 CFFF RJMP _exit
FILE: hongwai.c
(0001) #include <iom8515v.h>//和單片機類型相對應的頭文件,選擇Atmega8515做實驗;
(0002) #include <macros.h>
(0003) void delay_nus(unsigned int n);//函數聲明,本實驗中會用到這兩個函數
(0004) void delay_nms(unsigned int n);
(0005) void main(void)//主函數
(0006) { //L6
(0007) unsigned int i;
(0008) unsigned char n;
(0009) TCCR0=BIT(CS01);//T/C0時鐘8分頻
_main:
n --> R22
i --> R20
95 E082 LDI R24,2
96 BF83 OUT 0x33,R24
(0010) TIMSK=BIT(TOIE0);//允許定時器T/C0溢出中斷
97 BF89 OUT 0x39,R24
(0011) SEI();//開中斷
98 9478 BSET 7
(0012) DDRD|=BIT(1);
99 9A89 SBI 0x11,1
(0013) PORTD|=BIT(1);
9A 9A91 SBI 0x12,1
(0014) DDRD|=BIT(4);//設置PD4,PC0為輸出口
9B 9A8C SBI 0x11,4
(0015) DDRC|=BIT(0);
9C 9AA0 SBI 0x14,0
(0016) DDRD&=~BIT(5);//設置PC5為輸入口
9D 988D CBI 0x11,5
(0017) DDRB|=BIT(7)|BIT(0);//定義B口的PB0、PB1為輸出口
9E B387 IN R24,0x17
9F 6881 ORI R24,0x81
A0 BB87 OUT 0x17,R24
(0018) PORTB&=~BIT(0);//PB1口輸出低電平,綠燈亮
A1 98C0 CBI 0x18,0
(0019) PORTB|=BIT(7);
A2 9AC7 SBI 0x18,7
(0020) DDRD|=BIT(1);
A3 9A89 SBI 0x11,1
(0021) PORTD|=BIT(1);//與門一端輸出1
A4 9A91 SBI 0x12,1
A5 C02F RJMP 0x00D5
(0022)
(0023) while(1)
(0024) { //L5
(0025) for (n=0;n<10;n++)
A6 2766 CLR R22
A7 C02B RJMP 0x00D3
(0026) { //L4
(0027) delay_nus(60);
A8 E30C LDI R16,0x3C
A9 E010 LDI R17,0
AA D02C RCALL _delay_nus
(0028) if ((PIND&0B00100000)==0) //檢測PD5是否為低電平
AB 9985 SBIC 0x10,5
AC C025 RJMP 0x00D2
(0029) { //L3
(0030) i++;
AD 5F4F SUBI R20,0xFF
AE 4F5F SBCI R21,0xFF
(0031) if (i>8)//如果連續檢測到有301-399次PD5都為低電平,則報警
AF E088 LDI R24,0x8
B0 E090 LDI R25,0
B1 1784 CP R24,R20
B2 0795 CPC R25,R21
B3 F4D8 BCC 0x00CF
(0032) { //L2
(0033) CLI();
B4 94F8 BCLR 7
(0034) for(i=0;i<10;i++)
B5 2744 CLR R20
B6 2755 CLR R21
B7 C00E RJMP 0x00C6
(0035) { //L1
(0036) PORTB|=BIT(0);//關閉D0燈
B8 9AC0 SBI 0x18,0
(0037) PORTC|=BIT(0);//打開蜂鳴器
B9 9AA8 SBI 0x15,0
(0038) PORTB^=BIT(7);//翻轉D7燈,快閃
BA E880 LDI R24,0x80
BB E090 LDI R25,0
BC B228 IN R2,0x18
BD 2433 CLR R3
BE 2628 EOR R2,R24
BF 2639 EOR R3,R25
C0 BA28 OUT 0x18,R2
(0039) delay_nms(30);
C1 E10E LDI R16,0x1E
C2 E010 LDI R17,0
C3 D021 RCALL _delay_nms
C4 5F4F SUBI R20,0xFF
C5 4F5F SBCI R21,0xFF
C6 304A CPI R20,0xA
C7 E0E0 LDI R30,0
C8 075E CPC R21,R30
C9 F370 BCS 0x00B8
(0040) } //L1
(0041) PORTC&=~BIT(0);//關閉蜂鳴器
CA 98A8 CBI 0x15,0
(0042) PORTB|=BIT(7);//關閉紅燈
CB 9AC7 SBI 0x18,7
(0043) i=0;
CC 2744 CLR R20
CD 2755 CLR R21
(0044) SEI();
CE 9478 BSET 7
(0045) } //L2 */
(0046) PORTB&=BIT(0);//打開綠燈
CF B388 IN R24,0x18
D0 7081 ANDI R24,1
D1 BB88 OUT 0x18,R24
D2 9563 INC R22
D3 306A CPI R22,0xA
D4 F298 BCS 0x00A8
D5 CFD0 RJMP 0x00A6
D6 9508 RET
_delay_nus:
i --> R20
n --> R16
D7 934A ST R20,-Y
D8 935A ST R21,-Y
(0047) } //L3
(0048) } //L4
(0049) }
(0050) //-------------------碼調制----------------------------/
(0051) /*** CLI();//PD0連續2ms都無輸出
(0052) PORTD&=~BIT(4);
(0053) delay_nms(2);
(0054) TCNT0=245;
(0055) SEI();//PD0連續600us產生38KHZ信號
(0056) //delay_nus(100);
(0057) } //L5 */
(0058)
(0059) } //L6
(0060)
(0061) //#pragma interrupt_handler LED0:iv_TIMER0_OVF//指定中斷服務程序的入口
(0062) /***********void LED0(void)//產生38KHz的方波信號
(0063) {
(0064) PORTD^=BIT(4);//翻轉PD0口電平
(0065) TCNT0=245;
(0066) } **/
(0067)
(0068) void delay_nus(unsigned int n)//n微秒延時函數
(0069) {
(0070) unsigned int i;
(0071) for (i=0;i<n;i++)
D9 2744 CLR R20
DA 2755 CLR R21
DB C003 RJMP 0x00DF
(0072) {
(0073) asm("nop");
DC 0000 NOP
DD 5F4F SUBI R20,0xFF
DE 4F5F SBCI R21,0xFF
DF 1740 CP R20,R16
E0 0751 CPC R21,R17
E1 F3D0 BCS 0x00DC
E2 9159 LD R21,Y+
E3 9149 LD R20,Y+
E4 9508 RET
_delay_nms:
i --> R20
n --> R10
E5 940E 00F5 CALL push_xgset300C
E7 0158 MOVW R10,R16
(0074) }
(0075) }
(0076)
(0077) void delay_nms(unsigned int n)//n毫秒延時函數
(0078) {
(0079) unsigned int i;
(0080) for (i=0;i<n;i++) //執行n次1毫秒延時
E8 2744 CLR R20
E9 2755 CLR R21
EA C005 RJMP 0x00F0
(0081) delay_nus(1000);
FILE: <library>
EB EE08 LDI R16,0xE8
EC E013 LDI R17,3
ED DFE9 RCALL _delay_nus
EE 5F4F SUBI R20,0xFF
EF 4F5F SBCI R21,0xFF
F0 154A CP R20,R10
F1 055B CPC R21,R11
F2 F3C0 BCS 0x00EB
F3 940C 00FA JMP pop_xgset300C
push_xgset300C:
F5 935A ST R21,-Y
F6 934A ST R20,-Y
F7 92BA ST R11,-Y
F8 92AA ST R10,-Y
F9 9508 RET
pop_xgset300C:
FA 90A9 LD R10,Y+
FB 90B9 LD R11,Y+
FC 9149 LD R20,Y+
FD 9159 LD R21,Y+
FE 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -