📄 led.lst
字号:
__start:
__text_start:
0013 E5CF LDI R28,0x5F
0014 E0D4 LDI R29,4
0015 BFCD OUT 0x3D,R28
0016 BFDE OUT 0x3E,R29
0017 51C0 SUBI R28,0x10
0018 40D0 SBCI R29,0
0019 EA0A LDI R16,0xAA
001A 8308 STD Y+0,R16
001B 2400 CLR R0
001C E6E0 LDI R30,0x60
001D E0F0 LDI R31,0
001E E010 LDI R17,0
001F 36E0 CPI R30,0x60
0020 07F1 CPC R31,R17
0021 F011 BEQ 0x0024
0022 9201 ST R0,Z+
0023 CFFB RJMP 0x001F
0024 8300 STD Z+0,R16
0025 E2E6 LDI R30,0x26
0026 E0F0 LDI R31,0
0027 E6A0 LDI R26,0x60
0028 E0B0 LDI R27,0
0029 E010 LDI R17,0
002A 32E6 CPI R30,0x26
002B 07F1 CPC R31,R17
002C F021 BEQ 0x0031
002D 95C8 LPM
002E 9631 ADIW R30,1
002F 920D ST R0,X+
0030 CFF9 RJMP 0x002A
0031 D056 RCALL _main
_exit:
0032 CFFF RJMP _exit
FILE: C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\led\led00.c
(0001) //I/O演示程序
(0002) //程序流程:全亮->全灭->PD隔一步进->全亮->全灭->PD隔二步进->全亮->全灭->PB全亮->pb0置位->pb0清零->PB0反转->全灭->(循环)
(0003)
(0004) // Target : M8
(0005) // Crystal: 11.059Mhz
(0006)
(0007) #include <iom8v.h>
(0008) #include <macros.h>
(0009)
(0010) //起始全亮
(0011) void port_init(void)
(0012) {
(0013) PORTB = 0x00;
_port_init:
0033 2422 CLR R2
0034 BA28 OUT 0x18,R2
(0014) DDRB = 0xFF;
0035 EF8F LDI R24,0xFF
0036 BB87 OUT 0x17,R24
(0015) PORTC = 0x00;
0037 BA25 OUT 0x15,R2
(0016) DDRC = 0x7F;
0038 E78F LDI R24,0x7F
0039 BB84 OUT 0x14,R24
(0017) PORTD = 0x00;
003A BA22 OUT 0x12,R2
(0018) DDRD = 0xFF;
003B EF8F LDI R24,0xFF
003C BB81 OUT 0x11,R24
(0019) }
003D 9508 RET
_delay:
i --> R20
j --> R22
tim --> R16
003E D080 RCALL push_gset2
(0020)
(0021) //延时函数,大约1ms;
(0022) void delay(char tim)
(0023) {
(0024) unsigned int i,j;
(0025) for(i=0;i<tim;i++)
003F 2744 CLR R20
0040 2755 CLR R21
0041 C00B RJMP 0x004D
(0026) for(j=0;j<10000;j++);
0042 2766 CLR R22
0043 2777 CLR R23
0044 C002 RJMP 0x0047
0045 5F6F SUBI R22,0xFF
0046 4F7F SBCI R23,0xFF
0047 3160 CPI R22,0x10
0048 E2E7 LDI R30,0x27
0049 077E CPC R23,R30
004A F3D0 BCS 0x0045
004B 5F4F SUBI R20,0xFF
004C 4F5F SBCI R21,0xFF
004D 2E20 MOV R2,R16
004E 2433 CLR R3
004F 1542 CP R20,R2
0050 0553 CPC R21,R3
0051 F380 BCS 0x0042
(0027) }
0052 D053 RCALL pop_gset2
0053 9508 RET
(0028)
(0029) //led全亮
(0030) void led_on(void)
(0031) {
(0032) PORTB = 0x00;
_led_on:
0054 2422 CLR R2
0055 BA28 OUT 0x18,R2
(0033) PORTC = 0x00;
0056 BA25 OUT 0x15,R2
(0034) PORTD = 0x00;
0057 BA22 OUT 0x12,R2
(0035)
(0036) delay(5000);
0058 E808 LDI R16,0x88
(0037) }
0059 CFE4 RJMP _delay
(0038) //led全灭
(0039) void led_off(void)
(0040) {
(0041) PORTB = 0xFF;
_led_off:
005A EF8F LDI R24,0xFF
005B BB88 OUT 0x18,R24
(0042) PORTC = 0xFF;
005C BB85 OUT 0x15,R24
(0043) PORTD = 0xFF;
005D BB82 OUT 0x12,R24
(0044)
(0045) delay(5000);
005E E808 LDI R16,0x88
(0046) }
005F CFDE RJMP _delay
_pd_1:
i --> R20
0060 D047 RCALL push_gset1
(0047) //PB隔1步进
(0048) void pd_1(void)
(0049) {
(0050) char i;
(0051) for (i = 0; i < 8; i++)
0061 2744 CLR R20
0062 C009 RJMP 0x006C
(0052) {
(0053) PORTB = ~(1 << (i));//位操作结合移位操作
0063 E001 LDI R16,1
0064 2F14 MOV R17,R20
0065 D05C RCALL lsl8
0066 2E20 MOV R2,R16
0067 9420 COM R2
0068 BA28 OUT 0x18,R2
(0054) delay(5000);
0069 E808 LDI R16,0x88
006A DFD3 RCALL _delay
006B 9543 INC R20
006C 3048 CPI R20,0x8
006D F3A8 BCS 0x0063
(0055) }
(0056) }
006E D03C RCALL pop_gset1
006F 9508 RET
_pd_2:
i --> R20
0070 D037 RCALL push_gset1
(0057) //PB隔2步进
(0058) void pd_2(void)
(0059) {
(0060) char i;
(0061) for (i = 0; i < 8; i+=2)
0071 2744 CLR R20
0072 C009 RJMP 0x007C
(0062) {
(0063) PORTB = ~(1 << (i));//位操作结合移位操作
0073 E001 LDI R16,1
0074 2F14 MOV R17,R20
0075 D04C RCALL lsl8
0076 2E20 MOV R2,R16
0077 9420 COM R2
0078 BA28 OUT 0x18,R2
(0064) delay(5000);
0079 E808 LDI R16,0x88
007A DFC3 RCALL _delay
007B 5F4E SUBI R20,0xFE
007C 3048 CPI R20,0x8
007D F3A8 BCS 0x0073
(0065) }
(0066) }
007E D02C RCALL pop_gset1
007F 9508 RET
(0067)
(0068) //call this routine to initialise all peripherals
(0069) void init_devices(void)
(0070) {
(0071) //stop errant interrupts until set up
(0072) CLI(); //disable all interrupts
_init_devices:
0080 94F8 BCLR 7
(0073) port_init();
0081 DFB1 RCALL _port_init
(0074)
(0075) MCUCR = 0x00;
0082 2422 CLR R2
0083 BE25 OUT 0x35,R2
(0076) GICR = 0x00;
0084 BE2B OUT 0x3B,R2
(0077) TIMSK = 0x00; //timer interrupt sources
0085 BE29 OUT 0x39,R2
(0078) SEI(); //re-enable interrupts
0086 9478 BSET 7
(0079) //all peripherals are now initialised
(0080) }
0087 9508 RET
(0081)
(0082) //
(0083) void main(void)
(0084) {
(0085) init_devices();
_main:
0088 DFF7 RCALL _init_devices
0089 C01A RJMP 0x00A4
(0086)
(0087) while(1)
(0088) {
(0089) led_on();
008A DFC9 RCALL _led_on
(0090) led_off();
008B DFCE RCALL _led_off
(0091)
(0092) led_on();
008C DFC7 RCALL _led_on
(0093) led_off();
008D DFCC RCALL _led_off
(0094)
(0095)
(0096) pd_1();
008E DFD1 RCALL _pd_1
(0097)
(0098) led_on();
008F DFC4 RCALL _led_on
(0099) led_off();
0090 DFC9 RCALL _led_off
(0100)
(0101)
(0102) pd_2();
0091 DFDE RCALL _pd_2
(0103)
(0104) led_on();
0092 DFC1 RCALL _led_on
(0105) led_off();
0093 DFC6 RCALL _led_off
(0106)
(0107)
(0108) //赋值(会给所有的位以特定值),使pb0为0,led亮;
(0109) PORTB = 0xFE;
0094 EF8E LDI R24,0xFE
0095 BB88 OUT 0x18,R24
(0110) delay(5000);
0096 E808 LDI R16,0x88
0097 DFA6 RCALL _delay
(0111) //置位(不影响其他位),使pb0为1,led灭;
(0112) PORTB |= 0x01;
0098 9AC0 SBI 0x18,0
(0113) delay(5000);
0099 E808 LDI R16,0x88
009A DFA3 RCALL _delay
(0114) //清零(不影响其他位),使pb0为0,led亮;
(0115) PORTB &= ~0x01;
009B 98C0 CBI 0x18,0
(0116) delay(5000);
009C E808 LDI R16,0x88
009D DFA0 RCALL _delay
(0117) //反转(不影响其他位),使pb0为1,led灭;
(0118) PORTB ^= 0x01;
009E E081 LDI R24,1
009F B228 IN R2,0x18
00A0 2628 EOR R2,R24
00A1 BA28 OUT 0x18,R2
(0119) delay(5000);
00A2 E808 LDI R16,0x88
00A3 DF9A RCALL _delay
00A4 CFE5 RJMP 0x008A
(0120) }
(0121) }
FILE: <library>
00A5 9508 RET
pop_gset2:
00A6 E0E2 LDI R30,2
00A7 C004 RJMP pop
push_gset1:
00A8 935A ST R21,-Y
00A9 934A ST R20,-Y
00AA 9508 RET
pop_gset1:
00AB E0E1 LDI R30,1
pop:
00AC 9149 LD R20,Y+
00AD 9159 LD R21,Y+
00AE FDE0 SBRC R30,0
00AF 9508 RET
00B0 9169 LD R22,Y+
00B1 9179 LD R23,Y+
00B2 FDE1 SBRC R30,1
00B3 9508 RET
00B4 90A9 LD R10,Y+
00B5 90B9 LD R11,Y+
00B6 FDE2 SBRC R30,2
00B7 9508 RET
00B8 90C9 LD R12,Y+
00B9 90D9 LD R13,Y+
00BA FDE3 SBRC R30,3
00BB 9508 RET
00BC 90E9 LD R14,Y+
00BD 90F9 LD R15,Y+
00BE 9508 RET
push_gset2:
00BF 937A ST R23,-Y
00C0 936A ST R22,-Y
00C1 CFE6 RJMP push_gset1
lsl8:
00C2 2311 TST R17
00C3 F019 BEQ 0x00C7
00C4 0F00 LSL R16
00C5 951A DEC R17
00C6 CFFB RJMP lsl8
00C7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -