'**************************************************************** '* Name : WTV020.pbp * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 2015-09-22 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** PLAY_PAUSE con $FFFE STOP_PLAYER con $FFFF VOLUME con $FFF0 'WTV020_ResetPin var PORTA.0 (WTV20 pin 1) 'WTV020_ClockPin var PORTA.0 (WTV20 pin 7) 'WTV020_DataPin var PORTA.0 (WTV20 pin 10) 'WTV020_BusyPin var PORTA.0 (WTV20 pin 15) WTV020_CMD var word WTV020_Mask var word WTV020_ClockPin = 1 '0 WTV020_DataPin = 1 WTV020_ResetPin = 1 goto Over_WTV020 WTV020_Reset: WTV020_DataPin = 1 WTV020_ClockPin = 1 '0 WTV020_ResetPin = 1 'Reset pulse. WTV020_ResetPin = 0 pause 5 WTV020_ResetPin = 1 'Reset idle to start bit. ' WTV020_ClockPin = 1 pause 300 '750 ' 300 WTV020_CMD = STOP_PLAYER gosub WTV020_SendCMD return WTV020_Play: ' WTV020_CMD contains the voice to play ' WTV020_CMD = WTV020_CMD & %111111111 gosub WTV020_SendCMD 'Wait 20ms for busy to be active pause 20 'Wait till song ends repeat until WTV020_BusyPin = 0 'Play a voice, blocking. Variable return WTV020_Play2: 'Play a voice, blocking. Variable WTV020_CMD contains the voice to play ' WTV020_CMD = WTV020_CMD & %111111111 gosub WTV020_SendCMD 'Wait 20ms for busy to be active pause 20 pause 2000 return WTV020_PlayAsync: 'Play a voice, non-blocking. Variable WTV020_CMD contains the voice to play (0 to 511) ' WTV020_CMD = WTV020_CMD & %111111111 gosub WTV020_SendCMD 'Wait 20ms for busy to be active pause 20 return WTV020_StopVoice: WTV020_CMD = STOP_PLAYER gosub WTV020_SendCMD return WTV020_PauseVoice: WTV020_CMD = PLAY_PAUSE gosub WTV020_SendCMD return WTV020_Volume: 'Set volume. WTV020_CMD contains volume level 0 to 7 if WTV020_CMD > 7 then WTV020_CMD = 7 endif WTV020_CMD = VOLUME + WTV020_CMD gosub WTV020_SendCMD return WTV020_SendCMD: ' SHIFTOUT WTV020_DataPin, WTV020_ClockPin, 5, [WTV020_CMD\16] WTV020_Mask = $8000 'Start bit Low level pulse. WTV020_ClockPin = 0 pauseus 1900 repeat 'Clock low level pulse. WTV020_ClockPin = 0 pauseus 50 'Write data setup. if (WTV020_CMD & WTV020_Mask) = 0 then WTV020_DataPin = 0 else WTV020_DataPin = 1 endif 'Write data hold. pauseus 30 '50 'Clock high level pulse. WTV020_ClockPin = 1 pauseus 80 '100 ' if WTV020_Mask > $0001 then ' 'Stop bit high level pulse. ' pause 2 ' endif WTV020_Mask = WTV020_Mask >> 1 until WTV020_Mask = 0 'Busy active high from last data bit latch. pause 50 '20 WTV020_DataPin = 1 HSEROUT ["WTV020_SendCMD ", bin16 WTV020_CMD, 13, 10] ' HSEROUT ["WTV020_ClockPin=", dec WTV020_ClockPin, ", WTV020_DataPin=", dec WTV020_DataPin, 13, 10] return Over_WTV020: