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

📄 sound.lis

📁 AVR单片机例程
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 003C 8FBF              out 0x3f,R24
 003E 9991              ld R25,y+
 0040 8991              ld R24,y+
 0042 1895              reti
 0044                   .dbfunc s timer1 _timer1 fI
                         .even
 0044                 _timer1::
 0044 2A92              st -y,R2
 0046 8A93              st -y,R24
 0048 2FB6              in R2,0x3f
 004A 2A92              st -y,R2
 004C                   .dbline 64{
                       ; /**************************************************
                       ;       T1中断程序,根据SOUND函数输出一定频率的方波
                       ; **************************************************/  
                       ; void timer1(void) 
                       ;     {
 004C                   .dbline 65
                       ;      PORTC^=0x01;
 004C 81E0              ldi R24,1
 004E 25B2              in R2,0x15
 0050 2826              eor R2,R24
 0052 25BA              out 0x15,R2
 0054                   .dbline 66}
                       ;     }
 0054                 L3:
 0054 2990              ld R2,y+
 0056 2FBE              out 0x3f,R2
 0058 8991              ld R24,y+
 005A 2990              ld R2,y+
 005C 1895              reti
 005E                   .dbfunc s sound _sound fI
                       ;              y -> R10,R11
                       ;              x -> R12,R13
                         .even
 005E                 _sound::
 005E 00D0              rcall push_gset4
 0060 A22E              mov R10,R18
 0062 B32E              mov R11,R19
 0064 C02E              mov R12,R16
 0066 D12E              mov R13,R17
 0068                   .dbline 73{
                       ; /*****************************************************
                       ;       SOUND程序,输出频率为 x HZ的方波,延时 y MS
                       ;        x:100~20000 HZ, 0表示不发声
                       ;        y:0~65536 MS
                       ; *****************************************************/     
                       ; void sound(unsigned int x,unsigned int y)
                       ;     {
 0068                   .dbline 74
                       ;        SEI(); 
 0068 7894              sei
 006A                   .dbline 75
                       ;        delay=0; 
 006A 2224              clr R2
 006C 3324              clr R3
 006E 30920100          sts _delay+1,R3
 0072 20920000          sts _delay,R2
 0076                   .dbline 76
                       ;        if (x!=0)
 0076 CC20              tst R12
 0078 11F4              brne X0
 007A DD20              tst R13
 007C 31F1              breq L5
 007E                 X0:
 007E                   .dbline 77
                       ;         {         
 007E                   .dbline 78
                       ;          x=4000000/x; 
 007E 2C2C              mov R2,R12
 0080 3D2C              mov R3,R13
 0082 4424              clr R4
 0084 5524              clr R5
 0086 00E0              ldi R16,<L7
 0088 10E0              ldi R17,>L7
 008A 00D0              rcall lpm32
 008C 5A92              st -y,R5
 008E 4A92              st -y,R4
 0090 3A92              st -y,R3
 0092 2A92              st -y,R2
 0094 00D0              rcall div32s
 0096 C02E              mov R12,R16
 0098 D12E              mov R13,R17
 009A                   .dbline 79
                       ;          OCR1A=x;   
 009A D0924B00          sts 74+1,R13
 009E C0924A00          sts 74,R12
 00A2                   .dbline 80
                       ;          TCNT1=0x00;
 00A2 2224              clr R2
 00A4 3324              clr R3
 00A6 30924D00          sts 76+1,R3
 00AA 20924C00          sts 76,R2
 00AE                   .dbline 81
                       ;          TIMSK|=0x40;
 00AE 89B7              in R24,0x39
 00B0 8064              ori R24,64
 00B2 89BF              out 0x39,R24
 00B4                 L8:
 00B4                   .dbline 83
 00B4                 L9:
 00B4                   .dbline 82
                       ;           while(delay<y)
 00B4 30900100          lds R3,_delay+1
 00B8 20900000          lds R2,_delay
 00BC 2A14              cp R2,R10
 00BE 3B04              cpc R3,R11
 00C0 C8F3              brlo L8
 00C2                   .dbline 84
                       ;           ;
                       ;           TIMSK&=0xbf;      
 00C2 89B7              in R24,0x39
 00C4 8F7B              andi R24,191
 00C6 89BF              out 0x39,R24
 00C8                   .dbline 85
                       ;          }
 00C8 0AC0              rjmp L6
 00CA                 L5:
 00CA                   .dbline 87
                       ;       else
                       ;          {
 00CA                   .dbline 88
                       ;           TIMSK&=0xbf;
 00CA 89B7              in R24,0x39
 00CC 8F7B              andi R24,191
 00CE 89BF              out 0x39,R24
 00D0                 L11:
 00D0                   .dbline 90
 00D0                 L12:
 00D0                   .dbline 89
                       ;           while(delay<y)
 00D0 30900100          lds R3,_delay+1
 00D4 20900000          lds R2,_delay
 00D8 2A14              cp R2,R10
 00DA 3B04              cpc R3,R11
 00DC C8F3              brlo L11
 00DE                   .dbline 91
                       ;           ;
                       ;           }
 00DE                 L6:
 00DE                   .dbline 92
                       ;       CLI(); 
 00DE F894              cli
 00E0                   .dbline 94}
                       ;              
                       ;     }
 00E0                 L4:
 00E0 00D0              rcall pop_gset4
 00E2 0895              ret
 00E4                   .dbsym r y 10 i
 00E4                   .dbsym r x 12 i
 00E4                   .dbfunc s main _main fI
                       ;              i -> R20
                         .even
 00E4                 _main::
 00E4                   .dbline 99{
                       ; /*******************************
                       ;           主程序
                       ; *******************************/  
                       ; void main(void)
                       ;   {
 00E4                   .dbline 100
                       ;    unsigned char i=0;
 00E4 4427              clr R20
 00E6                   .dbline 101
                       ;    music_init();  
 00E6 8CDF              rcall _music_init
 00E8 29C0              rjmp L16
 00EA                 X1:
 00EA                   .dbline 103
                       ;    while(1)
                       ;       { 
 00EA                 L18:
 00EA                   .dbline 105
 00EA                   .dbline 106
 00EA 22E0              ldi R18,2
 00EC 30E0              ldi R19,0
 00EE 042F              mov R16,R20
 00F0 1127              clr R17
 00F2 00D0              rcall lsl16
 00F4 202E              mov R2,R16
 00F6 312E              mov R3,R17
 00F8 80E0              ldi R24,<_music_data+2
 00FA 90E0              ldi R25,>_music_data+2
 00FC 080F              add R16,R24
 00FE 191F              adc R17,R25
 0100 00D0              rcall lpm16
 0102 202F              mov R18,R16
 0104 312F              mov R19,R17
 0106 80E0              ldi R24,<_music_data
 0108 90E0              ldi R25,>_music_data
 010A 022D              mov R16,R2
 010C 132D              mov R17,R3
 010E 080F              add R16,R24
 0110 191F              adc R17,R25
 0112 00D0              rcall lpm16
 0114 A4DF              rcall _sound
 0116                   .dbline 107
 0116 4395              inc R20
 0118                   .dbline 108
 0118                 L19:
 0118                   .dbline 104
 0118 22E0              ldi R18,2
 011A 30E0              ldi R19,0
 011C 042F              mov R16,R20
 011E 1127              clr R17
 0120 00D0              rcall lsl16
 0122 202E              mov R2,R16
 0124 312E              mov R3,R17
 0126 80E0              ldi R24,<_music_data+2
 0128 90E0              ldi R25,>_music_data+2
 012A 280E              add R2,R24
 012C 391E              adc R3,R25
 012E 022D              mov R16,R2
 0130 132D              mov R17,R3
 0132 00D0              rcall lpm16
 0134 0030              cpi R16,0
 0136 0107              cpc R16,R17
 0138 C1F6              brne L18
 013A                   .dbline 109
 013A 4427              clr R20
 013C                   .dbline 110
 013C                 L16:
 013C                   .dbline 102
 013C EDCF              rjmp L19
 013E                 X2:
 013E                   .dbline 111}
                       ;        while(music_data[i][1]!=0)
                       ;            {
                       ;             sound(music_data[i][0],music_data[i][1]);
                       ;             i++;
                       ;             }
                       ;        i=0;     
                       ;        }
                       ;    }
 013E                 L14:
 013E 0895              ret
 0140                   .dbsym r i 20 c
                         .area lit(rom, con, rel)
 00E8                 L7:
 00E8 00093D00          .word 2304,61

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -