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

📄 music.lst

📁 AVR单片机例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0084 E5CF      LDI	R28,0x5F
    0085 E0D2      LDI	R29,2
    0086 BFCD      OUT	P3D,R28
    0087 BFDE      OUT	P3E,R29
    0088 51C0      SUBI	R28,0x10
    0089 40D0      SBCI	R29,0
    008A EA0A      LDI	R16,0xAA
    008B 8308      STD	R16,0+Y
    008C 2400      CLR	R0
    008D E6E2      LDI	R30,0x62
    008E E0F0      LDI	R31,0
    008F E010      LDI	R17,0
    0090 36E2      CPI	R30,0x62
    0091 07F1      CPC	R31,R17
    0092 F011      BEQ	0x0095
    0093 9201      ST	R0,Z+
    0094 CFFB      RJMP	0x0090
    0095 8300      STD	R16,0+Z
    0096 E0E6      LDI	R30,6
    0097 E0F1      LDI	R31,1
    0098 E6A0      LDI	R26,0x60
    0099 E0B0      LDI	R27,0
    009A E011      LDI	R17,1
    009B 30E8      CPI	R30,0x8
    009C 07F1      CPC	R31,R17
    009D F021      BEQ	0x00A2
    009E 95C8      LPM
    009F 9631      ADIW	R30,1
    00A0 920D      ST	R0,X+
    00A1 CFF9      RJMP	0x009B
    00A2 D073      RCALL	_main
_exit:
    00A3 CFFF      RJMP	_exit
FILE: sound.c
(0000) /**********************************************
(0001)              http://www.sl.com.cn
(0002)       双龙电子公司----电脑音乐演示程序(ICCAVR)
(0003) 	             作者:詹卫前
(0004) 		  1、学习定时器T0溢出中断的使用
(0005) 		  2、学习定时器T1比较中断的使用
(0006) 		  3、学习电脑音乐的产生
(0007) **********************************************/
(0008) #include <io8515.h>
(0009) #include <macros.h>
(0010) #pragma interrupt_handler timer0:8
(0011) #pragma interrupt_handler timer1:5
(0012) //#pragma data:code
(0013) flash 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:
    00A4 2422      CLR	R2
    00A5 BE25      OUT	P35,R2
(0044)   DDRC=0x01;
    00A6 E081      LDI	R24,1
    00A7 BB84      OUT	P14,R24
(0045)   TCCR1A=0x00;
    00A8 BC2F      OUT	P2F,R2
(0046)   TCCR1B=0x09;
    00A9 E089      LDI	R24,0x9
    00AA BD8E      OUT	P2E,R24
(0047)   TCCR0=0x03;
    00AB E083      LDI	R24,3
    00AC BF83      OUT	P33,R24
(0048)   TCNT0=0x19;
    00AD E189      LDI	R24,0x19
    00AE BF82      OUT	P32,R24
(0049)   TIMSK=0x42;
    00AF E482      LDI	R24,0x42
    00B0 BF89      OUT	P39,R24
(0050)   }
    00B1 9508      RET
_timer0:
    00B2 938A      ST	R24,-Y
    00B3 939A      ST	R25,-Y
    00B4 B78F      IN	R24,P3F
    00B5 938A      ST	R24,-Y
(0051) /**************************************************
(0052)       T0中断程序,产生音乐节拍
(0053) **************************************************/  
(0054) void timer0(void) 
(0055)     {
(0056)      delay++;
    00B6 91900061  LDS	R25,0x61
    00B8 91800060  LDS	R24,0x60
    00BA 9601      ADIW	R24,1
    00BB 93900061  STS	R25,0x61
    00BD 93800060  STS	R24,0x60
(0057)      TCNT0=0x19;
    00BF E189      LDI	R24,0x19
    00C0 BF82      OUT	P32,R24
(0058)     }
    00C1 9189      LD	R24,Y+
    00C2 BF8F      OUT	P3F,R24
    00C3 9199      LD	R25,Y+
    00C4 9189      LD	R24,Y+
    00C5 9518      RETI
_timer1:
    00C6 922A      ST	R2,-Y
    00C7 938A      ST	R24,-Y
    00C8 B62F      IN	R2,P3F
    00C9 922A      ST	R2,-Y
(0059) /**************************************************
(0060)       T1中断程序,根据SOUND函数输出一定频率的方波
(0061) **************************************************/  
(0062) void timer1(void) 
(0063)     {
(0064)      PORTC^=0x01;
    00CA E081      LDI	R24,1
    00CB B225      IN	R2,P15
    00CC 2628      EOR	R2,R24
    00CD BA25      OUT	P15,R2
(0065)     }
    00CE 9029      LD	R2,Y+
    00CF BE2F      OUT	P3F,R2
    00D0 9189      LD	R24,Y+
    00D1 9029      LD	R2,Y+
    00D2 9518      RETI
_sound:
  y                    --> R10
  x                    --> R12
    00D3 D08D      RCALL	push_gset4
    00D4 2EA2      MOV	R10,R18
    00D5 2EB3      MOV	R11,R19
    00D6 2EC0      MOV	R12,R16
    00D7 2ED1      MOV	R13,R17
(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(); 
    00D8 9478      BSET	7
(0074)        delay=0; 
    00D9 2422      CLR	R2
    00DA 2433      CLR	R3
    00DB 92300061  STS	R3,0x61
    00DD 92200060  STS	R2,0x60
(0075)        if (x!=0)
    00DF 20CC      TST	R12
    00E0 F411      BNE	0x00E3
    00E1 20DD      TST	R13
    00E2 F131      BEQ	0x0109
(0076)         {         
(0077)          x=4000000/x; 
    00E3 2C2C      MOV	R2,R12
    00E4 2C3D      MOV	R3,R13
    00E5 2444      CLR	R4
    00E6 2455      CLR	R5
    00E7 E002      LDI	R16,2
    00E8 E011      LDI	R17,1
    00E9 D07C      RCALL	lpm32
    00EA 925A      ST	R5,-Y
    00EB 924A      ST	R4,-Y
    00EC 923A      ST	R3,-Y
    00ED 922A      ST	R2,-Y
    00EE D0DE      RCALL	div32s
    00EF 2EC0      MOV	R12,R16
    00F0 2ED1      MOV	R13,R17
(0078)          OCR1A=x;   
    00F1 92D0004B  STS	R13,0x4B
    00F3 92C0004A  STS	R12,0x4A
(0079)          TCNT1=0x00;
    00F5 2422      CLR	R2
    00F6 2433      CLR	R3
    00F7 9230004D  STS	R3,0x4D
    00F9 9220004C  STS	R2,0x4C
(0080)          TIMSK|=0x40;
    00FB B789      IN	R24,P39
    00FC 6480      ORI	R24,0x40
    00FD BF89      OUT	P39,R24
(0081)           while(delay<y)
(0082)           ;
    00FE 90300061  LDS	R3,0x61
    0100 90200060  LDS	R2,0x60
    0102 142A      CP	R2,R10
    0103 043B      CPC	R3,R11
    0104 F3C8      BCS	0x00FE
(0083)           TIMSK&=0xbf;      
    0105 B789      IN	R24,P39
    0106 7B8F      ANDI	R24,0xBF
    0107 BF89      OUT	P39,R24
(0084)          }
    0108 C00A      RJMP	0x0113
(0085)       else
(0086)          {
(0087)           TIMSK&=0xbf;
    0109 B789      IN	R24,P39
    010A 7B8F      ANDI	R24,0xBF
    010B BF89      OUT	P39,R24
(0088)           while(delay<y)
(0089)           ;
    010C 90300061  LDS	R3,0x61
    010E 90200060  LDS	R2,0x60
    0110 142A      CP	R2,R10
    0111 043B      CPC	R3,R11
    0112 F3C8      BCS	0x010C
(0090)           }
(0091)       CLI(); 
    0113 94F8      BCLR	7
(0092)              
(0093)     }
    0114 D04F      RCALL	pop_gset4
    0115 9508      RET
(0094) /*******************************
(0095)           主程序
(0096) *******************************/  
(0097) void main(void)
(0098)   {
(0099)    unsigned char i=0;
_main:
  i                    --> R20
    0116 2744      CLR	R20
(0100)    music_init();  
    0117 DF8C      RCALL	_music_init
    0118 C029      RJMP	0x0142
(0101)    while(1)
(0102)       { 
(0103)        while(music_data[i][1]!=0)
(0104)            {
(0105)             sound(music_data[i][0],music_data[i][1]);
    0119 E022      LDI	R18,2
    011A E030      LDI	R19,0
    011B 2F04      MOV	R16,R20
    011C 2711      CLR	R17
    011D D06A      RCALL	lsl16
    011E 2E20      MOV	R2,R16
    011F 2E31      MOV	R3,R17
    0120 E18C      LDI	R24,0x1C
    0121 E090      LDI	R25,0
    0122 0F08      ADD	R16,R24
    0123 1F19      ADC	R17,R25
    0124 D055      RCALL	lpm16

⌨️ 快捷键说明

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