📄 练习闪烁.lis
字号:
.module _练习闪烁.c
.area data(ram, con, rel)
0000 _porta_temp::
0000 .blkb 1
.area idata
0000 01 .byte 1
.area data(ram, con, rel)
.area text(rom, con, rel)
; i -> R16,R17
.even
0000 _delay_1ms::
0000 ; #include <iom128v.h>
0000 ; unsigned char porta_temp=0x01;
0000 ; void delay_1ms(void)
0000 ; {
0000 0027 clr R16
0002 1127 clr R17
0004 02C0 xjmp L5
0006 L2:
0006 L3:
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A L5:
000A ; unsigned int i;
000A ; for (i=0;i<556;i++);
000A 0C32 cpi R16,44
000C E2E0 ldi R30,2
000E 1E07 cpc R17,R30
0010 D0F3 brlo L2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 ; i -> R20,R21
0014 ; n -> R22,R23
.even
0014 _delay_nms::
0014 0E940000 xcall push_gset2
0018 B801 movw R22,R16
001A ; }
001A ; void delay_nms(unsigned int n)
001A ; {unsigned int i=0;
001A 4427 clr R20
001C 5527 clr R21
001E ; for (i=0;i<n;i++)
001E 03C0 xjmp L10
0020 L7:
0020 EFDF xcall _delay_1ms
0022 L8:
0022 4F5F subi R20,255 ; offset = 1
0024 5F4F sbci R21,255
0026 L10:
0026 4617 cp R20,R22
0028 5707 cpc R21,R23
002A D0F3 brlo L7
002C L6:
002C 0E940000 xcall pop_gset2
0030 .dbline 0 ; func end
0030 0895 ret
0032 ; i -> R20,R21
.even
0032 _LED_On::
0032 0E940000 xcall push_gset1
0036 A801 movw R20,R16
0038 ; delay_1ms();
0038 ; }
0038 ; void LED_On(int i)
0038 ; {
0038 ; PORTB=~(1<<i);
0038 01E0 ldi R16,1
003A 10E0 ldi R17,0
003C 9A01 movw R18,R20
003E 0E940000 xcall lsl16
0042 1801 movw R2,R16
0044 2094 com R2
0046 3094 com R3
0048 28BA out 0x18,R2
004A ; delay_nms(50);}
004A 02E3 ldi R16,50
004C 10E0 ldi R17,0
004E E2DF xcall _delay_nms
0050 L11:
0050 0E940000 xcall pop_gset1
0054 .dbline 0 ; func end
0054 0895 ret
0056 ; i -> R20,R21
.even
0056 _main::
0056 ;
0056 ; void main()
0056 ; {unsigned int i;
0056 ; DDRA = 0x00; DDRB = 0xFF; /*定义输入输出*/
0056 2224 clr R2
0058 2ABA out 0x1a,R2
005A 8FEF ldi R24,255
005C 87BB out 0x17,R24
005E ; PORTA= 0xFF;PORTB= 0xFF;
005E 8BBB out 0x1b,R24
0060 88BB out 0x18,R24
0062 3EC0 xjmp L14
0064 L13:
0064 ; while(1)
0064 ; {PORTB=0XFF;
0064 8FEF ldi R24,255
0066 88BB out 0x18,R24
0068 0EC0 xjmp L17
006A L16:
006A ; while((PINA & 0x01) == 0)
006A ; {
006A ; for(i=0;(PINA & 0X01) == 0;i++)
006A 4427 clr R20
006C 5527 clr R21
006E 08C0 xjmp L22
0070 L19:
0070 28B2 in R2,0x18
0072 2094 com R2
0074 28BA out 0x18,R2
0076 02E3 ldi R16,50
0078 10E0 ldi R17,0
007A CCDF xcall _delay_nms
007C L20:
007C 4F5F subi R20,255 ; offset = 1
007E 5F4F sbci R21,255
0080 L22:
0080 89B3 in R24,0x19
0082 8170 andi R24,1
0084 A9F3 breq L19
0086 L17:
0086 89B3 in R24,0x19
0088 8170 andi R24,1
008A 79F3 breq L16
008C 11C0 xjmp L24
008E L23:
008E ; {PORTB=~PORTB;
008E ; delay_nms(50);}
008E ; }
008E ; while((PINA & 0x02) == 0) //判断PA0口的状态
008E ; {
008E ; PORTB = ~porta_temp;
008E 20900000 lds R2,_porta_temp
0092 2094 com R2
0094 28BA out 0x18,R2
0096 ; delay_nms(50);
0096 02E3 ldi R16,50
0098 10E0 ldi R17,0
009A BCDF xcall _delay_nms
009C ; porta_temp=porta_temp>>1;
009C 20900000 lds R2,_porta_temp
00A0 2694 lsr R2
00A2 20920000 sts _porta_temp,R2
00A6 ; if(porta_temp == 0) //右移到为0时重新赋值
00A6 2220 tst R2
00A8 19F4 brne L26
00AA ; {porta_temp=0x80;}
00AA 80E8 ldi R24,128
00AC 80930000 sts _porta_temp,R24
00B0 L26:
00B0 L24:
00B0 89B3 in R24,0x19
00B2 8270 andi R24,2
00B4 61F3 breq L23
00B6 11C0 xjmp L29
00B8 L28:
00B8 ; }
00B8 ; while((PINA & 0x04) ==0)
00B8 ; { PORTB = ~porta_temp;
00B8 20900000 lds R2,_porta_temp
00BC 2094 com R2
00BE 28BA out 0x18,R2
00C0 ; delay_nms(50);
00C0 02E3 ldi R16,50
00C2 10E0 ldi R17,0
00C4 A7DF xcall _delay_nms
00C6 ; porta_temp=porta_temp<<1;
00C6 20900000 lds R2,_porta_temp
00CA 220C lsl R2
00CC 20920000 sts _porta_temp,R2
00D0 ; if(porta_temp == 0)
00D0 2220 tst R2
00D2 19F4 brne L31
00D4 ; { porta_temp=0x01;}
00D4 81E0 ldi R24,1
00D6 80930000 sts _porta_temp,R24
00DA L31:
00DA L29:
00DA 89B3 in R24,0x19
00DC 8470 andi R24,4
00DE 61F3 breq L28
00E0 L14:
00E0 C1CF xjmp L13
00E2 X0:
00E2 L12:
00E2 .dbline 0 ; func end
00E2 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -