📄 mp3.s
字号:
.module mp3.c
.area text(rom, con, rel)
.dbfile E:\software\MP3程序\Main\mp3.c
.dbfunc e Init_system _Init_system fV
; temp -> R20
.even
_Init_system::
xcall push_gset1
sbiw R28,8
.dbline -1
.dbline 17
; #include <iom64v.h>
; #include <macros.h>
; #include <string.h>
; #include <stdio.h>
; #include "../Lcd/lcd.h"
; #include "../Keyboard/key.h"
; #include "../Ds1302/ds1302.h"
;
;
; #define uchar unsigned char
; #define uint unsigned int
;
; extern uchar keybuf;
; struct time_now timebuf;
; extern unsigned char const diskinfor[];
; void Init_system(void)
; {
.dbline 20
; uchar temp;
; //开启外部总线
; MCUCR=0x80;
ldi R24,128
out 0x35,R24
.dbline 21
; XMCRA=0x00;
clr R2
sts 109,R2
.dbline 23
; //初始化部件
; KEYBUF_NULL; //键盘初值0
sts _keybuf,R2
.dbline 23
.dbline 24
; Usart_init(); //串口初始化
xcall _Usart_init
.dbline 25
; DelayIni(); //延时初始化
xcall _DelayIni
.dbline 26
; ds1302_init(); //时钟初始化
xcall _ds1302_init
.dbline 27
; outpower_init(); //继电器输出初始化
xcall _outpower_init
.dbline 29
; // Set_time();
; mp3portIni(); //播放器初始化
xcall _mp3portIni
.dbline 31
; // mp3SineTest(); //测试声音播放
; mp3Reset(); //软件复位
xcall _mp3Reset
.dbline 32
; lcd_init(); //LCD初始化
xcall _lcd_init
.dbline 33
; show_clear();
xcall _show_clear
.dbline 34
; show_init("init Vs1003...ok",0,0);
clr R2
clr R3
std y+1,R3
std y+0,R2
clr R18
clr R19
ldi R16,<L2
ldi R17,>L2
xcall _show_init
.dbline 35
; delay_1s();
xcall _delay_1s
.dbline 36
; key_init(); //键盘初始化
xcall _key_init
.dbline 37
; show_init("init Keyboard...ok",2,0);
clr R2
clr R3
std y+1,R3
std y+0,R2
ldi R18,2
ldi R19,0
ldi R16,<L3
ldi R17,>L3
xcall _show_init
.dbline 38
; delay_1s();
xcall _delay_1s
.dbline 39
; temp = Init_usb();
xcall _Init_usb
mov R20,R16
.dbline 40
; if(temp==1){ //USB控制器初始化
cpi R16,1
brne L4
.dbline 40
.dbline 41
; show_init("init Disk...ok",4,0);
clr R2
clr R3
std y+1,R3
std y+0,R2
ldi R18,4
ldi R19,0
ldi R16,<L6
ldi R17,>L6
xcall _show_init
.dbline 42
; }
xjmp L5
L4:
.dbline 43
; else {Print_str("Disk error\r\n");
.dbline 43
ldi R16,<L7
ldi R17,>L7
xcall _Print_str
.dbline 44
; show_lcd(0, 0, 192, 6, &diskinfor[0],0);
clr R2
clr R3
std y+7,R3
std y+6,R2
ldi R24,<_diskinfor
ldi R25,>_diskinfor
std y+5,R25
std y+4,R24
ldi R24,6
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,192
std y+1,R25
std y+0,R24
clr R18
clr R19
clr R16
clr R17
xcall _show_lcd
L8:
.dbline 45
L9:
.dbline 45
; while(1);
xjmp L8
X0:
.dbline 46
; }
L5:
.dbline 47
; delay_1s();
xcall _delay_1s
.dbline 48
; test_file_system(); //检查磁盘工作目录
xcall _test_file_system
.dbline 49
; show_init("Start system ...",6,0);
clr R2
clr R3
std y+1,R3
std y+0,R2
ldi R18,6
ldi R19,0
ldi R16,<L11
ldi R17,>L11
xcall _show_init
.dbline 50
; delay_1s();
xcall _delay_1s
.dbline 51
; delay_1s();
xcall _delay_1s
.dbline 52
; show_clear();
xcall _show_clear
.dbline 53
; show_welcom();
xcall _show_welcom
.dbline 54
; adjust_cheng(0);
clr R16
clr R17
xcall _adjust_cheng
.dbline -2
L1:
adiw R28,8
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbend
.dbfunc e set_system_time _set_system_time fV
; temp -> R22
; ii -> R20
.even
_set_system_time::
xcall push_gset4
.dbline -1
.dbline 60
; }
; /*
; *设置时间
; */
; void set_system_time(void)
; {
.dbline 63
; uchar ii;
; uchar temp;
; ii = 0; //最大是2
clr R20
xjmp L14
L13:
.dbline 64
; while(1){
.dbline 65
; show_set_tiem(ii);
mov R16,R20
clr R17
xcall _show_set_tiem
.dbline 66
; KEYBUF_NULL;
clr R2
sts _keybuf,R2
.dbline 66
L16:
.dbline 67
L17:
.dbline 67
; while(keybuf == NULL);
lds R2,_keybuf
tst R2
breq L16
.dbline 69
;
; if(keybuf == K_UP){
mov R24,R2
cpi R24,3
breq X5
xjmp L19
X5:
.dbline 69
.dbline 70
mov R12,R20
clr R13
tst R12
brne X1
tst R13
breq L24
X1:
movw R24,R12
cpi R24,1
ldi R30,0
cpc R25,R30
breq L32
cpi R24,2
ldi R30,0
cpc R25,R30
brne X6
xjmp L40
X6:
xjmp L21
X2:
.dbline 70
; switch(ii){
L24:
.dbline 71
; case 0: temp = timebuf.hour;
lds R22,_timebuf+2
.dbline 72
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 73
; temp &= 0x0f;
andi R22,15
.dbline 74
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 75
; temp += (timebuf.hour&0x0f);
lds R24,_timebuf+2
andi R24,15
add R22,R24
.dbline 76
; (++temp == 24) ? (temp = 0) : 0;
mov R24,R22
subi R24,255 ; addi 1
mov R22,R24
cpi R22,24
brne L28
clr R22
xjmp L28
L28:
.dbline 77
; timebuf.hour = temp/10;
ldi R17,10
mov R16,R22
xcall div8u
sts _timebuf+2,R16
.dbline 78
; timebuf.hour <<= 4;
mov R24,R16
andi R24,#0x0F
swap R24
sts _timebuf+2,R24
.dbline 79
; timebuf.hour += temp%10;
ldi R17,10
mov R16,R22
xcall mod8u
lds R2,_timebuf+2
add R2,R16
sts _timebuf+2,R2
.dbline 80
; break;
xjmp L22
L32:
.dbline 81
; case 1: temp = timebuf.min;
lds R22,_timebuf+1
.dbline 82
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 83
; temp &= 0x0f;
andi R22,15
.dbline 84
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 85
; temp += (timebuf.min&0x0f);
lds R24,_timebuf+1
andi R24,15
add R22,R24
.dbline 86
; (++temp == 60) ? (temp = 0) : 0;
mov R24,R22
subi R24,255 ; addi 1
mov R22,R24
cpi R22,60
brne L36
clr R22
xjmp L36
L36:
.dbline 87
; timebuf.min = temp/10;
ldi R17,10
mov R16,R22
xcall div8u
sts _timebuf+1,R16
.dbline 88
; timebuf.min <<= 4;
mov R24,R16
andi R24,#0x0F
swap R24
sts _timebuf+1,R24
.dbline 89
; timebuf.min += temp%10;
ldi R17,10
mov R16,R22
xcall mod8u
lds R2,_timebuf+1
add R2,R16
sts _timebuf+1,R2
.dbline 90
; break;
xjmp L22
L40:
.dbline 91
; case 2: temp = timebuf.sec;
lds R22,_timebuf
.dbline 92
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 93
; temp &= 0x0f;
andi R22,15
.dbline 94
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 95
; temp += (timebuf.sec&0x0f);
lds R24,_timebuf
andi R24,15
add R22,R24
.dbline 96
; (++temp == 60) ? (temp = 0) : 0;
mov R24,R22
subi R24,255 ; addi 1
mov R22,R24
cpi R22,60
brne L42
clr R22
xjmp L42
L42:
.dbline 97
; timebuf.sec = temp/10;
ldi R17,10
mov R16,R22
xcall div8u
sts _timebuf,R16
.dbline 98
; timebuf.sec <<= 4;
mov R24,R16
andi R24,#0x0F
swap R24
sts _timebuf,R24
.dbline 99
; timebuf.sec += temp%10;
ldi R17,10
mov R16,R22
xcall mod8u
lds R2,_timebuf
add R2,R16
sts _timebuf,R2
.dbline 100
; break;
L21:
L22:
.dbline 102
; }//switch
; }
L19:
.dbline 103
; if(keybuf == K_DOWN){
lds R24,_keybuf
cpi R24,1
breq X7
xjmp L43
X7:
.dbline 103
.dbline 104
mov R10,R20
clr R11
tst R10
brne X3
tst R11
breq L48
X3:
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
breq L56
cpi R24,2
ldi R30,0
cpc R25,R30
brne X8
xjmp L64
X8:
xjmp L45
X4:
.dbline 104
; switch(ii){
L48:
.dbline 105
; case 0: temp = timebuf.hour;
lds R22,_timebuf+2
.dbline 106
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 107
; temp &= 0x0f;
andi R22,15
.dbline 108
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 109
; temp += (timebuf.hour&0x0f);
lds R24,_timebuf+2
andi R24,15
add R22,R24
.dbline 110
; (--temp == 255) ? (temp = 23) : 0;
mov R24,R22
subi R24,1
mov R22,R24
cpi R22,255
brne L52
ldi R22,23
xjmp L52
L52:
.dbline 111
; timebuf.hour = temp/10;
ldi R17,10
mov R16,R22
xcall div8u
sts _timebuf+2,R16
.dbline 112
; timebuf.hour <<= 4;
mov R24,R16
andi R24,#0x0F
swap R24
sts _timebuf+2,R24
.dbline 113
; timebuf.hour += temp%10;
ldi R17,10
mov R16,R22
xcall mod8u
lds R2,_timebuf+2
add R2,R16
sts _timebuf+2,R2
.dbline 114
; break;
xjmp L46
L56:
.dbline 115
; case 1: temp = timebuf.min;
lds R22,_timebuf+1
.dbline 116
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 117
; temp &= 0x0f;
andi R22,15
.dbline 118
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 119
; temp += (timebuf.min&0x0f);
lds R24,_timebuf+1
andi R24,15
add R22,R24
.dbline 120
; (--temp == 255) ? (temp = 59) : 0;
mov R24,R22
subi R24,1
mov R22,R24
cpi R22,255
brne L60
ldi R22,59
xjmp L60
L60:
.dbline 121
; timebuf.min = temp/10;
ldi R17,10
mov R16,R22
xcall div8u
sts _timebuf+1,R16
.dbline 122
; timebuf.min <<= 4;
mov R24,R16
andi R24,#0x0F
swap R24
sts _timebuf+1,R24
.dbline 123
; timebuf.min += temp%10;
ldi R17,10
mov R16,R22
xcall mod8u
lds R2,_timebuf+1
add R2,R16
sts _timebuf+1,R2
.dbline 124
; break;
xjmp L46
L64:
.dbline 125
; case 2: temp = timebuf.sec;
lds R22,_timebuf
.dbline 126
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 127
; temp &= 0x0f;
andi R22,15
.dbline 128
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 129
; temp += (timebuf.sec&0x0f);
lds R24,_timebuf
andi R24,15
add R22,R24
.dbline 130
; (--temp == 255) ? (temp = 59) : 0;
mov R24,R22
subi R24,1
mov R22,R24
cpi R22,255
brne L66
ldi R22,59
xjmp L66
L66:
.dbline 131
; timebuf.sec = temp/10;
ldi R17,10
mov R16,R22
xcall div8u
sts _timebuf,R16
.dbline 132
; timebuf.sec <<= 4;
mov R24,R16
andi R24,#0x0F
swap R24
sts _timebuf,R24
.dbline 133
; timebuf.sec += temp%10;
ldi R17,10
mov R16,R22
xcall mod8u
lds R2,_timebuf
add R2,R16
sts _timebuf,R2
.dbline 134
; break;
L45:
L46:
.dbline 136
; }//switch
; }
L43:
.dbline 137
; if(keybuf == K_RIFT) (++ii == 3) ? (ii = 0) : 0;
lds R24,_keybuf
cpi R24,6
brne L67
.dbline 137
mov R24,R20
subi R24,255 ; addi 1
mov R20,R24
cpi R20,3
brne L70
clr R20
xjmp L70
L70:
L67:
.dbline 138
; if(keybuf == K_LIFT) (--ii == 255) ? (ii = 2) : 0;
lds R24,_keybuf
cpi R24,2
brne L71
.dbline 138
mov R24,R20
subi R24,1
mov R20,R24
cpi R20,255
brne L74
ldi R20,2
xjmp L74
L74:
L71:
.dbline 139
; if(keybuf == K_ESC) {Read_InfoDs1302buf();break;}
lds R24,_keybuf
cpi R24,5
brne L75
.dbline 139
.dbline 139
xcall _Read_InfoDs1302buf
.dbline 139
xjmp L15
L75:
.dbline 140
; if(keybuf == K_ENTER) {Write_InfoDs1302buf();break;}
lds R24,_keybuf
cpi R24,4
brne L77
.dbline 140
.dbline 140
xcall _Write_InfoDs1302buf
.dbline 140
xjmp L15
L77:
.dbline 141
L14:
.dbline 64
xjmp L13
L15:
.dbline -2
L12:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r temp 22 c
.dbsym r ii 20 c
.dbend
.dbfunc e set_system_date _set_system_date fV
; temp -> R22
; ii -> R20
.even
_set_system_date::
xcall push_gset4
.dbline -1
.dbline 147
; }
; }
; /*
; *设置日期
; */
; void set_system_date(void)
; {
.dbline 150
; uchar ii;
; uchar temp;
; ii = 0; //最大是2
clr R20
xjmp L81
L80:
.dbline 151
; while(1){
.dbline 152
; show_set_date(ii);
mov R16,R20
clr R17
xcall _show_set_date
.dbline 153
; KEYBUF_NULL;
clr R2
sts _keybuf,R2
.dbline 153
L83:
.dbline 154
L84:
.dbline 154
; while(keybuf == NULL);
lds R2,_keybuf
tst R2
breq L83
.dbline 156
;
; if(keybuf == K_UP){
mov R24,R2
cpi R24,3
breq X13
xjmp L86
X13:
.dbline 156
.dbline 157
mov R12,R20
clr R13
tst R12
brne X9
tst R13
breq L91
X9:
movw R24,R12
cpi R24,1
ldi R30,0
cpc R25,R30
breq L99
cpi R24,2
ldi R30,0
cpc R25,R30
brne X14
xjmp L107
X14:
xjmp L88
X10:
.dbline 157
; switch(ii){
L91:
.dbline 158
; case 0: temp = timebuf.year;
lds R22,_timebuf+6
.dbline 159
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 160
; temp &= 0x0f;
andi R22,15
.dbline 161
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 162
; temp += (timebuf.year&0x0f);
lds R24,_timebuf+6
andi R24,15
add R22,R24
.dbline 163
; (++temp == 100) ? (temp = 0) : 0;
mov R24,R22
subi R24,255 ; addi 1
mov R22,R24
cpi R22,100
brne L95
clr R22
xjmp L95
L95:
.dbline 164
; timebuf.year = temp/10;
ldi R17,10
mov R16,R22
xcall div8u
sts _timebuf+6,R16
.dbline 165
; timebuf.year <<= 4;
mov R24,R16
andi R24,#0x0F
swap R24
sts _timebuf+6,R24
.dbline 166
; timebuf.year += temp%10;
ldi R17,10
mov R16,R22
xcall mod8u
lds R2,_timebuf+6
add R2,R16
sts _timebuf+6,R2
.dbline 167
; break;
xjmp L89
L99:
.dbline 168
; case 1: temp = timebuf.month;
lds R22,_timebuf+4
.dbline 169
; temp >>= 4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 170
; temp &= 0x0f;
andi R22,15
.dbline 171
; temp *= 10;
ldi R24,10
mul R24,R22
mov R22,R0
.dbline 172
; temp += (timebuf.month&0x0f);
lds R24,_timebuf+4
andi R24,15
add R22,R24
.dbline 173
; (++temp == 13) ? (temp = 1) : 0;
mov R24,R22
subi R24,255 ; addi 1
mov R22,R24
cpi R22,13
brne L103
ldi R22,1
xjmp L103
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -