Hi All!
I have a confusion. If I use a single TRISB Statement TRISB = %10000100 the program will stop dead at the next line of code.

If I use single TRISB statements:

TRISB.4 = 0 ' Make B.4 an OUTPUT
TRISB.6 = 0 ' Make B.6 an output
TRISB.5 = 0 ' Make B.5 an output
TRISB.7 = 1 ' Make B.7 an INPUT
TRISB.3 = 0 ' Make B.3 an OUTPUT

The code will run!
chip is a 16F628A

Code:
'****************************************************************
'*  Name    : STV-SYNCHS RELEASE                          *
'*  Author  : BOB LEGGETT                                       *
'*  Notice  : Copyright (c) 2009                                *
'*          : All Rights Reserved                               *
'*  Date    : around 2009 or so rehashed now '17         *
'*  Version : 1.0                                               *
'*  Notes   :   VIDEO IDENT                                *
'*          :                                                   *
'****************************************************************

'   WORKS USES SYNC FOR SWITCHING BETWEEN MIXED AND FULL TEXT MODE
'   GOING FROM VID IN TO TEXT AND BACK TO VID IN

'   INCLUDE "ALLDIGITAL.pbp"
        
define  OSC 20

#CONFIG
    __config _HS_OSC & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF
#ENDCONFIG
      
'TV CHIP CONNECTIONS
 
'---------------------------------------------------------------

 '16f628a
 
 TVSDA     		VAR PORTB.4    '0     OUTPUT  pin 11 stv was b.1
 CS0     		VAR PORTB.6    '0     OUTPUT pin 13 stv was b.0
 TVSCL     		VAR PORTB.5    '0     OUTPUT  pin 12 stv was b.5
 SYNCH0         VAR PORTB.7    '1     'INPUT    to pin 7 stvchip was b.2
 HEARTBEAT      VAR PORTB.3           'OUTPUT 0  led was b.6
'---------------------------------------------------------------

    ZOOMREG         CON %0000000011001100       ' 12 ZOOM REGISTER
    COLREG          CON %0000000011001101       ' 13 COLOUR REGISTER
    CONREG          CON %0000000011001110       ' 14 CONTROL REGISTER
    POSREG          CON %0000000011001111       ' 15 POSITION REGISTER 
    MODEREG         CON %0000000011010000       ' 16 MODE REGISTER

    
	ICOUNT  		VAR BYTE
	BITCOUNTER 	    VAR BYTE
	WDATA   		VAR WORD
	CHARCOUNTER	    VAR BYTE '  
	LINECOUNTER	    VAR BYTE '

    STVCHAR         VAR BYTE
    ASCCHAR         VAR BYTE
    CHARS           VAR BYTE
    CHARS2          VAR BYTE
    TEMP            VAR BYTE 
    TEMP1           VAR BYTE
    COUNTER         VAR BYTE
    PULSES          VAR BYTE
    CURRENTMODE0    VAR BYTE

'----------------------------------------------------------------     
'    TOPLEFT         CON 0
'    TOPMIDDLE       CON 5
'    TOPRIGHT        CON 10
'    BOTLEFT         CON 2560    '10*256
'    BOTMIDDLE       CON 2565 '(10*256)+ 5
'    BOTRIGHT        CON 2570 '(10*256)+ 10
'---------------------------------------------------------------- 

    DATA @0,"TEST.",$FF,"NO SYNCHS RECEIVED",$FF   

TRISB.4 = 0   ' Make B.4 an OUTPUT
TRISB.6 = 0   ' Make B.6 an output
TRISB.5 = 0   ' Make B.5 an output 
TRISB.7 = 1   ' Make B.7 an INPUT
TRISB.3 = 0   ' Make B.3 an OUTPUT
'---------------------------------------------------------------- 
'628
' TRISB = %10000100
'----------------------------------------------------------------     

PAUSE 500
    
    HIGH HEARTBEAT
    
    
	GOSUB Init
	
    PAUSE 500
	GOSUB Init
    
    CURRENTMODE0=255         ' FORCES TRYSYNCHS TO SET MODE FIRST TIME

	
Demo:

    CHARCOUNTER = 0
	LINECOUNTER = 0
'   CURRENTMODE0 = 0     '0 = MIXED 1 = TEXT
    gosub CLS
    GOSUB TRYSYNCHS      '==================================


    TEMP = 0


LOOPER:
    GOSUB HEADER    ' LINE 3 RIGHT HAND SIDE TEST.
    IF CURRENTMODE0=1 THEN
    GOSUB NOVIDEO   ' DISPLAYS NO VIDEO IF NO INCOMING SYNCHS
    ENDIF

    
    GOSUB TRYSYNCHS       '===========================
    

    PAUSE 500            'I/2 SECOND DELAY
    TOGGLE HEARTBEAT      ' LED
    GOTO LOOPER          'DO IT FOREVER
  

DISPLAYCHAR:   

    WDATA = %0001011100000000 + STVCHAR
    GOSUB SEND 
    RETURN
SETLINE:    
	WDATA = LINECOUNTER*256 + CHARCOUNTER
    GOSUB Send              'position cursor   
    RETURN



WasteTime:        ' WORKS WITH LESS NOPS



    pauseus 20    ' was 20 nops

	RETURN

StartCommunication:
	TVSCL = 1 'HIGH TVSCL 
    GOSUB WasteTime

    CS0 = 0 'LOW CS0

    GOSUB WasteTime
	TVSCL = 0 'LOW TVSCL
    GOSUB WasteTime
	RETURN

StopCommunication:
	TVSCL = 1 'HIGH TVSCL
    GOSUB WasteTime
    CS0 = 1 'HIGH CS0

    GOSUB WasteTime
	RETURN

SendOne:
	TVSDA = 1 'HIGH TVSDA
    GOSUB WasteTime
	TVSCL = 0 'LOW  TVSCL
    GOSUB WasteTime
	TVSCL = 1 'HIGH TVSCL
    GOSUB WasteTime
	RETURN

SendZero:
	TVSDA = 0 'LOW TVSDA
    GOSUB WasteTime
	TVSCL = 0 ' LOW TVSCL
    GOSUB WasteTime
	TVSCL = 1 'HIGH TVSCL
    GOSUB WasteTime
	TVSDA = 1 'HIGH TVSDA
    GOSUB WasteTime
	RETURN

OutByte:
	FOR   BITCOUNTER = 1 TO 16
    IF    WDATA.15 = 1 THEN
    GOSUB SendOne                       
    ELSE
    GOSUB SendZero
    ENDIF
          WDATA = WDATA << 1
	NEXT  BITCOUNTER
	RETURN

Send:
	GOSUB StartCommunication
	GOSUB OutByte
	GOSUB StopCommunication
	RETURN

'-------------------------------------------------------------  

Init:     '    PAUSE 50 added - seems to improve reliability of init

	TVSCL = 1 'HIGH TVSCL
    TVSDA = 1 'HIGH TVSDA
    CS0   = 1 'HIGH CS0
 
	WDATA = $3000  '%110000 00000000
    GOSUB Send ' Init STV5730
    PAUSE 50
	WDATA = $3000
    GOSUB Send
    PAUSE 50
	WDATA = $00DB  '%00000000 11011011
    GOSUB Send
    PAUSE 50
	WDATA = $1000  '%00010000 00000000
    GOSUB Send
    PAUSE 50
'-------------------------------------------------------------  
	WDATA = %0000000011001100
    GOSUB Send ' Init registers (point to register 12)
    PAUSE 50
'-------------------------------------------------------------      
	WDATA = %0001000000000000   'NORMAL
'   WDATA = %0001000011110000   '4 PIXELS HORIZ AND VERT
    GOSUB Send ' Zoom    ADDRESS 12
    PAUSE 50
'-------------------------------------------------------------      
	WDATA = %0001001000000000

'   WDATA = %0001001000000100
    GOSUB Send ' Color    ADDRESS 13
    PAUSE 50
'--------------------------------------------------------

    WDATA=  %0001101011010100
            'CHANGE BIT 0 TO 1 FOR TEXT ONLY
    GOSUB Send ' Control    ADDRESS 14
'-------------------------------------------------------------    
	WDATA = %0001011111001111
    GOSUB Send ' Position    ADDRESS 15
'------------------------------------------------------------- 

   
	WDATA = %0001000100101110 '$183E BIT 11 CHANGED TO 0  M4 = 0
   
    GOSUB Send ' Mode    ADDRESS 16  %0001100000111110

'------------------------------------------------------------- 
 
	WDATA = $00C0   '%00000000 11000000
    GOSUB Send      ' Set row attributes
     
	FOR ICOUNT = 0 TO 10
    WDATA = $10C4 '%00010000 11000100
                  ' WDATA =%0001000010000111
    GOSUB Send
	NEXT ICOUNT
	RETURN
 
CLS: 
    'character=$0B       'SPACE
     TEMP1=0   ' LINECOUNTER
     TEMP =0    'CHARCOUNTER
loop2:
    
	WDATA = 0  ' LINECOUNTER*256 + CHARCOUNTER   ADDRESS
    GOSUB Send
    

LOOP3:    '                :CHARACTERS        
	WDATA = %0001011100001011  '     1011 0BH SPACECHARACTER
    GOSUB Send
	TEMP = TEMP + 1
	IF TEMP >= 28 THEN
    TEMP = 0
    TEMP1=TEMP1 + 1
	ENDIF
	IF TEMP1 >= 11 THEN SCREENBLANK
 	
    GOTO LOOP3
    
SCREENBLANK:
	RETURN

GETSTVCHAR:                  'CONVERT ASCII TO STV
    STVCHAR =$7F   ' FORCES CLOCK PICTURE IF ERROR         
    LOOKDOWN ASCCHAR,["0123456789- ABCDEFGHIJKLMNOPQRSTUVWXYZ:./'abcdefghijklmnopqrstuvwxyz"],STVCHAR
    RETURN 

HEADER:
    LINECOUNTER=2       'SET START POSITION
    CHARCOUNTER=23      'SET CURSOR POSITION
    GOSUB SETLINE
    FOR CHARS2=0 TO 4
    READ CHARS2, ASCCHAR
    gosub GETSTVCHAR    'CONVERT ASCII TO STV
    GOSUB DISPLAYCHAR
    NEXT
    RETURN
    
NOVIDEO:
    LINECOUNTER=5       'SET START POSITION
    CHARCOUNTER=4       'SET CURSOR POSITION
    GOSUB SETLINE
    FOR CHARS2=6 TO 23      ' FROM EEPROM DATA
    READ CHARS2, ASCCHAR
    gosub GETSTVCHAR    'CONVERT ASCII TO STV
    GOSUB DISPLAYCHAR
    NEXT
    RETURN
    
TRYSYNCHS:
    
    PULSES=0

    COUNT SYNCH0,4,PULSES   '3MS SHOULD COUNT TO 2 OR 3
    IF PULSES > 0 THEN MIXED0
FULL0:

    IF CURRENTMODE0=1 THEN RETURN

    WDATA=  %0000000011001110       'CONTROL REGISTER
    GOSUB SEND
    WDATA=  %0001101011010101 ' was 0001101111010101
   'CHANGE BIT 0 TO 1 FOR TEXT ONLY       OTIGINAL
            
   'WDATA=  %0001101111010100
   'CHANGE BIT 0 TO 1 FOR TEXT ONLY        
    GOSUB SEND

STAYHERE02:
  
    CURRENTMODE0=1
    GOSUB CLS
GOBACK0:
    RETURN


MIXED0:
    IF CURRENTMODE0=0 THEN RETURN
    WDATA=  %0000000011001110       'CONTROL REGISTER
    GOSUB SEND
    WDATA=  %0001101011010101  'was 0001101111010100
    GOSUB SEND

STAYHERE01:

    CURRENTMODE0=0
    GOSUB CLS
    RETURN
Do I need a CMCON = 7 or an ADCON or ???

Just in my normal confused state!

Thanks, Ed