                        .module PWM.C
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ3AE5~1\PWM.C
 0000                   .dbfile E:\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ3AE5~1\PWM.C
 0000                   .dbfunc e Timer0Init _Timer0Init fV
                        .even
 0000           _Timer0Init::
 0000                   .dbline -1
 0000                   .dbline 31
 0000           ; /*******************************************************************
 0000           ; ÊµÑéÊ®¶þ: Âö¿íµ÷ÖÆPWMÊµÑé                    
 0000           ; 
 0000           ; ÊµÑéÄ¿µÄ: Ñ§Ï°AVRµ¥Æ¬»úµÄPWM¹¦ÄÜ
 0000           ; ÊµÑéÏÖÏó: °´K17¼°K18°´¼üµ÷½ÚD9ÁÁ¶È£¬»òÓÃÊ¾²¨Æ÷ÔÚPB4¶Ë¿Ú¿´²¨ÐÎ
 0000           ; 
 0000           ; Ëµ    Ã÷: 
 0000           ; Ê±ÖÓ:     8M
 0000           ; 
 0000           ; ÈÕÆÚ£º    2009-8-2
 0000           ; ÁªÏµ·½·¨: MCU.2000@163.com 
 0000           ; ÈÕÆÚ:     2011-3-11
 0000           ; *******************************************************************/
 0000           ; #include <iom128v.h> 
 0000           ; #include <macros.h> 
 0000           ; #define uchar unsigned char
 0000           ; #define uint  unsigned int
 0000           ; #define OC0_OUT_EN    DDRB |= 0b00010000
 0000           ; 
 0000           ; 
 0000           ; void Delayus(uint US);                  
 0000           ; void Delayms(uint MS);        
 0000           ; 
 0000           ; /*-----------------------------------------------------------------
 0000           ; º¯ÊýÃû³Æ: void Timer0Init(void)
 0000           ; º¯Êý¹¦ÄÜ: 
 0000           ; ²Î    Êý: 
 0000           ; ·µ »Ø Öµ: ÎÞ
 0000           ; -----------------------------------------------------------------*/
 0000           ; void Timer0Init(void) 
 0000           ; { 
 0000                   .dbline 32
 0000           ;       TCCR0 = (1<<WGM01)|(1<<WGM00)|(1<<COM01)|(1<<COM00)|(1<<CS00);  
 0000 89E7              ldi R24,121
 0002 83BF              out 0x33,R24
 0004                   .dbline 33
 0004           ;       TCNT0 = 0x00;                   //ÉèÖÃTC0¼ÆÊý¼Ä´æÆ÷³õÖµ 
 0004 2224              clr R2
 0006 22BE              out 0x32,R2
 0008                   .dbline 34
 0008           ;       OCR0  = 0x20;                   //Êä³ö±È½Ï¼Ä´æÆ÷³õÖµ£¬ÉèÖÃ¸ÃÖµ¿ÉÓÃÓÚµ÷½ÚÕ¼¿Õ±È
 0008 80E2              ldi R24,32
 000A 81BF              out 0x31,R24
 000C                   .dbline -2
 000C           L1:
 000C                   .dbline 0 ; func end
 000C 0895              ret
 000E                   .dbend
 000E                   .dbfunc e main _main fV
                        .even
 000E           _main::
 000E                   .dbline -1
 000E                   .dbline 44
 000E           ; 
 000E           ; } 
 000E           ; /*-----------------------------------------------------------------
 000E           ; º¯ÊýÃû³Æ: 
 000E           ; º¯Êý¹¦ÄÜ: 
 000E           ; ²Î    Êý: 
 000E           ; ·µ »Ø Öµ: ÎÞ
 000E           ; -----------------------------------------------------------------*/
 000E           ; void main(void) 
 000E           ; {
 000E                   .dbline 46
 000E           ;       
 000E           ;        DDRA=0XFF;             //LED IO¿ÚÉèÎªÊä³ö
 000E 8FEF              ldi R24,255
 0010 8ABB              out 0x1a,R24
 0012                   .dbline 47
 0012           ;        DDRC=0XFF;             //ÊýÂë¹Ü¶ÎÑ¡ÉèÎªÊä³ö
 0012 84BB              out 0x14,R24
 0014                   .dbline 48
 0014           ;        DDRF |=0X03;           //LED¼°ÊýÂë¹ÜËø´æIO¿ÚÉèÎªÊä³ö
 0014 80916100          lds R24,97
 0018 8360              ori R24,3
 001A 80936100          sts 97,R24
 001E                   .dbline 49
 001E           ;        PORTF|=0X0E;           
 001E 80916200          lds R24,98
 0022 8E60              ori R24,14
 0024 80936200          sts 98,R24
 0028                   .dbline 50
 0028           ;        PORTA=0XFF;
 0028 8FEF              ldi R24,255
 002A 8BBB              out 0x1b,R24
 002C                   .dbline 51
 002C           ;        PORTC=0XFF;            
 002C 85BB              out 0x15,R24
 002E                   .dbline 52
 002E           ;        PORTF&=0xF1;           //Ëø´æÊý¾Ý¹Ø±ÕLED¼°ÊýÂë¹Ü 
 002E 80916200          lds R24,98
 0032 817F              andi R24,241
 0034 80936200          sts 98,R24
 0038                   .dbline 54
 0038           ;       
 0038           ;        DDRD &=0XFC;
 0038 81B3              in R24,0x11
 003A 8C7F              andi R24,252
 003C 81BB              out 0x11,R24
 003E                   .dbline 55
 003E           ;        PORTD|=0X03;
 003E 82B3              in R24,0x12
 0040 8360              ori R24,3
 0042 82BB              out 0x12,R24
 0044                   .dbline 57
 0044           ;        
 0044           ;        OC0_OUT_EN;                    //ÎªÔÊÐíPWM¹¤×÷£¬Ðè½«ÏàÓ¦IO¿ÚÉèÖÃÎªÊä³ö
 0044 BC9A              sbi 0x17,4
 0046                   .dbline 58
 0046           ;        Timer0Init(); 
 0046 DCDF              xcall _Timer0Init
 0048 1BC0              xjmp L4
 004A           L3:
 004A                   .dbline 61
 004A           ;       
 004A           ;        while(1)
 004A           ;        {
 004A                   .dbline 62
 004A           ;           if((PIND & 0X03)!=0X03)
 004A 80B3              in R24,0x10
 004C 8370              andi R24,3
 004E 8330              cpi R24,3
 0050 B9F0              breq L6
 0052           X0:
 0052                   .dbline 63
 0052           ;               {
 0052                   .dbline 64
 0052           ;               Delayms(100);   
 0052 04E6              ldi R16,100
 0054 10E0              ldi R17,0
 0056 2DD0              xcall _Delayms
 0058                   .dbline 65
 0058           ;                   if((PIND & 0X03)==0X01 && OCR0<=235)
 0058 80B3              in R24,0x10
 005A 8370              andi R24,3
 005C 8130              cpi R24,1
 005E 41F4              brne L8
 0060           X1:
 0060 8BEE              ldi R24,235
 0062 21B6              in R2,0x31
 0064 8215              cp R24,R2
 0066 20F0              brlo L8
 0068           X2:
 0068                   .dbline 66
 0068           ;                   OCR0+=20;
 0068 81B7              in R24,0x31
 006A 8C5E              subi R24,236    ; addi 20
 006C 81BF              out 0x31,R24
 006E 08C0              xjmp L9
 0070           L8:
 0070                   .dbline 67
 0070           ;                   else if(PIND & 0X03==0X03 && OCR0>=20)
 0070 809B              sbis 0x10,0
 0072 06C0              rjmp L10
 0074           X3:
 0074 81B7              in R24,0x31
 0076 8431              cpi R24,20
 0078 18F0              brlo L10
 007A           X4:
 007A                   .dbline 68
 007A           ;                       OCR0-=20;
 007A 81B7              in R24,0x31
 007C 8451              subi R24,20
 007E 81BF              out 0x31,R24
 0080           L10:
 0080           L9:
 0080                   .dbline 69
 0080           ;               }
 0080           L6:
 0080                   .dbline 71
 0080           ;       
 0080           ;        }
 0080           L4:
 0080                   .dbline 60
 0080 E4CF              xjmp L3
 0082           X5:
 0082                   .dbline -2
 0082           L2:
 0082                   .dbline 0 ; func end
 0082 0895              ret
 0084                   .dbend
 0084                   .dbfunc e Delayus _Delayus fV
 0084           ;              i -> R20,R21
 0084           ;             US -> R10,R11
                        .even
 0084           _Delayus::
 0084 0E940000          xcall push_xgset300C
 0088 5801              movw R10,R16
 008A                   .dbline -1
 008A                   .dbline 81
 008A           ; }
 008A           ; 
 008A           ; /****************************************************
 008A           ; º¯ÊýÃû³Æ: Delayus
 008A           ; ¹¦    ÄÜ: ÑÓÊ±Ö¸¶¨Î¢Ãë£¨8M¾§Õñ£©
 008A           ; ²Î    Êý: US--ÑÓÊ±µÄÎ¢ÃëÊý(´óÔ¼£¬²»ÊÇºÜ¾«È·£¬MSÔ½´óÔ½×¼È·)
 008A           ; ·µ»ØÖµ  : ÎÞ
 008A           ; /****************************************************/
 008A           ; void Delayus(uint US)           
 008A           ; {
 008A                   .dbline 83
 008A           ;      uint i;
 008A           ;      US=US*5/4;                        
 008A 05E0              ldi R16,5
 008C 10E0              ldi R17,0
 008E 9501              movw R18,R10
 0090 0E940000          xcall empy16s
 0094 5801              movw R10,R16
 0096 B694              lsr R11
 0098 A794              ror R10
 009A B694              lsr R11
 009C A794              ror R10
 009E                   .dbline 84
 009E           ;      for( i=0;i<US;i++); 
 009E 4427              clr R20
 00A0 5527              clr R21
 00A2 02C0              xjmp L16
 00A4           L13:
 00A4                   .dbline 84
 00A4           L14:
 00A4                   .dbline 84
 00A4 4F5F              subi R20,255  ; offset = 1
 00A6 5F4F              sbci R21,255
 00A8           L16:
 00A8                   .dbline 84
 00A8 4A15              cp R20,R10
 00AA 5B05              cpc R21,R11
 00AC D8F3              brlo L13
 00AE           X6:
 00AE                   .dbline -2
 00AE           L12:
 00AE                   .dbline 0 ; func end
 00AE 0C940000          xjmp pop_xgset300C
 00B2                   .dbsym r i 20 i
 00B2                   .dbsym r US 10 i
 00B2                   .dbend
 00B2                   .dbfunc e Delayms _Delayms fV
 00B2           ;              i -> R20,R21
 00B2           ;              j -> R22,R23
 00B2           ;             MS -> R16,R17
                        .even
 00B2           _Delayms::
 00B2 0E940000          xcall push_xgsetF000
 00B6                   .dbline -1
 00B6                   .dbline 94
 00B6           ; }
 00B6           ; /****************************************************
 00B6           ; º¯ÊýÃû³Æ: Delayms
 00B6           ; ¹¦    ÄÜ: ÑÓÊ±Ö¸¶¨ºÁÃë£¨8M¾§Õñ£©
 00B6           ; ²Î    Êý: MS--ÑÓÊ±µÄºÁÃëÊý
 00B6           ; ·µ»ØÖµ  : ÎÞ
 00B6           ; Í¨¹ýÈí¼þ·ÂÕæ·´¸´ÊµÑéµÃµ½µÄÊýÖµ
 00B6           ; /****************************************************/
 00B6           ; void Delayms(uint MS)           
 00B6           ; {
 00B6                   .dbline 96
 00B6           ;      uint i,j;
 00B6           ;      for( i=0;i<MS;i++)
 00B6 4427              clr R20
 00B8 5527              clr R21
 00BA 0BC0              xjmp L21
 00BC           L18:
 00BC                   .dbline 97
 00BC           ;      for(j=0;j<1141;j++);     
 00BC 6627              clr R22
 00BE 7727              clr R23
 00C0 02C0              xjmp L25
 00C2           L22:
 00C2                   .dbline 97
 00C2           L23:
 00C2                   .dbline 97
 00C2 6F5F              subi R22,255  ; offset = 1
 00C4 7F4F              sbci R23,255
 00C6           L25:
 00C6                   .dbline 97
 00C6 6537              cpi R22,117
 00C8 E4E0              ldi R30,4
 00CA 7E07              cpc R23,R30
 00CC D0F3              brlo L22
 00CE           X7:
 00CE           L19:
 00CE                   .dbline 96
 00CE 4F5F              subi R20,255  ; offset = 1
 00D0 5F4F              sbci R21,255
 00D2           L21:
 00D2                   .dbline 96
 00D2 4017              cp R20,R16
 00D4 5107              cpc R21,R17
 00D6 90F3              brlo L18
 00D8           X8:
 00D8                   .dbline -2
 00D8           L17:
 00D8                   .dbline 0 ; func end
 00D8 0C940000          xjmp pop_xgsetF000
 00DC                   .dbsym r i 20 i
 00DC                   .dbsym r j 22 i
 00DC                   .dbsym r MS 16 i
 00DC                   .dbend
 00DC           ; }
