📄 wyinyue.#2
字号:
;参考程序A.WYINYUE.ASM ;程序功能:循环播放1234567i--i7654321音调
$INCLUDE (C8051F020.inc)
ORG 0
LJMP MAIN
ORG 1BH
JMP TINT ;定时器T1中断入口
ORG 0100H
MAIN:MOV SP,#60H
MOV WDTCN,#0DEH
MOV WDTCN,#0ADH ; 禁止看门狗
MOV P5,#10H ;用P5.4驱动语音放大器
MOV TMOD ,#10H ;置T1工作方式1,16位计数
ORL IE,#88H ;开T1中断
M1: MOV DPTR,#TONE ;查表,得到计数值
MOV A,#0
LOOP:MOVC A,@A+DPTR
JZ M1
MOV TH1,A ;查表得到计数值高8位,送TH1
MOV R5,A ;在R5中保留TH1的计数值 ;
INC DPTR
MOV A,#0
MOVC A,@A+DPTR
MOV TL1,A ;查表得到计数值低8位,送TL1
MOV R6,A ; 在R6中保留TL1的计数值 ;
SETB TR1 ;T1允许中断.
INC DPTR
MOV A,#0
MOVC A,@A+DPTR ;查表得到单音节的节拍宽度,做为延时宽度.
MOV R2,A
DELAY1:MOV R3,#0H ;DELAY1是延时子程序
DELAY2:MOV R4,#0FFH
DJNZ R4,$
DJNZ R3,DELAY2
DJNZ R2,DELAY1
INC DPTR
MOV A,#0
JMP LOOP
TINT: CLR TR1 ; 定时器T1中断子程序
MOV A,P5 ; P5.4求反,产生方波
CPL A
MOV P5,A
MOV TH1,R5 ;恢复TH1,TL1的计数值
MOV TL1,R6
SETB TR1
RETI
TONE:DB 0FCH,46H,04H,0FCH,0AEH,04H ;音调(16位).节拍(8位)
DB 0FDH,0BH,04H,0FDH,34H,04H
DB 0FDH,83H,04H,0FDH,0C8H,04H
DB 0FEH,06H,04H,0FEH,22H,04H
DB 0FEH,22H,04H,0FEH,06H,04H
DB 0FDH,022H,04H,0FDH,06H,04H
DB 0FDH,0C8H,04H,0FDH,83H,04H
DB 0FDH,34H,04H,0FDH,0BH,04H
DB 0FCH,0AEH,04H,0FCH,46H,04H
DB 00H,00H,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -