📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~2\icc\006-INT0-LED\main.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; a -> R20
0000 ; b -> R22
0000 ; i -> R16
.even
0000 _delay_ms::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 17
0004 ; /*
0004 ; 实验六:
0004 ; INT0中断实验。
0004 ; 1、按键中断实验。低电平中断,在中断中改变PB1电平状态。
0004 ; 2、内部1 M晶振,程序采用单任务方式,软件延时。
0004 ; 3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。
0004 ;
0004 ; AVR mega16学习板
0004 ; www.iccavr.com
0004 ; 2006-03-23
0004 ; */
0004 ;
0004 ; #include "iom16v.h"
0004 ; #include <macros.h>
0004 ;
0004 ; /*延时函数*/
0004 ; void delay_ms(unsigned char i) {
0004 .dbline 20
0004 41E0 ldi R20,1
0006 06C0 xjmp L5
0008 L2:
0008 .dbline 20
0008 ;
0008 ; unsigned char a, b;
0008 ; for (a = 1; a < i; a++) {
0008 .dbline 21
0008 61E0 ldi R22,1
000A 01C0 xjmp L9
000C L6:
000C .dbline 21
000C .dbline 22
000C .dbline 23
000C L7:
000C .dbline 21
000C 6395 inc R22
000E L9:
000E .dbline 21
000E 6623 tst R22
0010 E9F7 brne L6
0012 .dbline 24
0012 L3:
0012 .dbline 20
0012 4395 inc R20
0014 L5:
0014 .dbline 20
0014 4017 cp R20,R16
0016 C0F3 brlo L2
0018 .dbline -2
0018 L1:
0018 0E940000 xcall pop_gset2
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r a 20 c
001E .dbsym r b 22 c
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e main _main fV
.even
001E _main::
001E .dbline -1
001E .dbline 27
001E ; for (b = 1; b; b++) {
001E ; ;
001E ; }
001E ; }
001E ; }
001E ;
001E ; void main(void) {
001E .dbline 29
001E ;
001E ; DDRA = 0x00; /*方向输入*/
001E 2224 clr R2
0020 2ABA out 0x1a,R2
0022 .dbline 30
0022 ; PORTA = 0xFF; /*打开上拉*/
0022 8FEF ldi R24,255
0024 8BBB out 0x1b,R24
0026 .dbline 31
0026 ; DDRB = 0xFF; /*方向输出*/
0026 87BB out 0x17,R24
0028 .dbline 32
0028 ; PORTB = 0xFF; /*电平设置*/
0028 88BB out 0x18,R24
002A .dbline 33
002A ; DDRC = 0x00;
002A 24BA out 0x14,R2
002C .dbline 34
002C ; PORTC = 0xFF;
002C 85BB out 0x15,R24
002E .dbline 35
002E ; DDRD = 0x00;
002E 21BA out 0x11,R2
0030 .dbline 36
0030 ; PORTD = 0xFF;
0030 82BB out 0x12,R24
0032 .dbline 38
0032 ;
0032 ; GICR |= (1 << INT0);
0032 8BB7 in R24,0x3b
0034 8064 ori R24,64
0036 8BBF out 0x3b,R24
0038 .dbline 39
0038 ; SEI();
0038 7894 sei
003A 06C0 xjmp L12
003C L11:
003C .dbline 41
003C .dbline 42
003C 08EC ldi R16,200
003E E0DF xcall _delay_ms
0040 .dbline 43
0040 81E0 ldi R24,1
0042 28B2 in R2,0x18
0044 2826 eor R2,R24
0046 28BA out 0x18,R2
0048 .dbline 44
0048 L12:
0048 .dbline 41
0048 F9CF xjmp L11
004A X0:
004A .dbline -2
004A L10:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbend
.area vector(rom, abs)
.org 4
0004 0C942600 jmp _Int0
.area text(rom, con, rel)
004C .dbfile E:\ICCAVR\project\AVRMEG~2\icc\006-INT0-LED\main.c
004C .dbfunc e Int0 _Int0 fV
004C ; i -> R16,R17
.even
004C _Int0::
004C 2A92 st -y,R2
004E 0A93 st -y,R16
0050 1A93 st -y,R17
0052 8A93 st -y,R24
0054 9A93 st -y,R25
0056 2FB6 in R2,0x3f
0058 2A92 st -y,R2
005A .dbline -1
005A .dbline 48
005A ;
005A ; while (1) {
005A ; delay_ms(200);
005A ; PORTB ^= (1 << 0); /*PB0电平取反*/
005A ; }
005A ; }
005A ;
005A ; #pragma interrupt_handler Int0: 2 /*外部中断INT0*/
005A ; void Int0(void) {
005A .dbline 50
005A ; unsigned int i;
005A ; PORTB ^= (1 << 1); /*PB1电平取反*/
005A 82E0 ldi R24,2
005C 28B2 in R2,0x18
005E 2826 eor R2,R24
0060 28BA out 0x18,R2
0062 .dbline 51
0062 ; i = 1000; /*加入廷时防按键颤动*/
0062 08EE ldi R16,1000
0064 13E0 ldi R17,3
0066 L15:
0066 .dbline 52
0066 L16:
0066 .dbline 52
0066 ; while (--i);
0066 C801 movw R24,R16
0068 0197 sbiw R24,1
006A 8C01 movw R16,R24
006C 0030 cpi R16,0
006E 0107 cpc R16,R17
0070 D1F7 brne L15
0072 X1:
0072 L18:
0072 .dbline 53
0072 L19:
0072 .dbline 53
0072 ; while ((PIND & (1 << PD2)) == 0); /*等待按键松开*/
0072 829B sbis 0x10,2
0074 FECF rjmp L18
0076 .dbline 54
0076 ; i = 1000; /*加入廷时防按键颤动*/
0076 08EE ldi R16,1000
0078 13E0 ldi R17,3
007A L21:
007A .dbline 55
007A L22:
007A .dbline 55
007A ; while (--i);
007A C801 movw R24,R16
007C 0197 sbiw R24,1
007E 8C01 movw R16,R24
0080 0030 cpi R16,0
0082 0107 cpc R16,R17
0084 D1F7 brne L21
0086 X2:
0086 .dbline -2
0086 L14:
0086 2990 ld R2,y+
0088 2FBE out 0x3f,R2
008A 9991 ld R25,y+
008C 8991 ld R24,y+
008E 1991 ld R17,y+
0090 0991 ld R16,y+
0092 2990 ld R2,y+
0094 .dbline 0 ; func end
0094 1895 reti
0096 .dbsym r i 16 i
0096 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -