- ;****************************************************
- ;OTP语音芯片串行三线模式测试程序
- ;主芯片:MPC82L52(1T)
- ;工作频率:6MHz
- ;适用型号:SC3010,SC3020,SC3040,SC3060,SC3080,SC5020,SC5040,SC5060,SC5080,SC5B01
- ;亿矽特科技 400-160-3880
- ;****************************************************
- include "REG_MPC82L52.H"
- 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.1为输出,P3.2为输入
- MOV P3M0,#11111011B ;其他为默认的
- CLR A
- MOV SP1,A ;清第1语音数据
- MOV SP2,A ;清第2语音数据
- MOV SP3,A ;清第3语音数据
- LOOP:
- MOV SP1,#05H
- MOV SP2,#08H
- MOV SP3,#02H ;组合放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脚信号没变高自动退出
- JBC SC_BUSY,BUSYWAIT ;等待BUSY脚信号变高
- BOUT: RET
- ;**************************************
- ;控制放音子程序
- ;入口参数:R0
- ;出口参数:无
- ;**************************************
- SCDATA:
- CLR SC_RST ;复位低电平
- LCALL Delay5MS: ;延时5MS
- MOV R1,#08H ;发送8BIT数据低位先发
- MOV A,R0
- CLR C
- LOOP0:
- RRC A
- JC DATA1
- DATA0:
- SETB SC_DATA ;高电平
- LCALL Delay500US ;延时500uS,
- CLR SC_DATA ;低电平
- LCALL Delay1500US ;延时1500uS
- JMP LOOPDATA:
- DATA1:
- SETB SC_DATA ;高电平
- LCALL Delay1500US ;延时15000uS
- CLR SC_DATA ;低电平
- LCALL Delay500US ;延时500uS
- LOOPDATA:
- DJNZ R1,LOOP0
- SETB SC_DATA ;高电平
- LCALL Delay100US: ;延时100US
- RET
- ;**************************************
- ;延时100微秒
- ;不同的工作环境,需要调整此函数
- ;入口参数:无
- ;出口参数:无
- ;**************************************
- Delay100US: ;延时100uS
- MOV R5,#150
- DJNZ R5,$
- RET
- ;**************************************
- ;延时400微秒
- ;不同的工作环境,需要调整此函数
- ;入口参数:无
- ;出口参数:无
- ;**************************************
- Delay400US:
- MOV R4,#4 ;延时400US
- L4: LCALL Delay100US
- DJNZ R4,L4
- RET
- ;**************************************
- ;延时1200微秒
- ;不同的工作环境,需要调整此函数
- ;入口参数:无
- ;出口参数:无
- ;**************************************
- Delay1200US:
- MOV R4,#120 ;延时1200US
- L12: LCALL Delay100US
- DJNZ R4,L12
- RET
- ;**************************************
- ;延时15毫秒
- ;不同的工作环境,需要调整此函数
- ;入口参数:无
- ;出口参数:无
- ;**************************************
- Delay15MS:
- MOV R4,#150 ;延时15MS
- L150: LCALL Delay100US
- DJNZ R4,L150
- RET
- ;**************************************
- ;延时3毫秒
- ;不同的工作环境,需要调整此函数
- ;入口参数:无
- ;出口参数:无
- ;**************************************
- Delay3MS:
- MOV R4,#30 ;延时3MS
- L30: LCALL Delay100US
- DJNZ R4,L30
- 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
复制代码 |