因為在看書的時候,看到了這樣一句話【單片機的案件處理子程序應該盡可能少占用CPU的運行時間,并且盡可能將鍵盤掃描安排在程序空余的時間,以滿足實時準確響應按鍵請求的目的】
大家怎么看?
因為在看書的時候,看到了這樣一句話【單片機的案件處理子程序應該盡可能少占用CPU的運行時間,并且盡可能將鍵盤掃描安排在程序空余的時間,以滿足實時準確響應按鍵請求的目的】
大家怎么看?
我是用中斷實行音樂播放。設備是51單片機。
這里,我將秒表和音樂播放放在一起。運行的時候發現有很刺耳的聲音(不是音樂),同時數碼管不顯示時鐘,嗯鍵盤也完全沒有作用。
Break2:
PUSH PSW
PUSH ACC ;保護現場
MOVTL1,#000H;賦計數初值,每10ms中斷一次
MOVTH1,#0DCH
DJNZ 61H,back1 ;10毫秒未到,返回 ,61的初值為#01H
JBCounState,COUNT
JBAlarmRing1,MUSIC1
LJMP return1
COUNT:
MOV 61H,#01H ;61H存放中斷次數
MOV A,#01H
ADD A,35H
MOV 35H,A
JBAlarmRing1,MUSIC1
CJNE A,#64H,back1 ;是否到達100個10毫秒,沒有則返回
MOV 35H,#00H ;毫秒位清零
MOV A,#01H
ADD A,36H ;秒位加1
MOV 36H,A
CJNE A,#3CH,back1 ;60秒到了沒有
MOV 36H,#00H ;秒位清零
MOV A,#01H
ADD A,37H ;小時位加1
MOV 37H,A
back1: LJMP return1 ;返回
return1:
POP ACC
POP PSW ;恢復現場
RETI ;中斷返回
//delay1:
//push 07h ;2毫秒延遲
//push 06h
//MOV R7,#1EH
//DE1: MOV R6,#1FH
//D21: DJNZ R6,$
//DJNZ R7,DE1
//pop 06H
//pop 07H
//RET
;============================================================================================
MUSIC1:
NOP
MOV DPTR,#MDAT ;表頭地址送DPTR
INC62H
MOV B,#00H ;表序號清0
MUSIC1_1:
NOP
CLR A
MOVCA,@A+DPTR ;查表取代碼
JZ END1_0 ;是00H,則結束
CJNEA,#0FFH,MUSIC1_5
LJMP MUSIC1_3
MUSIC1_5:
NOP
MOV 63H,A ;取音符代碼送63H
INCDPTR
MOV A,B
MOVC A,@A+DPTR ;取節拍代碼送64H
MOV 64H,A
MUSIC1_2:
NOP
CPL P1.6
MOV A,63H
MOV R3,A
LCALL MDEL1_0 ;最大一次是2毫秒
AJMPMUMIAO
MUSIC1_3:
NOP
//CLR TR0 ;休止100毫秒
SETBP1.6
INC DPTR
//MOVA,#7DH ;休止500毫秒
MOV A,B
MOVC A,@A+DPTR ;取節拍代碼送64H
MOV 64H,A
MUMIAO:
MOVA,35H
CJNE A,#64H,MUSIC1_2_0 ;是否到達100個10毫秒,沒有則MUSIC1_2_0
MOV 35H,#00H ;毫秒位清零
MOV A,#01H
ADD A,36H ;秒位加1
MOV 36H,A
CJNE A,#3CH,MUSIC1_2_0 ;60秒到了沒有
MOV 36H,#00H ;秒位清零
MOV A,#01H
ADD A,37H ;小時位加1
MOV 37H,A
MUSIC1_2_0:
MOV A,64H
CJNE A,62H,MUSIC1_2 ;中斷計數器(20H)=R7否?;不等,則繼續循環
//LJMP MUSIC1_4
//MOV R3,A
//LCALL MDEL1_0
MUSIC1_4:
MOV 62H,#00H ;等于,則取下一代碼
MOV 63H,#00H ;存入音樂音符 清零
MOV 64H,#00H ;存入音樂節拍 清零
INC DPTR
LJMP MUSIC1_1
END1_0:
NOP
SETBP1.6
CLRAlarmRing1
AJMPreturn2
MDEL1_0:
MOV R4,#02H ;延遲(2+13*R3)*1.09=
NOP
DJNZ R4,$
NOP
DJNZ R3,MDEL1_0
RET
NOP
return2:
POP ACC
POP PSW ;恢復現場
RETI ;中斷返回
MDAT:
DB2DH,30H,2DH,10H,28H,40H,2DH,40H,22H,40H,24H,80H
DB2DH,30H,2DH,10H,28H,40H,2DH,40H,1EH,40H,22H,80H
DB2DH,30H,2DH,10H,16H,40H,1BH,40H,22H,40H,24H,40H,28H,40H,0FFH,10H
DB19H,30H,19H,10H,1BH,40H,22H,40H,1EH,40H,22H,80H
DB00H