Hola, nuevamente, tengo otro problema, con mi pic 18F2550 puedo correr mi programa pero solo la mitad, haber si lo puedo explicar: se trata de una comunicación serie donde primeramente inicializo el dispositivo y luego otra parte del programa recoge los valores que envía, pero no puedo hacer que las dos parte funcionen a la vez, si funcionan separados.
Les paso el codigo con el cuerpo principal, haber si encuentran algo mal:
;*********************** DECLARACION DE PROCESADOR & CONFIGURACION *****************************
TITLE "Transmición SAS con un PIC 18F2550"
LIST P=18F2550, f=inhx32, r=dec ;(INHX32= Formato de salida .hex, r=sistema decimal)
#include "P18F2550.INC" ; Incluye datos de PIC 18F2550
__idlocs _IDLOC1, 0x01 ;IDLOC register 0 will be
;programmed to 1.
__idlocs _IDLOC0, 0x02 ;IDLOC register 1 will be
;programmed to 2.
__idlocs _IDLOC3, 0x03 ;IDLOC register 2 will be
;programmed to 3.
__idlocs _IDLOC2, 0x04 ;IDLOC register 3 will be
;programmed to 4.
__idlocs _IDLOC5, 0x05 ;IDLOC register 4 will be
;programmed to 5.
__idlocs _IDLOC4, 0x06 ;IDLOC register 5 will be
;programmed to 6.
__idlocs _IDLOC7, 0x07 ;IDLOC register 6 will be
;programmed to 7.
__idlocs _IDLOC6, 0x08 ;IDLOC register 7 will be
;programmed to 8.
; __CONFIG_CONFIG1L = _PLLDIV_1_1L & _CPUDIV_OSC3_PLL4_1L & _USBDIV_2_1L
; __CONFIG_CONFIG1H = _FOSC_XTPLL_XT_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
; __CONFIG_CONFIG2L = _PWRT_OFF_2L & _BOR_ON_2L & _BORV_1_2L & _VREGEN_ON_2L
; __CONFIG_CONFIG2H = _WDT_OFF_2H & _WDTPS_32768_2H
; __CONFIG_CONFIG3H = _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_ON_3H
; __CONFIG_CONFIG4L = _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L ;& _ICPRT_OFF_4L
; __CONFIG_CONFIG5L = _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
; __CONFIG_CONFIG5H = _CPB_OFF_5H & _CPD_OFF_5H
; __CONFIG_CONFIG6L = _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
; __CONFIG_CONFIG6H = _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
; __CONFIG_CONFIG7L = _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
; __CONFIG_CONFIG7H = _EBTRB_OFF_7H
config PLLDIV = 1 ; No Divide (4 MHz oscillator input)
config CPUDIV = OSC1_PLL2 ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
config USBDIV = 2 ; USB clock source comes from the 96 MHz PLL divided by 2
config FOSC = HS ; HS oscillator, HS used by USB
config FCMEN = OFF ; Fail-Safe Clock Monitor disabled
config IESO = OFF ; Oscillator Switchover mode disabled
config PWRT = ON ; PWRT enabled
config BOR = OFF ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
config BORV = 1 ; Max setting, 0 1 2 3
config VREGEN = OFF ; USB voltage regulator disabled
config WDT = OFF ; HW Disabled - SW Controlled
config WDTPS = 1 ; 1:1, el valor que se coloque es el que divide, potencia al cuadrado tipo binario 2,4,8,16 etc.
config MCLRE = ON ; MCLR pin enabled; RE3 input pin disabled
config LPT1OSC = OFF ; Timer1 configured for higher power operation
config PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
config CCP2MX = ON ; CCP2 input/output is multiplexed with RC1
config STVREN = ON ; Stack full/underflow will cause Reset
config LVP = OFF ; Single-Supply Low Voltage Programin in ICSP disabled
; config ICPRT = OFF ; PIC18F4550
config XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
config DEBUG = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
config CP0 = OFF ; Block 0 (000800-001FFFh) not code-protected
config CP1 = OFF ; Block 1 (002000-003FFFh) not code-protected
config CP2 = OFF ; Block 2 (004000-005FFFh) not code-protected
config CP3 = OFF ; Block 3 (006000-007FFFh) not code-protected
config CPB = OFF ; Boot block (000000-0007FFh) not code-protected
config CPD = OFF ; Data EEPROM not code-protected
config WRT0 = OFF ; Block 0 (000800-001FFFh) not write-protected
config WRT1 = OFF ; Block 1 (002000-003FFFh) not write-protected
config WRT2 = OFF ; Block 2 (004000-005FFFh) not write-protected
config WRT3 = OFF ; Block 3 (006000-007FFFh) not write-protected
config WRTB = OFF ; Boot block (000000-0007FFh) not write-protected
config WRTC = OFF ; Configuration registers (300000-3000FFh) not write-protected
config WRTD = OFF ; Data EEPROM not write-protected
config EBTR0 = OFF ; Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
config EBTR1 = OFF ; Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
config EBTR2 = OFF ; Block 2 (004000-005FFFh) not protected from table reads executed in other blocks
config EBTR3 = OFF ; Block 3 (006000-007FFFh) not protected from table reads executed in other blocks
config EBTRB = OFF ; Boot block (000000-0007FFh) not protected from table reads executed in other blocks
;******************************************************************************
;Datos de la EEPROM ;Los Datos a ser programados en la EEPROM son definidos aqui
ORG 0xF00000
DE "Test Dato" 0, 1, 2, 3, 4, 5, 6, 7
;******************************************************************************
;******************************************************************************
; Vector de Reset.; Este codigo comenzara a ejecutarse cuando suceda un reset
ORG 0x0000
goto PRINCIPAL ;Se va al inicio del codigo principal
;--------------------------VECTORES--------------------------------------------
;*********************************************************************************
; Vector de interrupcion de alta prioridad
; Este codigo comenzara a ejecutarse cuando una interrupcion de alta
; prioridad ocurra o cuando cualquier interrupcion ocurra si es que
; las prioridades de las interrupciones no estan habilitadas.
ORG 0x0008
BRA HighInt
;Va a la rutina de interrupcion de alta prioridad
;*********************************************************************************
; Vector de interrupcion de baja prioridad y rutina; Este codigo comenzara a ejecutrase
; cuando una interrupcion de baja prioridad ocurra. Este codigo puede ser eliminado
; si las interrupciones de baja prioridad no son usadas
ORG 0x0018
movff STATUS,STATUS_TEMP ;Salva el registro STATUS
movff WREG,WREG_TEMP ;Salva el registro de trabajo
movff BSR,BSR_TEMP ;Salva el registro BSR
; *** El codigo de la interrupcion de baja prioridad va aqui ***
movff BSR_TEMP,BSR ;recupera el registro BSR
movff WREG_TEMP,WREG ;recupera el registro de trabajo
movff STATUS_TEMP,STATUS ;recupera el registro STATUS
retfie
ORG 0x0040 ;Para no ocupar la zona de vectores.
; E iNTERRUPCIONES
;*********************************************************************************
; Rutina de interrupcion de alta prioridad.
; El codigo para la rutina de interrupcion de alta prioridad es colocado aqui para
; evitar conflictos con el vector de interrupciones de baja prioridad
HighInt:
; *** El codigo para las interrupciones de alta prioridad va aqui ***
retfie FAST
;*********************************************************************************************
;********************************* INTERRUPCIONES ********************************************
;*********************************************************************************************
Config_InterrupPriority
BCF INTCON,GIEH ; Deshabilitamos Interrupción Globales
; CLRF INTCON ; Otra forma
; BCF RCON,IPEN ; Deshabilitamos prioridades de interrupción
; bsf INTCON,GIEH ; Habilitamos interrupción de alta prioridad
; bsf INTCON,GIEL ; Habilitamos interrupción de baja prioridad
; bcf INTCON2,RBIP ; Baja prioridad para interrupcion de recepción
; bsf IPR1,TMR2IP ; Alta prioridad para interrupción timrer_1
;***********************************************************************************************
;*************************************** Variables *********************************************
;***********************************************************************************************
ORG 0X128
#include "Variables\Variables-Master Cilindro.inc"
;----------------------------------------------------------------------------------------------;
; ZONA DE CÓNFIGURACION INICIAL DEL MICROCONTROLADOR ;
;-----------------------------------------------------------------------------------------------;
; org 0x256
; #include "Variables\Comandos3.inc"
Init_Setup ; ACCESS=0
clrwdt ; Recomendacion de microchip antes de reasignar el
clrf STATUS,ACCESS ; prescaler, y ademas limpio el registro de estados
clrf LATA,ACCESS ; Borrado de posibles Latchs del puerto A
clrf LATB,ACCESS ; Borrado de posibles Latchs del puerto B
clrf LATC,ACCESS ; Borrado de posibles Latchs del puerto C
clrf PORTA,ACCESS ; Limpia Puerto A
clrf PORTB,ACCESS ; Limpia Puerto B
clrf PORTC,ACCESS ; Limpia Puerto C
clrf INTCON,ACCESS ; Limpia Registro de Control de Interrupciones
clrf INTCON2,ACCESS ; y Asociados
clrf INTCON3,ACCESS
clrf RCON,ACCESS
clrf PIE1,ACCESS
clrf PIE2,ACCESS
clrf IPR1,ACCESS
clrf T2CON,ACCESS ; Detiene Timer2, Prescaler = 1:1 / Postscaler = 1:1
clrf TMR2,ACCESS ; Limpia Timer2 register
clrf PCLATH,ACCESS ; Aseguramos que trabajamos en la primera pagina
;*********************************************************************************************
;* MAIN *
;*********************************************************************************************
PRINCIPAL
;******************************* INICIALIZO PORTS *********************************************
Config_PortA
; clrf PORTA ; Se inicializa borrando los Latches
; clrf LATA ; Otras metodo para borar los Latches
movlw 0x0F ; Configura los pines del Puerto A y Puerto B,
movwf ADCON1,ACCESS ; como digitales carga este valor en el REG ADCON1
movlw 0x07 ; Desactiva el modulo comparador
movwf CMCON,ACCESS ;
movlw b'00000000' ; Config del Puerto A [ RA0 RA1 RA2 RA3 RA4 RA5]
movwf TRISA,ACCESS ; [ S S S S S S ]
; CLRF PORTB ; Se inicializa borrando los Latches
movlw b'11110000' ; Config del Puerto B [ RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0]
movwf TRISB,ACCESS ; [ E E E E S S S S ]
; CLRF PORTC ; Se inicializa borrando los Latches
movlw b'10000110' ; Config del Puerto C [ RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0]
movwf TRISC,ACCESS ; [ E S S S S E E S ]
clrf SSPCON1,ACCESS ; Deshabilito el modulo MSSP I2C, BANKED=1 ACCESS=0
bcf UCON,USBEN,ACCESS ; Desactiva el modulo USB
;*********************************************************************************************
; BAUD RATE para la comunicación TX-RX y otras definiciones para la USART, Xtal= 18,432 Mhz
; Baud Rate = 9600, Sin Paridad, 8 bIT, 1 Bit parada.
;*********************************************************************************************
TX_232
movlw d'119' ; d'119'=9600 bps. Si se desea tocar el valor para aproximar.
movwf SPBRG ; Baud Rate Generador, Fijarse en tablas, ¡cargar en este!
MOVLW b'00100100' ; Habilita la transmisión Async
MOVWF TXSTA ; CSRC=0 Clock Source
; TX9= 0 9-bit transmición Enable.
; TXEN=1 Transmit Enable
; SYNC=0 USART Modo; Sincronico=1, Asincronico=0
; Bit3=0 NC no usado
; BRGH=1 High Baud Rate ????????
; TRMT=0 Transmit Shift register 0=FULL
; TX9D=0 9-bit NO LO USAMOS.
bcf PIE1,TXIE ; Deshabilito interrupcion de transmision de la USART.
BCF PIE1,RCIE ; Deshabilito interrupcion de recepcion de la USART.
RX_232
movlw b'10010000' ; Habilita de recepción Async
movwf RCSTA ; SPEN=1 Serial Port Enable
; RX9= 0 9-bit Receive Enable
; SREN=0 Single Receive
; CREN=1 Continuos Receive Enable Bit
; (Asinc. Enab.=1, Disab.=0)
; ADDEN=0 Adress Detect Enable
; FERR=0 Framing Error
; OERR=0 Overrun Error
; RX9D=0 9-bit receive podria ser paridad.
BAUD_RATE
MOVLW B'00000000' ; Control del Baud Rate
MOVWF BAUDCON ; ABDOVF=0 Auto Baud Adquisición Rollover
; RCIDL=0
; RXDTP=0 Polaridad invertida de datos recibidos
; TXCKP=0 Polaridad invertida de datos y clok transmitidos
; BRG16=0 16-Bit Baud Rate Generador
; UNIMPLEMENT
; WUE=0 Wake-Up bit
; ABDEN=0 Auto-Baud Detección Enable
clrf PORTA,ACCESS ; Limpia Puerto A
clrf PORTB,ACCESS ; Limpia Puerto B
clrf PORTC,ACCESS ; Limpia Puerto C
;*********************************************************************************************
;******************************* INICIO DEL PROGRAMA *****************************************
;*********************************************************************************************
INICIO
CALL Delay_1s
CLRF FLAGreg
CALL RESET_USART
INICIALIZACION
CALL LLAMADA_00 ; Para indicar que vamos a empezar a transmitir
CALL SEND_COMANDO_1 ; Comando de Inicio del Cilindro.
CALL Delay_1s
CALL SEND_COMANDO_2 ; Envio comando de Inicio.
CALL CILINDRO_START ; Verifico que tipo de datos recibimos
COMIENZO
CALL START_JUEGO
CALL FIN_JUEGO
CALL Delay_5s
GOTO COMIENZO
;*********************************************************************************************
;****************************** REVISION DE LOS DATOS OBTENIDOS *****************************
;*********************************************************************************************
#include "Variables\TX-RX5.inc"
#include "Variables\Comienzo_Juego3.inc"
#include "Variables\Comandos de Inicio.inc"
#include "Variables\Comandos3.inc"
#include "Variables\Delay Routines.inc"
#include "Variables\Errores.inc"
END
El problema es Comandos3.inc
;*********************************************************************************************
;********************************* COMANDOS **************************************************
;*********************************************************************************************
COMANDO_1
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
MOVFF PCL,W ; Comando que enviamos para comenzar el inicio del cilindro
ADDWF PCL,F ; respuesta: 3C 3C 31 30 53 30 46 46 42 36 3E
RETLW 0x3C ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
RETLW 0x30 ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
RETLW 0x31
RETLW 0x59
RETLW 0x30
RETLW 0x33 ; otra posible: 3C 30 31 53 34 35 3E
RETLW 0x45
RETLW 0x3E
RETLW 0x00 ; Fin
COMANDO_3
MOVFF PCL,W ; Comando con el cual mantenemos la comunicación con
ADDWF PCL,F ; el cilindro en el testeo hasta que este termine
RETLW 0x3C ; de inicialize: 3C 30 31 59 31 44 42 3E
RETLW 0x30 ; respuesta: 3C 3C 31 30 59 30 30 46 46 44 35 3E
RETLW 0x31
RETLW 0x59
RETLW 0x31
RETLW 0x44
RETLW 0x42
RETLW 0x3E
RETLW 0x00 ; Fin
COMANDO_4
MOVFF PCL,W ; Comando final para iniciar el cilindro 0.
ADDWF PCL,F ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
RETLW 0x81 ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
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
MOVFF PCL,W ; Comando final para iniciar el cilindro 00.
ADDWF PCL,F ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
RETLW 0x81 ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
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
COMANDO_6 ; Comando para interaccion en juego : 3C 3C 30 31 44 41 34 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 ; Respuesta a este comando : 3C 3C 31 30 44 46 46 46 46 32 35 3E
RETLW 0x3C
RETLW 0x30
RETLW 0x31
RETLW 0x44
RETLW 0x41
RETLW 0x34
RETLW 0x3E
RETLW 0x00
; 81 5A 30 30 82 41 41 1B 30 B1 9C B1 B1 B8 A0 9C B1 B7 A0 9C 36
COMANDO_7 ; B2 B8 A0 9C B1 B1 B2 A0 9C 36 33 35 A0 84
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 0xB1
RETLW 0xB8
RETLW 0xA0
RETLW 0x00
COMANDO_7_1 ; B2 B8 A0 9C B1 B1 B2 A0 9C 36 33 35 A0 84
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 0x9C
RETLW 0xB1
RETLW 0xB7
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0xB2
RETLW 0xB8
RETLW 0xA0
RETLW 0x9C
RETLW 0xB1
RETLW 0xB1
RETLW 0xB2
RETLW 0xA0
RETLW 0x9C
RETLW 0x36
RETLW 0x33
RETLW 0x35
RETLW 0xA0
RETLW 0x84
RETLW 0X00 ; Fin
COMANDO_8 ; Comando para que empieze el juego
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 0x3C ; Respuesta a este comando : 3C 3C 31 30 49 38 44 3E
RETLW 0x30
RETLW 0x31
RETLW 0x49
RETLW 0x37
RETLW 0x42
RETLW 0x3E
RETLW 0x00
COMANDO_9 ; Comando para detener el cilindro: 3C 3C 30 31 50 36 42 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 0x3C ; Respuesta a este comando : 3C 3C 31 30 50 39 44 3E
RETLW 0x30
RETLW 0x31
RETLW 0x50
RETLW 0x36
RETLW 0x42
RETLW 0x3E
RETLW 0x00
Como veran tiene tablas muy largas que son los comando que se envían a través del puerto serie al dispositivo y lo hace TX-RX5.inc,
les muestro una secuencia de envio:
SEND_COMANDO_1
CLRF TABLA_START ; Borro el puntero de las Tablas
ESCMEN1
RLNCF TABLA_START,W,0 ; Roto un bit a la izquierda y lo guardo en W
CALL COMANDO_1 ; 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, salto
RETLW 00H ; 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 ESCMEN1 ; Vuelvo a buscar otro caracter hasta finalizar.
Bueno volvamos a Comandos3.inc, este include es el problema, donde lo coloque el programa se comporta diferente, en donde esta ahora la primera parte del programa:
INICIALIZACION
CALL LLAMADA_00 ; Para indicar que vamos a empezar a transmitir
CALL SEND_COMANDO_1 ; Comando de Inicio del Cilindro.
CALL Delay_1s
CALL SEND_COMANDO_2 ; Envio comando de Inicio.
CALL CILINDRO_START ; Verifico que tipo de datos recibimos
Pero la segunda, que es la mas larga y que mantiene el dispositivo funcionando, no:
COMIENZO
CALL START_JUEGO
CALL FIN_JUEGO
CALL Delay_5s
GOTO COMIENZO
Yo puedo colocar Comandos3.inc mas al principio como:
;*********************************************************************************************
;********************************* INTERRUPCIONES ********************************************
;*********************************************************************************************
Config_InterrupPriority
BCF INTCON,GIEH ; Deshabilitamos Interrupción Globales
; CLRF INTCON ; Otra forma
; BCF RCON,IPEN ; Deshabilitamos prioridades de interrupción
; bsf INTCON,GIEH ; Habilitamos interrupción de alta prioridad
; bsf INTCON,GIEL ; Habilitamos interrupción de baja prioridad
; bcf INTCON2,RBIP ; Baja prioridad para interrupcion de recepción
; bsf IPR1,TMR2IP ; Alta prioridad para interrupción timrer_1
;***********************************************************************************************
;*************************************** Variables *********************************************
;***********************************************************************************************
ORG 0X128
#include "Variables\Variables-Master Cilindro.inc"
#include "Variables\Comandos3.inc"
;----------------------------------------------------------------------------------------------;
; ZONA DE CÓNFIGURACION INICIAL DEL MICROCONTROLADOR ;
;-----------------------------------------------------------------------------------------------;
; org 0x256
; #include "Variables\Comandos3.inc"
Init_Setup ; ACCESS=0
clrwdt ; Recomendacion de microchip antes de reasignar el
clrf STATUS,ACCESS ; prescaler, y ademas limpio el registro de estados
Pero el inicio no andaría o los dos no andarían el error que hace es que las tablas de comandos se superponen, o sea se envia la mitad de una con la mitad de otra totalmente distinta y no consecutiva o solo transmitiría la mitad.
Espero que me hayan podido entender ya que no se que hacer o lo que estoy haciendo mal.
Les agradeceria todo a ayuda posible.
Gracias