📄 led.lis
字号:
.module Led.c
.area text(rom, con, rel)
0000 .dbfile F:\机器人3\avr\AVR典型实例\第2章程序\复件IO~1\跑马灯设计\Led.c
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20,R21
0000 ; i -> R16,R17
.even
0000 _DelayMs::
0000 4A93 st -y,R20
0002 5A93 st -y,R21
0004 .dbline -1
0004 .dbline 9
0004 ; //******************************FileName: LED.C******************************//
0004 ; //******************************ICCAVR V6.30编译****************************//
0004 ;
0004 ; #include<io8535v.h> //头文件,AT90S8535单片机的寄存器定义
0004 ; #define uchar unsigned char //数据类型说明
0004 ; #define uint unsigned int //数据类型说明
0004 ;
0004 ; void DelayMs(uint i) //Ms级延时函数,参数i:延时时间
0004 ; {uint j;
0004 .dbline 10
0004 ; for(;i!=0;i--)
0004 0AC0 xjmp L5
0006 L2:
0006 .dbline 11
0006 ; {for(j=8000;j!=0;j--) ;}
0006 .dbline 11
0006 40E4 ldi R20,8000
0008 5FE1 ldi R21,31
000A 02C0 xjmp L9
000C L6:
000C .dbline 11
000C L7:
000C .dbline 11
000C 4150 subi R20,1
000E 5040 sbci R21,0
0010 L9:
0010 .dbline 11
0010 4030 cpi R20,0
0012 4507 cpc R20,R21
0014 D9F7 brne L6
0016 X0:
0016 .dbline 11
0016 L3:
0016 .dbline 10
0016 0150 subi R16,1
0018 1040 sbci R17,0
001A L5:
001A .dbline 10
001A 0030 cpi R16,0
001C 0107 cpc R16,R17
001E 99F7 brne L2
0020 X1:
0020 .dbline -2
0020 L1:
0020 .dbline 0 ; func end
0020 5991 ld R21,y+
0022 4991 ld R20,y+
0024 0895 ret
0026 .dbsym r j 20 i
0026 .dbsym r i 16 i
0026 .dbend
0026 .dbfunc e Horse _Horse fV
0026 ; i -> R16
.even
0026 _Horse::
0026 4A93 st -y,R20
0028 5A93 st -y,R21
002A .dbline -1
002A .dbline 15
002A ; }
002A ;
002A ; void Horse(uchar i) //跑马灯程序,通过步判断点亮相应的LED
002A ; {switch(i) //高电平点亮LED
002A .dbline 15
002A 402F mov R20,R16
002C 5527 clr R21
002E 4130 cpi R20,1
0030 E0E0 ldi R30,0
0032 5E07 cpc R21,R30
0034 E9F0 breq L14
0036 X2:
0036 4230 cpi R20,2
0038 E0E0 ldi R30,0
003A 5E07 cpc R21,R30
003C E1F0 breq L15
003E X3:
003E 4330 cpi R20,3
0040 E0E0 ldi R30,0
0042 5E07 cpc R21,R30
0044 D9F0 breq L16
0046 X4:
0046 4430 cpi R20,4
0048 E0E0 ldi R30,0
004A 5E07 cpc R21,R30
004C D1F0 breq L17
004E X5:
004E 4530 cpi R20,5
0050 E0E0 ldi R30,0
0052 5E07 cpc R21,R30
0054 C9F0 breq L18
0056 X6:
0056 4630 cpi R20,6
0058 E0E0 ldi R30,0
005A 5E07 cpc R21,R30
005C C1F0 breq L19
005E X7:
005E 4730 cpi R20,7
0060 E0E0 ldi R30,0
0062 5E07 cpc R21,R30
0064 B9F0 breq L20
0066 X8:
0066 4830 cpi R20,8
0068 E0E0 ldi R30,0
006A 5E07 cpc R21,R30
006C B1F0 breq L21
006E X9:
006E 17C0 xjmp L12
0070 L14:
0070 .dbline 16
0070 ; {case 1:PORTA=0x01;break; //0000 0001B 点亮LED1
0070 81E0 ldi R24,1
0072 8BBB out 0x1b,R24
0074 .dbline 16
0074 14C0 xjmp L12
0076 L15:
0076 .dbline 17
0076 ; case 2:PORTA=0x03;break; //0000 0011B 点亮LED1~LED2
0076 83E0 ldi R24,3
0078 8BBB out 0x1b,R24
007A .dbline 17
007A 11C0 xjmp L12
007C L16:
007C .dbline 18
007C ; case 3:PORTA=0x07;break; //0000 0111B 点亮LED1~LED3
007C 87E0 ldi R24,7
007E 8BBB out 0x1b,R24
0080 .dbline 18
0080 0EC0 xjmp L12
0082 L17:
0082 .dbline 19
0082 ; case 4:PORTA=0x0f;break; //0000 1111B 点亮LED1~LED4
0082 8FE0 ldi R24,15
0084 8BBB out 0x1b,R24
0086 .dbline 19
0086 0BC0 xjmp L12
0088 L18:
0088 .dbline 20
0088 ; case 5:PORTA=0x1f;break; //0001 1111B 点亮LED1~LED5
0088 8FE1 ldi R24,31
008A 8BBB out 0x1b,R24
008C .dbline 20
008C 08C0 xjmp L12
008E L19:
008E .dbline 21
008E ; case 6:PORTA=0x3f;break; //0011 1111B 点亮LED1~LED6
008E 8FE3 ldi R24,63
0090 8BBB out 0x1b,R24
0092 .dbline 21
0092 05C0 xjmp L12
0094 L20:
0094 .dbline 22
0094 ; case 7:PORTA=0x7f;break; //0111 1111B 点亮LED1~LED7
0094 8FE7 ldi R24,127
0096 8BBB out 0x1b,R24
0098 .dbline 22
0098 02C0 xjmp L12
009A L21:
009A .dbline 23
009A ; case 8:PORTA=0xff;break; //1111 1111B 点亮LED1~LED8
009A 8FEF ldi R24,255
009C 8BBB out 0x1b,R24
009E .dbline 23
009E .dbline 24
009E ; default:break;}
009E L12:
009E .dbline -2
009E L10:
009E .dbline 0 ; func end
009E 5991 ld R21,y+
00A0 4991 ld R20,y+
00A2 0895 ret
00A4 .dbsym r i 16 c
00A4 .dbend
00A4 .dbfunc e main _main fV
00A4 ; i -> R20
.even
00A4 _main::
00A4 .dbline -1
00A4 .dbline 28
00A4 ; }
00A4 ;
00A4 ; void main(void)
00A4 ; {uchar i;
00A4 .dbline 29
00A4 ; DDRA=0xff; //端口设置:PA口设置为推挽1输出
00A4 8FEF ldi R24,255
00A6 8ABB out 0x1a,R24
00A8 .dbline 30
00A8 ; PORTA=0xff;
00A8 8BBB out 0x1b,R24
00AA .dbline 31
00AA ; PORTA=0x00; //PORTA初始值为0,灭掉所有的LED
00AA 2224 clr R2
00AC 2BBA out 0x1b,R2
00AE .dbline 32
00AE ; DelayMs(1000);
00AE 08EE ldi R16,1000
00B0 13E0 ldi R17,3
00B2 A6DF xcall _DelayMs
00B4 14C0 xjmp L24
00B6 L23:
00B6 .dbline 34
00B6 ; while(1) //程序无条件执行
00B6 ; { for(i=0;i<9;i++) //依次点亮LED1~LED8
00B6 .dbline 34
00B6 4427 clr R20
00B8 06C0 xjmp L29
00BA L26:
00BA .dbline 35
00BA ; {Horse(i);
00BA .dbline 35
00BA 042F mov R16,R20
00BC B4DF xcall _Horse
00BE .dbline 36
00BE ; DelayMs(1000);} //点亮时间约1秒
00BE 08EE ldi R16,1000
00C0 13E0 ldi R17,3
00C2 9EDF xcall _DelayMs
00C4 .dbline 36
00C4 L27:
00C4 .dbline 34
00C4 4395 inc R20
00C6 L29:
00C6 .dbline 34
00C6 4930 cpi R20,9
00C8 C0F3 brlo L26
00CA X10:
00CA .dbline 37
00CA ; for(i=7;i!=0;i--) //依次熄灭LED8~LED1
00CA 47E0 ldi R20,7
00CC 06C0 xjmp L33
00CE L30:
00CE .dbline 38
00CE ; {Horse(i);
00CE .dbline 38
00CE 042F mov R16,R20
00D0 AADF xcall _Horse
00D2 .dbline 39
00D2 ; DelayMs(1000);} //熄灭时间约1秒
00D2 08EE ldi R16,1000
00D4 13E0 ldi R17,3
00D6 94DF xcall _DelayMs
00D8 .dbline 39
00D8 L31:
00D8 .dbline 37
00D8 4A95 dec R20
00DA L33:
00DA .dbline 37
00DA 4423 tst R20
00DC C1F7 brne L30
00DE X11:
00DE .dbline 40
00DE ; }
00DE L24:
00DE .dbline 33
00DE EBCF xjmp L23
00E0 X12:
00E0 .dbline -2
00E0 L22:
00E0 .dbline 0 ; func end
00E0 0895 ret
00E2 .dbsym r i 20 c
00E2 .dbend
00E2 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -