?? wyinyue.#2
字號:
;參考程序A.WYINYUE.ASM ;程序功能:循環(huán)播放1234567i--i7654321音調(diào)
$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位計數(shù)
ORL IE,#88H ;開T1中斷
M1: MOV DPTR,#TONE ;查表,得到計數(shù)值
MOV A,#0
LOOP:MOVC A,@A+DPTR
JZ M1
MOV TH1,A ;查表得到計數(shù)值高8位,送TH1
MOV R5,A ;在R5中保留TH1的計數(shù)值 ;
INC DPTR
MOV A,#0
MOVC A,@A+DPTR
MOV TL1,A ;查表得到計數(shù)值低8位,送TL1
MOV R6,A ; 在R6中保留TL1的計數(shù)值 ;
SETB TR1 ;T1允許中斷.
INC DPTR
MOV A,#0
MOVC A,@A+DPTR ;查表得到單音節(jié)的節(jié)拍寬度,做為延時寬度.
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求反,產(chǎn)生方波
CPL A
MOV P5,A
MOV TH1,R5 ;恢復TH1,TL1的計數(shù)值
MOV TL1,R6
SETB TR1
RETI
TONE:DB 0FCH,46H,04H,0FCH,0AEH,04H ;音調(diào)(16位).節(jié)拍(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 + -