搜索
bottom↓
回复: 4

请教高手如何实现ISD1760汇编语言定点播放功能

[复制链接]

出0入0汤圆

发表于 2008-8-18 09:02:46 | 显示全部楼层 |阅读模式
请教高手如何实现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
       SETB  SS
       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

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-8-23 16:15:20 | 显示全部楼层
汇编几乎没人用了 你还是改C或其他的好点

出0入0汤圆

发表于 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

出0入0汤圆

发表于 2009-9-6 12:48:05 | 显示全部楼层
我去年做语音报警的时候也用ISD1760做过这个东东.

出0入0汤圆

发表于 2012-8-2 18:30:43 | 显示全部楼层
QJD_LZF 发表于 2009-9-6 12:48
我去年做语音报警的时候也用ISD1760做过这个东东.

求交流,我也要用ISD1760做语音模块
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 17:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表