📄 ex5-9.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: EX5-9.ASM
Object File: EX5-9.HEX
List File: EX5-9.LST
Line I Addr Code Source
1: N 0000 ORG 0000H ;复位地址
2: 0000 02 00 30 LJMP MAIN ;跳转到主程序
3: N 000B ORG 000BH ;T0中断入口
4: 000B 02 00 74 LJMP TIM0 ;跳转到T0中断服务程序
5: N 0030 ORG 0030H ;主程序入口地址
6: 0030 75 89 01 MAIN: MOV TMOD,#01H ;写入T0控制字, 16位定时方式
7: 0033 75 A8 82 MOV IE,#82H ;开中断
8: 0036 75 30 00 MOV 30H,#00H ;取简谱码指针
9: 0039 E5 30 NEXT: MOV A,30H ;简谱码指针装入A
10: 003B 90 00 B2 MOV DPTR,#TABLE ;从TABLE处取简谱码
11: 003E 93 MOVC A,@A+DPTR
12: 003F FA MOV R2,A ;取得的简谱码暂存于R2
13: 0040 60 2D JZ END0 ;是否取到结束码00H?
14: 0042 54 0F ANL A,#0FH ;不是,则取节拍码
15: 0044 FD MOV R5,A ;节拍码存于R5
16: 0045 EA MOV A,R2 ;将简谱码装入A
17: 0046 C4 SWAP A ;高、低4位交换
18: 0047 54 0F ANL A,#0FH ;取音符码
19: 0049 70 05 JNZ SING ;取得的音符码是否为0?
20: 004B C2 8C CLR TR0 ;是则不发音
21: 004D 02 00 67 lJMP D1 ;跳转到D1
22: 0050 14 SING: DEC A ;取得的音符码减1(不含0)
23: 0051 F5 22 MOV 22H,A ;存入22H单元
24: 0053 23 RL A ;乘2
25: 0054 90 00 94 MOV DPTR,#TABLE1 ;到TABLE1中取相对的高位字节值
26: 0057 93 MOVC A,@A+DPTR
27: 0058 F5 8C MOV TH0,A ;取得的高位字节装入TH0和21H单元
28: 005A F5 21 MOV 21H,A
29: 005C E5 22 MOV A,22H ;再装入取得的音符码
30: 005E 23 Rl A ;乘2
31: 005F 04 INC A ;加1
32: 0060 93 MOVC A,@A+DPTR ;到TABLE1中取相对的低位字节值
33: 0061 F5 8A MOV TL0,A ;取得的高位字节装入TL0和20H单元
34: 0063 F5 20 MOV 20H,A
35: 0065 D2 8C SETB TR0 ;启动T0
36: 0067 12 00 85 D1: LCALL DELAY ;基本单位时间1/4拍,延时187毫秒
37: 006A 05 30 INC 30H ;取简谱码指针加1
38: 006C 02 00 39 LJMP NEXT ;取下一个码
39: 006F C2 8C END0: CLR TR0 ;停止T0
40: 0071 02 00 30 LJMP MAIN ;重复循环
41:
42: ;定时器T0中断服务程序:
43: 0074 C0 E0 TIM0: PUSH ACC ;保护现场
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 0076 C0 D0 PUSH PSW
45: 0078 85 20 8A MOV TL0,20H ;重设定时初值
46: 007B 85 21 8C MOV TH0,21H
47: 007E B2 90 CPL P1.0 ;P1.0引脚电平取反
48: 0080 D0 D0 POP PSW ;恢复现场
49: 0082 D0 E0 POP ACC
50: 0084 32 RETI ;中断返回
51:
52: ;基本单位延时子程序:
53: 0085 7F 02 DELAY: MOV R7,#02H ;fosc=12MHz时延时187毫秒
54: 0087 7C BB D2: MOV R4,#187
55: 0089 7B F8 D3: MOV R3,#248
56: 008B DB FE DJNZ R3,$
57: 008D DC FA DJNZ R4,D3
58: 008F DF F6 DJNZ R7,D2
59: 0091 DD F2 DJNZ R5,DELAY ;决定节拍
60: 0093 22 RET
61:
62: ;音符对应的定时器初值表:
63: 0094 FB 04 FB 90 TABLE1: DW 64260,64400,64521,64580
0098 FC 09 FC 44
64: 009C FC AC FD 09 DW 64684,64777,64820,64898
00A0 FD 34 FD 82
65: 00A4 FD C8 FE 06 DW 64968,65030,65058,65110
00A8 FE 22 FE 56
66: 00AC FE 85 FE 9A DW 65157,65178,65217
00B0 FE C1
67:
68: ;音符节拍表:
69: 00B2 TABLE: ;1
70: 00B2 82 01 81 94 DB 82H,01H,81H,94H,84H
00B6 84
71: 00B7 B4 A4 04 DB 0B4H,0A4H,04H
72: 00BA 82 01 81 94 DB 82H,01H,81H,94H,84H
00BE 84
73: 00BF C4 B4 04 DB 0C4H,0B4H,04H
74: ;2
75: 00C2 82 01 81 F4 DB 82H,01H,81H,0F4H,0D4H
00C6 D4
76: 00C7 B4 A4 94 DB 0B4H,0A4H,94H
77: 00CA E2 01 E1 D4 DB 0E2H,01H,0E1H,0D4H,0B4H
00CE B4
78: 00CF C4 B4 04 DB 0C4H,0B4H,04H
79: ;3
80: 00D2 82 01 81 94 DB 82H,01H,81H,94H,84H
00D6 84
81: 00D7 B4 A4 04 DB 0B4H,0A4H,04H
82: 00DA 82 01 81 94 DB 82H,01H,81H,94H,84H
00DE 84
83: 00DF C4 B4 04 DB 0C4H,0B4H,04H
84: ;4
85: 00E2 82 01 81 F4 DB 82H,01H,81H,0F4H,0D4H
00E6 D4
86: 00E7 B4 A4 94 DB 0B4H,0A4H,94H
87: 00EA E2 01 E1 D4 DB 0E2H,01H,0E1H,0D4H,0B4H
00EE B4
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
88: 00EF C4 B4 04 DB 0C4H,0B4H,04H
89: 00F2 00 DB 00H
90: END
register banks used: ---
no errors
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz 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
CY BIT D7
D1 CODE 0067 36
D2 CODE 0087 54
D3 CODE 0089 55
DELAY CODE 0085 53
DPH DATA 83
DPL DATA 82
EA BIT AF
END0 CODE 006F 39
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
MAIN CODE 0030 6
NEXT CODE 0039 9
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
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
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 5
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
RXD BIT B0
SBUF DATA 99
SCON DATA 98
SING CODE 0050 22
SINT CODE 0023
SM0 BIT 9F
SM1 BIT 9E
SM2 BIT 9D
SP DATA 81
T0 BIT B4
T1 BIT B5
TABLE CODE 00B2 69
TABLE1 CODE 0094 63
TB8 BIT 9B
TCON DATA 88
TF0 BIT 8D
TF1 BIT 8F
TH0 DATA 8C
TH1 DATA 8D
TI BIT 99
TIM0 CODE 0074 43
TIMER0 CODE 000B
TIMER1 CODE 001B
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 + -