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

📄 task.s

📁 LED条屏显示程序,但是对初学者
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module task.c
	.area data(ram, con, rel)
_SONG_state::
	.blkb 1
	.area idata
	.byte 5
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\task.c
	.dbsym e SONG_state _SONG_state c
_disp_state::
	.blkb 1
	.area idata
	.byte 5
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\task.c
	.dbsym e disp_state _disp_state c
_STA013_INIT::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\task.c
	.dbsym e STA013_INIT _STA013_INIT c
	.area bss(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\task.c
L2:
	.blkb 4
L3:
	.blkb 2
L4:
	.blkb 2
L5:
	.blkb 2
L6:
	.blkb 1
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\task.c
	.dbfunc e SONG_task _SONG_task fV
	.dbsym s doing1 L6 c
	.dbsym s file_Clus_sendnumber L5 i
	.dbsym s file_Clus_allnumber L4 i
	.dbsym s bytepersec L3 i
	.dbsym s new_Sec L2 l
;          doing -> R10
;       FAT_Clus -> y+5
	.even
_SONG_task::
	xcall push_gset4
	sbiw R28,13
	.dbline -1
	.dbline 34
; //ICC-AVR application builder : 2005-11-12 17:11:59
; // Target : M16
; // Crystal: 8.0000Mhz
; // copyright:鲁军波(endylu)
; // www.shop34612283.taobao.com
; // www.adembed.com
; #include <iom16v.h>
; #include <macros.h>
; #include "main.h"
; extern uint8 timer1_over;
; extern uint8 key_value;
; extern uint8 set_volume;
; extern uint8 MP3_all_number;
; extern uint8 MP3_current_number;
; extern uint8 play_state;   
; 
; extern MP3_INFO mp3_info;
; extern FAT_INFO fat_info;
; 
; extern uint32 CHINALIB_point;
; extern uint32 UNICODE_point;
; 
; extern uint8 buffer[512];
; //extern const uint8 BassTrebleTable[48];
; 
; uint8 SONG_state=song_over;
; uint8 secperclus;      //对下面显示歌词的时间有关
; 
; uint8 disp_state=5; 
; uint8 STA013_INIT=1;
; 
; //=======================================================================
; void SONG_task(void)
; {
	.dbline 46
;  static uint32 new_Sec;
; 
;  static uint16 bytepersec; 
;  
;  static uint16 file_Clus_allnumber;
;  static uint16 file_Clus_sendnumber;
;  
;  uint32 FAT_Clus;
;  uint8 doing;
;  static uint8 doing1;
;  
;  switch(SONG_state)
	lds R10,_SONG_state
	clr R11
	tst R10
	brne X0
	tst R11
	brne X4
	xjmp L8
X4:
X0:
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L11
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X5
	xjmp L22
X5:
	cpi R24,3
	ldi R30,0
	cpc R25,R30
	brne X6
	xjmp L38
X6:
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brne X7
	xjmp L41
X7:
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brne X8
	xjmp L47
X8:
	xjmp L7
X1:
	.dbline 47
;  {
	.dbline 49
;   case song_stop:
;        {
	.dbline 51
; 	   
; 	   break;
L11:
	.dbline 54
; 	   }
;   case song_start:
;       {
	.dbline 55
; 	    file_Clus_allnumber=((mp3_info.DIR_Filesize[0]>>1)+((int)(mp3_info.DIR_Filesize[1])<<7))/(fat_info.BPB_SecPerClus)+1;   //多少簇                                          
	ldi R18,7
	ldi R19,0
	lds R16,_mp3_info+55+1
	clr R17
	xcall lsl16
	movw R2,R16
	lds R16,_mp3_info+55
	clr R17
	asr R17
	ror R16
	add R16,R2
	adc R17,R3
	lds R18,_fat_info+1
	clr R19
	xcall div16s
	movw R24,R16
	adiw R24,1
	sts L4+1,R25
	sts L4,R24
	.dbline 56
;         new_Sec=(((long)(mp3_info.DIR_FstClusL[1])<<8)+(mp3_info.DIR_FstClusL[0])-2)*fat_info.BPB_SecPerClus+fat_info.FirstDateSecter; //簇的头扇区号 
	ldi R24,8
	ldi R25,0
	lds R2,_mp3_info+53+1
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	lds R6,_mp3_info+53
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	lds R6,_fat_info+1
	clr R7
	clr R8
	clr R9
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R16,R2
	movw R18,R4
	xcall empy32s
	movw R2,R16
	movw R4,R18
	lds R6,_fat_info+5
	lds R7,_fat_info+5+1
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	sts L2+1,R3
	sts L2,R2
	sts L2+2+1,R5
	sts L2+2,R4
	.dbline 57
;         file_Clus_sendnumber=0;
	clr R2
	clr R3
	sts L5+1,R3
	sts L5,R2
	.dbline 59
; 		
; 		SONG_state=song_read_sector;
	ldi R24,3
	sts _SONG_state,R24
	.dbline 60
; 		secperclus=fat_info.BPB_SecPerClus;
	lds R2,_fat_info+1
	sts _secperclus,R2
	.dbline 62
; 		
; 	    break;
	xjmp L8
L22:
	.dbline 66
; 	   }
;   
;   case song_find_newsec:
;        {         
	.dbline 67
;                  FAT_Clus=((long)(fat_info.Relative+fat_info.BPB_RsvdSecCnt+mp3_info.DIR_FstClusL[1])<<9)+((int)mp3_info.DIR_FstClusL[0]<<1);
	lds R2,_fat_info+2
	clr R3
	lds R4,_fat_info
	clr R5
	add R4,R2
	adc R5,R3
	lds R2,_mp3_info+53+1
	clr R3
	add R4,R2
	adc R5,R3
	movw R2,R4
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R24,9
	ldi R25,0
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	lds R6,_mp3_info+53
	clr R7
	lsl R6
	rol R7
	clr R8
	sbrc R7,7
	com R8
	clr R9
	sbrc R8,7
	com R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	movw R30,R28
	std z+5,R2
	std z+6,R3
	std z+7,R4
	std z+8,R5
	.dbline 69
; 
;                  SD_read_sector2(FAT_Clus,mp3_info.DIR_FstClusL,2);
	ldi R24,2
	ldi R25,0
	std y+3,R25
	std y+2,R24
	ldi R24,<_mp3_info+53
	ldi R25,>_mp3_info+53
	std y+1,R25
	std y+0,R24
	movw R30,R28
	ldd R16,z+5
	ldd R17,z+6
	ldd R18,z+7
	ldd R19,z+8
	xcall _SD_read_sector2
	.dbline 71
; 
; 				 new_Sec=((long)(mp3_info.DIR_FstClusL[1])<<8)+mp3_info.DIR_FstClusL[0];
	ldi R24,8
	ldi R25,0
	lds R2,_mp3_info+53+1
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	lds R6,_mp3_info+53
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	sts L2+1,R3
	sts L2,R2
	sts L2+2+1,R5
	sts L2+2,R4
	.dbline 73
; 				 
; 		    if(new_Sec>=0xfff8)
	ldi R20,248
	ldi R21,255
	ldi R22,0
	ldi R23,0
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlo L31
	.dbline 74
; 				 SONG_state=song_over;    
	ldi R24,5
	sts _SONG_state,R24
	xjmp L8
L31:
	.dbline 76
; 			else
; 				{new_Sec=(new_Sec-2)*(fat_info.BPB_SecPerClus)+fat_info.FirstDateSecter; //簇的头扇区号 
	.dbline 76
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,L2+2
	lds R5,L2+2+1
	lds R2,L2
	lds R3,L2+1
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	lds R6,_fat_info+1
	clr R7
	clr R8
	clr R9
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R16,R2
	movw R18,R4
	xcall empy32u
	movw R2,R16
	movw R4,R18
	lds R6,_fat_info+5
	lds R7,_fat_info+5+1
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	sts L2+1,R3
	sts L2,R2
	sts L2+2+1,R5
	sts L2+2,R4
	.dbline 78
; 				 
; 				 doing=((long)file_Clus_sendnumber*80)/file_Clus_allnumber;
	lds R2,L5
	lds R3,L5+1
	clr R4
	clr R5
	ldi R20,80
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32s
	lds R2,L4
	lds R3,L4+1
	clr R4
	clr R5
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall div32s
	mov R10,R16
	.dbline 79
;                  if(doing1!=doing)
	lds R2,L6
	cp R2,R16
	breq L35
	.dbline 80
;                  {
	.dbline 81
; 				   LCD_set_XY(doing+1,4);
	ldi R18,4
	subi R16,255    ; addi 1
	xcall _LCD_set_XY
	.dbline 82
;                    LCD_write_byte(0x5d,1);
	ldi R18,1
	ldi R16,93
	xcall _LCD_write_byte
	.dbline 83
; 				   doing1=doing;
	sts L6,R10
	.dbline 84
; 				 }
L35:
	.dbline 85
; 				 file_Clus_sendnumber++;	
	lds R24,L5
	lds R25,L5+1
	adiw R24,1
	sts L5+1,R25
	sts L5,R24
	.dbline 86
; 				 SONG_state=song_read_sector;
	ldi R24,3
	sts _SONG_state,R24
	.dbline 87
; 				 secperclus=fat_info.BPB_SecPerClus;           //每簇多少扇区
	lds R2,_fat_info+1
	sts _secperclus,R2
	.dbline 88
; 	            }
	.dbline 89
; 				 break;   
	xjmp L8
L38:
	.dbline 92
; 	   }
;   case song_read_sector:
;        {
	.dbline 93
; 	    if(secperclus--)
	lds R2,_secperclus
	clr R3
	mov R24,R2
	subi R24,1
	sts _secperclus,R24
	tst R2
	brne X9
	xjmp L39
X9:
	.dbline 94
; 	      {
	.dbline 95
; 		   SD_start_read(new_Sec++);
	lds R4,L2+2
	lds R5,L2+2+1
	lds R2,L2
	lds R3,L2+1
	movw R30,R28
	std z+9,R2
	std z+10,R3
	std z+11,R4
	std z+12,R5
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+9
	ldd R3,z+10
	ldd R4,z+11
	ldd R5,z+12
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts L2+1,R3
	sts L2,R2
	sts L2+2+1,R5
	sts L2+2,R4
	movw R30,R28
	ldd R16,z+9
	ldd R17,z+10
	ldd R18,z+11
	ldd R19,z+12
	xcall _SD_start_read
	.dbline 96
;            SD_get_date(buffer,512);		   
	ldi R18,512
	ldi R19,2
	ldi R16,<_buffer
	ldi R17,>_buffer
	xcall _SD_get_date
	.dbline 97
; 		   SONG_state=song_send_frame;
	ldi R24,4
	sts _SONG_state,R24
	.dbline 98
; 		   bytepersec=0;
	clr R2
	clr R3
	sts L3+1,R3
	sts L3,R2
	.dbline 99
; 		  }
	xjmp L8
L39:
	.dbline 101
; 		else
; 		  SONG_state=song_find_newsec;
	ldi R24,2
	sts _SONG_state,R24
	.dbline 102
; 	    break;
	xjmp L8
L41:
	.dbline 105
; 	   }
;   case song_send_frame:
;        {
	.dbline 106
; 	    STA013_Enable();
	sbi 0x1b,3
	.dbline 106
	xjmp L43
L42:
	.dbline 108
; 	    while(sta_Demand())      //每次连续请求6ms,隔20ms才又来请求       
; 		  {
	.dbline 109
; 		   Write_Byte_SD(*(buffer+bytepersec++));
	lds R2,L3
	lds R3,L3+1
	movw R24,R2
	adiw R24,1
	sts L3+1,R25
	sts L3,R24
	ldi R24,<_buffer
	ldi R25,>_buffer
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _Write_Byte_SD
	.dbline 110
; 		   if(bytepersec==512)
	lds R24,L3
	lds R25,L3+1
	cpi R24,0
	ldi R30,2
	cpc R25,R30
	brne L45
	.dbline 111
; 		     {SONG_state=song_read_sector;
	.dbline 111
	ldi R24,3
	sts _SONG_state,R24
	.dbline 112
; 			  break;
	xjmp L44
L45:
	.dbline 114
L43:
	.dbline 107
	xcall _sta_Demand
	tst R16
	brne L42
L44:
	.dbline 115
; 			 }
;           }
; 		STA013_Disable();
	cbi 0x1b,3
	.dbline 115
	.dbline 117
; 		
; 		break;
	xjmp L8
L47:
	.dbline 120
; 	   }
;   case song_over:
;        {
	.dbline 121
; 	    doing1=0;
	clr R2
	sts L6,R2
	.dbline 122
; 	    MP3_current_number++;
	lds R24,_MP3_current_number
	subi R24,255    ; addi 1
	sts _MP3_current_number,R24
	.dbline 123
; 		if(MP3_current_number>MP3_all_number)
	lds R2,_MP3_all_number
	cp R2,R24
	brsh L48
	.dbline 124
; 		   MP3_current_number=1;
	ldi R24,1
	sts _MP3_current_number,R24
L48:
	.dbline 125
; 		GEPAI();
	xcall _GEPAI
	.dbline 126
; 		JINGDU(); 
	xcall _JINGDU
	.dbline 127
; 	    ASCII(buffer,MP3_current_number);
	lds R18,_MP3_current_number
	ldi R16,<_buffer
	ldi R17,>_buffer
	xcall _ASCII
	.dbline 128
;         LCD_write_String(8,5,2,buffer,0); 
	clr R2
	std y+4,R2
	ldi R24,<_buffer
	ldi R25,>_buffer
	std y+3,R25
	std y+2,R24
	ldi R24,2
	std y+0,R24
	ldi R18,5
	ldi R16,8
	xcall _LCD_write_String
	.dbline 130
; 	
; 		MP3_Directory(MP3_current_number);
	lds R16,_MP3_current_number
	xcall _MP3_Directory
	.dbline 131
; 		if(mp3_info.Name_number==0)
	lds R2,_mp3_info+52
	tst R2
	breq X10
	xjmp L50
X10:
	.dbline 132
; 		if((UNICODE_point>0)&(CHINALIB_point>0))
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_UNICODE_point+2
	lds R5,_UNICODE_point+2+1
	lds R2,_UNICODE_point
	lds R3,_UNICODE_point+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	breq L55
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L56
L55:
	clr R12
	clr R13
L56:
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_CHINALIB_point+2
	lds R5,_CHINALIB_point+2+1
	lds R2,_CHINALIB_point
	lds R3,_CHINALIB_point+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	breq L57
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L58
L57:
	clr R10
	clr R11
L58:
	movw R2,R12
	and R2,R10
	and R3,R11
	tst R2
	brne X2
	tst R3
	breq L53
X2:
	.dbline 133
;            LCD_write_String(6,2,8,buffer,0);
	clr R2
	std y+4,R2
	ldi R24,<_buffer
	ldi R25,>_buffer
	std y+3,R25
	std y+2,R24
	ldi R24,8
	std y+0,R24
	ldi R18,2
	ldi R16,6
	xcall _LCD_write_String
L53:
L50:
	.dbline 135
; 	   
; 		if((MP3_current_number==1)|(play_state==0))
	lds R24,_MP3_current_number
	cpi R24,1
	brne L61
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L62
L61:
	clr R12
	clr R13
L62:
	lds R2,_play_state
	tst R2
	brne L63
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L64
L63:
	clr R10
	clr R11
L64:
	movw R2,R12
	or R2,R10
	or R3,R11
	tst R2
	brne X3
	tst R3
	breq L59
X3:
	.dbline 136
; 		  {SONG_state=song_stop;
	.dbline 136
	clr R2
	sts _SONG_state,R2
	.dbline 137
; 		   if(play_state!=2)
	lds R24,_play_state
	cpi R24,2
	breq L60
	.dbline 138
; 		     {play_state=0;
	.dbline 138
	sts _play_state,R2
	.dbline 139
; 		      LCD_write_tubiao(0,5,0);
	std y+0,R2
	ldi R18,5
	clr R16
	xcall _LCD_write_tubiao
	.dbline 140
; 			 }
	.dbline 141
; 		  }
	xjmp L60
L59:
	.dbline 143
; 		else
; 		 {SONG_state=song_start;
	.dbline 143
	ldi R24,1
	sts _SONG_state,R24
	.dbline 144
; 	     } 
L60:
	.dbline 145
; 		disp_state=5;
	ldi R24,5
	sts _disp_state,R24
	.dbline 146
; 		break;
L7:
L8:
	.dbline -2
L1:
	adiw R28,13
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r doing 10 c
	.dbsym l FAT_Clus 5 l
	.dbend
	.dbfunc e KBOD_task _KBOD_task fV
	.even
_KBOD_task::
	xcall push_gset1
	sbiw R28,1
	.dbline -1
	.dbline 153
; 	   }
;  }
; }
; 
; //=======================================================================
; void KBOD_task(void)
; {
	.dbline 154
;  if(key_value!=0)
	lds R2,_key_value
	tst R2
	brne X13
	xjmp L68
X13:
	.dbline 155
;  {
	.dbline 156
;   switch(key_value)
	mov R20,R2
	clr R21
	cpi R20,216
	ldi R30,0
	cpc R21,R30
	brne X14
	xjmp L85
X14:
	ldi R24,216
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L103
L102:
	cpi R20,120
	ldi R30,0
	cpc R21,R30
	brne X15
	xjmp L79
X15:
	cpi R20,120
	ldi R30,0
	cpc R21,R30
	brge X16
	xjmp L70
X16:
L104:
	cpi R20,184
	ldi R30,0
	cpc R21,R30
	breq L73
	xjmp L70
L103:
	cpi R20,232
	ldi R30,0
	cpc R21,R30
	brne X17
	xjmp L88
X17:
	cpi R20,232
	ldi R30,0
	cpc R21,R30
	brge X18
	xjmp L70
X18:
L105:
	cpi R20,240
	ldi R30,0
	cpc R21,R30
	brne X19
	xjmp L93
X19:
	xjmp L70
X11:
	.dbline 157
;   {
L73:
	.dbline 159
;    case volume_add:
;         {
	.dbline 160
; 		 if(set_volume<8)
	lds R24,_set_volume
	cpi R24,8
	brsh L74
	.dbline 161
; 			{set_volume++;
	.dbline 161
	subi R24,255    ; addi 1
	sts _set_volume,R24
	.dbline 162
; 			}
L74:
	.dbline 163
;          LCD_set_XY(59,5);
	ldi R18,5
	ldi R16,59
	xcall _LCD_set_XY
	.dbline 164
;          key_value=set_volume*3;
	lds R2,_set_volume
	ldi R24,3
	mul R24,R2
	sts _key_value,R0
	xjmp L77
L76:
	.dbline 166

⌨️ 快捷键说明

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