⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p15_2.asm

📁 单片机原理与应用实例教程 单片机原理与应用实例教程
💻 ASM
字号:
		SPK	 EQU	P2.3			;定义引脚
		ORG 0000H
		LJMP MAIN
		ORG 000BH
		LJMP INT_T0

;音乐数据表,按照音符--节拍--音符--节拍的格式存储
;即,第一个单元存储1号音符,第二个单元存储1号音符的节拍
;    第三个单元存储2号音符,第四个单元存储2号音符的节拍
;单元中0FF表示休止符,00H则表示音乐结束。
TAB:	DB	18H, 	30H, 	1CH, 	10H, 	20H, 	40H
		DB 	1CH, 	10H, 	18H, 	10H, 	20H, 	10H
		DB	1CH, 	10H, 	18H, 	40H, 	1CH, 	20H
		DB	20H, 	20H, 	1CH, 	20H, 	18H, 	20H 
		DB 	20H, 	80H, 	0FFH, 	20H, 	30H, 	1CH
		DB	10H, 	18H, 	20H, 	15H, 	20H, 	1CH
		DB	20H, 	20H, 	20H, 	26H, 	40H, 	20H
		DB	20H, 	2BH, 	20H, 	26H, 	20H, 	20H
		DB	20H, 	30H, 	80H, 	0FFH, 	20H, 	20H
		DB	1CH, 	10H, 	18H, 	10H, 	20H, 	20H
		DB	26H, 	20H, 	2BH, 	20H, 	30H, 	20H
		DB	2BH, 	40H, 	20H, 	20H, 	1CH, 	10H
		DB	18H, 	10H, 	20H, 	20H, 	26H, 	20H
		DB	2BH, 	20H, 	30H, 	20H, 	2BH, 	40H
		DB	20H, 	30H, 	1CH, 	10H, 	18H, 	20H
		DB	15H, 	20H, 	1CH, 	20H, 	20H, 	20H
		DB	26H, 	40H, 	20H, 	20H, 	2BH, 	20H
		DB	26H, 	20H, 	20H, 	20H, 	30H, 	80H
		DB 	20H, 	30H, 	1CH, 	10H, 	20H, 	10H
		DB	1CH, 	10H, 	20H, 	20H, 	26H, 	20H
		DB	2BH, 	20H, 	30H, 	20H, 	2BH, 	40H
		DB	20H, 	15H, 	1FH, 	05H, 	20H, 	10H
		DB 	1CH, 	10H, 	20H, 	20H, 	26H, 	20H
		DB	2BH, 	20H, 	30H, 	20H, 	2BH, 	40H
		DB	20H, 	30H, 	1CH, 	10H, 	18H, 	20H
		DB	15H, 	20H, 	1CH, 	20H, 	20H, 	20H
		DB	26H, 	40H, 	20H, 	20H, 	2BH, 	20H
		DB	26H, 	20H, 	20H, 	20H, 	30H, 	30H
		DB	20H, 	30H, 	1CH, 	10H, 	18H, 	40H
		DB	1CH, 	20H, 	20H, 	20H, 	26H, 	40H
		DB	13H, 	60H, 	18H, 	20H,	15H, 	40H
		DB	13H, 	40H, 	18H, 	80H, 	00H

;延时子程序,入口参数为R0,R0存储循环次数
DELAY:	NOP
DL1: 	MOV R1, #02H
DL2: 	NOP 
		DJNZ R1, DL2
		NOP
		DJNZ R0, DL1
		RET

MAIN:	MOV SP, #50H 
		MOV TMOD, #01H
		MOV TH0, #0D8H
		MOV TL0, #0EFH
		MOV IE, #82H

MUSIC0:	MOV DPTR, #TAB
		MOV 20H, #00H

MUSIC1:	CLR A 
		MOVC A, @A+DPTR
		INC DPTR


		JNZ MUSIC2

		MOV R0, #0FFH
		LCALL DELAY
		LJMP MUSIC0


MUSIC2:	CJNE A, #0FFH, MUSIC3;
		
		ACALL PAUSE
		AJMP MUSIC1


MUSIC3:	MOV R6,A

		MOV A, #0
		MOVC A, @A+DPTR
		MOV R7, A 
		INC DPTR

		SETB TR0
 
MUSIC4:	CPL SPK	
		
		MOV A, R6
		MOV R0, A
		LCALL DELAY
		MOV A, R7


		;20H存储定时中断的发生次数,
		;一次定时时间为1个节拍
		CJNE A, 20H, MUSIC4
		
		
		MOV 20H, #00H
		
		LJMP MUSIC1


PAUSE:	CLR TR0 			;休止子程序,关闭中断,即此段时间不产生声音
		MOV R2,#0DH
LOOP:	MOV R0,#0FFH
		LCALL DELAY
		DJNZ R2, LOOP
		RET

INT_T0:	INC 20H 			;中断服务子程序,中断次数加1
		MOV TH0, #0D8H
		MOV TL0, #0EFH 	;12M晶振,形成10毫秒中断
		RETI

		END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -