📄 happy_birthday.lst
字号:
A51 MACRO ASSEMBLER HAPPY_BIRTHDAY 06/03/2005 21:22:10 PAGE 1
MACRO ASSEMBLER A51 V6.12
OBJECT MODULE PLACED IN .\happy_birthday.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE .\happy_birthday.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ;本程序实现蜂鸣器演奏歌曲功能
3 ;乐曲名称:生日快乐
4 ;///////////////////////////////////////////
00B7 5 BUZZER EQU P3.7
0000 6 org 0000h ;主程序起始地址
0000 0130 7 ajmp main ;跳至主程序
000B 8 org 000bh ;timer0中断起始地址
000B 8063 9 jmp tim0 ;跳至timer0中断子程序
10 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0030 11 org 0030h
0030 12 main:
0030 758901 13 mov tmod,#01h ;设timer0在MODE1
0033 75A882 14 mov ie,#82h ;中断使能
0036 15 start0:
0036 753000 16 mov 30h,#00h ;取简谱码指针
0039 E530 17 next: mov a,30h ;简谱码指针载入A
003B 9000AE 18 mov dptr,#table ;至table取简谱码
003E 93 19 movc a,@a+dptr
003F FA 20 mov r2,a ;取到的简谱码暂存于R2
0040 602A 21 jz end0 ;是否取到00(结束码)?
0042 540F 22 anl a,#0fh ;不是,则取低4位(节拍码)
0044 FD 23 mov r5,a ;将节拍码存入R5
0045 EA 24 mov a,r2 ;将取到的简谱码再载入A
0046 C4 25 swap a ;高低四位交换
0047 540F 26 anl a,#0fh ;取低四位(音符码)
0049 7004 27 jnz sing ;取到的音符码是否为零?
004B C28C 28 clr tr0 ;是,则不发音
004D 8017 29 jmp d1
004F 14 30 sing: dec a ;取到的音符码减1(不含0).
0050 F522 31 mov 22h,a ;存入(22H).
0052 23 32 rl a ;乘2
0053 900090 33 mov dptr,#table1 ;至table1取相对的高位字节计手
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -