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