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

📄 music.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0022 E5CF      LDI	R28,0x5F
    0023 E0D4      LDI	R29,4
    0024 BFCD      OUT	0x3D,R28
    0025 BFDE      OUT	0x3E,R29
    0026 51C0      SUBI	R28,0x10
    0027 40D0      SBCI	R29,0
    0028 EA0A      LDI	R16,0xAA
    0029 8308      STD	Y+0,R16
    002A 2400      CLR	R0
    002B E6E0      LDI	R30,0x60
    002C E0F0      LDI	R31,0
    002D E010      LDI	R17,0
    002E 36E4      CPI	R30,0x64
    002F 07F1      CPC	R31,R17
    0030 F011      BEQ	0x0033
    0031 9201      ST	R0,Z+
    0032 CFFB      RJMP	0x002E
    0033 8300      STD	Z+0,R16
    0034 E4E4      LDI	R30,0x44
    0035 E0F0      LDI	R31,0
    0036 E6A0      LDI	R26,0x60
    0037 E0B0      LDI	R27,0
    0038 E010      LDI	R17,0
    0039 34E4      CPI	R30,0x44
    003A 07F1      CPC	R31,R17
    003B F021      BEQ	0x0040
    003C 95C8      LPM
    003D 9631      ADIW	R30,1
    003E 920D      ST	R0,X+
    003F CFF9      RJMP	0x0039
    0040 D071      RCALL	_main
_exit:
    0041 CFFF      RJMP	_exit
FILE: E:\icc\iccavr\mega8\mega8\music\music.c
(0001) /*******************************************/
(0002) /*            广州天河双龙电子公司         */ 
(0003) /*            http://www.sl.com.cn         */
(0004) /*              电子音乐演示程序           */
(0005) /*            作者:ntzwq@wx88.net          */
(0006) /*                2002年5月10日            */
(0007) /*   目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
(0008) /*******************************************/
(0009) //使用说明:音乐输出端口:PORTC.0,音乐数据存放
(0010) //于ATMEGA8的EEPROM存贮器中,可以使用music.exe
(0011) //程序通过RS232通信口进行修改。
(0012) #include <iom8v.h>
(0013) #include <macros.h>
(0014) #include <eeprom.h>
(0015) #include "music.h"
(0016) extern void uart_init(void);
(0017) //extern void isp(void);
(0018) /* 		  音乐数据(卡秒莎)  	  */
(0019) /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
(0020) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0021) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0022) /* 高1-F*/								  	
(0023) #pragma data:eeprom
(0024) unsigned char sound[]={0x66,0x27,0x68,0x26,0x28,0x28,0x27,0x26,0x47,0x43,
(0025) 	  		   		   0x67,0x28,0x69,0x27,0x29,0x29,0x28,0x27,0x46,0x46,
(0026) 					   0x4a,0x4d,0x4c,0x2d,0x2c,0x2b,0x2b,0x2a,0x29,0x4a,
(0027) 					   0x46,0x20,0x4b,0x29,0x6a,0x28,0x27,0x23,0x28,0x27,
(0028) 					   0x46,0x46,0x4a,0x4d,0x4c,0x2d,0x2c,0x2b,0x2b,0x2a,
(0029) 					   0x29,0x4a,0x46,0x20,0x4b,0x29,0x6a,0x28,0x27,0x23,
(0030) 					   0x28,0x27,0x46,0x46,0x00};
(0031) #pragma data:data							  		  						  
(0032) /*	  		    音阶表				*/	
(0033) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0034) 			    	 	RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0035) /*			  音阶重装常数			*/						
(0036) unsigned int toneconst;								  							   						 				 	 	 
(0037) /*				微秒级延时程序	  		*/
(0038) void delay_us(int time)
(0039) 	 {     
(0040)   	  do
(0041) 	  	{
(0042) 		 time--;
_delay_us:
  time                 --> R16
    0042 5001      SUBI	R16,1
    0043 4010      SBCI	R17,0
(0043) 		}	
(0044)   	  while (time>1);
    0044 E081      LDI	R24,1
    0045 E090      LDI	R25,0
    0046 1780      CP	R24,R16
    0047 0791      CPC	R25,R17
    0048 F3CC      BLT	0x0042
(0045) 	 }
    0049 9508      RET
_delay_ms:
  time                 --> R20
    004A D189      RCALL	push_gset1
    004B 01A8      MOVW	R20,R16
(0046) /*	  		    毫秒级延时程序			*/	 
(0047) void delay_ms(unsigned int time)
(0048) 	 {
    004C C005      RJMP	0x0052
(0049) 	  while(time!=0)
(0050) 	  	  {		
(0051) 		   delay_us(1000);
    004D EE08      LDI	R16,0xE8
    004E E013      LDI	R17,3
    004F DFF2      RCALL	_delay_us
(0052) 		   time--;
    0050 5041      SUBI	R20,1
    0051 4050      SBCI	R21,0
    0052 3040      CPI	R20,0
    0053 0745      CPC	R20,R21
    0054 F7C1      BNE	0x004D
(0053) 		  }
(0054) 	 }					
    0055 D181      RCALL	pop_gset1
    0056 9508      RET
_timer1_ovf_isr:
    0057 922A      ST	R2,-Y
    0058 923A      ST	R3,-Y
    0059 938A      ST	R24,-Y
    005A B62F      IN	R2,0x3F
    005B 922A      ST	R2,-Y
(0055) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0056) void timer1_ovf_isr(void)
(0057) 	 {
(0058) 	  TCNT1=toneconst;
    005C 90200060  LDS	R2,_toneconst
    005E 90300061  LDS	R3,_toneconst+1
    0060 BC3D      OUT	0x2D,R3
    0061 BC2C      OUT	0x2C,R2
(0059) 	  PORTC^=1;
    0062 E081      LDI	R24,1
    0063 B225      IN	R2,0x15
    0064 2628      EOR	R2,R24
    0065 BA25      OUT	0x15,R2
(0060) 	 }	 	 
    0066 9029      LD	R2,Y+
    0067 BE2F      OUT	0x3F,R2
    0068 9189      LD	R24,Y+
    0069 9039      LD	R3,Y+
    006A 9029      LD	R2,Y+
    006B 9518      RETI
_music:
  sound_add            --> R20
  temp1                --> R22
  temp                 --> R10
    006C D181      RCALL	push_gset3
(0061) void music(void)
(0062)  	 {
(0063) 	  unsigned char temp,temp1;
(0064) 	  unsigned int sound_add=0;
    006D 2744      CLR	R20
    006E 2755      CLR	R21
(0065)  	  TCCR1A = 0x00;
    006F 2422      CLR	R2
    0070 BC2F      OUT	0x2F,R2
(0066) 	  TCCR1B =(1<<CS11);//8分频
    0071 E082      LDI	R24,2
    0072 BD8E      OUT	0x2E,R24
(0067) 	  temp1=EEPROMread((int)&sound[sound_add]);
    0073 E081      LDI	R24,1
    0074 E090      LDI	R25,0
    0075 018A      MOVW	R16,R20
    0076 0F08      ADD	R16,R24
    0077 1F19      ADC	R17,R25
    0078 D1A6      RCALL	_EEPROMread
    0079 2F60      MOV	R22,R16
    007A C030      RJMP	0x00AB
(0068) 	  while(temp1!=0)
(0069)  	  		{
(0070) 			temp=temp1; 
    007B 2EA6      MOV	R10,R22
(0071) 			temp&=0x0f;
    007C 2D8A      MOV	R24,R10
    007D 708F      ANDI	R24,0xF
    007E 2EA8      MOV	R10,R24
(0072) 			if(temp!=0)
    007F 2388      TST	R24
    0080 F0A1      BEQ	0x0095
(0073) 			  {
(0074) 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    0081 B789      IN	R24,0x39
    0082 6084      ORI	R24,4
    0083 BF89      OUT	0x39,R24
(0075) 			   temp--;			   
    0084 94AA      DEC	R10
(0076)         	   toneconst=TONETABLE[temp];
    0085 E082      LDI	R24,2
    0086 9D8A      MUL	R24,R10
    0087 01F0      MOVW	R30,R0
    0088 E286      LDI	R24,0x26
    0089 E090      LDI	R25,0
    008A 0FE8      ADD	R30,R24
    008B 1FF9      ADC	R31,R25
    008C 9005      LPM	R0,Z+
    008D 9014      LPM	R1,0(Z)
    008E 01F0      MOVW	R30,R0
    008F 93F00061  STS	_toneconst+1,R31
    0091 93E00060  STS	_toneconst,R30
(0077) 			   TCNT1=toneconst;
    0093 BDFD      OUT	0x2D,R31
    0094 BDEC      OUT	0x2C,R30
(0078)  			  }
(0079) 			temp=temp1;
    0095 2EA6      MOV	R10,R22
(0080) 			temp>>=4;
    0096 2D8A      MOV	R24,R10
    0097 9582      SWAP	R24
    0098 708F      ANDI	R24,0xF
(0081) 			temp&=0x0f;
    0099 708F      ANDI	R24,0xF
    009A 2EA8      MOV	R10,R24
(0082) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    009B E881      LDI	R24,0x81
    009C 9D8A      MUL	R24,R10
    009D 0180      MOVW	R16,R0
    009E DFAB      RCALL	_delay_ms
(0083) 			TIMSK&=~(1<<TOIE1);
    009F B789      IN	R24,0x39
    00A0 7F8B      ANDI	R24,0xFB
    00A1 BF89      OUT	0x39,R24
(0084) 			sound_add++;
    00A2 5F4F      SUBI	R20,0xFF
    00A3 4F5F      SBCI	R21,0xFF
(0085) 			temp1=EEPROMread((int)&sound[sound_add]); 
    00A4 E081      LDI	R24,1
    00A5 E090      LDI	R25,0
    00A6 018A      MOVW	R16,R20
    00A7 0F08      ADD	R16,R24
    00A8 1F19      ADC	R17,R25
    00A9 D175      RCALL	_EEPROMread
    00AA 2F60      MOV	R22,R16
    00AB 2366      TST	R22
    00AC F671      BNE	0x007B
(0086) 			}
(0087) 		delay_ms(1000);	                                         	
    00AD EE08      LDI	R16,0xE8
    00AE E013      LDI	R17,3
    00AF DF9A      RCALL	_delay_ms
(0088) 	 }	 	 	 	 
    00B0 D121      RCALL	pop_gset3
    00B1 9508      RET
(0089) /*	  	   		 主程序 	   	  		*/	  
(0090) void main(void)
(0091) 	 {
(0092) 	  DDRC=0x01;
_main:
    00B2 E081      LDI	R24,1
    00B3 BB84      OUT	0x14,R24
(0093) 	  PORTC=0xff;
    00B4 EF8F      LDI	R24,0xFF
    00B5 BB85      OUT	0x15,R24
(0094) 	  uart_init();
    00B6 D005      RCALL	_uart_init
(0095) 	  SEI();
    00B7 9478      BSET	7
    00B8 C001      RJMP	0x00BA
(0096) 	  while(1)
(0097) 	   	{
(0098) 	     music();
    00B9 DFB2      RCALL	_music
    00BA CFFE      RJMP	0x00B9
(0099) 	    }
(0100) 	 }
    00BB 9508      RET
FILE: E:\icc\iccavr\mega8\mega8\music\isp.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include <eeprom.h>
(0004) /*		 		 位操作宏  				*/
(0005) #define set_bit(x,y)	(x|=(1<<y))
(0006) #define clr_bit(x,y)	(x&=~(1<<y)) 
(0007) #define get_bit(x,y)	(x&(1<<y))
(0008) #define fosc 8000000
(0009) #define baud 19200
(0010) #define device 0x76
(0011) #define osc_address   0x1ff0
(0012) extern unsigned char read_flash(unsigned int add);
(0013) /*			UART初始化				*/	
(0014) void uart_init(void)
(0015) {
(0016)  OSCCAL=read_flash(osc_address);
_uart_init:
    00BC EF00      LDI	R16,0xF0
    00BD E11F      LDI	R17,0x1F
    00BE D10E      RCALL	_read_flash
    00BF BF01      OUT	0x31,R16
(0017)  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收
    00C0 E988      LDI	R24,0x98
    00C1 B98A      OUT	0x0A,R24
(0018)  UBRRL=(fosc/16/(baud+1))%256;
    00C2 E18A      LDI	R24,0x1A
    00C3 B989      OUT	0x09,R24
(0019)  UBRRH=(fosc/16/(baud+1))/256;
    00C4 2422      CLR	R2
    00C5 BC20      OUT	0x20,R2
(0020)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
    00C6 E886      LDI	R24,0x86
    00C7 BD80      OUT	0x20,R24
(0021) }
    00C8 9508      RET
(0022) /*  		字符输出函数 		 */
(0023) void putchar(unsigned char c)
(0024) 	{	 
(0025)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    00C9 9B5D      SBIS	0x0B,5
    00CA CFFE      RJMP	_putchar
(0026) 	 UDR=c;    
    00CB B90C      OUT	0x0C,R16
(0027) 	}
    00CC 9508      RET
(0028) /*  		字符输入函数 		 */	
(0029) unsigned char getchar(void)
(0030)   	{
(0031) 	 while(!(UCSRA& (1<<RXC)));
_getchar:
    00CD 9B5F      SBIS	0x0B,7
    00CE CFFE      RJMP	_getchar
(0032)      return UDR;
    00CF B10C      IN	R16,0x0C
    00D0 9508      RET
_isp:
  val                  --> R20
    00D1 D11F      RCALL	push_lset
    00D2 D101      RCALL	push_gset1
(0033) 	}	
(0034) #pragma interrupt_handler isp:iv_USART_RXC
(0035) void isp(void)
(0036) 	 {	  
(0037) 	  static unsigned int adder;
(0038) 	  unsigned char val;
(0039) 	  val=UDR;
    00D3 B14C      IN	R20,0x0C
(0040) 	  switch (val)
    00D4 2755      CLR	R21
    00D5 344C      CPI	R20,0x4C
    00D6 E0E0      LDI	R30,0
    00D7 075E      CPC	R21,R30
    00D8 F409      BNE	0x00DA
    00D9 C0AF      RJMP	0x0189
    00DA E48C      LDI	R24,0x4C
    00DB E090      LDI	R25,0
    00DC 1784      CP	R24,R20
    00DD 0795      CPC	R25,R21
    00DE F0D4      BLT	0x00F9
    00DF 314B      CPI	R20,0x1B
    00E0 E0E0      LDI	R30,0
    00E1 075E      CPC	R21,R30
    00E2 F409      BNE	0x00E4
    00E3 C0E6      RJMP	0x01CA
    00E4 314B      CPI	R20,0x1B
    00E5 E0E0      LDI	R30,0
    00E6 075E      CPC	R21,R30
    00E7 F40C      BGE	0x00E9
    00E8 C0DF      RJMP	0x01C8
    00E9 3441      CPI	R20,0x41
    00EA E0E0      LDI	R30,0
    00EB 075E      CPC	R21,R30
    00EC F409      BNE	0x00EE
    00ED C05F      RJMP	0x014D
    00EE 3444      CPI	R20,0x44
    00EF E0E0      LDI	R30,0
    00F0 075E      CPC	R21,R30
    00F1 F409      BNE	0x00F3
    00F2 C073      RJMP	0x0166
    00F3 3446      CPI	R20,0x46
    00F4 E0E0      LDI	R30,0
    00F5 075E      CPC	R21,R30
    00F6 F409      BNE	0x00F8
    00F7 C09F      RJMP	0x0197
    00F8 C0CF      RJMP	0x01C8
    00F9 3641      CPI	R20,0x61
    00FA E0E0      LDI	R30,0
    00FB 075E      CPC	R21,R30
    00FC F409      BNE	0x00FE
    00FD C04C      RJMP	0x014A
    00FE 3644      CPI	R20,0x64
    00FF E0E0      LDI	R30,0
    0100 075E      CPC	R21,R30
    0101 F409      BNE	0x0103
    0102 C076      RJMP	0x0179
    0103 E684      LDI	R24,0x64
    0104 E090      LDI	R25,0
    0105 1784      CP	R24,R20
    0106 0795      CPC	R25,R21
    0107 F0AC      BLT	0x011D
    0108 3540      CPI	R20,0x50
    0109 E0E0      LDI	R30,0
    010A 075E      CPC	R21,R30
    010B F409      BNE	0x010D
    010C C038      RJMP	0x0145
    010D 3543      CPI	R20,0x53
    010E E0E0      LDI	R30,0
    010F 075E      CPC	R21,R30
    0110 F409      BNE	0x0112
    0111 C08F      RJMP	0x01A1

⌨️ 快捷键说明

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