|
发表于 2009-8-29 07:44:51
|
显示全部楼层
;=========================================================================
;CPU = AT89S52 24M晶振
;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 |
|