📄 file8.lst
字号:
PAGE 1
1: N 0040 musich equ 40h ;音乐定时高位数据
2: N 0041 musicl equ 41h ;音乐定时低位数据
3: N 0042 musicstart equ 42h ;音乐开始首地址
4: B B7 beep bit p3.7 ;蜂鸣器定义
5:
6: ; ************************ 预定义结束 *******************
7:
8: N 0000 org 00h ;程序开始
9: 0000 02 00 30 jmp main ;跳转到主程序
10:
11: N 001B org 1bh ;定时器T1中断入口地址
12: 001B 02 00 3D jmp timer_1 ;定时器服务程序
13:
14: N 0030 org 030h ;主程序代码开始
15: 0030 75 81 30 main:mov sp,#30h ;设置堆栈
16: 0033 12 00 4A lcall music ;调用音乐程序
17: 0036 80 F8 jmp main ;重新开始
18:
19: 0038 78 14 musdelay:mov r0,#20 ;短时间延时
20: 003A D8 FE d: djnz r0,d ;延时时间 20 uS
21: 003C 22 ret ;返回
22: ; ************ 定时器 服务程序 *******************8
23: 003D C2 8E timer_1: clr tr1 ;停止定时器工作
24: 003F 85 40 8D mov th1,musich ;重新设置定时初值
25: 0042 85 41 8B mov tl1,musicl ;
26: 0045 B2 B7 cpl beep ;从蜂鸣器输出声音
27: 0047 D2 8E setb tr1 ;开始定时工作
28: 0049 32 reti ;中断返回
29: ;****************************************************
30: ;************ 音乐播放程序 *********************
31: 004A 75 89 10 music: mov tmod,#10h ;设置定时器T1工作方式1
32: 004D D2 AF setb ea ;总的中断
33: 004F D2 AB setb et1 ;定时器T1中断允许
34: 0051 75 42 00 mov musicstart,#00h ;音乐开始地址
35: 0054 75 40 FF mov musich,#0ffh ;音乐定时常数高位
36: 0057 75 41 FF mov musicl,#0ffh ;音乐定时常数低位
37:
38: 005A 90 00 E5 loopm: mov dptr,#mu_tab ;得到音符表头
39: 005D E5 42 mov a,musicstart ;开始查表
40: 005F 93 movc a,@a+dptr ;获得音乐数据
41: 0060 60 2C jz musend ;结束符 00H,返回
42: 0062 23 rl a ;A*2
43: 0063 F5 F0 mov b,a ;暂存地址
44: 0065 90 00 B9 mov dptr,#mustab ;获得音符表头
45: 0068 93 movc a,@a+dptr ;根据音乐数据查得定时常数
46: 0069 F5 40 mov musich,a ;保存定时常数高位
47: 006B F5 8D mov th1,a ;设置定时器高位常数
48: 006D E5 F0 mov a,b ;开始找低位数据
49: 006F 04 inc a ;指向下一个数据
50: 0070 90 00 B9 mov dptr,#mustab ;得到音符表头
51: 0073 93 movc a,@a+dptr ;查得低位数据
52: 0074 F5 41 mov musicl,a ;保存数据
53: 0076 F5 8B mov tl1,a ;设置定时低位常数
54: 0078 D2 8E setb tr1 ;定时器T1开始工作
55:
56: 007A 90 00 E5 mov dptr,#mu_tab ;得到音乐表
PAGE 2
57: 007D 05 42 inc musicstart ;指向下一个单元(音符节拍)
58: 007F E5 42 mov a,musicstart ;开始查找
59: 0081 93 movc a,@a+dptr ;找到数据
60: 0082 12 00 9C lcall delay1 ;根据参数延时,发出持续音乐
61: 0085 05 42 inc musicstart ;指向下一个音
62: 0087 C2 8E clr tr1 ;停止发声
63: 0089 12 00 AE lcall delay
64: 008C 80 CC jmp loopm ;重复,直到遇到结束符号 00H.
65:
66: 008E C2 8E musend: clr tr1 ;乐曲播放完毕,关闭定时器
67: 0090 C2 AF clr ea ;禁止中断
68: 0092 C2 AB clr et1 ;关闭定时器T1中断
69: 0094 C2 B7 clr beep ;禁止蜂鸣器
70: 0096 74 14 mov a,#20
71: 0098 12 00 9C lcall delay1
72: 009B 22 ret
73: ;*********************
74: ;************ 节拍发生器 ,产生音乐节拍 *********************************
75: 009C 78 00 delay1: mov r0,#00h ;节拍发生器,用来发生节拍
76: 009E 79 00 mov r1,#00h ;
77: 00A0 FA mov r2,a ;这是节拍发生器的参数,当它为8
78: 00A1 D8 FE dlay1:djnz r0,dlay1 ;表示1拍
79: 00A3 78 00 mov r0,#00h
80: 00A5 D9 FA djnz r1,dlay1
81: 00A7 78 00 mov r0,#00h
82: 00A9 79 00 mov r1,#00h
83: 00AB DA F4 djnz r2,dlay1
84: 00AD 22 ret
85: ; ————————————————————
86: ; ******** 延时 产生休止符 *****************
87:
88: 00AE 78 00 delay: mov r0,#00h ;延时 10ms
89: 00B0 79 64 mov r1,#100
90: 00B2 D8 FE dlay: djnz r0,dlay
91: 00B4 78 64 mov r0,#100
92: 00B6 D9 FA djnz r1,dlay
93: 00B8 22 ret
94: ; ************************
95: ; ************************曲谱编码,这是定义的曲谱表,对应如下 ***********************************
***************
96: ; 1 低音 DO 2 低音 RE 3 低音ME 4 低音 FA 5 低音 SO
6 低音LA 7 低音SI
97: 00B9 68 6A F8 8B mustab: db 'h','j', 0f8h,8bh, 0f9h,5bh, 0fah,14h, 0fah,0ch, 0fbh,03h,
00BD F9 5B FA 14 0fbh,8fh, 0fch,0bh
00C1 FA 0C FB 03
00C5 FB 8F FC 0B
98:
99: ; 8 中音 DO 9 中音 RE 0ah 中音ME 0bh 中音 FA 0ch 中音 SO 0dh 中
音LA 0eh 中音SI
100: 00C9 FC 43 FC AB db 0fch,43h, 0fch,0abh, 0fdh,08h, 0fdh,33h, 0fdh,81h, 0fdh,0c7h,
00CD FD 08 FD 33 0feh,05h
00D1 FD 81 FD C7
00D5 FE 05
101:
102: ; 0fh 高音 DO 10h 高音 RE 11h 高音ME 12h 高音 FA 13h 高音 SO 14h 高音LA 15h 高
音SI
103: 00D7 FE 21 FE 55 db 0feh,21h, 0feh,55h, 0feh,84h, 0fdh,99h, 0feh,0c0h, 0feh,0e3h,
00DB FE 84 FD 99 0ffh,02h
PAGE 3
00DF FE C0 FE E3
00E3 FF 02
104:
105: ;以下为音乐乐谱代码,前两位表示曲谱,后一位表示节拍
106: ;8为 1 拍,4 ->半拍
107:
108: 00E5 06 04 08 04 mu_tab: db 6,4,8,4,10,4,1,4,9,8,8,4,7,4,10,8,9,8,6,16
00E9 0A 04 01 04
00ED 09 08 08 04
00F1 07 04 0A 08
00F5 09 08 06 10
109: 00F9 08 04 0A 04 db 8,4,10,4,12,4,12,4,13,8,12,4,11,4,10,16
00FD 0C 04 0C 04
0101 0D 08 0C 04
0105 0B 04 0A 10
110: 0109 00 db 00h
111: end
register banks used: ---
0 个错误
PAGE 4
L I S T O F S Y M B O L S
=============================
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
AC BIT D6
ACC DATA E0
B DATA F0
BEEP BIT B7 4
CY BIT D7
D CODE 003A 20
DELAY CODE 00AE 88
DELAY1 CODE 009C 75
DLAY CODE 00B2 90
DLAY1 CODE 00A1 78
DPH DATA 83
DPL DATA 82
EA BIT AF
ES BIT AC
ET0 BIT A9
ET1 BIT AB
EX0 BIT A8
EX1 BIT AA
EXTI0 CODE 0003
EXTI1 CODE 0013
F0 BIT D5
IE DATA A8
IE0 BIT 89
IE1 BIT 8B
INT0 BIT B2
INT1 BIT B3
IP DATA B8
IT0 BIT 88
IT1 BIT 8A
LOOPM CODE 005A 38
MAIN CODE 0030 15
MUSDELAY CODE 0038 19
MUSEND CODE 008E 66
MUSIC CODE 004A 31
MUSICH NUMBER 0040 1
MUSICL NUMBER 0041 2
MUSICSTART NUMBER 0042 3
MUSTAB CODE 00B9 97
MU_TAB CODE 00E5 108
OV BIT D2
P BIT D0
P0 DATA 80
P1 DATA 90
P2 DATA A0
P3 DATA B0
PCON DATA 87
PS BIT BC
PSW DATA D0
PT0 BIT B9
PT1 BIT BB
PAGE 5
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
PX0 BIT B8
PX1 BIT BA
RB8 BIT 9A
RD BIT B7
REN BIT 9C
RESET CODE 0000
RI BIT 98
RS0 BIT D3
RS1 BIT D4
RXD BIT B0
SBUF DATA 99
SCON DATA 98
SINT CODE 0023
SM0 BIT 9F
SM1 BIT 9E
SM2 BIT 9D
SP DATA 81
T0 BIT B4
T1 BIT B5
TB8 BIT 9B
TCON DATA 88
TF0 BIT 8D
TF1 BIT 8F
TH0 DATA 8C
TH1 DATA 8D
TI BIT 99
TIMER0 CODE 000B
TIMER1 CODE 001B
TIMER_1 CODE 003D 23
TL0 DATA 8A
TL1 DATA 8B
TMOD DATA 89
TR0 BIT 8C
TR1 BIT 8E
TXD BIT B1
WR BIT B6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -