📄 bzq004.asm
字号:
ORG 0000H
AJMP 40H
TABLE: DB 00H,01H,02H,03H, 04H,05H,06H,07H
DB 08H,09H,0AH,0BH, 0CH,0DH,0EH,0FH
K1 EQU P1.0
K2 EQU P1.1
K3 EQU P1.2
K4 EQU P1.3
SS EQU P1.6
MOSI EQU P1.7
SCLK EQU P3.2
INT EQU P3.3
ORG 40H
MOV R0, #01H
MOV DPTR,#TABLE
MOV 20H, #00H
MOV 21H, #00H
MAIN:SETB EA
SETB EX1
SETB IT1
WAIT:JNB K1, PLAY
JNB K2, JIA
JNB K3, JIAN
JNB K4, STOP
AJMP WAIT
PLAY: ACALL YS50
ACALL POWERUP
MOV A, 20H ;送放音地址底8位
ACALL SEND
MOV A, 21H ;送放音地址高8位
ACALL SEND
MOV A,#1110000H
ACALL SEND
SETB SS
MOV A,#0F0H
ACALL SEND
SETB SS
PLAY2: JNB K4, STOP ;STOP=0停止放音
JB INT,PLAY2 ;无OVF EOM继续放音
ACALL STOPP ;停止当前操作
AJMP WAIT
;停止当前操作<< STOP >> 8位
STOPP: MOV A,#30H ;发 0X11 0XXX
ACALL SEND ;
SETB SS ;关片选
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
RET
;停止当前操作掉电<< STOPPWRDN >> 8位
STOP: ACALL YS50
MOV A,#10H ;发0X010 XXXXXXXXXX
ACALL SEND ;
SETB SS ;关片选
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
AJMP WAIT
JIA: ACALL YS50
INC R0
CJNE R0,#10H,JIA1;
AJMP 40H
JIA1: MOV A,R0
MOVC A, @A+DPTR
MOV 21H,A
INC R0
MOV A,R0
MOVC A,@A+DPTR
MOV 20H,A
AJMP WAIT
JIAN: ACALL YS50
DEC R0
DEC R0
CJNE R0,#0FFH,JIAN1;如果R0为FF时,程序顺序执行,否则跳转到JIAN1
MOV R0,#0FH
JIAN1: MOV A,R0
MOVC A, @A+DPTR
MOV 20H,A
DEC R0
MOV A,R0
MOVC A,@A+DPTR
MOV 21H,A
INC R0
AJMP WAIT
POWERUP: CLR SS ;ISD POWER UP
MOV A,#20H ;OUT 00100 XXX
ACALL SEND
SETB SS ;SHUT OUT PIAN XUAN
ACALL YS50 ;50MS DELAY
RET
SEND: CLR SS ;开片选
CLR MOSI
MOV R6,#08H ;
CLR SCLK ;时钟SCLK=0
SEND1: MOV C,ACC.0 ;
MOV MOSI,C ;数据写 MOSI
SETB SCLK ;时钟SCLK=1
RR A ;
CLR SCLK ;时钟SCLK=0
DJNZ R6,SEND1 ;
RET
;**** 10mS延时 ****
YS1: MOV TMOD,#01H ;
MOV TH0,#0D8H ;10mS延时初值置入
MOV TL0,#0F0H ;(65536-X)*1=10MS
SETB TR0 ;65536-(10000/1)=D8F0H
JNB TF0,$ ;
CLR TF0 ;
CLR TR0 ;
RET ;
;**** 50mS延时 ****
YS50: MOV TMOD,#01H ;
MOV TH0,#3CH ;50mS延时初值置入
MOV TL0,#0B0H ;(65536-X)*1=50MS
SETB TR0 ;65536-(50000/1)
JNB TF0,$ ;
CLR TF0 ;
CLR TR0 ;
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -