📄 led00.lis
字号:
.module led00.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\led\led00.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 12
0000 ; //I/O演示程序
0000 ; //程序流程:全亮->全灭->PD隔一步进->全亮->全灭->PD隔二步进->全亮->全灭->PB全亮->pb0置位->pb0清零->PB0反转->全灭->(循环)
0000 ;
0000 ; // Target : M8
0000 ; // Crystal: 11.059Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; //起始全亮
0000 ; void port_init(void)
0000 ; {
0000 .dbline 13
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 14
0004 ; DDRB = 0xFF;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 15
0008 ; PORTC = 0x00;
0008 25BA out 0x15,R2
000A .dbline 16
000A ; DDRC = 0x7F;
000A 8FE7 ldi R24,127
000C 84BB out 0x14,R24
000E .dbline 17
000E ; PORTD = 0x00;
000E 22BA out 0x12,R2
0010 .dbline 18
0010 ; DDRD = 0xFF;
0010 8FEF ldi R24,255
0012 81BB out 0x11,R24
0014 .dbline -2
0014 .dbline 19
0014 ; }
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e delay _delay fV
0016 ; i -> R20,R21
0016 ; j -> R22,R23
0016 ; tim -> R16
.even
0016 _delay::
0016 00D0 rcall push_gset2
0018 .dbline -1
0018 .dbline 23
0018 ;
0018 ; //延时函数,大约1ms;
0018 ; void delay(char tim)
0018 ; {
0018 .dbline 25
0018 ; unsigned int i,j;
0018 ; for(i=0;i<tim;i++)
0018 4427 clr R20
001A 5527 clr R21
001C 0BC0 rjmp L6
001E L3:
001E .dbline 26
001E 6627 clr R22
0020 7727 clr R23
0022 02C0 rjmp L10
0024 L7:
0024 .dbline 26
0024 L8:
0024 .dbline 26
0024 6F5F subi R22,255 ; offset = 1
0026 7F4F sbci R23,255
0028 L10:
0028 .dbline 26
0028 6031 cpi R22,16
002A E7E2 ldi R30,39
002C 7E07 cpc R23,R30
002E D0F3 brlo L7
0030 L4:
0030 .dbline 25
0030 4F5F subi R20,255 ; offset = 1
0032 5F4F sbci R21,255
0034 L6:
0034 .dbline 25
0034 202E mov R2,R16
0036 3324 clr R3
0038 4215 cp R20,R2
003A 5305 cpc R21,R3
003C 80F3 brlo L3
003E .dbline -2
003E .dbline 27
003E ; for(j=0;j<10000;j++);
003E ; }
003E L2:
003E 00D0 rcall pop_gset2
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r i 20 i
0042 .dbsym r j 22 i
0042 .dbsym r tim 16 c
0042 .dbend
0042 .dbfunc e led_on _led_on fV
.even
0042 _led_on::
0042 .dbline -1
0042 .dbline 31
0042 ;
0042 ; //led全亮
0042 ; void led_on(void)
0042 ; {
0042 .dbline 32
0042 ; PORTB = 0x00;
0042 2224 clr R2
0044 28BA out 0x18,R2
0046 .dbline 33
0046 ; PORTC = 0x00;
0046 25BA out 0x15,R2
0048 .dbline 34
0048 ; PORTD = 0x00;
0048 22BA out 0x12,R2
004A .dbline 36
004A ;
004A ; delay(5000);
004A 08E8 ldi R16,136
004C .dbline -2
004C .dbline 37
004C ; }
004C L11:
004C .dbline 0 ; func end
004C E4CF rjmp _delay
004E .dbend
004E .dbfunc e led_off _led_off fV
.even
004E _led_off::
004E .dbline -1
004E .dbline 40
004E ; //led全灭
004E ; void led_off(void)
004E ; {
004E .dbline 41
004E ; PORTB = 0xFF;
004E 8FEF ldi R24,255
0050 88BB out 0x18,R24
0052 .dbline 42
0052 ; PORTC = 0xFF;
0052 85BB out 0x15,R24
0054 .dbline 43
0054 ; PORTD = 0xFF;
0054 82BB out 0x12,R24
0056 .dbline 45
0056 ;
0056 ; delay(5000);
0056 08E8 ldi R16,136
0058 .dbline -2
0058 .dbline 46
0058 ; }
0058 L12:
0058 .dbline 0 ; func end
0058 DECF rjmp _delay
005A .dbend
005A .dbfunc e pd_1 _pd_1 fV
005A ; i -> R20
.even
005A _pd_1::
005A 00D0 rcall push_gset1
005C .dbline -1
005C .dbline 49
005C ; //PB隔1步进
005C ; void pd_1(void)
005C ; {
005C .dbline 51
005C ; char i;
005C ; for (i = 0; i < 8; i++)
005C 4427 clr R20
005E 09C0 rjmp L17
0060 L14:
0060 .dbline 52
0060 .dbline 53
0060 01E0 ldi R16,1
0062 142F mov R17,R20
0064 00D0 rcall lsl8
0066 202E mov R2,R16
0068 2094 com R2
006A 28BA out 0x18,R2
006C .dbline 54
006C 08E8 ldi R16,136
006E D3DF rcall _delay
0070 .dbline 55
0070 L15:
0070 .dbline 51
0070 4395 inc R20
0072 L17:
0072 .dbline 51
0072 4830 cpi R20,8
0074 A8F3 brlo L14
0076 .dbline -2
0076 .dbline 56
0076 ; {
0076 ; PORTB = ~(1 << (i));//位操作结合移位操作
0076 ; delay(5000);
0076 ; }
0076 ; }
0076 L13:
0076 00D0 rcall pop_gset1
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r i 20 c
007A .dbend
007A .dbfunc e pd_2 _pd_2 fV
007A ; i -> R20
.even
007A _pd_2::
007A 00D0 rcall push_gset1
007C .dbline -1
007C .dbline 59
007C ; //PB隔2步进
007C ; void pd_2(void)
007C ; {
007C .dbline 61
007C ; char i;
007C ; for (i = 0; i < 8; i+=2)
007C 4427 clr R20
007E 09C0 rjmp L22
0080 L19:
0080 .dbline 62
0080 .dbline 63
0080 01E0 ldi R16,1
0082 142F mov R17,R20
0084 00D0 rcall lsl8
0086 202E mov R2,R16
0088 2094 com R2
008A 28BA out 0x18,R2
008C .dbline 64
008C 08E8 ldi R16,136
008E C3DF rcall _delay
0090 .dbline 65
0090 L20:
0090 .dbline 61
0090 4E5F subi R20,254 ; addi 2
0092 L22:
0092 .dbline 61
0092 4830 cpi R20,8
0094 A8F3 brlo L19
0096 .dbline -2
0096 .dbline 66
0096 ; {
0096 ; PORTB = ~(1 << (i));//位操作结合移位操作
0096 ; delay(5000);
0096 ; }
0096 ; }
0096 L18:
0096 00D0 rcall pop_gset1
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r i 20 c
009A .dbend
009A .dbfunc e init_devices _init_devices fV
.even
009A _init_devices::
009A .dbline -1
009A .dbline 70
009A ;
009A ; //call this routine to initialise all peripherals
009A ; void init_devices(void)
009A ; {
009A .dbline 72
009A ; //stop errant interrupts until set up
009A ; CLI(); //disable all interrupts
009A F894 cli
009C .dbline 73
009C ; port_init();
009C B1DF rcall _port_init
009E .dbline 75
009E ;
009E ; MCUCR = 0x00;
009E 2224 clr R2
00A0 25BE out 0x35,R2
00A2 .dbline 76
00A2 ; GICR = 0x00;
00A2 2BBE out 0x3b,R2
00A4 .dbline 77
00A4 ; TIMSK = 0x00; //timer interrupt sources
00A4 29BE out 0x39,R2
00A6 .dbline 78
00A6 ; SEI(); //re-enable interrupts
00A6 7894 sei
00A8 .dbline -2
00A8 .dbline 80
00A8 ; //all peripherals are now initialised
00A8 ; }
00A8 L23:
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbend
00AA .dbfunc e main _main fV
.even
00AA _main::
00AA .dbline -1
00AA .dbline 84
00AA ;
00AA ; //
00AA ; void main(void)
00AA ; {
00AA .dbline 85
00AA ; init_devices();
00AA F7DF rcall _init_devices
00AC 1AC0 rjmp L26
00AE L25:
00AE .dbline 88
00AE .dbline 89
00AE C9DF rcall _led_on
00B0 .dbline 90
00B0 CEDF rcall _led_off
00B2 .dbline 92
00B2 C7DF rcall _led_on
00B4 .dbline 93
00B4 CCDF rcall _led_off
00B6 .dbline 96
00B6 D1DF rcall _pd_1
00B8 .dbline 98
00B8 C4DF rcall _led_on
00BA .dbline 99
00BA C9DF rcall _led_off
00BC .dbline 102
00BC DEDF rcall _pd_2
00BE .dbline 104
00BE C1DF rcall _led_on
00C0 .dbline 105
00C0 C6DF rcall _led_off
00C2 .dbline 109
00C2 8EEF ldi R24,254
00C4 88BB out 0x18,R24
00C6 .dbline 110
00C6 08E8 ldi R16,136
00C8 A6DF rcall _delay
00CA .dbline 112
00CA C09A sbi 0x18,0
00CC .dbline 113
00CC 08E8 ldi R16,136
00CE A3DF rcall _delay
00D0 .dbline 115
00D0 C098 cbi 0x18,0
00D2 .dbline 116
00D2 08E8 ldi R16,136
00D4 A0DF rcall _delay
00D6 .dbline 118
00D6 81E0 ldi R24,1
00D8 28B2 in R2,0x18
00DA 2826 eor R2,R24
00DC 28BA out 0x18,R2
00DE .dbline 119
00DE 08E8 ldi R16,136
00E0 9ADF rcall _delay
00E2 .dbline 120
00E2 L26:
00E2 .dbline 87
00E2 E5CF rjmp L25
00E4 X0:
00E4 .dbline -2
00E4 .dbline 121
00E4 ;
00E4 ; while(1)
00E4 ; {
00E4 ; led_on();
00E4 ; led_off();
00E4 ;
00E4 ; led_on();
00E4 ; led_off();
00E4 ;
00E4 ;
00E4 ; pd_1();
00E4 ;
00E4 ; led_on();
00E4 ; led_off();
00E4 ;
00E4 ;
00E4 ; pd_2();
00E4 ;
00E4 ; led_on();
00E4 ; led_off();
00E4 ;
00E4 ;
00E4 ; //赋值(会给所有的位以特定值),使pb0为0,led亮;
00E4 ; PORTB = 0xFE;
00E4 ; delay(5000);
00E4 ; //置位(不影响其他位),使pb0为1,led灭;
00E4 ; PORTB |= 0x01;
00E4 ; delay(5000);
00E4 ; //清零(不影响其他位),使pb0为0,led亮;
00E4 ; PORTB &= ~0x01;
00E4 ; delay(5000);
00E4 ; //反转(不影响其他位),使pb0为1,led灭;
00E4 ; PORTB ^= 0x01;
00E4 ; delay(5000);
00E4 ; }
00E4 ; }
00E4 L24:
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -