?? 兩只蝴蝶.asm
字號:
org 0000h
ajmp main
org 000bh/*T0中斷入口*/
ajmp intt0/*T0中斷服務(wù)子程序*/
org 0030h/*主程序起始地址*/
main: mov tmod,#01h/*設(shè)置T0為16位定時器*/
mov ie,#82h/*開中斷*/
start: mov 30h,#00h/*取簡譜碼指針*/
next: mov a,30h/*簡譜指針載入A*/
mov dptr,#tab
movc a,@a+dptr
mov r2,a/*取到的簡碼暫存R2*/
jz end0/*是否取到結(jié)束嗎*/
anl a,#0fh/*不是,則取低4位*/
mov r5,a/*將節(jié)拍碼存R5*/
mov a,r2/*將取到的簡譜碼再載入A*/
swap a/*高低四位交換*/
anl a,#0fh/*取低四位(音符碼)*/
jnz sing/*取到的音符碼為0嗎*/
clr tr0/*是,則不發(fā)音*/
ajmp d1/*跳到D1*/
sing: dec a/*取到的音符碼減1(不含0)*/
mov 22h,a/*存入22H*/
rl a/*乘2*/
mov dptr,#tab1/*至TAB1取相對的低位字節(jié)計數(shù)值*/
movc a,@a+dptr
mov th0,a/*取到的高位字節(jié)存入TH0*/
mov 21h,a/*取到高位字節(jié)存入21H*/
mov a,22h/*再載入取到的音符碼*/
rl a/*乘2*/
inc a/*加1*/
movc a,@a+dptr/*至TAB1取相對的低字節(jié)計數(shù)值*/
mov tl0,a/*取到的低位字節(jié)存入TL0*/
mov 20h,a/*取到的低位字節(jié)存入20H*/
setb tr0/*啟動T0*/
d1: acall delay/*基本單位時間1/4拍187毫秒*/
inc 30h/*取簡碼指針加1*/
ajmp next/*取下一個碼*/
end0: clr tr0/*停止T0*/
ajmp start/*重復(fù)循環(huán)*/
intt0: push acc/*將A的值暫存于堆棧*/
push psw/*將PSW的值暫存于堆棧*/
mov tl0,20h/*重設(shè)計數(shù)值*/
mov th0,21h
cpl p2.1/*將P1.7位反相*/
pop psw
pop acc/*從堆棧取回A,PSW的值*/
reti/*中斷返回*/
delay: mov r7,#02h/*187MS延時*/
dl1: mov r4,#187
dl2: mov r3,#248
djnz r3,$
djnz r4,dl2
djnz r7,dl1
djnz r5,delay/*決定節(jié)拍*/
ret
tab1:
DW 64260,64400,64524,64580
DW 64684,64777,64820,64898
DW 64968,65030,65058,65110
DW 65157,65178,65217
;兩只蝴蝶
tab:
DB 62H,52H,64H,04H
DB 52H,62H,52H,44H,04H
DB 22H,42H,54H,64H,52H,42H,22H,42H,14H,04H
DB 62H,52H,64H,04H
DB 52H,62H,52H,44H,04H
DB 22H,42H,54H,64H,52H,42H,22H,42H,54H,04H
DB 62H,52H,64H,04H
DB 52H,62H,52H,44H,04H
DB 22H,42H,54H,64H,52H,42H,22H,42H,14H,04H
DB 62H,82H,84H,04H
DB 82H,92H,82H,64H,04H
DB 52H,62H,54H,64H,52H,42H,22H,42H,44H,04H
DB 82H,82H,92H,0B2H,0A2H,0A2H,92H,62H,52H,52H,66H,04H
DB 62H,62H,82H,94H,94H,22H,62H,56H,04H
DB 62H,82H,82H,62H,84H,04H
DB 0B4H,0A2H,92H,0A2H,64H,04H
DB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04H
DB 82H,82H,92H,0B2H,0A2H,0A2H,92H,62H,52H,52H,66H,04H
DB 62H,62H,82H,94H,94H,22H,62H,56H,04H
DB 62H,82H,82H,62H,84H,04H
DB 0B4H,0A2H,92H,0A2H,64H,04H
DB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04H
DB 62H,82H,82H,62H,84H,04H
DB 0B4H,0A2H,92H,0A2H,64H,04H
DB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04H
DB 00H
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -