Hi,
In your latest post, first example you're sending 144,100,100 and in the second example you're sending 147,100,100. I know nothing about MIDI and I suspect this has nothing to do with the problem but I mention it anyway.

OK, try this, just as a test:
Code:
HSEROUT [147, 100, 100]  '  Dummy output, try removing this if "everything" works.
 
Pause 500
 
LP1:
  If PortA.1 = 0 THEN
    TXREG = 147 : GOSUB WaitForIt
    TXREG = 100 : GOSUB WaitForIt
    TXREG = 100 : GOSUB WaitForIt
    While PortA.1 : WEND  ' Wait for button to be released.
  ENDIF
Goto LP1
 
WaitForIt:
  While PIR1.4 : WEND   ' Wait for TXREG to clear.
RETURN
Personally I don't think there's a problem with HSEROUT per se, I've never had any problem/bug with that but that's no guarantee. Unfortunately I don't have another suggestion on what might be the problem... You don't happen to have a logic analyzer that you can monitor the serial line with?