標(biāo)題:
《小星星》單片機(jī)匯編程序
[打印本頁(yè)]
作者:
達(dá)林
時(shí)間:
2018-11-27 10:19
標(biāo)題:
《小星星》單片機(jī)匯編程序
只有音樂(lè)發(fā)聲匯編程序,沒(méi)有加入LED燈,供參考。數(shù)據(jù)代碼已改為小星星發(fā)聲
;**********************************************
ORG 0000H
SJMP MAIN
ORG 0BH
AJMP TIME0
;*************主程序************************
MAIN: MOV SP,#60
MOV TMOD,#01H ;T0定時(shí)工作方式
MOV IE,#82H ;CPU 中斷允許,T0中斷允許
START0: MOV 30H,#00H ;TABLE 相對(duì)地址指針
NEXT: MOV A,30H
MOV DPTR,#TABLE ;到TABLE處取 簡(jiǎn)譜碼 節(jié)拍 碼
MOVC A,@A+DPTR
MOV R2,A ;取到的簡(jiǎn)譜碼 節(jié)拍碼 暫存于R2中
JZ ENDF ;取到 00 結(jié)束
ANL A,#0FH ;否,取低四位 節(jié)拍 碼
MOV R5,A ;將節(jié)拍碼存于R5中
MOV A,R2 ;簡(jiǎn)譜碼 節(jié)拍 碼 給A
SWAP A ;高4位 與 低4位 交換
ANL A,#0FH ;取簡(jiǎn)譜 碼
JNZ SING ;取到的簡(jiǎn)譜 碼不是0,則去發(fā)聲
CLR TR0 ;取到0 則不發(fā)聲
SJMP DLY1 ;節(jié)拍延時(shí)子程序( 隨節(jié)拍碼變化,延時(shí)時(shí)間不同)
;---------------發(fā)聲-----------------------
SING: DEC A ;取到的簡(jiǎn)譜碼減1
;(簡(jiǎn)譜碼計(jì)數(shù)值16位數(shù)據(jù)存儲(chǔ)首地址從TABLE1 《相對(duì)地址》0處開(kāi)始放起,所以要減1)
MOV 22H,A ;存入(22H)中
RL A ;乘2 因?yàn)槿〉臄?shù)據(jù)占兩字節(jié)(16位)
;所以指針增加量要乘2
MOV DPTR,#TABLE1
;...........簡(jiǎn)譜碼轉(zhuǎn)換為相應(yīng)定時(shí)器16位計(jì)數(shù)值.............
MOVC A,@A+DPTR ;到TABLE1取相應(yīng)的高字節(jié)計(jì)數(shù)值
MOV TH0,A ;高字節(jié)計(jì)數(shù)值存入TH0和(21H)中
MOV 21H,A
MOV A,22H ;減1的簡(jiǎn)譜碼給A
RL A ;乘2 因?yàn)槿〉臄?shù)據(jù)占兩字節(jié)(16位)
;所以指針增加量要乘2
INC A ;A 增加 取下一個(gè)字節(jié)計(jì)數(shù)值
;...........簡(jiǎn)譜碼轉(zhuǎn)換為相應(yīng)定時(shí)器16位計(jì)數(shù)值.............
MOVC A,@A+DPTR ;到TABLE1取相應(yīng)的低字節(jié)計(jì)數(shù)值
MOV TL0,A ;低字節(jié)計(jì)數(shù)值存入TL0和(20H)中
MOV 20H,A
SETB TR0 ;啟動(dòng)T0定時(shí)器讓喇叭發(fā)出不同頻率聲音
;---------------節(jié)拍延時(shí)-------------------
DLY1: ACALL DELAY ;基本單位時(shí)間為1/4拍 187ms
INC 30H ;取下一個(gè)簡(jiǎn)譜碼 節(jié)拍 碼
SJMP NEXT
;---------------歌放完結(jié)束---------------
ENDF: CLR TR0 ;關(guān)閉T0定時(shí)器
AJMP START0 ;反復(fù)循環(huán)
;****T0中斷子程序(用來(lái)驅(qū)動(dòng)喇叭發(fā)出不同頻率聲音)**************
TIME0: PUSH ACC
PUSH PSW
MOV TL0,20H ;重裝計(jì)數(shù)值
MOV TH0,21H
CPL P3.7 ;驅(qū)動(dòng)發(fā)聲
POP PSW
POP ACC
RETI
;******************節(jié)拍延時(shí)187ms****************************
DELAY: MOV R7,#187 ;187ms延時(shí)子程序
DLY2: MOV R4,#02
DLY3: MOV R3,#248
DJNZ R3,$
DJNZ R4,DLY3
DJNZ R7,DLY2
DJNZ R5,DELAY
RET
;*******音符T值表(用來(lái)讓定時(shí)器發(fā)出不同的頻率)**DW 表示一個(gè) 計(jì)數(shù)值 占兩個(gè)字節(jié)存儲(chǔ)單元***************
TABLE1: DW 64260,64400,64524,64580,64684 ;低音SO 低音LA 低音SI /中音DO 中音RE
DW 64777,64820,64898,64968,65030 ;中音MI 中音FA 中音SO 中音LA 中音SI
DW 65058,65110,65157,65178,65217 ;高音DO 高音RE 高音MI 高音FA 高音SO
;*********簡(jiǎn)譜碼 節(jié)拍碼(高4位簡(jiǎn)譜碼 ,低4位節(jié)拍碼)*************
TABLE: DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
END
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1