Ladies and Gents,
I'll ask the question first then expand. Why will the first program, ImperialMarch.bas, play the notes only one time through and requires a reprogram for the notes to be played again and the second, This works, play the notes without having to reprogram the chip? I know the first is set up to loop and the second is triggered but why does the first require a reprogram to play the music?

Background: Someone asked if I could write a program simulating the sounds of the Imperial Death March using a PIC. I had a12F683 a piezo speaker and some time and this is what I came up with. Other than the speaker hooked up to gpio.2 there is a resistor pulling gpio.5 high or low as needed and a resistor pulling gpio.3 high. The first program is just a loop, or it should be, and the second is triggered by a switch.

The first program, imperailmarch.bas, will play the sounds when programmed then won't play them again until the chip is reprogrammed. It will, if left alone long enough, intermittently make a scratchy sound like a modems initial negotiation for speed.

Code:
'****************************************************************
'*  Name    : ImperialMarch.BAS                                 *
''****************************************************************
' This version will only play one time through and stop.  

clear

@ device mclr_off 
@ device bod_off 
@ device fcmen_off
@ device ieso_off
@ device intrc_osc_noclkout
@ device pwrt_on
@ device protect_off

define osc4
osccon = %01100111

ansel = 0 ' set all ports digital
cmcon0 = 7 ' comparators off
adcon0 = 0 ' adc off

'------------------------variables

c con 91 ' converting values to frequency and musical notes
a con 105
dsH con 112
f con 99
fH con 114
fsH con 115
gs con 104
cs con 92
d con 95
ds con 96
notta con 97
e con 98
aH con 117
cH con 109
eH con 113
gsh con 116
gH con 115
aS con 106
b con 108  ' end of music 

speaker var gpio.2
'-------------------------------------------finally the program
main:

goto playsong

pause 1000

goto main ' do it forever                                


playsong:
sound speaker, [a,50]
sound speaker, [a,50]
sound speaker, [a,50]
sound speaker, [f,40]
sound speaker, [cH,20]
sound speaker, [a,50]
sound speaker, [f,43]
sound speaker, [cH,20]
sound speaker, [a,65]

pause 150

sound speaker, [eH,40]
sound speaker, [eH,40]
sound speaker, [eH,40]
sound speaker, [fh,30]
sound speaker, [cH,12]
sound speaker, [gS,40]
sound speaker, [f,33]
sound speaker, [cH,12]
sound speaker, [a,55]

pause 150

return


end ' supposed to put an end to the program

The second program, This works.bas, will play the notes anytime I drag GPIO.5 low.

Code:
'****************************************************************
'*  Name    : thisworks.BAS                                     *                                  *
'****************************************************************
' This version will replay the march each time gpio.5 is brought low.
' It draws less than 40uA typically but if allowed to rest long enough 
' it will wander up to around 200uA.  Why it changes I also don't understand.  
' ***

clear

@ device mclr_off 
@ device bod_off 
@ device fcmen_off
@ device ieso_off
@ device intrc_osc_noclkout
@ device pwrt_on
@ device protect_off 

define osc4
osccon = %01100111
ansel = 0 ' set all ports digital
cmcon0 = 7 ' comparators off
adcon0 = 0 ' adc off

'------------------------variables

c con 91 ' converting values to frequency corresponding to musical notes
a con 105
dsH con 112
f con 99
fH con 114
fsH con 115
gs con 104
cs con 92
d con 95
ds con 96
notta con 97
e con 98
aH con 117
cH con 109
eH con 113
gsh con 116
gH con 115
aS con 106
b con 108  ' end of music 

speaker var gpio.2

'-----------------------------begin program

main:

If gpio.5 = 0 then

sound speaker, [a,40,a,40,a,40,f,30,cH,12,a,40,f,33,cH,12,a,55]

pause 150

sound speaker, [eH,40,eH,40,eH,40,fh,30,cH,12,gS,40,f,33,cH,12,a,55]

endif

nap 5

goto main

end ' supposed to put an end to the program
If anyone can expound upon why one works and the other doesn't I'd appreciate your input.