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

📄 main.s

📁 AVR单片机系统开发经典实例部分源程序
💻 S
📖 第 1 页 / 共 2 页
字号:
L30:
L28:
L26:
L24:
L22:
	.dbline 87
; 				
; 				//-------------- 音量调节 ----------------//
; 				if(vol_flag!=0)                                 
	tst R10
	brne X1
	xjmp L33
X1:
	.dbline 88
; 				{
	.dbline 89
; 				  if(vol_flag==1)
	mov R24,R10
	cpi R24,1
	brne L35
	.dbline 90
; 				  {
	.dbline 91
; 				    if(VOL>27)VOL=29;
	ldi R24,27
	ldi R25,0
	lds R2,_VOL
	lds R3,_VOL+1
	cp R24,R2
	cpc R25,R3
	brsh L37
	.dbline 91
	ldi R24,29
	sts _VOL+1,R25
	sts _VOL,R24
	xjmp L36
L37:
	.dbline 92
; 					else VOL+=2;
	lds R24,_VOL
	lds R25,_VOL+1
	adiw R24,2
	sts _VOL+1,R25
	sts _VOL,R24
	.dbline 93
; 				  }
	xjmp L36
L35:
	.dbline 95
; 				  else
; 				  {
	.dbline 96
; 				    if(VOL<2)VOL=0;
	lds R24,_VOL
	lds R25,_VOL+1
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brsh L39
	.dbline 96
	clr R2
	clr R3
	sts _VOL+1,R3
	sts _VOL,R2
	xjmp L40
L39:
	.dbline 97
; 					else VOL-=2;
	lds R24,_VOL
	lds R25,_VOL+1
	sbiw R24,2
	sts _VOL+1,R25
	sts _VOL,R24
L40:
	.dbline 98
; 				  }
L36:
	.dbline 100
; 					
; 				  VS1003_WriteReg(VS1003_SPI_VOL ,VOL_BUFFER[VOL]); // 送音量数据
	lds R18,_VOL
	lds R19,_VOL+1
	ldi R16,2
	ldi R17,0
	xcall empy16s
	movw R30,R16
	ldi R24,<_VOL_BUFFER
	ldi R25,>_VOL_BUFFER
	add R30,R24
	adc R31,R25
	lpm R18,Z+
	lpm R19,Z
	ldi R16,11
	xcall _VS1003_WriteReg
L41:
	.dbline 102
L42:
	.dbline 102
; 				  
; 				  while(VS1003_DREQ_STATE() != VS1003_DREQ);	 // 等待
	in R24,0x13
	andi R24,128
	cpi R24,128
	brne L41
	.dbline 104
; 				  
; 				  key_num = 0;
	clr R2
	sts _key_num,R2
	.dbline 105
; 				  vol_flag=0;
	clr R10
	.dbline 106
; 				}
L33:
	.dbline 111
; 				
; 				
; 				//----------------- 换曲操作 -----------------//  
; 				
; 				if(music_next!=0||music_last!=0)
	tst R14
	brne L46
	tst R12
	breq L44
L46:
	.dbline 112
; 				{
	.dbline 113
; 				  data_pointer=512;
	ldi R24,512
	ldi R25,2
	std y+23,R25
	std y+22,R24
	.dbline 114
; 				  i=8;
	ldi R20,8
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+10,R20
	std z+11,R21
	std z+12,R22
	std z+13,R23
	.dbline 115
; 				}
	xjmp L45
L44:
	.dbline 118
; 				
; 				//---------------- 音乐数据送入 ------------------//  
; 				else if(VS1003_DREQ_STATE()== VS1003_DREQ&&play_flag!=0) 
	in R24,0x13
	andi R24,128
	cpi R24,128
	breq X2
	xjmp L47
X2:
	ldd R0,y+24
	tst R0
	brne X3
	xjmp L47
X3:
	.dbline 119
; 				{	
	.dbline 120
; 					for(n=0;n<32;n++)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+2,R20
	std z+3,R21
	std z+4,R22
	std z+5,R23
	xjmp L52
L49:
	.dbline 121
	.dbline 122
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	ldd R30,y+22
	ldd R31,y+23
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _VS1003_WriteDat
	.dbline 123
	ldd R24,y+22
	ldd R25,y+23
	adiw R24,1
	std y+23,R25
	std y+22,R24
	.dbline 124
L50:
	.dbline 120
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+2,R2
	std z+3,R3
	std z+4,R4
	std z+5,R5
L52:
	.dbline 120
	ldi R20,32
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh X4
	xjmp L49
X4:
	.dbline 125
; 					{	
; 						VS1003_WriteDat(Fat_Buffer[data_pointer]); // 发送数据
; 						data_pointer++;	
; 					}
; 					size_buf+=32;
	ldi R20,32
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+6,R2
	std z+7,R3
	std z+8,R4
	std z+9,R5
	.dbline 126
; 				}
L47:
L45:
	.dbline 128
; 				
; 				if(size_buf>=MusicInfoList[music_num].FileLength-64)
	ldi R24,41
	ldd R0,y+25
	mul R24,R0
	movw R30,R0
	ldi R24,<_MusicInfoList+37
	ldi R25,>_MusicInfoList+37
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	ldi R20,64
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R30,R28
	ldd R6,z+6
	ldd R7,z+7
	ldd R8,z+8
	ldd R9,z+9
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brlo L53
	.dbline 129
; 				{
	.dbline 130
; 				   data_pointer=512;
	ldi R24,512
	ldi R25,2
	std y+23,R25
	std y+22,R24
	.dbline 131
; 				   i=8;
	ldi R20,8
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+10,R20
	std z+11,R21
	std z+12,R22
	std z+13,R23
	.dbline 132
; 				  size_buf=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+6,R20
	std z+7,R21
	std z+8,R22
	std z+9,R23
	.dbline 133
; 				}
L53:
	.dbline 135
L19:
	.dbline 135
; 				
; 			}while(data_pointer<511); 
	ldd R24,y+22
	ldd R25,y+23
	cpi R24,255
	ldi R30,1
	cpc R25,R30
	brsh X5
	xjmp L18
X5:
	.dbline 137
; 			
; 		  data_pointer=0;
	clr R0
	clr R1
	std y+23,R1
	std y+22,R0
	.dbline 138
; 		  if(i%4 == 0)
	ldi R20,3
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L56
	.dbline 139
; 		  {
	.dbline 140
; 		     if(j <= 0) j = 46;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+18
	ldd R3,z+19
	ldd R4,z+20
	ldd R5,z+21
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L58
	.dbline 140
	ldi R20,46
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+18,R20
	std z+19,R21
	std z+20,R22
	std z+21,R23
	xjmp L59
L58:
	.dbline 141
; 		 	 else  j--;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+18
	ldd R3,z+19
	ldd R4,z+20
	ldd R5,z+21
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R30,R28
	std z+18,R2
	std z+19,R3
	std z+20,R4
	std z+21,R5
L59:
	.dbline 142
; 		  }
L56:
	.dbline 144
L11:
	.dbline 72
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+10,R2
	std z+11,R3
	std z+12,R4
	std z+13,R5
L13:
	.dbline 72
	lds R2,_DiskFATInfo+17
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+10
	ldd R7,z+11
	ldd R8,z+12
	ldd R9,z+13
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh X6
	xjmp L10
X6:
	.dbline 147
; 		  
; 		}
; 		
; 		//---------- 下一簇 ------------//  
; 		num = FatNextCluster(num);	
	movw R30,R28
	ldd R16,z+14
	ldd R17,z+15
	ldd R18,z+16
	ldd R19,z+17
	xcall _FatNextCluster
	movw R30,R28
	std z+14,R16
	std z+15,R17
	std z+16,R18
	std z+17,R19
	.dbline 149
; 		
; 		if(num==CLUST_EOFE||music_next!=0||music_last!=0)
	ldi R20,255
	ldi R21,255
	ldi R22,255
	ldi R23,255
	movw R30,R28
	ldd R2,z+14
	ldd R3,z+15
	ldd R4,z+16
	ldd R5,z+17
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	breq L63
	tst R14
	brne L63
	tst R12
	brne X7
	xjmp L60
X7:
L63:
	.dbline 150
; 		{
	.dbline 151
; 		   if(music_last!=0)
	tst R12
	breq L64
	.dbline 152
; 		   {
	.dbline 153
; 		     if(music_num>0)music_num--;
	clr R2
	ldd R0,y+25
	cp R2,R0
	brsh L66
	.dbline 153
	dec R0
	std y+25,R0
	xjmp L65
L66:
	.dbline 154
; 			 else music_num = NumOfFile - 1;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_NumOfFile+2
	lds R5,_NumOfFile+2+1
	lds R2,_NumOfFile
	lds R3,_NumOfFile+1
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	std y+25,R2
	.dbline 155
; 		   }
	xjmp L65
L64:
	.dbline 158
; 		   
; 		   else
; 		   {
	.dbline 159
; 		     if(music_num < NumOfFile-1)music_num++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_NumOfFile+2
	lds R5,_NumOfFile+2+1
	lds R2,_NumOfFile
	lds R3,_NumOfFile+1
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	ldd R6,y+25
	clr R7
	clr R8
	clr R9
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh L68
	.dbline 159
	mov R0,R6
	inc R0
	std y+25,R0
	xjmp L69
L68:
	.dbline 160
; 			 else music_num=0;
	clr R0
	std y+25,R0
L69:
	.dbline 161
; 		   }
L65:
	.dbline 163
; 		   
; 		   num = MusicInfoList[music_num].FileStartClustor;
	ldi R24,41
	ldd R0,y+25
	mul R24,R0
	movw R30,R0
	ldi R24,<_MusicInfoList+33
	ldi R25,>_MusicInfoList+33
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	std z+14,R2
	std z+15,R3
	std z+16,R4
	std z+17,R5
	.dbline 164
; 		   play_flag=1;
	clr R0
	inc R0
	std y+24,R0
	.dbline 165
; 		   music_next = 0;
	clr R14
	.dbline 166
; 		   music_last = 0;
	clr R12
	.dbline 167
; 		   key_num=0;
	clr R2
	sts _key_num,R2
	.dbline 168
; 	   }
L60:
	.dbline 170
L8:
	.dbline 68
	xjmp L7
X0:
	.dbline -2
L5:
	adiw R28,26
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l j 18 l
	.dbsym l num 14 l
	.dbsym l music_num 25 c
	.dbsym r music_last 12 c
	.dbsym r music_next 14 c
	.dbsym l play_flag 24 c
	.dbsym l i 10 l
	.dbsym l size_buf 6 l
	.dbsym r vol_flag 10 c
	.dbsym l n 2 l
	.dbsym l data_pointer 22 i
	.dbend

⌨️ 快捷键说明

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