这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 一次性语音IC汇编驱动代码

共1条 1/1 1 跳转至

一次性语音IC汇编驱动代码

助工
2014-10-28 20:03:27     打赏
;**************************************************** ;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

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]