⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isd1700汇编程序.txt

📁 语音芯片ISD1790的汇编源码 以及功能的相关说明!
💻 TXT
字号:
MOSI EQU P1.2 ; 数据输入 
MISO EQU P1.3 ; 数据输出 
LED EQU P1.7 ; 指示灯 
AN EQU P1.6 ; 执行 
STOP EQU P1.5 ; 复位 
PR EQU P1.4 ;PR=1 录音 PR=0 放音
MORA EQU P2.7 
;*************************************************** 
;20H-25H 为 SPI 命令字的 1-6 位存储单元 
;*************************************************** 
ORG 0000H ; 
AJMP MAIN ; 
MAIN : MOV SP,#70H ; 
MOV P1,#0FFH ; 
MOV P2,#0FFH ; 
MOV P3,#0FFH ; 
MOV P0,#0FFH ; 
CLR EA ; 
MAII: ACALL REST 
ACALL DSTOP ;ISD 掉电 
SETB LED ; 关指示灯
MAS0: MOV 3AH,#200 
JNB STOP,REC6 ; 
MAS1: JB AN,MAS0 ; 等按 AN 键 
DJNZ 3AH,MAS1 ; 
PU: ACALL UP ;ISD 上电 
JB MORA,MICREC 
MOV 21H,#08H 
MOV 22H,#04H 
AJMP GOON 
MICREC:MOV 21H,#40H 
MOV 22H,#04H 
GOON: ACALL WR_APC 
ACALL WAITRDY ; 等待 RDY 置 1 
ACALL CLRINT ; 清除中断 
ACALL WAITRDY 
ACALL CHK_MEM ; 检查芯片环状存储结构 
JB PR,REC ;PR=1 录音 
AJMP PLAY ;PR=0 放音 
REC: MOV 36H,#10 
ACALL YS50 ; 延时录音 
DJNZ 36H,REC1 
REC1: MOV 20H,#51H ; 发送 REC 命令 
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO 
SETB SS ; 关片选 
ACALL CHECKRDY 
JNB ACC.3,REC1 ; 检查 SR0 寄存器 REC 位,如果没有启动 REC 则重新发送命令 
CLR LED ; 开 LED 灯 
REC3: MOV 35H,#200 
REC4: ACALL CHECKFULL ; 检查芯片存储器是否溢出 
JNB AN,REC3 
DJNZ 35H,REC4 
SETB LED 
ACALL CLRINT 
ACALL STOPP ; 停止录音
REC5: JNB STOP,REC6 
JB AN,REC5 
ACALL STOPP 
ACALL CLRINT 
ACALL WAITRDY 
ACALL CHK_MEM 
AJMP REC 
REC6: MOV R1,#60H 
TOERASE: 
JB STOP,TOPD 
ACALL YS50 
DJNZ R1,TOERASE 
ACALL G_ERASE 
MOV R1,#03H 
LEDWAIT: 
CLR LED 
ACALL LEDELAY 
SETB LED 
ACALL LEDELAY 
DJNZ R1,LEDWAIT 
TOPD: ACALL STOPP 
ACALL CLRINT 
AJMP MAII 
REC7: SETB LED 
MOV 36H,#10 
REC8: ACALL YS50 
JB AN,REC6 
DJNZ 36H,REC8 
CLR LED 
MOV 36H,#10 
REC9: ACALL YS50
JB AN,REC6 
DJNZ 36H,REC9 
AJMP REC7 
PLAY: JNB AN,PLAY 
REPLAY: 
MOV 20H,#50H ; 发送放音指令
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO 
SETB SS 
ACALL CHECKSR ; 扫描 SR 寄存器 
JB ACC.0,REPLAY ; 如果指令没有接收,则重新发送 
CLR LED
PLAY1: JNB STOP,REC6 
ACALL CHECKRDY ; 等待放音结束(检查 RDY 是否置 1 )
JNB ACC.0,PLAY1 
SETB LED 
ACALL STOPP 
PLAY2: JNB STOP,REC6 
JB AN,PLAY2 
ACALL FWD ; 发送快进指令,将放音指针跳向下一段语音信息 
ACALL CHECKRDY 
ACALL CHK_MEM 
AJMP PLAY 
; 扫描 ISD1700 状态寄存器 SR1 
CHECKRDY: 
MOV 20H,#05H 
MOV 21H,#00H 
MOV 22H,#00H 
CHECKRDY1: 
ACALL RDSTATUS 
MOV A,20H 
ACALL SPIO 
MOV 26H,a 
MOV A,21H 
ACALL SPIO 
MOV 27H,A 
MOV A,22H 
ACALL SPIO 
MOV 28h,A 
RET 
; 扫描 ISD1700 状态寄存器 SR0 
CHECKSR: 
MOV 20H,#05H 
acall rdstatus 
MOV A,20H 
ACALL SPIO 
MOV 26H,a
RET 
; 等待 ISD1700 状态寄存器 SR1.0 位( RDY ) 置 1
WAITRDY: 
ACALL CHECKRDY 
JNB ACC.0,WAITRDY 
RET 
; 检测 ISD1700 状态寄存器 SR0.1 位( FULL) ,是否为 1 
CHECKFULL:
ACALL RDSTATUS 
MOV A,20H 
ACALL SPIO 
JNB ACC.1,CHECKFULL2 
LJMP REC7 
CHECKFULL2: 
RET 
; 清楚中断标志 INT 指令 << CLR_INT >> 
CLRINT: 
MOV 20H,#04H 
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO
SETB SS 
ACALL YS50 ;50mS 延时
ACALL YS50 ;50mS 延时 
RET ; 
;ISD1700 上电 << POWERUP >> 
UP: MOV 20H,#01H 
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO 
SETB SS 
ACALL YS50 ;50mS 延时 
ACALL YS50 ;50mS 延时
RET 
; 停止当前操作 << STOP >> 
STOPP: MOV 20H,#02H 
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO 
SETB SS 
ACALL YS50 ;50mS 延时
ACALL YS50 ;50mS 延时 
RET 
; 检测环行内存指令 << CHK_MEM >> 
CHK_MEM: 
MOV 20h,#49H 
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO 
SETB SS 
RET 
; 快进指令 <<FWD>> 
FWD :MOV 20h,#48H 
MOV 21H,#00H
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO 
SETB SS 
RET 
; 停止当前操作掉电 << PD >> 
DSTOP: MOV 20H,#07H 
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO 
MOV A,21H 
ACALL SPIO 
SETB SS 
RET 
; 写入 APC 寄存器指令 << WR_APC2 >> , 写入内容放置在 21H,22H 里 
WR_APC: 
MOV 20h,#65H 
MOV A,20h 
ACALL SPIO 
MOV A,21h 
ACALL SPIO 
MOV A,22H 
ACALL SPIO 
SETB SS 
RET 
; 读取 SR 状态寄存器指令 << RD_STATUS >>
RDSTATUS: 
MOV 20h,#05H 
MOV 21h,#00H 
MOV 22H,#00H 
MOV A,20h 
ACALL SPIO 
MOV A,21h 
ACALL SPIO 
MOV A,22H 
ACALL SPIO 
SETB SS 
RET 
G_ERASE: 
MOV 20H,#43H ;
MOV 21H,#00H 
MOV A,20H 
ACALL SPIO
MOV A,21H 
ACALL SPIO ;
SETB SS ; 关片选 
ACALL YS50 ;50mS 延时 
ACALL YS50 ;50mS 延时
RET 
; 复位指令 << RESET >>
REST: MOV 20H,#03H 
MOV 21h,#00H 
MOV A,20h 
ACALL SPIO 
MOV A,21h 
ACALL SPIO 
SETB SS 
;*****************************
; 89c 51 模拟 SPI 口 发送和接收子程序
;***************************** 
SPIO: SETB SCLK 
CLR SS 
MOV R6,#08 
SPIO1: CLR SCLK 
NOP 
NOP 
MOV C,MISO
RRC A 
MOV MOSI,C 
SETB SCLK 
DJNZ R6,SPIO1 
CLR MOSI 
RET 
;LED 延迟 
LEDELAY: MOV R2,#08H 
LEDELAY1: 
CALL YS50 
DJNZ R2,LEDELAY1 
RET 
;**** 10mS 延时 ****
YS10: MOV TMOD,#01H ;
MOV TH0,#0D8H ;10mS 延时初值置入 
MOV TL0,# 0F 0H ;(65536-X)*1=10MS 
SETB TR0 ;65536-(10000/1)=D 8F 0H 
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 + -