;****************************************************
;http://www.stchip.com
;OTP语音芯片串行三线模式测试程序
;主芯片:MPC82L52(1T)
;工作频率:6MHz
;适用型号:SC8035,SC8016,SC040 SC020B,SC010B...
;亿矽特科技
;****************************************************
include "REG_MPC82L52.H"
sbit SC_RST=P3^0; ;P3.0是脉冲复位脚
sbit SC_DATA=P3^1; ;P3.1是脉冲数据脚
sbit SC_BUSY=P3^2; ;P3.2是放音BUSY脚
SP0 DATA 20H ;组合第1语音
SP1 DATA 21H ;组合第2语音
SP2 DATA 22H ;组合第3语音
ORG 0000H
MOV P3M1,#00000100B ;设置P3.0/P3.1为输出,P3.2为输入
MOV P3M0,#11111011B ;其他为默认的
CLR A
MOV SP1,A ;清第1语音数据
MOV SP2,A ;清第2语音数据
MOV SP3,A ;清第3语音数据
CLR SC_RST
CLR SC_DATA
LCALL SCRESET ;上电复位防止误触发放音
LOOP:
MOV SP1,#5
MOV SP2,#8
MOV SP3,#2 ;组合放5,8,2地址段语音
LCALL SPEECHS ;调用组合语音放音子程序
LCALL Delay5S ;延时5秒等声音放完
SJMP LOOP
;**************************************
;组合语音放音
;入口参数:SP0,SP1,SP2
;出口参数:无
;**************************************
SPEECHS:
MOV R0,SP1 ;发第1语音数据
LCALL SCDATA ;调用放音子程序
LCALL Delay15MS ;调节放音间隔
LCALL BUSYWAIT ;等待放音BUSY信号变低电平
MOV R0,SP2 ;发第2语音数据
LCALL SCDATA ;调用放音子程序
LCALL Delay15MS ;调节放音段间隔
LCALL BUSYWAIT ;等待放音BUSY信号变低电平
MOV R0,SP3 ;发第3语音数据
LCALL SCDATA ;调用放音子程序
CLR A
MOV SP1,A ;清第1语音数据
MOV SP2,A ;清第2语音数据
MOV SP3,A ;清第3语音数据
RET
;**************************************
;等待放音BUSY信号变低电平
;入口参数:无
;出口参数:无
;**************************************
BUSYWAIT:
MOV R3,#200
LCALL Delay15MS
LCALL Delay15MS
DJNZ R3,BOUT ;等待时间超过6秒BUSY脚信号没变低自动退出
JB SC_BUSY,BUSYWAIT ;等待BUSY脚信号变低
BOUT: RET
;**************************************
;控制放音子程序
;入口参数:R0
;出口参数:无
;**************************************
SCDATA:
LCALL SCRESET ;复位脉冲计数
SCTG: LCALL TG ;发N个脉冲
DJNZ R0,SCTG
RET
;**************************************
;复位脉冲计数
;入口参数:无
;出口参数:无
;**************************************
SCRESET:
SETB SC_RST ;复位高电平
LCALL Delay100US ;延时100uS,DAC模式或大于32段延时时间=15mS
CLR SC_RST ;复位低电平
LCALL Delay100US ;延时100uS
RET
;**************************************
;发1个脉冲信号
;入口参数:无
;出口参数:无
;**************************************
TG:
SETB SC_DATA ;脉冲高电平
LCALL Delay100US ;延时100uS,延时时间>50uS
CLR SC_DATA ;脉冲低电平
LCALL Delay100US ;延时100uS 延时时间>50uS
RET
;**************************************
;延时100微秒
;不同的工作环境,需要调整此函数
;入口参数:无
;出口参数:无
;**************************************
Delay100US: ;延时100uS
MOV R5,#150
DJNZ R5,$
RET
;**************************************
;延时15毫秒
;不同的工作环境,需要调整此函数
;入口参数:无
;出口参数:无
;**************************************
Delay15MS:
MOV R4,#150 ;延时15MS
L0: MOV R5,#150
DJNZ R5,$
DJNZ R4,L0
RET
;**************************************
;延时5秒
;不同的工作环境,需要调整此函数
;入口参数:无
;出口参数:无
;**************************************
Delay5S: ;延时5秒钟
MOV R3,#200
D3: MOV R4,#250 ;25MS
D5: MOV R5,#150
DJNZ R5,$
DJNZ R4,D5
DJNZ R3,D3
RET
;--------------------------------
END