因为在看书的时候,看到了这样一句话【单片机的案件处理子程序应该尽可能少占用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