请教高手如何实现ISD1760汇编语言定点播放功能
请教高手如何实现ISD1760汇编语言定点播放功能一下为我做的程序,无法实现功能,不知问题出在哪里,请指点:
MOSI EQU P3.2 ;数据输入
MISO EQU P3.0 ;数据输出
SS EQU P3.5 ;片选
SCLK EQU P3.4 ;ISD1760时钟
CACHE0 EQU 20H
CACHE1 EQU 21H
CACHE2 EQU 22H
CACHE3 EQU 23H
PLAYERL EQU 7CH ;播放过程地址入口
PLAYERH EQU 7DH
ISDSTART: PUSH ACC
ORL P3,#35H
SETB SS
ACALL REST ;复位
ACALL PD ;ISD掉电
PLAY: ACALL UP ;上电
MOV CACHE0,#40H ;播放命令
MOV CACHE1,#00H
SETB SS
SETB SCLK
CLR MOSI
MOV A,CACHE0
ACALL SENDRECEPTION
MOV A,CACHE1
ACALL SENDRECEPTION
SETB SS
ACALL RD_STATUS
JB ACC.0,PLAY
ACALL DELAY50 ;50mS延时
ACALL DELAY50
SENDPLAY: ACALL UP
MOV CACHE0,PLAYERL
MOV CACHE1,#00H
MOV CACHE2,PLAYERH
MOV CACHE3,#00H
SETB SS
SETB SCLK
CLR MOSI
MOV A,CACHE0
ACALL SENDRECEPTION
MOV A,CACHE1
ACALL SENDRECEPTION
MOV A,CACHE2
ACALL SENDRECEPTION
MOV A,CACHE3
ACALL SENDRECEPTION
SETB SS
ACALL RD_STATUS
JB ACC.0,SENDPLAY ;判断是否接收到地址
PLAYWAIT: ACALL RD_STATUS
JB ACC.2,PLAYWAIT ;等待放音结束
ACALL OVER
POP ACC
RET
OVER:MOV CACHE0,#02H
MOV CACHE1,#00H
MOV A,CACHE0
ACALL SENDRECEPTION
MOV A,CACHE1
ACALL SENDRECEPTION
SETB SS
ACALL DELAY50 ;50mS延时
ACALL DELAY50 ;50mS延时
RET
SENDRECEPTION:MOV A,R7
PUSH ACC
SETB SCLK ;数据收发一体子程序
CLR SS
MOV R7,#08
SENDRECEPTION1: CLR SCLK
NOP
NOP
MOV C,MISO ;接收
RRC A
MOV MOSI,C ;发送
SETB SCLK
DJNZ R7,SENDRECEPTION1
CLR MOSI
POP ACC
MOV R7,A
RET
UP: MOV CACHE0,#01H ;上电
MOV CACHE1,#00H
MOV A,CACHE0
ACALL SENDRECEPTION
MOV A,CACHE1
ACALL SENDRECEPTION
SETB SS
ACALL DELAY50 ;50mS 延时
ACALL DELAY50
RET
REST: MOV CACHE0,#03H ;复位命令
MOV CACHE1,#00H
MOV A,CACHE0
ACALL SENDRECEPTION
MOV A,CACHE1
ACALL SENDRECEPTION
SETB SS
RET
PD: MOV CACHE0,#07H ;掉电命令
MOV CACHE1,#00H
MOV A,CACHE0
ACALL SENDRECEPTION
MOV A,CACHE1
ACALL SENDRECEPTION
SETBSS
RET
RD_STATUS: MOV CACHE0,#05H ;RD_STATUS 返回状态寄存器内容指令
MOV CACHE1,#00H
MOV CACHE2,#00H
MOV A,CACHE0
ACALL SENDRECEPTION
MOV CACHE0,A
MOV A,CACHE1
ACALL SENDRECEPTION
MOV CACHE1,A
MOV A,CACHE2
ACALL SENDRECEPTION
MOV CACHE2,A ;SR1
SETB SS
RET
DELAY50:MOV A,R7
PUSH ACC
MOV R7,#3 ;延时
DELAY500: LCALL LEDOPT
DJNZ R7,DELAY500
POP ACC
RET 汇编几乎没人用了 你还是改C或其他的好点 ;=========================================================================
;CPU = AT89S5224M晶振
;ISD1760
;CPU,39脚 = ISD1760,4脚
;CPU,38脚 = ISD1760,5脚
;CPU,37脚 = ISD1760,6脚
;CPU,36脚 = ISD1760,7脚
;=========================================================================
MOSI EQU P0.1 ;数据输入 ;MOSI 是SPI 接口的“主机输出从机接收端
MISO EQU P0.0 ;数据输出 ;MISO即“主机接收从机发送端”
SS EQU P0.3 ;片选
SCLK EQU P0.2 ;ISD1760时钟
;===================================
CACHE6 EQU 76H
CACHE7 EQU 77H
;=========================================================================
MOV SP,#80H
CLR MOSI
SETB SS
SETB SCLK
SETB P3.7
;=========================================================================
EEQ: ACALL WSW
ACALL WXW
SJMP EEQ
;=========================================================================
WXW: CLR SS
ACALL UP ;上电
;============================================
SETB SS
ACALL CMD-ER ;读CMD-ERR状态字
CLR SS
MOV A,CACHE7
MOV C,ACC.0
JC WXW ;辨别CMD-ERR状态字
;=====================
CLR P3.7 ;点亮LED指示灯
ACALL DELAY ;延迟
;=====================
ACALL SET-PLAY ;发送第一段声音的首末地址
;=====================
;==================================
;=====================
SETB SS
ACALL CMD-ER ;读CMD-ERR状态字
CLR SS
MOV A,CACHE7
MOV C,ACC.0
JC WXW ;辨别CMD-ERR状态字
;=====================
ACALL SET-PLAY1 ;发送第二段声音的首末地址
;=====================
;==================================
;=====================
;============================================
ACALL PD ;下电
SETB SS
;=====================
SETB P3.7 ;熄灭LED指示灯
RET
LJMP $ ;WXW ;
;=========================================================================
;=========================================================================
WSW: CLR SS
ACALL UP ;上电
;============================================
SETB SS
ACALL CMD-ER ;读CMD-ERR状态字
CLR SS
MOV A,CACHE7
MOV C,ACC.0
JC WSW ;辨别CMD-ERR状态字
;=====================
CLR P3.7 ;点亮LED指示灯
ACALL DELAY ;延迟
;=====================
ACALL SET-PLAY2 ;发送第一段声音的首末地址
;=====================
;==================================
;=====================
SETB SS
ACALL CMD-ER ;读CMD-ERR状态字
CLR SS
MOV A,CACHE7
MOV C,ACC.0
JC WSW ;辨别CMD-ERR状态字
;=====================
ACALL SET-PLAY3 ;发送第二段声音的首末地址
;=====================
;==================================
;=====================
;============================================
ACALL PD ;下电
SETB SS
;=====================
SETB P3.7 ;熄灭LED指示灯
RET
LJMP $ ;WSW ;
;=========================================================================
;=========================================================================
;===================================
;===================================
;===================================
;===================================
;=========================================================================
;=========================================================================
;=========================================================================
;=========================================================================
;=========================================================================
;以下这段程序是
;=========================================================================
;===================================================
; ;指定地址播放
;===================================================
SET-PLAY: MOV A,#80H ;指定地址播放命令
ACALL WRITE
MOV A,#00H ;指定地址播放命令
ACALL WRITE
;================
MOV A,#47H ;指定地址播放开始的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放开始的高字节
ACALL WRITE
;================
MOV A,#51H ;指定地址播放结束的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放结束的高字节
ACALL WRITE
;================
RET
;===================================================
; ;指定地址播放
;===================================================
SET-PLAY1: MOV A,#80H ;指定地址播放命令
ACALL WRITE
MOV A,#00H ;指定地址播放命令
ACALL WRITE
;================
MOV A,#17H ;指定地址播放开始的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放开始的高字节
ACALL WRITE
;================
MOV A,#19H ;指定地址播放结束的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放结束的高字节
ACALL WRITE
;================
RET
;===================================================
; ;指定地址播放
;===================================================
SET-PLAY2: MOV A,#80H ;指定地址播放命令
ACALL WRITE
MOV A,#00H ;指定地址播放命令
ACALL WRITE
;================
MOV A,#20H ;指定地址播放开始的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放开始的高字节
ACALL WRITE
;================
MOV A,#25H ;指定地址播放结束的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放结束的高字节
ACALL WRITE
;================
RET
;===================================================
; ;指定地址播放
;===================================================
SET-PLAY3: MOV A,#80H ;指定地址播放命令
ACALL WRITE
MOV A,#00H ;指定地址播放命令
ACALL WRITE
;================
MOV A,#27H ;指定地址播放开始的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放开始的高字节
ACALL WRITE
;================
MOV A,#33H ;指定地址播放结束的低字节
ACALL WRITE
MOV A,#00H ;指定地址播放结束的高字节
ACALL WRITE
;================
RET
;===================================================
PD: MOV A,#07H ; ;PD
ACALL WRITE
MOV A,#00H
ACALL WRITE
RET
;===================================
DELAY: MOV R7,#20H
LP1: MOV R6,#20H
LP2: DJNZ R6,LP2
DJNZ R7,LP1
RET
;===================================
UP: MOV A,#01H ; ;上电
ACALL WRITE
MOV A,#00H
ACALL WRITE
RET
;===================================
;PLAY: MOV A,#40H ; ;播放
;ACALL WRITE
;MOV A,#00H
;ACALL WRITE
;RET
;===================================
CMD-ER: MOV A,#05H
ACALL WRITE
MOV A,#00H
ACALL WRITE
NOP
NOP
CLR SS
ACALL READ
MOV CACHE7,A
ACALL READ
MOV CACHE6,A
SETB SS
RET
;=========================================================================
;以下这段程序是串口SPI的读写程序 ;单片机到1702
;=========================================================================
WRITE: MOV R7,#08H
LOOP1: CLR SCLK
NOP
RRC A
MOV MOSI,C
NOP
SETB SCLK
DJNZ R7,LOOP1
RET
;=========================================================================
;以下这段程序是串口SPI的读写程序 ;1702到单片机
;=========================================================================
READ: ;CLR SS
MOV R7,#08H
LOOP4: SETB SCLK
NOP
CLR SCLK
MOV C,MISO
RRC A ; ;A存的是从1702内读回的数据
DJNZ R7,LOOP4
NOP
;SETB SS
RET
;===================================
;=========================================================================
;=========================================================================
;=========================================================================
;=========================================================================
;===================================
;REST: MOV A,#03H ; ;复位
;ACALL WRITE
;MOV A,#00H
;ACALL WRITE
;RET
;===================================
;STOP: MOV A,#02H ; ;停止
;ACALL WRITE
;MOV A,#00H
;ACALL WRITE
;RET
;===================================
;CLR-INT: MOV A,#04H ; ;CLR-INT
;ACALL WRITE
;MOV A,#00H
;ACALL WRITE
;MOV A,#00H
;ACALL WRITE
;MOV A,#00H
;ACALL WRITE
;RET
;===================================
;FWD: MOV A,#48H ; ;FWD
;ACALL WRITE
;MOV A,#00H
;ACALL WRITE
;RET
;===================================
END 我去年做语音报警的时候也用ISD1760做过这个东东. QJD_LZF 发表于 2009-9-6 12:48 static/image/common/back.gif
我去年做语音报警的时候也用ISD1760做过这个东东.
求交流,我也要用ISD1760做语音模块
页:
[1]