📄 sound.lst
字号:
A51 MACRO ASSEMBLER SOUND 12/31/2005 09:56:08 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN Sound.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE Sound.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;========================================================================
2 ; 文件名称: Sound.ASM
3 ; 功能描述: 电子发声实验. 利用定时器/计数器演奏音乐.
4 ; 乐曲: 友谊天长地久 B调 四分之二拍
5 ;========================================================================
6
0031 7 VALH DATA 31H
0030 8 VALL DATA 30H
9
0032 10 FCOUNT DATA 32H
0033 11 TCOUNT DATA 33H
12
0000 13 ORG 0000H
0000 020100 14 LJMP START
000B 15 ORG 000BH
000B 020158 16 LJMP T0ISR
0100 17 ORG 0100H
0100 758901 18 START: MOV TMOD, #01H ;初始化定时器T0
0103 75A882 19 MOV IE, #82H
0106 D28C 20 SETB TR0 ;启动定时器T0
0108 753200 21 MLP1: MOV FCOUNT, #00H ;演奏顺序
010B 753300 22 MOV TCOUNT, #00H
010E 90019D 23 MLP2: MOV DPTR, #FREQ ;频率表首地址
0111 E532 24 MOV A, FCOUNT
0113 93 25 MOVC A, @A+DPTR ;查表
0114 FE 26 MOV R6, A ;除数高位
0115 BE000B 27 CJNE R6, #00H, MLP3 ;判0, 0表示一遍演奏结束
0118 0532 28 INC FCOUNT
011A E532 29 MOV A, FCOUNT
011C 93 30 MOVC A, @A+DPTR
011D FF 31 MOV R7, A
011E BF0008 32 CJNE R7, #00H, MLP4
0121 2108 33 AJMP MLP1 ;R6R7=0 结束一遍演奏
0123 0532 34 MLP3: INC FCOUNT
0125 E532 35 MOV A, FCOUNT
0127 93 36 MOVC A, @A+DPTR
0128 FF 37 MOV R7, A ;R6R7中不为0, 作为除数
0129 7A00 38 MLP4: MOV R2, #00H ;被除数(CLK)
012B 7B07 39 MOV R3, #07H
012D 7C00 40 MOV R4, #00H
012F 7D00 41 MOV R5, #00H
0131 120161 42 LCALL DIV42 ;调用除法程序
0134 C3 43 CLR C
0135 74FF 44 MOV A, #0FFH
0137 9B 45 SUBB A, R3
0138 F530 46 MOV VALL, A ;计数初值低位
013A 74FF 47 MOV A, #0FFH
013C 9A 48 SUBB A, R2
013D F531 49 MOV VALH, A ;计数初值高位
013F 85318C 50 MOV TH0, VALH ;装入计数初值
0142 85308A 51 MOV TL0, VALL
52
0145 E533 53 MOV A, TCOUNT
0147 900211 54 MOV DPTR, #TIME ;得到时间表
014A 93 55 MOVC A, @A+DPTR
014B FC 56 MOV R4, A ;[R4]次延时
014C 120194 57 MLP5: LCALL DELAY
014F DCFB 58 DJNZ R4, MLP5
A51 MACRO ASSEMBLER SOUND 12/31/2005 09:56:08 PAGE 2
0151 0532 59 INC FCOUNT
0153 0533 60 INC TCOUNT
0155 02010E 61 LJMP MLP2 ;继续下一音符的演奏
62 ;定时器0中断程序
0158 B280 63 T0ISR: CPL P0.0
015A 85318C 64 MOV TH0, VALH ;重装计数初值
015D 85308A 65 MOV TL0, VALL
0160 32 66 RETI
67 ;(R2R3R4R5)/(R6R7)--(R2R3)
68 ;影响资源: PSW, A, B, R1~R7
0161 C3 69 DIV42: CLR C ;比较被除数和除数
0162 EB 70 MOV A,R3
0163 9F 71 SUBB A,R7
0164 EA 72 MOV A,R2
0165 9E 73 SUBB A,R6
0166 4003 74 JC DVD1
0168 D2D2 75 SETB OV ;溢出
016A 22 76 RET
016B 75F010 77 DVD1: MOV B,#10H ;计算双字节商
016E C3 78 DVD2: CLR C ;部分商和余数同时左移一位
016F ED 79 MOV A,R5
0170 33 80 RLC A
0171 FD 81 MOV R5,A
0172 EC 82 MOV A,R4
0173 33 83 RLC A
0174 FC 84 MOV R4,A
0175 EB 85 MOV A,R3
0176 33 86 RLC A
0177 FB 87 MOV R3,A
0178 CA 88 XCH A,R2
0179 33 89 RLC A
017A CA 90 XCH A,R2
017B 92D5 91 MOV F0,C ;保存溢出位
017D C3 92 CLR C
017E 9F 93 SUBB A,R7 ;计算(R2R3-R6R7)
017F F9 94 MOV R1,A
0180 EA 95 MOV A,R2
0181 9E 96 SUBB A,R6
0182 B0D5 97 ANL C,/F0 ;结果判断
0184 4004 98 JC DVD3
0186 FA 99 MOV R2,A ;够减,存放新的余数
0187 E9 100 MOV A,R1
0188 FB 101 MOV R3,A
0189 0D 102 INC R5 ;商的低位置一
018A D5F0E1 103 DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)
018D EC 104 MOV A,R4 ;将商移到R2R3中
018E FA 105 MOV R2,A
018F ED 106 MOV A,R5
0190 FB 107 MOV R3,A
0191 C2D2 108 CLR OV ;设立成功标志
0193 22 109 RET
110 ;单位延时
0194 7FE0 111 DELAY: MOV R7, #0E0H
0196 7EF0 112 DLP1: MOV R6, #0F0H
0198 DEFE 113 DLP2: DJNZ R6, DLP2
019A DFFA 114 DJNZ R7, DLP1
019C 22 115 RET
116 ;频率表
019D 0173 117 FREQ: DW 371,495,495,495,624,556,495,556,624
019F 01EF
01A1 01EF
01A3 01EF
01A5 0270
01A7 022C
01A9 01EF
01AB 022C
A51 MACRO ASSEMBLER SOUND 12/31/2005 09:56:08 PAGE 3
01AD 0270
01AF 01EF 118 DW 495,495,624,742,833,833,833,742,624
01B1 01EF
01B3 0270
01B5 02E6
01B7 0341
01B9 0341
01BB 0341
01BD 02E6
01BF 0270
01C1 0270 119 DW 624,495,556,495,556,624,495,416,416
01C3 01EF
01C5 022C
01C7 01EF
01C9 022C
01CB 0270
01CD 01EF
01CF 01A0
01D1 01A0
01D3 0173 120 DW 371,495,833,742,624,624,495,556,495
01D5 01EF
01D7 0341
01D9 02E6
01DB 0270
01DD 0270
01DF 01EF
01E1 022C
01E3 01EF
01E5 022C 121 DW 556,833,742,624,624,742,833,990,742
01E7 0341
01E9 02E6
01EB 0270
01ED 0270
01EF 02E6
01F1 0341
01F3 03DE
01F5 02E6
01F7 0270 122 DW 624,624,495,556,495,556,624,495,416
01F9 0270
01FB 01EF
01FD 022C
01FF 01EF
0201 022C
0203 0270
0205 01EF
0207 01A0
0209 01A0 123 DW 416,371,495,0
020B 0173
020D 01EF
020F 0000
124 ;时间表
0211 04060204 125 TIME: DB 4, 6, 2, 4, 4, 6, 2, 4, 4, 6
0215 04060204
0219 0406
021B 0204040C 126 DB 2, 4, 4,12, 1, 3, 6, 2, 4, 4
021F 01030602
0223 0404
0225 06020404 127 DB 6, 2, 4, 4, 6, 2, 4, 4,12, 4
0229 06020404
022D 0C04
022F 06020404 128 DB 6, 2, 4, 4, 6, 2, 4, 4, 6, 2
0233 06020404
0237 0602
0239 04040C04 129 DB 4, 4,12, 4, 6, 2, 4, 4, 6, 2
023D 06020404
0241 0602
A51 MACRO ASSEMBLER SOUND 12/31/2005 09:56:08 PAGE 4
0243 04040602 130 DB 4, 4, 6, 2, 4, 4,12
0247 04040C
131
132 END
A51 MACRO ASSEMBLER SOUND 12/31/2005 09:56:08 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
B. . . . . . . . . D ADDR 00F0H A
DELAY. . . . . . . C ADDR 0194H A
DIV42. . . . . . . C ADDR 0161H A
DLP1 . . . . . . . C ADDR 0196H A
DLP2 . . . . . . . C ADDR 0198H A
DVD1 . . . . . . . C ADDR 016BH A
DVD2 . . . . . . . C ADDR 016EH A
DVD3 . . . . . . . C ADDR 018AH A
F0 . . . . . . . . B ADDR 00D0H.5 A
FCOUNT . . . . . . D ADDR 0032H A
FREQ . . . . . . . C ADDR 019DH A
IE . . . . . . . . D ADDR 00A8H A
MLP1 . . . . . . . C ADDR 0108H A
MLP2 . . . . . . . C ADDR 010EH A
MLP3 . . . . . . . C ADDR 0123H A
MLP4 . . . . . . . C ADDR 0129H A
MLP5 . . . . . . . C ADDR 014CH A
OV . . . . . . . . B ADDR 00D0H.2 A
P0 . . . . . . . . D ADDR 0080H A
START. . . . . . . C ADDR 0100H A
T0ISR. . . . . . . C ADDR 0158H A
TCOUNT . . . . . . D ADDR 0033H A
TH0. . . . . . . . D ADDR 008CH A
TIME . . . . . . . C ADDR 0211H A
TL0. . . . . . . . D ADDR 008AH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
VALH . . . . . . . D ADDR 0031H A
VALL . . . . . . . D ADDR 0030H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -