📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~3\icc\002-KEY-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 16
0004 ; /*
0004 ; 实验二:
0004 ; KEY按键输入LED发光二极管显示实验。
0004 ; 1、I/O口实验,检测PE口上按键状态,然后在PB口上显示出来。
0004 ; 2、内部1 M晶振,程序采用单任务方式,软件延时。
0004 ; 3、进行此实验请插上LED短路块。
0004 ; 4、此实验让大家认识最基本的IO口输入与输出方法。
0004 ;
0004 ; AVR mega128学习板
0004 ; www.iccavr.com 阿发
0004 ; 23:03 2007-10-09
0004 ; */
0004 ; #include "iom128v.h"
0004 ;
0004 ; /*延时函数*/
0004 ; void delay_ms(unsigned char i) {
0004 .dbline 19
0004 4427 clr R20
0006 06C0 xjmp L5
0008 L2:
0008 .dbline 19
0008 ;
0008 ; unsigned char a, b;
0008 ; for (a = 0; a < i; a++) {
0008 .dbline 20
0008 61E0 ldi R22,1
000A 01C0 xjmp L9
000C L6:
000C .dbline 20
000C L7:
000C .dbline 20
000C 6395 inc R22
000E L9:
000E .dbline 20
000E 6623 tst R22
0010 E9F7 brne L6
0012 .dbline 21
0012 L3:
0012 .dbline 19
0012 4395 inc R20
0014 L5:
0014 .dbline 19
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 io_init _io_init fV
.even
001E _io_init::
001E .dbline -1
001E .dbline 25
001E ; for (b = 1; b; b++);
001E ; }
001E ; }
001E ;
001E ; /*IO口初始化函数*/
001E ; void io_init(void) {
001E .dbline 27
001E ;
001E ; DDRA = 0x00; /*方向输入*/
001E 2224 clr R2
0020 2ABA out 0x1a,R2
0022 .dbline 28
0022 ; PORTA = 0xFF; /*打开上拉*/
0022 8FEF ldi R24,255
0024 8BBB out 0x1b,R24
0026 .dbline 29
0026 ; DDRB = 0xFF; /*方向输出*/
0026 87BB out 0x17,R24
0028 .dbline 30
0028 ; PORTB = 0xFF; /*高电平*/
0028 88BB out 0x18,R24
002A .dbline 31
002A ; DDRC = 0x00; /*不用的IO口建议设置为输入带上拉*/
002A 24BA out 0x14,R2
002C .dbline 32
002C ; PORTC = 0xFF;
002C 85BB out 0x15,R24
002E .dbline 33
002E ; DDRD = 0x00;
002E 21BA out 0x11,R2
0030 .dbline 34
0030 ; PORTD = 0xFF;
0030 82BB out 0x12,R24
0032 .dbline 35
0032 ; DDRE = 0x00;
0032 22B8 out 0x2,R2
0034 .dbline 36
0034 ; PORTE = 0xFF;
0034 83B9 out 0x3,R24
0036 .dbline 37
0036 ; DDRF = 0x00;
0036 20926100 sts 97,R2
003A .dbline 38
003A ; PORTF = 0xFF;
003A 80936200 sts 98,R24
003E .dbline 39
003E ; DDRG = 0x00;
003E 20926400 sts 100,R2
0042 .dbline 40
0042 ; PORTG = 0xFF;
0042 80936500 sts 101,R24
0046 .dbline -2
0046 L10:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbend
0048 .dbfunc e main _main fV
.even
0048 _main::
0048 .dbline -1
0048 .dbline 43
0048 ; }
0048 ;
0048 ; void main(void) {
0048 .dbline 45
0048 ;
0048 ; io_init();
0048 EADF xcall _io_init
004A 21C0 xjmp L13
004C L12:
004C .dbline 47
004C ;
004C ; while (1) {
004C .dbline 48
004C ; if ((PINE & (1 << PE0)) == 0) { /*判断是否按下*/
004C 0899 sbic 0x1,0
004E 02C0 rjmp L15
0050 .dbline 48
0050 .dbline 49
0050 ; PORTB = ~(1 << PB0); /*点亮指示灯*/
0050 8EEF ldi R24,254
0052 88BB out 0x18,R24
0054 .dbline 50
0054 ; }
0054 L15:
0054 .dbline 51
0054 ; if ((PINE & (1 << PE1)) == 0) {
0054 0999 sbic 0x1,1
0056 02C0 rjmp L17
0058 .dbline 51
0058 .dbline 52
0058 ; PORTB = ~(1 << PB1);
0058 8DEF ldi R24,253
005A 88BB out 0x18,R24
005C .dbline 53
005C ; }
005C L17:
005C .dbline 54
005C ; if ((PINE & (1 << PE2)) == 0) {
005C 0A99 sbic 0x1,2
005E 02C0 rjmp L19
0060 .dbline 54
0060 .dbline 55
0060 ; PORTB = ~(1 << PB2);
0060 8BEF ldi R24,251
0062 88BB out 0x18,R24
0064 .dbline 56
0064 ; }
0064 L19:
0064 .dbline 57
0064 ; if ((PINE & (1 << PE3)) == 0) {
0064 0B99 sbic 0x1,3
0066 02C0 rjmp L21
0068 .dbline 57
0068 .dbline 58
0068 ; PORTB = ~(1 << PB3);
0068 87EF ldi R24,247
006A 88BB out 0x18,R24
006C .dbline 59
006C ; }
006C L21:
006C .dbline 60
006C ; if ((PINE & (1 << PE4)) == 0) {
006C 0C99 sbic 0x1,4
006E 02C0 rjmp L23
0070 .dbline 60
0070 .dbline 61
0070 ; PORTB = ~(1 << PB4);
0070 8FEE ldi R24,239
0072 88BB out 0x18,R24
0074 .dbline 62
0074 ; }
0074 L23:
0074 .dbline 63
0074 ; if ((PINE & (1 << PE5)) == 0) {
0074 0D99 sbic 0x1,5
0076 02C0 rjmp L25
0078 .dbline 63
0078 .dbline 64
0078 ; PORTB = ~(1 << PB5);
0078 8FED ldi R24,223
007A 88BB out 0x18,R24
007C .dbline 65
007C ; }
007C L25:
007C .dbline 66
007C ; if ((PINE & (1 << PE6)) == 0) {
007C 0E99 sbic 0x1,6
007E 02C0 rjmp L27
0080 .dbline 66
0080 .dbline 67
0080 ; PORTB = ~(1 << PB6);
0080 8FEB ldi R24,191
0082 88BB out 0x18,R24
0084 .dbline 68
0084 ; }
0084 L27:
0084 .dbline 69
0084 ; if ((PINE & (1 << PE7)) == 0) {
0084 0F99 sbic 0x1,7
0086 03C0 rjmp L29
0088 .dbline 69
0088 .dbline 70
0088 ; PORTB = ~(1 << PB7);
0088 8FE7 ldi R24,-129
008A 9FEF ldi R25,-1
008C 88BB out 0x18,R24
008E .dbline 71
008E ; }
008E L29:
008E .dbline 72
008E L13:
008E .dbline 47
008E DECF xjmp L12
0090 X0:
0090 .dbline -2
0090 L11:
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -