⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 练习闪烁.lis

📁 基于AVR实验平台下ATMega128芯片实习作业
💻 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 + -