                        .module IR.C
                        .area text(rom, con, rel)
 0000                   .dbfile ..\ÊµÑéÊ®~1\IR.C
                        .area data(ram, con, rel)
 0000                   .dbfile ..\ÊµÑéÊ®~1\IR.C
 0000           _IR_BUF::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile ..\ÊµÑéÊ®~1\IR.C
 0002                   .blkb 2
                        .area idata
 0002 0000              .word 0
                        .area data(ram, con, rel)
 0004                   .dbfile ..\ÊµÑéÊ®~1\IR.C
 0004                   .blkb 2
                        .area idata
 0004 0000              .word 0
                        .area data(ram, con, rel)
 0006                   .dbfile ..\ÊµÑéÊ®~1\IR.C
 0006                   .blkb 2
                        .area idata
 0006 0000              .word 0
                        .area data(ram, con, rel)
 0008                   .dbfile ..\ÊµÑéÊ®~1\IR.C
 0008                   .dbfile F:\ÊµÑéÊ®~1\IR.C
 0008                   .dbsym e IR_BUF _IR_BUF A[8:4]i
                        .area text(rom, con, rel)
 0000                   .dbfile F:\ÊµÑéÊ®~1\IR.C
 0000                   .dbfunc e main _main fV
 0000           ;              j -> R20,R21
 0000           ;           data -> R10,R11
 0000           ;              i -> R22,R23
 0000           ;           temp -> R12,R13
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 24
 0000           ; 
 0000           ; /********************************************************
 0000           ; ÊµÑé:   ºìÍâÒ£¿ØÆ÷½âÂë
 0000           ; ËµÃ÷:          
 0000           ;           
 0000           ; CPUÐÍºÅ:   ATMEGA128A
 0000           ; ¾§ÕñÆµÂÊ:     8MHZ
 0000           ; ÈÕÆÚ£º    2011-3-12
 0000           ; ÁªÏµ·½·¨: MCU.2000@163.com 
 0000           ;  ********************************************************/
 0000           ; 
 0000           ; #include <iom128v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; 
 0000           ; void delay_nus(unsigned int n);        //N usÑÓÊ±º¯Êý
 0000           ; void delay_nms(unsigned int count);    //N msÑÓÊ±º¯Êý
 0000           ; 
 0000           ; uint IR_BUF[4]={0x00,0x00,0x00,0x00};
 0000           ; 
 0000           ; void main()
 0000           ; {
 0000                   .dbline 26
 0000           ;      uint   i,j;
 0000           ;      uint   temp=0x00;
 0000 CC24              clr R12
 0002 DD24              clr R13
 0004                   .dbline 27
 0004           ;      uint   data=0x00;
 0004 AA24              clr R10
 0006 BB24              clr R11
 0008                   .dbline 29
 0008           ; 
 0008           ;      DDRA=0xff;                         //Êä³ö¡£
 0008 8FEF              ldi R24,255
 000A 8ABB              out 0x1a,R24
 000C                   .dbline 30
 000C           ;      PORTA=0x00;
 000C 2224              clr R2
 000E 2BBA              out 0x1b,R2
 0010                   .dbline 31
 0010           ;      DDRC=0XFF;
 0010 84BB              out 0x14,R24
 0012                   .dbline 32
 0012           ;        PORTC=0XFF;
 0012 85BB              out 0x15,R24
 0014                   .dbline 34
 0014           ;       
 0014           ;        DDRF|=BIT(3)+BIT(1)+BIT(2);
 0014 80916100          lds R24,97
 0018 8E60              ori R24,14
 001A 80936100          sts 97,R24
 001E                   .dbline 35
 001E           ;        PORTF|=BIT(3)+BIT(1)+BIT(2);
 001E 80916200          lds R24,98
 0022 8E60              ori R24,14
 0024 80936200          sts 98,R24
 0028                   .dbline 36
 0028           ;        PORTF&=~(BIT(1)+BIT(2));
 0028 80916200          lds R24,98
 002C 897F              andi R24,249
 002E 80936200          sts 98,R24
 0032                   .dbline 38
 0032           ; 
 0032           ;        DDRB |=0X10;           //PB4ÉèÎªÊä³ö
 0032 BC9A              sbi 0x17,4
 0034                   .dbline 39
 0034           ;        PORTB|=0X10;           //¹Ø±ÕPB4Íâ½ÓµÄLED       
 0034 C49A              sbi 0x18,4
 0036                   .dbline 41
 0036           ;                
 0036           ;      DDRE&=~BIT(5);                     //ÊäÈë¡£
 0036 1598              cbi 0x2,5
 0038 83C0              xjmp L3
 003A           L2:
 003A                   .dbline 43
 003A           ;      while(1)
 003A           ;        {
 003A           L5:
 003A                   .dbline 45
 003A           ;      RESET: 
 003A           ;              for( i=0;i<8;i++ )          //**9ms      
 003A 6627              clr R22
 003C 7727              clr R23
 003E 0AC0              xjmp L9
 0040           L6:
 0040                   .dbline 46
 0040           ;            { 
 0040                   .dbline 47
 0040           ;            delay_nms(1); 
 0040 01E0              ldi R16,1
 0042 10E0              ldi R17,0
 0044 8DD0              xcall _delay_nms
 0046                   .dbline 48
 0046           ;            if((PINE&0B00100000)==0B00100000 )       
 0046 81B1              in R24,0x1
 0048 8072              andi R24,32
 004A 8032              cpi R24,32
 004C 09F4              brne L10
 004E           X0:
 004E                   .dbline 49
 004E           ;            goto RESET;    //ÊÇ¼ì²âÔÚ8ºÁÃëÄÚÈç¹û³öÏÖ¸ßµçÆ½¾ÍÍË³ö½âÂë³ÌÐò  
 004E F5CF              xjmp L5
 0050           L10:
 0050                   .dbline 50
 0050           ;            }      
 0050           L7:
 0050                   .dbline 45
 0050 6F5F              subi R22,255  ; offset = 1
 0052 7F4F              sbci R23,255
 0054           L9:
 0054                   .dbline 45
 0054 6830              cpi R22,8
 0056 E0E0              ldi R30,0
 0058 7E07              cpc R23,R30
 005A 90F3              brlo L6
 005C           X1:
 005C                   .dbline 52
 005C           ;            
 005C           ;                  temp = 8000;         
 005C 80E4              ldi R24,8000
 005E 9FE1              ldi R25,31
 0060 6C01              movw R12,R24
 0062 03C0              xjmp L13
 0064           L12:
 0064                   .dbline 54
 0064           ;            while( ( (PINE&0B00100000)==0B00000000 ) && (temp!=0) )
 0064           ;            {temp--;}   
 0064                   .dbline 54
 0064 C601              movw R24,R12
 0066 0197              sbiw R24,1
 0068 6C01              movw R12,R24
 006A                   .dbline 54
 006A           L13:
 006A                   .dbline 53
 006A 0D99              sbic 0x1,5
 006C 04C0              rjmp L15
 006E           X2:
 006E CC20              tst R12
 0070 C9F7              brne L12
 0072 DD20              tst R13
 0074 B9F7              brne L12
 0076           X3:
 0076           L15:
 0076                   .dbline 57
 0076           ;             //    µÈ´ý4.5ms¸ßµçÆ½µÄµ½À´,±Ü¿ª9ºÁÃëµÍµçÆ½Òýµ¼Âö³å 
 0076           ;                       //    temp--Ðè0.25us, temp=8000¿ÉÊµÏÖ2msÑÓÊ±£¬·ÀÖ¹¸ÉÈÅÂö³åÔì³ÉµÄËÀ»ú¡£ 
 0076           ;            delay_nus(5412);   //**4.5ms
 0076 04E2              ldi R16,5412
 0078 15E1              ldi R17,21
 007A 64D0              xcall _delay_nus
 007C                   .dbline 59
 007C           ;    
 007C           ;            for( j=0;j<4;j++)
 007C 4427              clr R20
 007E 5527              clr R21
 0080 3DC0              xjmp L19
 0082           L16:
 0082                   .dbline 60
 0082           ;            {
 0082                   .dbline 61
 0082           ;                 for( i=0;i<8;i++ ) 
 0082 6627              clr R22
 0084 7727              clr R23
 0086 2BC0              xjmp L23
 0088           L20:
 0088                   .dbline 62
 0088           ;                 {   
 0088                   .dbline 63
 0088           ;                            temp = 4000; 
 0088 80EA              ldi R24,4000
 008A 9FE0              ldi R25,15
 008C 6C01              movw R12,R24
 008E 03C0              xjmp L25
 0090           L24:
 0090                   .dbline 65
 0090           ;                      while( ((PINE&0B00100000)==0B00000000 ) && (temp!=0) )
 0090           ;                      {temp--;} 
 0090                   .dbline 65
 0090 C601              movw R24,R12
 0092 0197              sbiw R24,1
 0094 6C01              movw R12,R24
 0096                   .dbline 65
 0096           L25:
 0096                   .dbline 64
 0096 0D99              sbic 0x1,5
 0098 04C0              rjmp L27
 009A           X4:
 009A CC20              tst R12
 009C C9F7              brne L24
 009E DD20              tst R13
 00A0 B9F7              brne L24
 00A2           X5:
 00A2           L27:
 00A2                   .dbline 67
 00A2           ;    
 00A2           ;                      delay_nus(1002);
 00A2 0AEE              ldi R16,1002
 00A4 13E0              ldi R17,3
 00A6 4ED0              xcall _delay_nus
 00A8                   .dbline 68
 00A8           ;                      if((PINE&0B00100000)==0B00100000 )       //    ¼ì²âµ½¸ßµçÆ½1µÄ»°ËµÃ÷¸ÃÎ»Îª1£¬ÑÓÊ±1ºÁÃëµÈ´ýÂö³å¸ßµçÆ½½áÊø 
 00A8 81B1              in R24,0x1
 00AA 8072              andi R24,32
 00AC 8032              cpi R24,32
 00AE 59F4              brne L28
 00B0           X6:
 00B0                   .dbline 69
 00B0           ;                      { 
 00B0                   .dbline 70
 00B0           ;                      data |= (1<<i);         //    dataH= ~data     dataL= data 
 00B0 01E0              ldi R16,1
 00B2 10E0              ldi R17,0
 00B4 9B01              movw R18,R22
 00B6 0E940000          xcall lsl16
 00BA A02A              or R10,R16
 00BC B12A              or R11,R17
 00BE                   .dbline 71
 00BE           ;                      delay_nus(1137); 
 00BE 01E7              ldi R16,1137
 00C0 14E0              ldi R17,4
 00C2 40D0              xcall _delay_nus
 00C4                   .dbline 72
 00C4           ;                      } 
 00C4 0AC0              xjmp L29
 00C6           L28:
 00C6                   .dbline 73
 00C6           ;                      else  data &= ~(1<<i);                           //    ¼ì²âµ½µÍµçÆ½0µÄ»°,ËµÃ÷¸ÃÎ»Îª0£¬¼ÌÐø¼ì²âÏÂÒ»Î»     
 00C6 01E0              ldi R16,1
 00C8 10E0              ldi R17,0
 00CA 9B01              movw R18,R22
 00CC 0E940000          xcall lsl16
 00D0 1801              movw R2,R16
 00D2 2094              com R2
 00D4 3094              com R3
 00D6 A220              and R10,R2
 00D8 B320              and R11,R3
 00DA           L29:
 00DA                   .dbline 74
 00DA           ;                 }
 00DA           L21:
 00DA                   .dbline 61
 00DA 6F5F              subi R22,255  ; offset = 1
 00DC 7F4F              sbci R23,255
 00DE           L23:
 00DE                   .dbline 61
 00DE 6830              cpi R22,8
 00E0 E0E0              ldi R30,0
 00E2 7E07              cpc R23,R30
 00E4 88F2              brlo L20
 00E6           X7:
 00E6                   .dbline 75
 00E6           ;                 IR_BUF[j]=data;
 00E6 80E0              ldi R24,<_IR_BUF
 00E8 90E0              ldi R25,>_IR_BUF
 00EA FA01              movw R30,R20
 00EC EE0F              lsl R30
 00EE FF1F              rol R31
 00F0 E80F              add R30,R24
 00F2 F91F              adc R31,R25
 00F4 B182              std z+1,R11
 00F6 A082              std z+0,R10
 00F8                   .dbline 76
 00F8           ;            } 
 00F8           L17:
 00F8                   .dbline 59
 00F8 4F5F              subi R20,255  ; offset = 1
 00FA 5F4F              sbci R21,255
 00FC           L19:
 00FC                   .dbline 59
 00FC 4430              cpi R20,4
 00FE E0E0              ldi R30,0
 0100 5E07              cpc R21,R30
 0102 08F4              brsh X11
 0104 BECF              xjmp L16
 0106           X11:
 0106           X8:
 0106                   .dbline 78
 0106           ;    
 0106           ;            if(IR_BUF[2] = ~IR_BUF[3])   //Ð£Ñé 
 0106 20900600          lds R2,_IR_BUF+6
 010A 30900700          lds R3,_IR_BUF+6+1
 010E 2094              com R2
 0110 3094              com R3
 0112 30920500          sts _IR_BUF+4+1,R3
 0116 20920400          sts _IR_BUF+4,R2
 011A 2220              tst R2
 011C 11F4              brne X9
 011E 3320              tst R3
 0120 29F0              breq L30
 0122           X9:
 0122                   .dbline 79
 0122           ;            { 
 0122                   .dbline 80
 0122           ;            PORTA=IR_BUF[2];             //½âÂëÕýÈ·ºóµÄ¶¯×÷¡£
 0122 2BBA              out 0x1b,R2
 0124                   .dbline 81
 0124           ;            delay_nms(100);
 0124 04E6              ldi R16,100
 0126 10E0              ldi R17,0
 0128 1BD0              xcall _delay_nms
 012A                   .dbline 82
 012A           ;            }
 012A 0AC0              xjmp L31
 012C           L30:
 012C                   .dbline 85
 012C           ;            
 012C           ;                  else                         //²»ÕýÈ·Ôò£¬Ê¹Êý¾ÝÓëµØÖ·Îª0¡£
 012C           ;            { 
 012C                   .dbline 86
 012C           ;                  IR_BUF[0]=0x00;
 012C 2224              clr R2
 012E 3324              clr R3
 0130 30920100          sts _IR_BUF+1,R3
 0134 20920000          sts _IR_BUF,R2
 0138                   .dbline 87
 0138           ;            IR_BUF[2]=0x00;
 0138 30920500          sts _IR_BUF+4+1,R3
 013C 20920400          sts _IR_BUF+4,R2
 0140                   .dbline 88
 0140           ;            }       
 0140           L31:
 0140                   .dbline 89
 0140           ;          }// while(1)
 0140           L3:
 0140                   .dbline 42
 0140 7CCF              xjmp L2
 0142           X10:
 0142                   .dbline -2
 0142           L1:
 0142                   .dbline 0 ; func end
 0142 0895              ret
 0144                   .dbsym r j 20 i
 0144                   .dbsym r data 10 i
 0144                   .dbsym r i 22 i
 0144                   .dbsym r temp 12 i
 0144                   .dbend
 0144                   .dbfunc e delay_nus _delay_nus fV
 0144           ;              i -> R20,R21
 0144           ;              n -> R16,R17
                        .even
 0144           _delay_nus::
 0144 4A93              st -y,R20
 0146 5A93              st -y,R21
 0148                   .dbline -1
 0148                   .dbline 93
 0148           ; }
 0148           ; 
 0148           ; void delay_nus(unsigned int n)          //N usÑÓÊ±º¯Êý
 0148           ; {
 0148                   .dbline 94
 0148           ;      unsigned int i=0;
 0148                   .dbline 95
 0148           ;      for (i=0;i<n;i++)
 0148 4427              clr R20
 014A 5527              clr R21
 014C 03C0              xjmp L40
 014E           L37:
 014E                   .dbline 96
 014E           ;      asm("nop");
 014E 0000              nop
 0150           L38:
 0150                   .dbline 95
 0150 4F5F              subi R20,255  ; offset = 1
 0152 5F4F              sbci R21,255
 0154           L40:
 0154                   .dbline 95
 0154 4017              cp R20,R16
 0156 5107              cpc R21,R17
 0158 D0F3              brlo L37
 015A           X12:
 015A                   .dbline -2
 015A           L36:
 015A                   .dbline 0 ; func end
 015A 5991              ld R21,y+
 015C 4991              ld R20,y+
 015E 0895              ret
 0160                   .dbsym r i 20 i
 0160                   .dbsym r n 16 i
 0160                   .dbend
 0160                   .dbfunc e delay_nms _delay_nms fV
 0160           ;              j -> R20,R21
 0160           ;              i -> R22,R23
 0160           ;          count -> R16,R17
                        .even
 0160           _delay_nms::
 0160 0E940000          xcall push_xgsetF000
 0164                   .dbline -1
 0164                   .dbline 100
 0164           ; }
 0164           ; 
 0164           ; void delay_nms(unsigned int count)      //N msÑÓÊ±º¯Êý
 0164           ; { 
 0164                   .dbline 102
 0164           ;      unsigned int i,j; 
 0164           ;      for( j=0;j<count;j++ ) 
 0164 4427              clr R20
 0166 5527              clr R21
 0168 0CC0              xjmp L45
 016A           L42:
 016A                   .dbline 103
 016A           ;      { 
 016A                   .dbline 104
 016A           ;        for( i=0;i<999;i++ ) 
 016A 6627              clr R22
 016C 7727              clr R23
 016E 03C0              xjmp L49
 0170           L46:
 0170                   .dbline 105
 0170           ;        asm("nop"); 
 0170 0000              nop
 0172           L47:
 0172                   .dbline 104
 0172 6F5F              subi R22,255  ; offset = 1
 0174 7F4F              sbci R23,255
 0176           L49:
 0176                   .dbline 104
 0176 673E              cpi R22,231
 0178 E3E0              ldi R30,3
 017A 7E07              cpc R23,R30
 017C C8F3              brlo L46
 017E           X13:
 017E                   .dbline 106
 017E           ;      } 
 017E           L43:
 017E                   .dbline 102
 017E 4F5F              subi R20,255  ; offset = 1
 0180 5F4F              sbci R21,255
 0182           L45:
 0182                   .dbline 102
 0182 4017              cp R20,R16
 0184 5107              cpc R21,R17
 0186 88F3              brlo L42
 0188           X14:
 0188                   .dbline -2
 0188           L41:
 0188                   .dbline 0 ; func end
 0188 0C940000          xjmp pop_xgsetF000
 018C                   .dbsym r j 20 i
 018C                   .dbsym r i 22 i
 018C                   .dbsym r count 16 i
 018C                   .dbend
 018C           ; }   
