Hola amigo alfayomega
No se si esto resuelva tu duda, nunca programé un pic en lenguaje Basic, pero tengo la idea con la sintaxis ya que trabaje con algunos picaxe, por lo que observo en tu código mantienes una condicionante if y lugo las lineas de codigo de ejecución del puerto B. Yo te recomendaría que manejes etiquetas y subrutinas, así como en asm. por ejemplo no se si me entiendas:
INICIO: ( TU ETIQUETA PRINCIPAL)
CONDICIONANTES:
IF Z1=1 THEN PORTD=%00000001
GOTO GIROM1DERECHA ( IR A LA ETIQUETA DE GIRO DEL MOTOR 1 A LA DERECHA)
"LUEGO ESCRIBES LA SIGUIENTE CONDICION"
IF Z2=1 THEN PORTD=%00000010
GOTO GIROM1IZQUIERDA ( ESTA SERA LA OTRA ETIQUETA DE GIRO A LA IZQUIERDA)
" ASI SUCESIVAMENTE PUEDES ESCRIBIR LAS CONDICIONES DE LECTURA DE LA ENTRADAS)
otra cosa amigo alfa, no se si defines al puerto D como entradas al parecer si con la VAR para definir que bit le corresponde Z1 Y Z2 pero no veo donde defines que el puerto D se configuro como entradas como el caso de TRISB=%00000000 que se configura como salida. verifica esa parte de tu codigo.
siguiendo con mi explicación, después de las condicionantes
escribes cada etiqueta de ejecución:
por ejemplo:
GIROM1DERECHA: ESTA ES LA ETIQUETA, y ahora si después de esto escribe todo el código de ejecución:
pause 500
PORTB = %00001000
pause 500
PORTB = %00001010
pause 500
PORTB = %00000010
pause 500
PORTB = %00000110
pause 500
PORTB = %00000100
pause 500
PORTB = %00000101
pause 500
PORTB = %00000001
pause 500
ENDIF
y de ahí las demás etiquetas. otro tip muy importante es volver a preguntar la condicionante IF , por ejemplo:
IF Z1=1 THEN PORTD =%00000001: ESTO PARA SERVIRÍA PARA VERIFICAR QUE EFECTIVAMENTE ESTA PRESIONADO EL BOTÓN O LA SEÑAL ESTA ACTIVADA, Y NO SE TRATA DE UN REBOTE O RUIDO DE SEÑAL.
Prueba de esta forma, si no de todas maneras te sirva un poco la lógica, yo así trabajaba en picaxe y funcionaba bien.