?? 利用定時器演奏音樂.asm
字號:
ORG 001BH ;定時器T1的中斷入口
MOV TH1,R1 ;重裝定時初值
MOV TL1,R0 ;
CPL P3.7 ;P1.0輸出方波
RETI ;中斷返回
ORG 100H ;主程序
START:MOV TMOD,#01H ;定時器T1工作方式1
MOV IE,#88H ;允許T1中斷
MOV DPTR,#TAB ;表格首地址
LOOP:CLR A ;
MOVC A,@A+DPTR ;查表
MOV R1,A ;定時器高8為存R1
INC DPTR ;
CLR A ;
MOVC A,@A+DPTR ;查表
MOV R0,A ;定時器低8為存R0
ORL A,R1 ;
JZ NEXT0 ;全0為休止符
MOV A,R0 ;
ANL A,R1 ;
CJNE A,#0FFH,NEXT ;全1表示樂曲結束
SJMP START ;從頭開始循環(huán)演奏
NEXT:MOV TH1,R1 ;裝入定時值
MOV TL1,R0 ;
SETB TR1 ;啟動定時器
SJMP NEXT1 ;
NEXT0:CLR TR1 ;關閉定時器停止發(fā)音
NEXT1:CLR A ;
INC DPTR ;
MOVC A,@A+DPTR ;查延遲常數(shù)
MOV R2,A ;
LOOP1:LCALL D200 ;調(diào)用延時200mS子程序
DJNZ R2,LOOP1 ;控制延遲次數(shù)
INC DPTR ;
AJMP LOOP ;處理下一個音符
D200:MOV R4,#81H ;延時20mS子程序
D200B:MOV A,#0FFH ;
D200A:DEC A ;
JNZ D200A ;
DEC R4 ;
CJNE R4,#00H,D200B ;
RET ;
TAB: DB 0FEH,25H,02H,0FEH,25H,02H;
DB 0FEH,84H,02H,0FEH,84H,02H;
DB 0FEH,84H,04H,0FEH,25H,04H;
DB 0FEH,25H,02H,0FEH,84H,02H;
DB 0FEH,0C0H,04H,0FEH,0C0H,04H;
DB 0FEH,98H,02H,0FEH,84H,02H;
DB 0FEH,57H,08H,00H,00H,04H;
DB 0FFH,0FFH;
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -