                        .module KEY1_4.C
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\ÊµÑéÎå~1\KEY1_4.C
 0000                   .dbfile E:\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\ÊµÑéÎå~1\KEY1_4.C
 0000                   .dbfunc e main _main fV
 0000           ;        key_val -> R20
 0000           ;           viod -> <dead>
                        .even
 0000           _main::
 0000 1A93              st -y,r17
 0002 0A93              st -y,r16
 0004                   .dbline -1
 0004                   .dbline 25
 0004           ; 
 0004           ; /********************************************************
 0004           ; ÊµÑéÎå:    ¶ÀÁ¢°´¼üÊµÑé
 0004           ; ËµÃ÷:      °´°´¼üK17--K20 ·Ö±ðÓÃD1--D4×÷Ö¸Ê¾  
 0004           ;           
 0004           ;                  °´K17--K20ÈÎÒ»°´¼üÊ±¶ÔÓ¦µÄLEDÁÁ  
 0004           ;           
 0004           ; CPUÐÍºÅ:   ATMEGA128A
 0004           ; ¾§ÕñÆµÂÊ:  8MHZ
 0004           ; ±àÒëÈí¼þ£º ICCAVR 7.22
 0004           ; ÈÕÆÚ£º     2011-3-12
 0004           ; ÁªÏµ·½·¨:  MCU.2000@163.com 
 0004           ;  ********************************************************/
 0004           ;  
 0004           ; #include <iom128v.h> 
 0004           ; #include <macros.h>
 0004           ; #define uchar unsigned char
 0004           ; #define uint unsigned int
 0004           ; 
 0004           ; void Delayus(uint US);      //Î¢ÃëÑÓÊ±×Ó³ÌÐò
 0004           ; void Delayms(uint MS);      //ºÁÃëÑÓÊ±×Ó³ÌÐò
 0004           ; 
 0004           ; //Ö÷º¯Êý
 0004           ; void main (viod)
 0004           ; {
 0004                   .dbline 28
 0004           ;      uchar key_val;
 0004           ;     
 0004           ;        DDRA=0XFF;             //LED IO¿ÚÉèÎªÊä³ö
 0004 8FEF              ldi R24,255
 0006 8ABB              out 0x1a,R24
 0008                   .dbline 29
 0008           ;        DDRC=0XFF;             //ÊýÂë¹Ü¶ÎÑ¡ÉèÎªÊä³ö
 0008 84BB              out 0x14,R24
 000A                   .dbline 30
 000A           ;        DDRF |=0X03;           //LED¼°ÊýÂë¹ÜËø´æIO¿ÚÉèÎªÊä³ö
 000A 80916100          lds R24,97
 000E 8360              ori R24,3
 0010 80936100          sts 97,R24
 0014                   .dbline 31
 0014           ;        PORTF|=0X0E;           
 0014 80916200          lds R24,98
 0018 8E60              ori R24,14
 001A 80936200          sts 98,R24
 001E                   .dbline 32
 001E           ;        PORTA=0XFF;
 001E 8FEF              ldi R24,255
 0020 8BBB              out 0x1b,R24
 0022                   .dbline 33
 0022           ;        PORTC=0XFF;            
 0022 85BB              out 0x15,R24
 0024                   .dbline 34
 0024           ;        PORTF&=0xF9;           //Ëø´æÊý¾Ý¹Ø±ÕÊýÂë¹Ü 
 0024 80916200          lds R24,98
 0028 897F              andi R24,249
 002A 80936200          sts 98,R24
 002E                   .dbline 36
 002E           ;        
 002E           ;        DDRB |=0X10;           //PB4ÉèÎªÊä³ö
 002E BC9A              sbi 0x17,4
 0030                   .dbline 37
 0030           ;        PORTB|=0X10;           //¹Ø±ÕPB4Íâ½ÓµÄLED
 0030 C49A              sbi 0x18,4
 0032                   .dbline 39
 0032           ;        
 0032           ;        PORTD=0X0F;            //¶ÀÁ¢°´¼üIO¿ÚÉèÎªÊäÈë
 0032 8FE0              ldi R24,15
 0034 82BB              out 0x12,R24
 0036 15C0              xjmp L3
 0038           L2:
 0038                   .dbline 41
 0038           ;        while(1)
 0038           ;        {
 0038                   .dbline 42
 0038           ;            key_val=PIND & 0x0f;         //¶ÁÈ¡°´¼üIO¿ÚµçÆ½
 0038 40B3              in R20,0x10
 003A 4F70              andi R20,15
 003C                   .dbline 43
 003C           ;                if(key_val !=0x0F)           //ÅÐ¶ÏÊÇ·ñÓÐ°´¼ü±»°´ÏÂ
 003C 4F30              cpi R20,15
 003E 89F0              breq L5
 0040           X0:
 0040                   .dbline 44
 0040           ;                {
 0040                   .dbline 45
 0040           ;                Delayms(20);                 //ÑÓÊ±·À¶¶¶¯
 0040 04E1              ldi R16,20
 0042 10E0              ldi R17,0
 0044 28D0              xcall _Delayms
 0046                   .dbline 46
 0046           ;                key_val=PIND & 0X0F;
 0046 40B3              in R20,0x10
 0048 4F70              andi R20,15
 004A                   .dbline 47
 004A           ;                if(key_val !=0x0F)           //ÔÙÅÐ¶ÏÒ»´ÎÊÇ·ñÕæÓÐ°´¼ü±»°´ÏÂ
 004A 4F30              cpi R20,15
 004C 51F0              breq L7
 004E           X1:
 004E                   .dbline 48
 004E           ;                {
 004E           L9:
 004E                   .dbline 49
 004E           ;                while((PIND & 0X0F)!=0X0F);  //µÈ´ýËÉ¿ª°´¼ü
 004E           L10:
 004E                   .dbline 49
 004E 80B3              in R24,0x10
 0050 8F70              andi R24,15
 0052 8F30              cpi R24,15
 0054 E1F7              brne L9
 0056           X2:
 0056                   .dbline 50
 0056           ;                PORTA=key_val | 0xF0;        //LEDÖ¸Ê¾
 0056 842F              mov R24,R20
 0058 806F              ori R24,240
 005A 8BBB              out 0x1b,R24
 005C                   .dbline 51
 005C           ;                Delayms(50);
 005C 02E3              ldi R16,50
 005E 10E0              ldi R17,0
 0060 1AD0              xcall _Delayms
 0062                   .dbline 52
 0062           ;                }
 0062           L7:
 0062                   .dbline 53
 0062           ;                }
 0062           L5:
 0062                   .dbline 54
 0062           ;        }
 0062           L3:
 0062                   .dbline 40
 0062 EACF              xjmp L2
 0064           X3:
 0064                   .dbline -2
 0064           L1:
 0064                   .dbline 0 ; func end
 0064 2296              adiw R28,2
 0066 0895              ret
 0068                   .dbsym r key_val 20 c
 0068                   .dbsym l viod 0 I
 0068                   .dbend
 0068                   .dbfunc e Delayus _Delayus fV
 0068           ;              i -> R20,R21
 0068           ;             US -> R10,R11
                        .even
 0068           _Delayus::
 0068 0E940000          xcall push_xgset300C
 006C 5801              movw R10,R16
 006E                   .dbline -1
 006E                   .dbline 64
 006E           ; }
 006E           ; 
 006E           ; /****************************************************
 006E           ; º¯ÊýÃû³Æ: Delayus
 006E           ; ¹¦    ÄÜ: ÑÓÊ±Ö¸¶¨Î¢Ãë£¨8M¾§Õñ£©
 006E           ; ²Î    Êý: US--ÑÓÊ±µÄÎ¢ÃëÊý(´óÔ¼£¬²»ÊÇºÜ¾«È·£¬MSÔ½´óÔ½×¼È·)
 006E           ; ·µ»ØÖµ  : ÎÞ
 006E           ; /****************************************************/
 006E           ; void Delayus(uint US)           
 006E           ; {
 006E                   .dbline 66
 006E           ;      uint i;
 006E           ;      US=US*5/4;                        
 006E 05E0              ldi R16,5
 0070 10E0              ldi R17,0
 0072 9501              movw R18,R10
 0074 0E940000          xcall empy16s
 0078 5801              movw R10,R16
 007A B694              lsr R11
 007C A794              ror R10
 007E B694              lsr R11
 0080 A794              ror R10
 0082                   .dbline 67
 0082           ;      for( i=0;i<US;i++); 
 0082 4427              clr R20
 0084 5527              clr R21
 0086 02C0              xjmp L16
 0088           L13:
 0088                   .dbline 67
 0088           L14:
 0088                   .dbline 67
 0088 4F5F              subi R20,255  ; offset = 1
 008A 5F4F              sbci R21,255
 008C           L16:
 008C                   .dbline 67
 008C 4A15              cp R20,R10
 008E 5B05              cpc R21,R11
 0090 D8F3              brlo L13
 0092           X4:
 0092                   .dbline -2
 0092           L12:
 0092                   .dbline 0 ; func end
 0092 0C940000          xjmp pop_xgset300C
 0096                   .dbsym r i 20 i
 0096                   .dbsym r US 10 i
 0096                   .dbend
 0096                   .dbfunc e Delayms _Delayms fV
 0096           ;              i -> R20,R21
 0096           ;              j -> R22,R23
 0096           ;             MS -> R16,R17
                        .even
 0096           _Delayms::
 0096 0E940000          xcall push_xgsetF000
 009A                   .dbline -1
 009A                   .dbline 77
 009A           ; }
 009A           ; /****************************************************
 009A           ; º¯ÊýÃû³Æ: Delayms
 009A           ; ¹¦    ÄÜ: ÑÓÊ±Ö¸¶¨ºÁÃë£¨8M¾§Õñ£©
 009A           ; ²Î    Êý: MS--ÑÓÊ±µÄºÁÃëÊý
 009A           ; ·µ»ØÖµ  : ÎÞ
 009A           ; Í¨¹ýÈí¼þ·ÂÕæ·´¸´ÊµÑéµÃµ½µÄÊýÖµ
 009A           ; /****************************************************/
 009A           ; void Delayms(uint MS)           
 009A           ; {
 009A                   .dbline 79
 009A           ;      uint i,j;
 009A           ;      for( i=0;i<MS;i++)
 009A 4427              clr R20
 009C 5527              clr R21
 009E 0BC0              xjmp L21
 00A0           L18:
 00A0                   .dbline 80
 00A0           ;      for(j=0;j<1141;j++);     
 00A0 6627              clr R22
 00A2 7727              clr R23
 00A4 02C0              xjmp L25
 00A6           L22:
 00A6                   .dbline 80
 00A6           L23:
 00A6                   .dbline 80
 00A6 6F5F              subi R22,255  ; offset = 1
 00A8 7F4F              sbci R23,255
 00AA           L25:
 00AA                   .dbline 80
 00AA 6537              cpi R22,117
 00AC E4E0              ldi R30,4
 00AE 7E07              cpc R23,R30
 00B0 D0F3              brlo L22
 00B2           X5:
 00B2           L19:
 00B2                   .dbline 79
 00B2 4F5F              subi R20,255  ; offset = 1
 00B4 5F4F              sbci R21,255
 00B6           L21:
 00B6                   .dbline 79
 00B6 4017              cp R20,R16
 00B8 5107              cpc R21,R17
 00BA 90F3              brlo L18
 00BC           X6:
 00BC                   .dbline -2
 00BC           L17:
 00BC                   .dbline 0 ; func end
 00BC 0C940000          xjmp pop_xgsetF000
 00C0                   .dbsym r i 20 i
 00C0                   .dbsym r j 22 i
 00C0                   .dbsym r MS 16 i
 00C0                   .dbend
 00C0           ; }
