📄 yinyue.lst
字号:
A51 MACRO ASSEMBLER YINYUE 04/18/2006 22:52:24 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN yinyue.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE yinyue.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;;;;;;;;;生日快乐歌汇编源程序《摘自8051单片机实践与应用》(吴金戌著);;;;;;;;;;;;
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;简谱见光盘;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4
0000 5 ORG 00H ;主程序起始地址
0000 800B 6 JMP START ;跳至主程序
000B 7 ORG 0BH ;Timer0中断起始地址
000B 8040 8 JMP TIM0 ;跳至Timer0中断子程序
000D 9 START: ;主程序
000D 758901 10 MOV TMOD,#01H ;设置Timer0工作在MODE1
0010 75A882 11 MOV IE,#82H ;Timer0中断使能
0013 12 START0:
0013 753000 13 MOV 30H,#00H ;取简谱码指针,30H为寄存器
0016 14 NEXT:
0016 E530 15 MOV A,30H ;简谱码指针载入累加器A
0018 90008B 16 MOV DPTR,#TABLE ;去TABLE取简谱码
001B 93 17 MOVC A,@A+DPTR
001C FA 18 MOV R2,A ;取到的简谱码暂存于R2
001D 602A 19 JZ END0 ;是否取到00(结束码)?
001F 540F 20 ANL A,#0FH ;不是,则取低四位(节拍码)
0021 FD 21 MOV R5,A ;将节拍码存入R5
0022 EA 22 MOV A,R2 ;将取到的简谱码再载入A
0023 C4 23 SWAP A ;高低4位交换
0024 540F 24 ANL A,#0FH ;取低4位(音符码)
0026 7004 25 JNZ SING ;取到的音符码是否为0?
0028 C28C 26 CLR TR0 ;是则不发音
002A 8017 27 JMP D1 ;跳至D1
002C 28 SING: ;演奏子程序
002C 14 29 DEC A ;取到的音符码减1(不含0)
002D F522 30 MOV 22H,A ;存入22H(寄存器)
002F 23 31 RL A ;乘2
0030 90006D 32 MOV DPTR,#TABLE1 ;至TABLE1取相对高位字节计手
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -