?? 音樂(lè).s
字號(hào):
.module _音樂(lè).c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板演示程序\音樂(lè)/delay.h
.dbfunc e DelayUS _DelayUS fV
; time -> R16,R17
.even
_DelayUS::
.dbline -1
.dbline 9
; //內(nèi)部晶振 8M
; #include <iom16v.h>
; #include <macros.h>
; #include"delay.h"
;
; /*------宏定義------*/
; #define uchar unsigned char
; #define uint unsigned int
; #define DO 64580 //523
xjmp L3
L2:
.dbline 11
subi R16,1
sbci R17,0
L3:
.dbline 10
; #define RE 64684 //587
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e DelayMS _DelayMS fV
; i -> R20,R21
; time -> R16,R17
.even
_DelayMS::
xcall push_gset1
.dbline -1
.dbline 20
; #define MI 64777 //659
; #define FA 64820 //698
; #define SO 64898 //784
; #define LA 64968 //880
; #define XI 65030 //988
; #define DO_H 65058 //1046
; #define RE_H 65110 //1174
; #define MI_H 65157 //1318
; #define FA_H 65178 //1397
; #define SO_H 65217 //1568
xjmp L7
L6:
.dbline 23
; #define LA_H 65252 //1760
; #define XI_H 65283 //1976
; #define DO_HH 65297 //2093
.dbline 24
;
ldi R20,1
ldi R21,0
xjmp L12
L9:
.dbline 25
L10:
.dbline 24
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 24
cpi R20,118
ldi R30,4
cpc R21,R30
brlo L9
.dbline 26
L7:
.dbline 22
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L6
tst R3
brne L6
X0:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.area lit(rom, con, rel)
_sound::
.byte 'H,'I
.byte 'J,'H
.byte 'H,'I
.byte 'J,'H
.byte 'J,'K
.byte 140,'J
.byte 'K,140
.byte 44,45
.byte 44,43
.byte 'J,'H
.byte 44,45
.byte 44,43
.byte 'J,'H
.byte 'H,'E
.byte 136,'H
.byte 'E,136
.byte 64,'L
.byte 'J,'I
.byte 200,'I
.byte 'G,'F
.byte 229,'N
.byte 'M,'N
.byte 'l,45
.byte 'N,'M
.byte 44,45
.byte 46,45
.byte 'o,45
.byte 44,45
.byte 44,41
.byte 42,43
.byte 42,41
.byte 200,'L
.byte 'N,'I
.byte 'F,'H
.byte 197,38
.byte 40,229
.byte 131,'e
.byte 38,'h
.byte 41,38
.byte 40,'E
.byte 'l,47
.byte 61,28
.byte 42,44
.byte 233,'i
.byte 42,'G
.byte 'F,'e
.byte 38,'H
.byte 'I,'C
.byte 'H,54
.byte 21,38
.byte 24,229
.byte 'j,44
.byte 'G,'I
.byte 38,40
.byte 133,51
.byte 21,'C
.byte 37,38
.byte 39,41
.byte 198,37
.byte 38,'h
.byte 41,'L
.byte 'J,'I
.byte 42,41
.byte 'I,38
.byte 37,131
.byte 136,38
.byte 40,38
.byte 37,35
.byte 37,38
.byte 40,197
.byte 4,4
.byte 'I,'J
.byte 'J,'j
.byte 41,'H
.byte 'F,'h
.byte 41,200
.byte 'I,'J
.byte 'J,'j
.byte 44,'J
.byte 'J,'I
.byte 'J,202
.byte 'L,'M
.byte 'M,'m
.byte 44,'J
.byte 'J,'L
.byte 'M,204
.byte 'I,'J
.byte 'J,'i
.byte 42,'J
.byte 'I,'J
.byte 'F,24
.byte 230,41
.byte 41,41
.byte 40,'F
.byte 41,41
.byte 41,40
.byte 'F,'I
.byte 'J,'H
.byte 'i,42
.byte 'L,45
.byte 45,45
.byte 44,'J
.byte 41,41
.byte 41,40
.byte 'F,'F
.byte 'E,'F
.byte 230,'f
.byte 39,'h
.byte 38,40
.byte 40,39
.byte 38,'G
.byte 'C,'g
.byte 40,'i
.byte 39,41
.byte 41,40
.byte 39,'F
.byte 'F,'J
.byte 'M,'L
.byte 45,44
.byte 43,43
.byte 42,41
.byte 'J,'F
.byte 32,'K
.byte 41,'j
.byte 40,39
.byte 35,40
.byte 39,'F
.byte 'F,'J
.byte 'M,'L
.byte 45,44
.byte 43,43
.byte 42,41
.byte 'J,'F
.byte 32,'K
.byte 41,'j
.byte 40,39
.byte 35,40
.byte 39,'F
.byte 'F,0
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板演示程序\音樂(lè)\音樂(lè).c
.dbsym e sound _sound A[278:278]kc
_TONETABLE::
.word 64580
.word 64684
.word 64777
.word 64820
.word 64898
.word 64968
.word 65030
.word 65058
.word 65110
.word 65157
.word 65178
.word 65217
.word 65252
.word 65283
.word 65297
.dbsym e TONETABLE _TONETABLE A[30:15]ki
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板演示程序\音樂(lè)\音樂(lè).c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 75
; const unsigned char sound[]={ //樂(lè)曲數(shù)據(jù)表
; /****************兩只老虎**********************/
; 0x48,0x49,0x4a,0x48,0x48,0x49,0x4a,0x48,0x4a,0x4b,0x8c,
; 0x4a,0x4b,0x8c,0x2c,0x2d,0x2c,0x2b,0x4a,0x48,
; 0x2c,0x2d,0x2c,0x2b,0x4a,0x48,0x48,0x45,0x88,0x48,0x45,0x88,
; /*************梁祝****************/
; 0x40,0x4c,0x4a,0x49,0xc8,0x49,0x47,0x46,
; 0xe5,0x4e,0x4d,0x4e,0x6c,0x2d,0x4e,
; 0x4d,0x2c,0x2d,0x2e,0x2d,0x6f,0x2d,
; 0x2c,0x2d,0x2c,0x29,0x2a,0x2b,
; 0x2a,0x29,0xc8,0x4c,0x4e,0x49,0x46,0x48,
; 0xc5,0x26,0x28,0xe5,0x83,0x65,0x26,
; 0x68,0x29,0x26,0x28,0x45,0x6c,0x2f,0x3d,
; 0x1c,0x2a,0x2c,0xe9,0x69,0x2a,0x47,0x46,
; 0x65,0x26,0x48,0x49,0x43,0x48,0x36,0x15,
; 0x26,0x18,0xe5,0x6a,0x2c,0x47,0x49,0x26,
; 0x28,0x85,0x33,0x15,0x43,0x25,0x26,0x27,
; 0x29,0xc6,0x25,0x26,0x68,0x29,0x4c,0x4a,
; 0x49,0x2a,0x29,0x49,0x26,0x25,0x83,0x88,
; 0x26,0x28,0x26,0x25,0x23,0x25,0x26,0x28,
; 0xc5,0x04,0x04,
; /*************希望*****************/
; 0x49,0x4a,0x4a,0x6a,0x29,0x48,0x46,0x68,
; 0x29,0xc8,0x49,0x4a,0x4a,0x6a,0x2c,0x4a,
; 0x4a,0x49,0x4a,0xca,0x4c,0x4d,0x4d,0x6d,
; 0x2c,0x4a,0x4a,0x4c,0x4d,0xcc,0x49,0x4a,
; 0x4a,0x69,0x2a,0x4a,0x49,0x4a,0x46,
; 0x18,0xe6,0x29,0x29,0x29,0x28,0x46,
; 0x29,0x29,0x29,0x28,0x46,0x49,0x4a,
; 0x48,0x69,0x2a,0x4c,0x2d,0x2d,0x2d,
; 0x2c,0x4a,0x29,0x29,0x29,0x28,0x46,
; 0x46,0x45,0x46,0xe6,
; /***************喀秋莎********************/
; 0x66,0x27,0x68,0x26,0x28,0x28,0x27,0x26,0x47,0x43,
; 0x67,0x28,0x69,0x27,0x29,0x29,0x28,0x27,0x46,0x46,
; 0x4a,0x4d,0x4c,0x2d,0x2c,0x2b,0x2b,0x2a,0x29,0x4a,
; 0x46,0x20,0x4b,0x29,0x6a,0x28,0x27,0x23,0x28,0x27,
; 0x46,0x46,0x4a,0x4d,0x4c,0x2d,0x2c,0x2b,0x2b,0x2a,
; 0x29,0x4a,0x46,0x20,0x4b,0x29,0x6a,0x28,0x27,0x23,
; 0x28,0x27,0x46,0x46,
;
; 0x00};
; /* 音階表 */
; const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,XI,DO_H,
; RE_H,MI_H,FA_H,SO_H,LA_H,XI_H,DO_HH};
;
; /* 音階重裝常數(shù) */
; unsigned int toneconst;
; //端口初始化
; void port_init(void)
; {
.dbline 76
; PORTA = 0x00;//設(shè)置端口方向、數(shù)據(jù)
clr R2
out 0x1b,R2
.dbline 77
; DDRA = 0x03;
ldi R24,3
out 0x1a,R24
.dbline 78
; PORTB = 0x00;
out 0x18,R2
.dbline 79
; DDRB = 0x00;
out 0x17,R2
.dbline 80
; PORTC = 0x00;
out 0x15,R2
.dbline 81
; DDRC = 0x00;
out 0x14,R2
.dbline 82
; PORTD = 0x00;
out 0x12,R2
.dbline 83
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 89
; }
;
;
; //定時(shí)器T0初始化
; void timer0_init(void)
; {
.dbline 90
; TCCR0 = 0x00;//停止定時(shí)器
clr R2
out 0x33,R2
.dbline 91
; TCNT0 = 0xFF;//初始值
ldi R24,255
out 0x32,R24
.dbline 92
; OCR0 = 0xFE;//匹配值
ldi R24,254
out 0x3c,R24
.dbline 93
; TIMSK |= 0x00;//溢出中斷不允許
in R2,0x39
out 0x39,R2
.dbline 94
; TCCR0 = 0x02;//啟動(dòng)定時(shí)器
ldi R24,2
out 0x33,R24
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 98
; }
;
; void init_devices(void)
; {
.dbline 99
; CLI(); //禁止所有中斷
cli
.dbline 100
; MCUCR = 0x00;//外部中斷觸發(fā)方式
clr R2
out 0x35,R2
.dbline 101
; MCUCSR = 0x80;//禁止JTAG
ldi R24,128
out 0x34,R24
.dbline 102
; GICR = 0x00;//外部中斷使能
out 0x3b,R2
.dbline 103
; port_init();
xcall _port_init
.dbline 104
; timer0_init();
xcall _timer0_init
.dbline 105
; SEI();//開(kāi)全局中斷
sei
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 36
jmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板演示程序\音樂(lè)\音樂(lè).c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
st -y,R2
st -y,R3
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 110
; }
; //T0溢出中斷服務(wù)程序
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
.dbline 111
; TCNT0=toneconst;
lds R2,_toneconst
lds R3,_toneconst+1
out 0x32,R2
.dbline 112
; PORTA^=BIT(PA0);
ldi R24,1
in R2,0x1b
eor R2,R24
out 0x1b,R2
.dbline -2
L16:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e music _music fV
; sound_add -> R20,R21
; temp1 -> R22
; temp -> R10
.even
_music::
xcall push_gset3
.dbline -1
.dbline 115
; }
; void music(void)
; {
.dbline 116
; unsigned char temp=0,temp1=0;
clr R10
.dbline 116
clr R22
.dbline 117
; unsigned int sound_add=0;
clr R20
clr R21
.dbline 118
; temp1=sound[sound_add];
ldi R24,<_sound
ldi R25,>_sound
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
xjmp L19
L18:
.dbline 120
; while(temp1!=0)
; {
.dbline 121
; temp=temp1;
mov R10,R22
.dbline 122
; temp&=0x0f;
mov R24,R10
andi R24,15
mov R10,R24
.dbline 123
; if(temp!=0)
tst R24
breq L21
.dbline 124
; {
.dbline 125
; TIMSK|=(1<<TOIE0);//根據(jù)SOUNDTABLE中數(shù)據(jù)的低四位選擇音調(diào)頻率
in R24,0x39
ori R24,1
out 0x39,R24
.dbline 126
; temp--;
dec R10
.dbline 127
; toneconst=TONETABLE[temp];
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_TONETABLE
ldi R25,>_TONETABLE
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
sts _toneconst+1,R31
sts _toneconst,R30
.dbline 128
; TCNT0=toneconst;
out 0x32,R30
.dbline 129
; }
L21:
.dbline 130
mov R10,R22
.dbline 131
mov R24,R10
swap R24
andi R24,#0x0F
.dbline 132
andi R24,15
mov R10,R24
.dbline 133
mov R16,R24
clr R17
xcall _DelayMS
.dbline 134
in R24,0x39
andi R24,254
out 0x39,R24
.dbline 135
subi R20,255 ; offset = 1
sbci R21,255
.dbline 136
ldi R24,<_sound
ldi R25,>_sound
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
.dbline 138
L19:
.dbline 119
tst R22
brne L18
.dbline -2
L17:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r sound_add 20 i
.dbsym r temp1 22 c
.dbsym r temp 10 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 147
; temp=temp1;
; temp>>=4;
; temp&=0x0f;
; DelayMS(temp);//根據(jù)SOUNDTABLE中數(shù)據(jù)的高四位*5后,為音調(diào)持續(xù)時(shí)間
; TIMSK&=~(1<<TOIE0);
; sound_add++;
; temp1=sound[sound_add];
;
; }
; }
;
;
;
;
;
; //主函數(shù)
; void main(void)
; {
.dbline 148
; init_devices();
xcall _init_devices
xjmp L25
L24:
.dbline 151
.dbline 152
xcall _music
.dbline 153
L25:
.dbline 150
xjmp L24
X1:
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板演示程序\音樂(lè)\音樂(lè).c
_toneconst::
.blkb 2
.dbsym e toneconst _toneconst i
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -