- ;****************************************************
- ;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
復制代碼 |