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

📄 music.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
字号:
__text_start:
__start:
    009F E5CF      LDI	R28,0x5F
    00A0 E0D4      LDI	R29,4
    00A1 BFCD      OUT	0x3D,R28
    00A2 BFDE      OUT	0x3E,R29
    00A3 51C0      SUBI	R28,0x10
    00A4 40D0      SBCI	R29,0
    00A5 EA0A      LDI	R16,0xAA
    00A6 8308      STD	Y+0,R16
    00A7 2400      CLR	R0
    00A8 E6E2      LDI	R30,0x62
    00A9 E0F0      LDI	R31,0
    00AA E010      LDI	R17,0
    00AB 36E2      CPI	R30,0x62
    00AC 07F1      CPC	R31,R17
    00AD F011      BEQ	0x00B0
    00AE 9201      ST	R0,Z+
    00AF CFFB      RJMP	0x00AB
    00B0 8300      STD	Z+0,R16
    00B1 E3EC      LDI	R30,0x3C
    00B2 E0F1      LDI	R31,1
    00B3 E6A0      LDI	R26,0x60
    00B4 E0B0      LDI	R27,0
    00B5 E011      LDI	R17,1
    00B6 33EE      CPI	R30,0x3E
    00B7 07F1      CPC	R31,R17
    00B8 F021      BEQ	0x00BD
    00B9 95C8      LPM
    00BA 9631      ADIW	R30,1
    00BB 920D      ST	R0,X+
    00BC CFF9      RJMP	0x00B6
    00BD 940E0130  CALL	_main
_exit:
    00BF CFFF      RJMP	_exit
FILE: F:\李鹏飞\sl-avrad-m16\music\music.c
(0001) /**********************************************
(0002)              http://www.sl.com.cn
(0003)       双龙电子公司----电脑音乐演示程序(ICCAVR)
(0004) 	             作者:詹卫前
(0005) 		  1、学习定时器T0溢出中断的使用
(0006) 		  2、学习定时器T1比较中断的使用
(0007) 		  3、学习电脑音乐的产生
(0008) **********************************************/
(0009) #include <iom16v.h>
(0010) #include <macros.h>
(0011) #pragma interrupt_handler timer0:10
(0012) #pragma interrupt_handler timer1:7
(0013) const unsigned int music_data[][2]=
(0014) /*******************************************
(0015)        卡秋莎音乐数据{x,y}
(0016) 	   x:对应音符音阶(频率),0表示休止符
(0017) 	   y:对应音符节拍
(0018) ********************************************/
(0019) {
(0020) {440,600} ,{494,200} ,{523,600} ,{440,200},
(0021) {523,400} ,{494,200} ,{440,200} ,{494,400},
(0022) {330,400} ,{494,600} ,{523,200} ,{578,600},
(0023) {494,200} ,{578,400} ,{523,200} ,{494,200},
(0024) {440,800} ,{659,400} ,{880,400} ,{784,400},
(0025) {880,200} ,{784,200} ,{698,400} ,{659,200},
(0026) {578,200} ,{659,400} ,{440,400} ,{  0,200},//休止符
(0027) {698,400} ,{578,200} ,{659,600} ,{523,200},
(0028) {494,200} ,{330,200} ,{523,200} ,{494,200},
(0029) {440,800} ,{659,400} ,{880,400} ,{784,400},
(0030) {880,200} ,{784,200} ,{698,400} ,{659,200},
(0031) {578,200} ,{659,400} ,{440,400} ,{  0,200},//休止符
(0032) {698,400} ,{578,200}, {659,600} ,{523,200},
(0033) {494,200} ,{330,200}, {523,200} ,{494,200},
(0034) {440,800} ,
(0035) {0,0}};
(0036) #pragma data:data
(0037) unsigned int delay=0;
(0038) /*******************************
(0039)        MCU初始化
(0040) *******************************/
(0041) void music_init(void)
(0042)  {
(0043)   MCUCR=0x00;
_music_init:
    00C0 2422      CLR	R2
    00C1 BE25      OUT	0x35,R2
(0044)   DDRC=0x01;
    00C2 E081      LDI	R24,1
    00C3 BB84      OUT	0x14,R24
(0045)   TCCR1A=0x00;
    00C4 BC2F      OUT	0x2F,R2
(0046)   TCCR1B=0x09;
    00C5 E089      LDI	R24,0x9
    00C6 BD8E      OUT	0x2E,R24
(0047)   TCCR0=0x03;
    00C7 E083      LDI	R24,3
    00C8 BF83      OUT	0x33,R24
(0048)   TCNT0=0x19;
    00C9 E189      LDI	R24,0x19
    00CA BF82      OUT	0x32,R24
(0049)   TIMSK=(1<<OCIE1A)|(1<<TOIE0);
    00CB E181      LDI	R24,0x11
    00CC BF89      OUT	0x39,R24
(0050)   }
    00CD 9508      RET
_timer0:
    00CE 938A      ST	R24,-Y
    00CF 939A      ST	R25,-Y
    00D0 B78F      IN	R24,0x3F
    00D1 938A      ST	R24,-Y
(0051) /**************************************************
(0052)       T0中断程序,产生音乐节拍
(0053) **************************************************/  
(0054) void timer0(void) 
(0055)     {
(0056)      delay++;
    00D2 91800060  LDS	R24,0x60
    00D4 91900061  LDS	R25,0x61
    00D6 9601      ADIW	R24,1
    00D7 93900061  STS	0x61,R25
    00D9 93800060  STS	0x60,R24
(0057)      TCNT0=0x19;
    00DB E189      LDI	R24,0x19
    00DC BF82      OUT	0x32,R24
(0058)     }
    00DD 9189      LD	R24,Y+
    00DE BF8F      OUT	0x3F,R24
    00DF 9199      LD	R25,Y+
    00E0 9189      LD	R24,Y+
    00E1 9518      RETI
_timer1:
    00E2 922A      ST	R2,-Y
    00E3 938A      ST	R24,-Y
    00E4 B62F      IN	R2,0x3F
    00E5 922A      ST	R2,-Y
(0059) /**************************************************
(0060)       T1中断程序,根据SOUND函数输出一定频率的方波
(0061) **************************************************/  
(0062) void timer1(void) 
(0063)     {
(0064)      PORTC^=0x01;
    00E6 E081      LDI	R24,1
    00E7 B225      IN	R2,0x15
    00E8 2628      EOR	R2,R24
    00E9 BA25      OUT	0x15,R2
(0065)     }
    00EA 9029      LD	R2,Y+
    00EB BE2F      OUT	0x3F,R2
    00EC 9189      LD	R24,Y+
    00ED 9029      LD	R2,Y+
    00EE 9518      RETI
_sound:
  y                    --> R10
  x                    --> R12
    00EF 940E01E9  CALL	push_gset4
    00F1 0159      MOVW	R10,R18
    00F2 0168      MOVW	R12,R16
(0066) /*****************************************************
(0067)       SOUND程序,输出频率为 x HZ的方波,延时 y MS
(0068)        x:100~20000 HZ, 0表示不发声
(0069)        y:0~65536 MS
(0070) *****************************************************/     
(0071) void sound(unsigned int x,unsigned int y)
(0072)     {
(0073)        SEI(); 
    00F3 9478      BSET	7
(0074)        delay=0; 
    00F4 2422      CLR	R2
    00F5 2433      CLR	R3
    00F6 92300061  STS	0x61,R3
    00F8 92200060  STS	0x60,R2
(0075)        if (x!=0)
    00FA 20CC      TST	R12
    00FB F411      BNE	0x00FE
    00FC 20DD      TST	R13
    00FD F121      BEQ	0x0122
(0076)         {         
(0077)          x=4000000/x; 
    00FE 0116      MOVW	R2,R12
    00FF 2444      CLR	R4
    0100 2455      CLR	R5
    0101 E040      LDI	R20,0
    0102 E059      LDI	R21,0x9
    0103 E36D      LDI	R22,0x3D
    0104 E070      LDI	R23,0
    0105 925A      ST	R5,-Y
    0106 924A      ST	R4,-Y
    0107 923A      ST	R3,-Y
    0108 922A      ST	R2,-Y
    0109 018A      MOVW	R16,R20
    010A 019B      MOVW	R18,R22
    010B 940E015C  CALL	div32s
    010D 0168      MOVW	R12,R16
(0078)          OCR1A=x;   
    010E BD1B      OUT	0x2B,R17
    010F BD0A      OUT	0x2A,R16
(0079)          TCNT1=0x00;
    0110 2422      CLR	R2
    0111 2433      CLR	R3
    0112 BC3D      OUT	0x2D,R3
    0113 BC2C      OUT	0x2C,R2
(0080) 		 TIMSK|=(1<<OCIE1A);
    0114 B789      IN	R24,0x39
    0115 6180      ORI	R24,0x10
    0116 BF89      OUT	0x39,R24
(0081)          while(delay<y)
    0117 90200060  LDS	R2,0x60
    0119 90300061  LDS	R3,0x61
    011B 142A      CP	R2,R10
    011C 043B      CPC	R3,R11
    011D F3C8      BCS	0x0117
(0082)           ;
(0083) 		 TIMSK&=~(1<<OCIE1A);      
    011E B789      IN	R24,0x39
    011F 7E8F      ANDI	R24,0xEF
    0120 BF89      OUT	0x39,R24
(0084)          }
    0121 C00A      RJMP	0x012C
(0085)       else
(0086)          {
(0087)           TIMSK&=~(1<<OCIE1A);
    0122 B789      IN	R24,0x39
    0123 7E8F      ANDI	R24,0xEF
    0124 BF89      OUT	0x39,R24
(0088)           while(delay<y)
    0125 90200060  LDS	R2,0x60
    0127 90300061  LDS	R3,0x61
    0129 142A      CP	R2,R10
    012A 043B      CPC	R3,R11
    012B F3C8      BCS	0x0125
(0089)           ;
(0090)           }
(0091)       CLI(); 
    012C 94F8      BCLR	7
(0092)              
(0093)     }
    012D 940E01C7  CALL	pop_gset4
    012F 9508      RET
(0094) /*******************************
(0095)           主程序
(0096) *******************************/  
(0097) void main(void)
(0098)   {
(0099)    unsigned char i=0;
_main:
  i                    --> R20
    0130 2744      CLR	R20
(0100)    music_init();  
    0131 DF8E      RCALL	_music_init
    0132 C021      RJMP	0x0154
(0101)    while(1)
(0102)       { 
(0103)        while(music_data[i][1]!=0)
(0104)            {
(0105)             sound(music_data[i][0],music_data[i][1]);
    0133 E084      LDI	R24,4
    0134 9F84      MUL	R24,R20
    0135 0110      MOVW	R2,R0
    0136 E586      LDI	R24,0x56
    0137 E090      LDI	R25,0
    0138 01F1      MOVW	R30,R2
    0139 0FE8      ADD	R30,R24
    013A 1FF9      ADC	R31,R25
    013B 9125      LPM	R18,Z+
    013C 9134      LPM	R19,0(Z)
    013D E584      LDI	R24,0x54
    013E E090      LDI	R25,0
    013F 01F1      MOVW	R30,R2
    0140 0FE8      ADD	R30,R24
    0141 1FF9      ADC	R31,R25
    0142 9105      LPM	R16,Z+
    0143 9114      LPM	R17,0(Z)
    0144 DFAA      RCALL	_sound
(0106)             i++;
    0145 9543      INC	R20
    0146 E084      LDI	R24,4
    0147 9F84      MUL	R24,R20
    0148 01F0      MOVW	R30,R0
    0149 E586      LDI	R24,0x56
    014A E090      LDI	R25,0
    014B 0FE8      ADD	R30,R24
    014C 1FF9      ADC	R31,R25
    014D 9005      LPM	R0,Z+
    014E 9014      LPM	R1,0(Z)
    014F 01F0      MOVW	R30,R0
    0150 30E0      CPI	R30,0
    0151 07EF      CPC	R30,R31
    0152 F701      BNE	0x0133
(0107)             }
(0108)        i=0;     
    0153 2744      CLR	R20
    0154 CFF1      RJMP	0x0146
(0109)        }
(0110)    }
FILE: <library>
    0155 9508      RET
div32u:
    0156 94E8      BCLR	6
    0157 C001      RJMP	0x0159
mod32u:
    0158 9468      BSET	6
    0159 D02F      RCALL	long_div_prolog
    015A 24CC      CLR	R12
    015B C008      RJMP	0x0164
div32s:
    015C 94E8      BCLR	6
    015D C001      RJMP	0x015F
mod32s:
    015E 9468      BSET	6
    015F D029      RCALL	long_div_prolog
    0160 FD37      SBRC	R19,7
    0161 D053      RCALL	neg_R16_R19
    0162 FDB7      SBRC	R27,7
    0163 D05A      RCALL	neg_R24_R27
    0164 2477      CLR	R7
    0165 2488      CLR	R8
    0166 2499      CLR	R9
    0167 24AA      CLR	R10
    0168 24BB      CLR	R11
    0169 D041      RCALL	tst_R16_R19
    016A F0C1      BEQ	0x0183
    016B D044      RCALL	tst_R24_R27
    016C F0B1      BEQ	0x0183
    016D E2E8      LDI	R30,0x28
    016E 0F00      LSL	R16
    016F 1F11      ROL	R17
    0170 1F22      ROL	R18
    0171 1F33      ROL	R19
    0172 1C77      ROL	R7
    0173 1C88      ROL	R8
    0174 1C99      ROL	R9
    0175 1CAA      ROL	R10
    0176 1CBB      ROL	R11
    0177 1688      CP	R8,R24
    0178 0699      CPC	R9,R25
    0179 06AA      CPC	R10,R26
    017A 06BB      CPC	R11,R27
    017B F028      BCS	0x0181
    017C 1A88      SUB	R8,R24
    017D 0A99      SBC	R9,R25
    017E 0AAA      SBC	R10,R26
    017F 0ABB      SBC	R11,R27
    0180 9503      INC	R16
    0181 95EA      DEC	R30
    0182 F759      BNE	0x016E
    0183 F426      BRTC	0x0188
    0184 2D08      MOV	R16,R8
    0185 2D19      MOV	R17,R9
    0186 2D2A      MOV	R18,R10
    0187 2D3B      MOV	R19,R11
    0188 C013      RJMP	long_div_epilog
long_div_prolog:
    0189 927A      ST	R7,-Y
    018A 928A      ST	R8,-Y
    018B 929A      ST	R9,-Y
    018C 92AA      ST	R10,-Y
    018D 92BA      ST	R11,-Y
    018E 92CA      ST	R12,-Y
    018F 93EA      ST	R30,-Y
    0190 938A      ST	R24,-Y
    0191 939A      ST	R25,-Y
    0192 93AA      ST	R26,-Y
    0193 93BA      ST	R27,-Y
    0194 858B      LDD	R24,Y+11
    0195 859C      LDD	R25,Y+12
    0196 85AD      LDD	R26,Y+13
    0197 85BE      LDD	R27,Y+14
    0198 2EC3      MOV	R12,R19
    0199 F00E      BRTS	0x019B
    019A 26CB      EOR	R12,R27
    019B 9508      RET
long_div_epilog:
    019C FCC7      SBRC	R12,7
    019D D017      RCALL	neg_R16_R19
    019E 91B9      LD	R27,Y+
    019F 91A9      LD	R26,Y+
    01A0 9199      LD	R25,Y+
    01A1 9189      LD	R24,Y+
    01A2 91E9      LD	R30,Y+
    01A3 90C9      LD	R12,Y+
    01A4 90B9      LD	R11,Y+
    01A5 90A9      LD	R10,Y+
    01A6 9099      LD	R9,Y+
    01A7 9089      LD	R8,Y+
    01A8 9079      LD	R7,Y+
    01A9 9624      ADIW	R28,4
    01AA 9508      RET
tst_R16_R19:
    01AB 2FE0      MOV	R30,R16
    01AC 2BE1      OR	R30,R17
    01AD 2BE2      OR	R30,R18
    01AE 2BE3      OR	R30,R19
    01AF 9508      RET
tst_R24_R27:
    01B0 2FE8      MOV	R30,R24
    01B1 2BE9      OR	R30,R25
    01B2 2BEA      OR	R30,R26
    01B3 2BEB      OR	R30,R27
    01B4 9508      RET
neg_R16_R19:
    01B5 9500      COM	R16
    01B6 9510      COM	R17
    01B7 9520      COM	R18
    01B8 9530      COM	R19
    01B9 5F0F      SUBI	R16,0xFF
    01BA 4F1F      SBCI	R17,0xFF
    01BB 4F2F      SBCI	R18,0xFF
    01BC 4F3F      SBCI	R19,0xFF
    01BD 9508      RET
neg_R24_R27:
    01BE 9580      COM	R24
    01BF 9590      COM	R25
    01C0 95A0      COM	R26
    01C1 95B0      COM	R27
    01C2 5F8F      SUBI	R24,0xFF
    01C3 4F9F      SBCI	R25,0xFF
    01C4 4FAF      SBCI	R26,0xFF
    01C5 4FBF      SBCI	R27,0xFF
    01C6 9508      RET
pop_gset4:
    01C7 E0E8      LDI	R30,0x8
    01C8 940C01CE  JMP	pop
push_gset1:
    01CA 935A      ST	R21,-Y
    01CB 934A      ST	R20,-Y
    01CC 9508      RET
pop_gset1:
    01CD E0E1      LDI	R30,1
pop:
    01CE 9149      LD	R20,Y+
    01CF 9159      LD	R21,Y+
    01D0 FDE0      SBRC	R30,0
    01D1 9508      RET
    01D2 9169      LD	R22,Y+
    01D3 9179      LD	R23,Y+
    01D4 FDE1      SBRC	R30,1
    01D5 9508      RET
    01D6 90A9      LD	R10,Y+
    01D7 90B9      LD	R11,Y+
    01D8 FDE2      SBRC	R30,2
    01D9 9508      RET
    01DA 90C9      LD	R12,Y+
    01DB 90D9      LD	R13,Y+
    01DC FDE3      SBRC	R30,3
    01DD 9508      RET
    01DE 90E9      LD	R14,Y+
    01DF 90F9      LD	R15,Y+
    01E0 9508      RET
push_gset2:
    01E1 937A      ST	R23,-Y
    01E2 936A      ST	R22,-Y
    01E3 940C01CA  JMP	push_gset1
push_gset3:
    01E5 92BA      ST	R11,-Y
    01E6 92AA      ST	R10,-Y
    01E7 940C01E1  JMP	push_gset2
push_gset4:
    01E9 92DA      ST	R13,-Y
    01EA 92CA      ST	R12,-Y
    01EB 940C01E5  JMP	push_gset3

⌨️ 快捷键说明

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