📄 fs03.lst
字号:
A51 MACRO ASSEMBLER FS03 01/07/2007 16:33:04 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN FS03.OBJ
ASSEMBLER INVOKED BY: C:\KEIL7.06\C51\BIN\A51.EXE FS03.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;文件名:FS03.ASM
2 ;程序功能:歌曲演奏
3
0000 4 ORG 00H ; 主程序起始地址
0000 800B 5 JMP START ; 跳至主程序
000B 6 ORG 0BH ; 定时器 T0中断入口
000B 8031 7 JMP EXT0 ; 跳至T0中断子程序
000D 758901 8 START: MOV TMOD,#00000001B; 设T0方式1
0010 75A882 9 MOV IE,#10000010B;允许T0中断
0013 900052 10 MOV DPTR,#TABLE ; 存表首地址
0016 E4 11 LOOP: CLR A ; 清零
0017 93 12 MOVC A,@A+DPTR ; 查表
0018 F9 13 MOV R1,A ; 定时器高8位存R1
0019 A3 14 INC DPTR ; 指针加1
001A E4 15 CLR A ; 清零
001B 93 16 MOVC A,@A+DPTR ; 查表
001C F8 17 MOV R0,A ; 定时器低8位存R0
001D 49 18 ORL A,R1 ; 进行"或"运算
001E 6011 19 JZ NEXT0 ; 全0为休止符
0020 E8 20 MOV A, R0 ;
0021 59 21 ANL A, R1 ; 进行"与"运算
0022 B4FF02 22 CJNE A,#0FFH,NEXT; 全1表示乐曲结束
0025 80E6 23 JMP START ; 从头开始循环演奏
0027 898C 24 NEXT: MOV TH0,R1 ; 装入高位定时值
0029 888A 25 MOV TL0,R0 ; 装入低位定时值
002B D28C 26 SETB TR0 ; 启动定时器T0
002D D28D 27 setb tf0 ;启动定时器工作
002F 8002 28 JMP NEXT1 ; 转移NEXT1处
0031 C28C 29 NEXT0: CLR TR0 ; 关闭定时器停止发音
0033 E4 30 NEXT1: CLR A ; 清零
0034 A3 31 INC DPTR ; 指针加1
0035 93 32 MOVC A,@A+DPTR ; 查延时常数
0036 FA 33 MOV R2, A ; 延时常数存入R2
0037 1145 34 LOOP1: ACALL DELAY ; 调延时子程序
0039 DAFC 35 DJNZ R2, LOOP1 ; 控制延时次数
003B A3 36 INC DPTR ; 指针加1
003C 80D8 37 JMP LOOP ; 转移LOOP处
003E 898C 38 EXT0: MOV TH0,R1 ; 重装定时值
0040 888A 39 MOV TL0,R0 ;
0042 B2B4 40 CPL P3.4 ; 反相输出
0044 32 41 RETI ; 中断返回
0045 7F02 42 DELAY: MOV R7,#02 ; 延时187ms
0047 7EBB 43 D2: MOV R6,#187 ;
0049 7DF8 44 D3: MOV R5,#248 ;
004B DDFE 45 DJNZ R5,$ ;
004D DEFA 46 DJNZ R6,D3 ;
004F DFF6 47 DJNZ R7,D2 ;
0051 22 48 RET ;
0052 FD8003FD 49 TABLE: DB 0FDH,80H,03H, 0FDH,80H,01H ;
0056 8001
0058 FDC604FD 50 DB 0FDH,0C6H,04H, 0FDH,80H,04H ;
005C 8004
005E FE2A04FE 51 DB 0FEH,2AH,04H, 0FEH,02H,04H ;
0062 0204
0064 000004 52 DB 00H,00H,04H ;
0067 FD8003FD 53 DB 0FDH,80H,03H, 0FDH,80H,01H ;
006B 8001
006D FDC604FD 54 DB 0FDH,0C6H,04H, 0FDH,80H,04H ;
A51 MACRO ASSEMBLER FS03 01/07/2007 16:33:04 PAGE 2
0071 8004
0073 FE5C04FE 55 DB 0FEH,5CH,04H, 0FEH,2AH,04H ;
0077 2A04
0079 000004 56 DB 00H,00H,04H ;
007C FD8003FD 57 DB 0FDH,80H,03H, 0FDH,80H,01H ;
0080 8001
0082 FEC004FE 58 DB 0FEH,0C0H,04H, 0FEH,84H,04H ;
0086 8404
0088 FE2A04FE 59 DB 0FEH,2AH,04H, 0FEH,02H,04H ;
008C 0204
008E FDC604 60 DB 0FDH,0C6H,04H ;
0091 FE9803FE 61 DB 0FEH,98H,03H, 0FEH,98H,01H ;
0095 9801
0097 FE8404FE 62 DB 0FEH,84H,04H, 0FEH,2AH,04H ;
009B 2A04
009D FE5C04FE 63 DB 0FEH,5CH,04H, 0FEH,2AH,04H ;
00A1 2A04
00A3 000004 64 DB 00H,00H,04H ;
00A6 FFFF 65 DB 0FFH,0FFH ; 结束码 编码表
66 END ; 程序结束
A51 MACRO ASSEMBLER FS03 01/07/2007 16:33:04 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
D2 . . . . . . . . C ADDR 0047H A
D3 . . . . . . . . C ADDR 0049H A
DELAY. . . . . . . C ADDR 0045H A
EXT0 . . . . . . . C ADDR 003EH A
IE . . . . . . . . D ADDR 00A8H A
LOOP . . . . . . . C ADDR 0016H A
LOOP1. . . . . . . C ADDR 0037H A
NEXT . . . . . . . C ADDR 0027H A
NEXT0. . . . . . . C ADDR 0031H A
NEXT1. . . . . . . C ADDR 0033H A
P3 . . . . . . . . D ADDR 00B0H A
START. . . . . . . C ADDR 000DH A
TABLE. . . . . . . C ADDR 0052H A
TF0. . . . . . . . B ADDR 0088H.5 A
TH0. . . . . . . . D ADDR 008CH A
TL0. . . . . . . . D ADDR 008AH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -