📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_MP3_current_number::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\TDDownload\MP3BOA~1.8\main.c
.dbsym e MP3_current_number _MP3_current_number c
_set_volume::
.blkb 1
.area idata
.byte 4
.area data(ram, con, rel)
.dbfile D:\TDDownload\MP3BOA~1.8\main.c
.dbsym e set_volume _set_volume c
.area text(rom, con, rel)
.dbfile D:\TDDownload\MP3BOA~1.8\main.c
.dbfunc e Delay_us _Delay_us fV
; time -> R16,R17
.even
_Delay_us::
.dbline -1
.dbline 35
; //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 <stdio.h>
; #include "main.h"
;
; /*
; void USART_TXD(uint8 data) //发送采用查询方式
; {
; while( !(UCSRA & BIT(UDRE)) );
; UDR=data;
; while( !(UCSRA & BIT(TXC )) );
; UCSRA|=BIT(TXC);
; }
; */
;
; uint8 timer1_over;
; uint8 MP3_all_number,MP3_current_number=0;
; uint8 play_state;
; uint8 key_value;
; uint8 set_volume=4; //用的8级音量(64.69...99)
; uint8 buffer[512]; //缓存扇区的512个字节
;
; FAT_INFO fat_info; //FAT的关键数据
; MP3_INFO mp3_info; //文件的关键数据
;
;
; //=======================================================================
; void Delay_us(uint16 time) //set time 120 to 100us,set 1 to 3.5us;
; {while (time--)
xjmp L3
L2:
.dbline 36
wdr
L3:
.dbline 35
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L2
tst R3
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e Delay_ms _Delay_ms fV
; time -> R20,R21
.even
_Delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 40
; _WDR();
;
; }
; void Delay_ms(uint16 time)
; {while (time--)
xjmp L7
L6:
.dbline 41
ldi R16,1200
ldi R17,4
xcall _Delay_us
L7:
.dbline 40
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L6
tst R3
brne L6
X1:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e putstring _putstring fV
; string -> R20,R21
.even
_putstring::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 45
; Delay_us(1200);
; }
;
; void putstring(uint8 *string)
; {
xjmp L11
L10:
.dbline 47
.dbline 48
movw R30,R20
ldd R16,z+0
xcall _putchar
.dbline 49
subi R20,255 ; offset = 1
sbci R21,255
.dbline 50
L11:
.dbline 46
; while(*string)
movw R30,R20
ldd R2,z+0
tst R2
brne L10
.dbline -2
L9:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r string 20 pc
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 54
; {
; putchar(*string);
; string++;
; }
; }
; //***************************************************************
; void timer1_init(void)
; {//timer1 INIT 0.1S
.dbline 55
; TCCR1B=0X0D;
ldi R24,13
out 0x2e,R24
.dbline 56
; TCNT0=0X00;
clr R2
out 0x32,R2
.dbline 57
; OCR1AH=0X02; //定时0.1s
ldi R24,2
out 0x2b,R24
.dbline 58
; OCR1AL=0X00;
out 0x2a,R2
.dbline 59
; TIMSK|=0X10;
in R24,0x39
ori R24,16
out 0x39,R24
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ASCII _ASCII fV
; n -> R22
; b -> R20,R21
.even
_ASCII::
xcall push_gset2
mov R22,R18
movw R20,R16
.dbline -1
.dbline 63
; }
; //=======================================================================
; void ASCII(uint8 *b,uint8 n)
; {*b=n/10+48;
.dbline 63
ldi R17,10
mov R16,R22
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
movw R30,R20
std z+0,R24
.dbline 64
; *(b+1)=n%10+48;
ldi R17,10
mov R16,R22
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
movw R30,R20
std z+1,R24
.dbline -2
L14:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r n 22 c
.dbsym r b 20 pc
.dbend
.area vector(rom, abs)
.org 76
jmp _timer0comp
.area text(rom, con, rel)
.dbfile D:\TDDownload\MP3BOA~1.8\main.c
.dbfunc e timer0comp _timer0comp fV
.even
_timer0comp::
xcall push_lset
.dbline -1
.dbline 70
; }
;
; //=======================================================================
; #pragma interrupt_handler timer0comp:20
; void timer0comp (void)
; {
.dbline 71
; read_keyboard();
xcall _read_keyboard
.dbline -2
L15:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 24
jmp _timer1compA
.area text(rom, con, rel)
.dbfile D:\TDDownload\MP3BOA~1.8\main.c
.dbfunc e timer1compA _timer1compA fV
.even
_timer1compA::
st -y,R24
in R24,0x3f
st -y,R24
.dbline -1
.dbline 76
; }
;
; #pragma interrupt_handler timer1compA:7
; void timer1compA (void)
; {
.dbline 77
; timer1_over=1;
ldi R24,1
sts _timer1_over,R24
.dbline -2
L16:
ld R24,y+
out 0x3f,R24
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 82
; }
;
; //=======================================================================
; void main(void)
; {
.dbline 84
; //WDTCR|=(1<<WDP0)|(1<<WDP1)|(1<<WDP2)|(1<<WDE);
; uart_init();
xcall _uart_init
.dbline 85
; putstring("RUN!");
ldi R16,<L18
ldi R17,>L18
xcall _putstring
.dbline 86
; main_init();
xcall _main_init
.dbline 88
;
; for(;;)
L19:
.dbline 89
.dbline 90
xcall _SONG_task
.dbline 91
wdr
.dbline 92
xcall _KBOD_task
.dbline 93
wdr
.dbline 94
xcall _DISP_task
.dbline 95
wdr
.dbline 96
.dbline 88
.dbline 88
xjmp L19
X2:
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 102
; {
; SONG_task();
; _WDR();
; KBOD_task();
; _WDR();
; DISP_task();
; _WDR();
; }
; }
;
;
; //=======================================================================
; void uart_init(void) //用232串口发数据到PC,收集数据
; {
.dbline 103
; UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
ldi R24,24
out 0xa,R24
.dbline 104
; UBRRH=1;
ldi R24,1
out 0x20,R24
.dbline 105
; UBRRL=0X9E;
ldi R24,158
out 0x9,R24
.dbline 106
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
ldi R24,134
out 0x20,R24
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main_init _main_init fV
.even
_main_init::
sbiw R28,5
.dbline -1
.dbline 112
; }
;
;
; //=======================================================================
; void main_init(void)
; {
.dbline 113
; I2C_Ini();
xcall _I2C_Ini
.dbline 114
; STA013_Ini();
xcall _STA013_Ini
.dbline 115
; buffer[0]=SDInit(); //里面有SPI的使能初始化,要放在LCD初始化的前面
xcall _SDInit
sts _buffer,R16
.dbline 116
; LCD_init(); //初始化LCD模块
xcall _LCD_init
.dbline 120
; //显示LOGO
;
;
; if(buffer[0])
lds R2,_buffer
tst R2
breq L25
.dbline 121
; {
.dbline 122
; LCD_write_String(0,1,12,"SD INIT ERR!",0);
clr R2
std y+4,R2
ldi R24,<L27
ldi R25,>L27
std y+3,R25
std y+2,R24
ldi R24,12
std y+0,R24
ldi R18,1
clr R16
xcall _LCD_write_String
.dbline 123
; putstring("SD INIT ERR!");
ldi R16,<L27
ldi R17,>L27
xcall _putstring
L28:
.dbline 124
L29:
.dbline 124
; while(1);
xjmp L28
X3:
.dbline 125
; }
L25:
.dbline 126
; LCD_write_String(0,1,11,"SD INIT OK!",0);
clr R2
std y+4,R2
ldi R24,<L31
ldi R25,>L31
std y+3,R25
std y+2,R24
ldi R24,11
std y+0,R24
ldi R18,1
clr R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -