supperxinxin 发表于 2008-8-18 09:02:46

请教高手如何实现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

ak5136728 发表于 2009-8-23 16:15:20

汇编几乎没人用了 你还是改C或其他的好点

zhuhai.009 发表于 2009-8-29 07:44:51

;=========================================================================
        ;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

QJD_LZF 发表于 2009-9-6 12:48:05

我去年做语音报警的时候也用ISD1760做过这个东东.

杨小维 发表于 2012-8-2 18:30:43

QJD_LZF 发表于 2009-9-6 12:48 static/image/common/back.gif
我去年做语音报警的时候也用ISD1760做过这个东东.

求交流,我也要用ISD1760做语音模块
页: [1]
查看完整版本: 请教高手如何实现ISD1760汇编语言定点播放功能