📄 单片机唱歌.lst
字号:
A51 MACRO ASSEMBLER 礯芲籣砡竉 05/04/2008 21:20:49 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN 单片机唱歌.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 单片机唱歌.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 ORG 0000H
0000 02001E 2 LJMP START
001B 3 ORG 001BH
001B 020067 4 LJMP TIME1
001E 758910 5 START: MOV TMOD,#10H ;T1工作在方式1
0021 75A888 6 MOV IE,#88H ;中断使能
0024 754000 7 MAIN: MOV 40H,#00H ;设简谱码指针初始值
0027 E540 8 NEXT: MOV A,40H ;简谱码指针暂存累加器A
0029 900099 9 MOV DPTR,#TABLE ;取简谱码
002C 93 10 MOVC A,@A+DPTR
002D B40003 11 CJNE A,#00H,PLAY ;取到的简谱码不是结束码,转
0030 020062 12 LJMP STOP ;是结束码,退出
0033 F9 13 PLAY: MOV R1,A ;R1暂存简谱码
0034 540F 14 ANL A,#0FH ;取节拍码
0036 FA 15 MOV R2,A ;节拍码暂存R2
0037 E9 16 MOV A,R1
0038 54F0 17 ANL A,#0F0H ;取音符码
003A B40005 18 CJNE A,#00H,MUSIC ;音符码为不为0,调发音子程序
003D C28E 19 CLR TR1 ;音符码为0,不发音
003F 02005A 20 LJMP DEL
0042 C4 21 MUSIC:SWAP A
0043 14 22 DEC A
0044 F522 23 MOV 22H,A
0046 2522 24 ADD A,22H
0048 FB 25 MOV R3,A
0049 900087 26 MOV DPTR,#TABLE1 ;取相应计数值
004C 93 27 MOVC A,@A+DPTR
004D F58D 28 MOV TH1,A ;暂存高位字节
004F F521 29 MOV 21H,A
0051 EB 30 MOV A,R3
0052 04 31 INC A
0053 93 32 MOVC A,@A+DPTR ;取相应计数值的低位字节
0054 F58B 33 MOV TL1,A ;暂存低位字节
0056 F520 34 MOV 20H,A
0058 D28E 35 SETB TR1 ;启动定时器
005A 120078 36 DEL: LCALL DELAY
005D 0540 37 INC 40H ;指向下一个简谱码
005F 020027 38 LJMP NEXT
0062 C28E 39 STOP: CLR TR1 ;停止定时器
0064 020024 40 LJMP MAIN
0067 C0E0 41 TIME1:PUSH ACC ;现场保护
0069 C0D0 42 PUSH PSW
006B B297 43 CPL P1.7 ;P1.7反相输出,演奏音乐
006D 85208B 44 MOV TL1,20H ;重设计数值
0070 85218D 45 MOV TH1,21H
0073 D0D0 46 POP PSW
0075 D0E0 47 POP ACC
0077 32 48 RETI
0078 7F02 49 DELAY:MOV R7,#02H ;4/4曲调,延时125ms子程序
007A 7E7D 50 DELA1:MOV R6,#125
007C 7DF8 51 DELA2:MOV R5,#248
007E DDFE 52 DJNZ R5,$
0080 DEFA 53 DJNZ R6,DELA2
0082 DFF6 54 DJNZ R7,DELA1
0084 DAF2 55 DJNZ R2,DELAY
0086 22 56 RET
0087 FC0C 57 TABLE1:DW 64524,64580,64684,64777 ;简码值: ,1,2,3
0089 FC44
A51 MACRO ASSEMBLER 礯芲籣砡竉 05/04/2008 21:20:49 PAGE 2
008B FCAC
008D FD09
008F FD34 58 DW 64820,64898,64968,65030,65058 ;简码值:4,5,6,7,
0091 FD82
0093 FDC8
0095 FE06
0097 FE22
0099 59 TABLE:;第1行曲子
0099 64426298 60 DB 64H,42H,62H,98H
009D 74927268 61 DB 74H,92H,72H,68H
00A1 64223244 62 DB 64H,22H,32H,44H,32H,22H
00A5 3222
00A7 3C 63 DB 3CH
64 ;第2行曲子
00A8 64426294 65 DB 64H,42H,62H,94H,04H,82H
00AC 0482
00AE 749468 66 DB 74H,94H,68H
00B1 64324254 67 DB 64H,32H,42H,54H,04H,12H
00B5 0412
00B7 2C 68 DB 2CH
69 ;第3行曲子
00B8 749498 70 DB 74H,94H,98H
00BB 84728298 71 DB 84H,72H,82H,98H
00BF 72829272 72 DB 72H,82H,92H,72H,72H,62H,42H,22H
00C3 72624222
00C7 3C 73 DB 3CH
74 ;第4行曲子
00C8 64426294 75 DB 64H,42H,62H,94H,04H,82H
00CC 0482
00CE 749468 76 DB 74H,94H,68H
00D1 64324254 77 DB 64H,32H,42H,54H,04H,12H
00D5 0412
00D7 2C 78 DB 2CH
79 ;结束码
00D8 00 80 DB 00H
81 END
A51 MACRO ASSEMBLER 礯芲籣砡竉 05/04/2008 21:20:49 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
DEL. . . . . . . . C ADDR 005AH A
DELA1. . . . . . . C ADDR 007AH A
DELA2. . . . . . . C ADDR 007CH A
DELAY. . . . . . . C ADDR 0078H A
IE . . . . . . . . D ADDR 00A8H A
MAIN . . . . . . . C ADDR 0024H A
MUSIC. . . . . . . C ADDR 0042H A
NEXT . . . . . . . C ADDR 0027H A
P1 . . . . . . . . D ADDR 0090H A
PLAY . . . . . . . C ADDR 0033H A
PSW. . . . . . . . D ADDR 00D0H A
START. . . . . . . C ADDR 001EH A
STOP . . . . . . . C ADDR 0062H A
TABLE. . . . . . . C ADDR 0099H A
TABLE1 . . . . . . C ADDR 0087H A
TH1. . . . . . . . D ADDR 008DH A
TIME1. . . . . . . C ADDR 0067H A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
TR1. . . . . . . . B ADDR 0088H.6 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -