Hi Thank you for reading

I am using a Catlex MP3 Player (It was Cheap) from ebay to play specific sound bytes driven from a GPO dial telephone.... Dial 3 it plays track three, dial 7 it plays track 7 etc.

I would expect the code to go back to scanning the dial waiting for the next number dialed after the playing message has finished.

But:- Every so it just stalls and wont do anything till I reset.

Do I need to tidy up anything or have I missed anything obvious .... I am not a software guy at all so go easy on me.

Code:
 ' Name       : Messages.pbp
' Compiler    : PICBASIC PRO Compiler 2.6
' Assembler   : MPASM
' Target PIC  : PIC16F628A
' Hardware    : VeroBoard
' Oscillator  : 4 Megs External
' Keywords    : MP3 Messages
' Description : Messages
' Using the Catalex MP3 Player.
            
            
            DEFINE OSC 4	'Set oscillator in MHz
            'OSCCON = $60   '4 Megs Xtal
            TRISA=0         'Port A all outputs
            TRISB=%00001100 'Make RB3 and RB4 inputs
            'OPTION_REG.7=0 'Enable internal pull-ups
            CMCON=7         'No Analogs
            
            
            DEFINE HSER_TXSTA 24H   'Set transmit status and control
            DEFINE HSER_RCSTA 90H   'Set receive status and control
            DEFINE HSER_BAUD 9615   'Baud Rate 9600 Catalex Uart
            define HSER_CLROERR 1   ' Clear Buffer
            define HSER_SPBRG 25    '
            

' Alias pins
            HOOK Var PORTB.3    'Hook input
            PULSE VAr PORTB.4       'Pulse Input
            VOL con 20              ' Volume Level 0 to 30
            MESSAGE Var word        ' Message Number  
            
            hserout [$7E,$FF,$06,$09,$00,$00,$02,$EF] 'Select TF Device
            pause 200          
            hserout [$7E,$FF,$06,$06,$00,$00,$14,$EF] 'Volume Set 
            pause 200
            Gosub shhh              'Stop playing
            'pause 20
            
            
dial:       count pulse,5000,Message
            pause 10
            
            
            if message=1 then   'Mess1
            gosub Track1
            ENDif
            if message=2 then   'Mess2   
            gosub Track2
            endif 
            if message=3 then   'Mess3
            gosub Track3
            Endif            
            if message=4 then   '
            gosub Track4
            ENDif            
            if message=5 then   '
            gosub Track5
            ENDif
            if message=6 then   '
            gosub Track6
            ENDif
            if message=7 then   '
            gosub Track7
            ENDif
            if message=8 then   '
            gosub Track8
            ENDif
            if message=9 then   '
            gosub Track9
            ENDif
            if message=10 then  '
            gosub Track10
            ENDif
            
            goto dial
            
            
track1:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$01,$EF] 'Message 1
            return
            
track2:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$02,$EF] 'Message 2
            return           
                        
track3:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$03,$EF] 'Message 3
            return
                      
track4:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$04,$EF] 'Message 4
            return           
                
track5:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$05,$EF] 'Message 5
            return
            
track6:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$06,$EF] 'Message 6
            return
            
track7:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$07,$EF] 'Message 7
            return     
            
track8:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$08,$EF] 'Message 8
            return 
            
track9:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$09,$EF] 'Message 9
            return           
            
track10:    gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$0A,$EF] 'Message 10
            return 
            
d_tone:     gosub shhh
            hserout [$7E,$FF,$06,$03,$00,$00,$0C,$EF] 'Tone low res
            return             
            
            
Shhh :      hserout [$7E,$FF,$06,$16,$00,$00,$00,$EF] 'Stop Playing
            pause 200
            Return                    
             
                       
        
  End