Hola pude resolver lo de las tablas, o algo, tengo varias dudas, como por ejemplo cuanto CALL y GOTO puedo hacer hasta que se termine una parte de la rutina que los nombra? ya que en la mía verifico cadenas de bit enviados y se derivan a otras parte para devolver datos según lo recibido. Otra pregunta, yo formo las tablas y en un archivo aparte y lo llamo tablas.inc, la pregunta es en que parte del programa debe ir el # include tabla.inc, la pregunta se debe a que cuando llamo a una en especial se envia por el seria la tabla que llame mas parte de otra!
les pongo la tabla:
[codeCOMANDO_1
RLNCF TABLA_START,W,ACCESS
MOVFF PCL,W ;antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x81
RETLW 0x5A
RETLW 0x30
RETLW 0x30
RETLW 0x82
RETLW 0x41
RETLW 0x41
RETLW 0x1B
RETLW 0x30
RETLW 0x74
RETLW 0x9C
RETLW 0x41
RETLW 0xD2
RETLW 0xCF
RETLW 0xCC
RETLW 0xCC
RETLW 0xC9
RETLW 0x4E
RETLW 0x47
RETLW 0xA0
RETLW 0x4D
RETLW 0xCF
RETLW 0x4E
RETLW 0xC5
RETLW 0x59
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xC5
RETLW 0xCC
RETLW 0xC5
RETLW 0xC3
RETLW 0xD4
RETLW 0xD2
RETLW 0xCF
RETLW 0xA0
RETLW 0xC3
RETLW 0x48
RETLW 0x41
RETLW 0x4E
RETLW 0xC3
RETLW 0xC5
RETLW 0xA0
RETLW 0x53
RETLW 0xD2
RETLW 0xCC
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0x41
RETLW 0xD2
RETLW 0x47
RETLW 0xC5
RETLW 0x4E
RETLW 0xD4
RETLW 0xC9
RETLW 0x4E
RETLW 0x41
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0x84
RETLW 0x00 ; Fin
COMANDO_2 ; Comando que enviamos luego de recibir la contestación
RLNCF TABLA_START,W,ACCESS ; del cilindro tenemos: 3C 30 31 59 30 33 45 3E
MOVFF PCL,W ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x3C ;
RETLW 0x30 ; otra posible: 3C 30 31 53 34 35 3E
RETLW 0x31
RETLW 0x59
RETLW 0x30
RETLW 0x33
RETLW 0x45
RETLW 0x3E
RETLW 0x00 ; Fin
COMANDO_3 ; Comando con el cual mantenemos la comunicación con
RLNCF TABLA_START,W,ACCESS ; el cilindro en el testeo hasta que este termine
MOVFF PCL,W ; de inicialize: 3C 30 31 59 31 44 42 3E
ADDWF PCL,F ;
RETLW 0x3C ;
RETLW 0x30
RETLW 0x31
RETLW 0x59
RETLW 0x31
RETLW 0x44
RETLW 0x42
RETLW 0x3E
RETLW 0x00 ; Fin
COMANDO_4 ; Comando final para iniciar el cilindro 0.
RLNCF TABLA_START,W,ACCESS
MOVFF PCL,W ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x81
RETLW 0x5A
RETLW 0x30
RETLW 0x30
RETLW 0x82
RETLW 0x41
RETLW 0x41
RETLW 0x1B
RETLW 0x30
RETLW 0xB1
RETLW 0x9C
RETLW 0xB1
RETLW 0x33
RETLW 0xB4
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0xB1
RETLW 0x39
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0x35
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0xB7
RETLW 0xA0
RETLW 0x9C
RETLW 0xB2
RETLW 0x30
RETLW 0x30
RETLW 0xA0
RETLW 0x84
RETLW 0x00 ; Fin?
COMANDO_5 ; Comando final para iniciar el cilindro 00.
RLNCF TABLA_START,W,ACCESS
MOVFF PCL,W ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x81
RETLW 0x5A
RETLW 0x30
RETLW 0x30
RETLW 0x82
RETLW 0x41
RETLW 0x41
RETLW 0x1B
RETLW 0x30
RETLW 0xB1
RETLW 0x9C
RETLW 0x36
RETLW 0xB2
RETLW 0x36
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0xB8
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0x39
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0xB2
RETLW 0xB2
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0xB2
RETLW 0xB8
RETLW 0xA0
RETLW 0x84
RETLW 0x00 ; Fin
Y me faltan agregar muchas mas!
Ahora con la que tengo problema es con el comando_3
Les pongo como llamo a esa tabla
SEND_COMANDO_3
CLRF TABLA_START ; Borro el puntero de las Tablas
ESCMEN3
CALL COMANDO_3 ; Llamo a la Tabla a enviar y regreso con el caracter en W
MOVWF TX
ADDLW 00H ; Sumo para verificar
BTFSC STATUS,Z ; y si da 0, Z=1, no salto
RETLW 0 ; si no llegue al final y retorno
CALL ENVIA_TX ; Llamo a subrutina de envio por 232.
INCF TABLA_START,F ; Incremento el puntero para el proximo caracter
GOTO ESCMEN3 ; Vuelvo a buscar otro caracter hasta finalizar.
Lo mas extraño es que todas las rutinas son iguales!
Acabo de ver algo mientras hacia este mensaje, y es que las tablas, como les mencione envian el codigo + la parte de otro, es que se superponen y no se porque, una cosa que hice es agregar varios NOP para correrlas de lugar y funciono, se los paso:
COMANDO_1
RLNCF TABLA_START,W,ACCESS
MOVFF PCL,W ;antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x81
RETLW 0x5A
RETLW 0x30
RETLW 0x30
RETLW 0x82
RETLW 0x41
RETLW 0x41
RETLW 0x1B
RETLW 0x30
RETLW 0x74
RETLW 0x9C
RETLW 0x41
RETLW 0xD2
RETLW 0xCF
RETLW 0xCC
RETLW 0xCC
RETLW 0xC9
RETLW 0x4E
RETLW 0x47
RETLW 0xA0
RETLW 0x4D
RETLW 0xCF
RETLW 0x4E
RETLW 0xC5
RETLW 0x59
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xC5
RETLW 0xCC
RETLW 0xC5
RETLW 0xC3
RETLW 0xD4
RETLW 0xD2
RETLW 0xCF
RETLW 0xA0
RETLW 0xC3
RETLW 0x48
RETLW 0x41
RETLW 0x4E
RETLW 0xC3
RETLW 0xC5
RETLW 0xA0
RETLW 0x53
RETLW 0xD2
RETLW 0xCC
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0x41
RETLW 0xD2
RETLW 0x47
RETLW 0xC5
RETLW 0x4E
RETLW 0xD4
RETLW 0xC9
RETLW 0x4E
RETLW 0x41
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0xA0
RETLW 0x84
RETLW 0x00 ; Fin
COMANDO_2 ; Comando que enviamos luego de recibir la contestación
RLNCF TABLA_START,W,ACCESS ; del cilindro tenemos: 3C 30 31 59 30 33 45 3E
MOVFF PCL,W ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x3C ;
RETLW 0x30 ; otra posible: 3C 30 31 53 34 35 3E
RETLW 0x31
RETLW 0x59
RETLW 0x30
RETLW 0x33
RETLW 0x45
RETLW 0x3E
RETLW 0x00 ; Fin
COMANDO_3 ; Comando con el cual mantenemos la comunicación con
RLNCF TABLA_START,W,ACCESS ; el cilindro en el testeo hasta que este termine
MOVFF PCL,W ; de inicialize: 3C 30 31 59 31 44 42 3E
ADDWF PCL,F ;
RETLW 0x3C ;
RETLW 0x30
RETLW 0x31
RETLW 0x59
RETLW 0x31
RETLW 0x44
RETLW 0x42
RETLW 0x3E
RETLW 0x00 ; Fin
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
COMANDO_4 ; Comando final para iniciar el cilindro 0.
RLNCF TABLA_START,W,ACCESS
MOVFF PCL,W ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x81
RETLW 0x5A
RETLW 0x30
RETLW 0x30
RETLW 0x82
RETLW 0x41
RETLW 0x41
RETLW 0x1B
RETLW 0x30
RETLW 0xB1
RETLW 0x9C
RETLW 0xB1
RETLW 0x33
RETLW 0xB4
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0xB1
RETLW 0x39
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0x35
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0xB7
RETLW 0xA0
RETLW 0x9C
RETLW 0xB2
RETLW 0x30
RETLW 0x30
RETLW 0xA0
RETLW 0x84
RETLW 0x00 ; Fin
COMANDO_5 ; Comando final para iniciar el cilindro 00.
RLNCF TABLA_START,W,ACCESS
MOVFF PCL,W ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
ADDWF PCL,F ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x81
RETLW 0x5A
RETLW 0x30
RETLW 0x30
RETLW 0x82
RETLW 0x41
RETLW 0x41
RETLW 0x1B
RETLW 0x30
RETLW 0xB1
RETLW 0x9C
RETLW 0x36
RETLW 0xB2
RETLW 0x36
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0xB8
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0x39
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0xB2
RETLW 0xB2
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0xB2
RETLW 0xB8
RETLW 0xA0
RETLW 0x84
RETLW 0x00 ; Fin
El comando_4 era ahora el que se pisaba con parte del final del comando_1, cosa de locos!
Espero que puedan ayudarme.
Saludos