;****************************************************
;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
我要赚赏金打赏帖 |
|
|---|---|
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
我要赚赏金
