' *********** SOFTWARE DE CONTROL DE DISPENSADORA DE ETIQUETAS IP CON PIC 16F877 ******************

DEFINE	LCD_DREG PORTD
DEFINE	LCD_DBIT 0			'BUS DE DATOS PIN D0,D1,D2,D3
DEFINE	LCD_RSREG PORTC
DEFINE	LCD_RSBIT 5			'RS PIN C5
DEFINE	LCD_EREG PORTC
DEFINE	LCD_EBIT 4			'E  PIN C4
DEFINE	LCD_BITS 4
DEFINE	LCD_Lines	2
DEFINE	OSC	20					'SETEO EL CRISTAL EN 20 Mhz
Define	ADC_BITS 8			'Set number of bits in result
Define	ADC_CLOCK	0			'3 Set clock source (3=rc)
Define	ADC_SAMPLEUS 1	'Set sampling time in uS

'*************************************** INICIALIZACION DE LA EEPROM *******************************
'************ SE GRABA EN EL MOMENTO DE GRABACION DEL PIC NO CADA VEZ QUE ARRANACA EL SOFT *********

EEPROM 1,[1,1,129,0,0,16,7,0,0]		'INICIALIZACION DE PROG1,OFFSET=585,MODO=0(SINCRONICA), CICLO=0 (DIRECTO), FOTO = 0 (NA)
EEPROM 10,[0,0,0,0,0,0,0,0,0,0]
EEPROM 20,[90,1,44,0,3,32,0,0,0,0]
EEPROM 30,[0,0,150,0,0,0,0,0,0,0]
EEPROM 40,[0,0,150,0,0,0,0,0,0,0]
EEPROM 50,[0,0,150,0,0,0,0,0,0,0]
EEPROM 60,[0,0,150,0,0,0,0,0,0,0]
EEPROM 70,[0,0,150,0,0,0,0,0,0,0]
EEPROM 80,[0,0,150,0,0,0,0,0,0,0]
EEPROM 90,[0,0,150,0,0,0,0,0,0,0]
EEPROM 100,[0,0,150,0,0,0,0,0,0,0]
EEPROM 110,[0,0,150,0,0,0,0,0,0,0]
EEPROM 120,[0,0,150,0,0,0,0,0,0,0]
EEPROM 130,[0,0,150,0,0,0,0,0,0,0]
EEPROM 140,[0,0,150,0,0,0,0,0,0,0]
EEPROM 150,[0,0,150,0,0,0,0,0,0,0]
EEPROM 160,[0,0,150,0,0,0,0,0,0,0]
EEPROM 170,[0,0,150,0,0,0,0,0,0,0]
EEPROM 180,[0,0,150,0,0,0,0,0,0,0]
EEPROM 190,[0,0,150,0,0,0,0,0,0,0]
EEPROM 200,[0,0,150,0,0,0,0,0,0,0]
EEPROM 210,[0,0,150,0,0,0,0,0,0,0]
EEPROM 220,[0,0,150,0,0,0,0,0,0,0]
EEPROM 230,[0,0,150,0,0,0,0,0,0,0]
EEPROM 240,[0,0,150,0,0,0,0,0,0,0]
EEPROM 250,[0,0,0,0,0,0]

'************************************ FIN DE INICIALIZACION DE LA EEPROM ***************************

ARRANCA_MOTOR				Var 	Bit	
bogus 							Var		Byte						'Used to store intermediate results of the multiply
CICLO								Var		Config.1				'VARIABLE DE ALAMCENAMIENTO DEL CICLO DE TAMP/BLOW 0=DIRECTO 1=INVERSO
CLAVE_ACTIVADA			Var		Config.5				'MARCA PARA RESTRINGIR EL ACCESO DEL USUARIO A EDICION DE PROGRAMAS
Config							Var		Byte						'BYTE DE AMACENAMIENTO PARA LA CONFIGURACION DEL EQUIPO POR MEDIO DE LOS BITS SIGUIENTES
CONTADOR						Var		Word						'VARIABLE USADA PARA ALMACENAR LA CUENTA DE DISPARO RESETEABLE
CONTADORH						Var		CONTADOR.Byte1
CONTADORL						Var		CONTADOR.Byte0
CONTADOR_MS					Var		Word						'VARIABLE USADA PARA ALMACENAR LA CUENTA DE MILISEGUNDOS
CONTADOR_PRODUCT		Var		Word						'VARIABLE PARA CONTAR EL RETARDO DE PRODUCTO
CONTADORDH					Var		Word						'VARIABLE USADA PARA LA CUENTA DE DISPARO ACUMULATIVA WORD ALTO
CONTADORDHH    			Var		CONTADORDH.Byte1	
CONTADORDHL     		Var		CONTADORDH.Byte0	
CONTADORDL					Var		Word						'VARIABLE USADA PARA LA CUENTA DE DISPARO ACUMULATIVA WORD BAJO
CONTADORDLH     		Var		CONTADORDL.Byte1	
CONTADORDLL     		Var		CONTADORDL.Byte0	
CUENTA_ERROR				Var		Word						'VARIABLE MEDIR ERROR POR FALTA DE ETIQUETA
DELAY_CICLO					Var	 	Bit							'BANDERA DE RETARDO DE CICLO
DELAY_TAMP					Var	 	Bit							'BANDERA 
DETENER							Var		Bit							'MARCA PARA INDICAR QUE SE DETECTO CALLE Y SE PARA
DIRECCION						Var		Byte	
DISPENSADA					Var	 	Bit							'MARCA PARA INDICAR QUE HAY UNA ETIQUETA EN EL TAMP PARA APLICAR
DIVISOR							Var		Word						'VARIABLE USADA PARA REALIZAR UNAS DIVISION DE SHAFT ENCODER
DIVISORH						Var		DIVISOR.Byte1		'BYTE ALTO DE DIVISOR
DIVISORL						Var		DIVISOR.Byte0		'BYTE BAJO DE DIVISOR
ENCODER							Var		Config.6				'MARCA PARA HABILITAR EL ENCODER
ENTRADA							Var		Byte						'VARIABLE USADA PARA ALMACENAR LA ENTRADA ANALOGICA
Error								Var	 	Bit							'MARCA PARA INDICAR QUE HAY UN ERROR DE LA ETIQUETADORA
GAP									Var	 	Byte						'VARIABLE USADA DETERMINAR 
GENERAL							Var		Byte						'VARIABLE USADA PARA LEER EL TECLADO Y EVITAR RUIDO
GIRO								Var		Config.3				'SENTIDO DE GIRO DEL MOTOR 0 = DERECHA  1 = IZQUIERDA 
IDIOMA							Var		Byte						'SELECCION DE IDIOMA
INTER_DELAY					Var		Byte						'RETARDO DESDE QUE TERMINA DE DISPENSAR HASTA QUE APLICA
INTER_DELAYW				Var		Word						'RETARDO DESDE QUE TERMINA DE DISPENSAR HASTA QUE APLICA
L										Var	 	Word						'LARGO DE LA ETIQUETA
L_H									Var		L.Byte1	
L_L									Var		L.Byte0	
LABEL_STOP					Var		Byte						'VARIABLE USADA PARA LA PARADA DE LA ETIQUETA
LABEL_STOPW					Var		Word						'VARIABLE USADA PARA LA PARADA DE LA ETIQUETA
LEERTECLADO					Var		Bit							'MARCA QUE INDICA QUE SE HA PRESIONADO UNA TECLA
LINER								Var		Bit							'MARCA PARA DETECTAR LA CALLE DE LA ETIQUETA
LINER_PREVIO				Var		Bit
MAXIMO							Var	 	Byte						'VARIABLE USADA PARA ALAMCENAR EL VALOR MAXIMO DE LA ENTRADA ANALOGICA
MINIMO							Var	 	Byte						'VARIABLE USADA PARA ALMACENAR EL VALOR MINIMO DE LA ENTRADA ANALOGICA
MODO    						Var		Config.0				'MODO DE FUNCIONAMIENTO 0=SINCRONICO 1=TAMP /BLOW
NIBLEB							Var		Byte						'VARIABLE USADA PARA EL NIBLE SUP DEL PUERTO B
NUMERO 							Var		Word						'VARIABLE EN LA QUE ALMACENA EL NUMERO PRESIONADO
OFFSET							Var	 	Word						'VARIABLE PARA ALMACENAR LA DISTANCIA EN MILIMETROS DESDE EL SENSOR HASTA LA LANZA
OFFSET_STEP					Var	 	Word						'VARIABLE DE CALCULO DE  LA DISTANCIA EN STEPS DESDE EL SENSOR HASTA LA LANZA
OFFSETH							Var		OFFSET.Byte1		'BYTE ALTO DE OFFSET
OFFSETL							Var		OFFSET.Byte0		'BYTE BAJO DE OFFSET
PORTA40							Var		Byte						'VARIABLES PARA LA DETECCION DEL DISPARO
PORTA41							Var		Byte
PORTB00							Var		Byte						'VARIABLES PARA LA DETECCION DEL DISPARO
PORTB01							Var		Byte
PORTB0L							Var		Bit
PORTA4L							Var		Bit
PRESCALER						Var		Word						'VARIABLE USADA PARA DAR LA FRECUENCIA DE STEP CON EL TIMER1
PRESCALERH					Var	 	PRESCALER.Byte1	
PRESCALERL					Var	 	PRESCALER.Byte0	
PRESENCIA						Var	 	Bit							'MARCA USADA PARA DETERMINAR SI HAY PRESENCIA
PRODUCT							Var	 	Word						'VARIABLE DE ALACENAMIENTO DEL RETARDO DE APLICACION DE ETIQUETA
PRODUCTH						Var		PRODUCT.Byte1	
PRODUCTL						Var		PRODUCT.Byte0	
PROGRAMA						Var		Byte						'VARIABLE DE ALMACENAMIENTO DEL NÚMERO DE PROGRAMA
RAMPA								Var		Byte	
RELACION						Var		Byte						'VARIABLE USADA PARA CALCULAR LA RELACION DE STEPS A MILIMETROS
RETARDO							Var	 	Bit							'MARCA QUE INDICA QUE HAY QUE ESPERAR EL RETARDO DE PRODUCTO
RETORNO_DELAY				Var		Byte						'TIEMPO DE RETARDO DESDE QUE SE CUMPLIO EL TIEMPO DE TAMP/BLOW HASTA
RETORNO_DELAYW			Var		Word						'TIEMPO DE RETARDO DESDE QUE SE CUMPLIO EL TIEMPO DE TAMP/BLOW HASTA  QUE HABILITA EL CILO SIGUIENTE QUE HABILITA EL CILO SIGUIENTE
STEPDIVISOR					Var		Byte						'VARIABLE DE DIVISOR DEL PRESCALER PARA SHAFT ENCODER
TAMP								Var		Byte						'VARIABLE DE USO PARA EL TIEMPO DE TAMP
TAMPW								Var	 	Word	
TECLA								Var		Byte						'VARIABLE DE ALMACENAMIENTO DEL LA TECLA PRESIONADA
TOPE								Var		Word						'VARIABLE USADA PARA DETERMINAR EL TOPE NUMERICO DEL INGRESO DE DATOS 
USO									Var		Byte	
VAR_PRODUCT_A				Var		Word						'VARIABLE USADA PARA CALCULAR EN MM EL RETARDO DE PRODUCTO
VELOCIDAD						Var		Word						'VARIABLE USADA PARA ALMACENAR LA VELOCIDAD
VELOCIDADH					Var		VELOCIDAD.Byte1	'BYTE ALTO DE VELOCIDAD
VELOCIDADL					Var		VELOCIDAD.Byte0	'BYTE BAJO DE VELOCIDAD
WRESULT							Var	 	Word	
WW0									Var	 	Word	
WW1									Var	 	Word	

'DATOS

'MOTOR = 200 STEP * VUELTA
'DRIVER 1/10 --> 2000 STEP * VUELTA
'DIAMETRO RODILLO = D = 50 mm
'PERIMETRO = P = PI*D = 157
'157 mm ------ 2000 STEP
'1 mm   ------ x = 2000 / 157 = 13 = RELACION
'VELOCIDAD = VEL mts * min
'VELOCIDAD = VEL (mts) * 1000 / 60 * mm / seg
'VELOCIDAD = VEL (mts) * (1000 / 60) * RELACION pulsos / seg
'F = VEL  * (1000 / 60) * RELACION pulsos * seg
'T = 1 / F = 60 / (VEL*1000*RELACION)
'T(tmr1) = 1/f(trm1) = 1/(5e6/2)	se divide por 2 con el prescaler
'T(trm1) = 1/2.5E6
'T = N * T(trm1) => N = T / T(trm1)     N es el numero que hay que cargar al  TRM1 para que genere la frecuencia deseada
'N = (60 / (VEL*1000*RELACION)) * 2.5E6

'************************************** CONSTANTES ***********************************************************
ARRIBA				CON	187 	 'CONSTANTES QUE IDENTIFICAN LA DECODIFICACION DE LAS TECLAS
ABAJO					CON	189
ENT						CON	190
ESC						CON	183
F1						CON	215
F2						CON	219
F3						CON	221
F4						CON	222	
'*******************************     INICIALIZACIONES   **********************************************************

ARRANCA_MOTOR = 0
CONTADOR_MS = 0
CONTADOR_PRODUCT = 0
DELAY_CICLO = 0
DELAY_TAMP = 0
DISPENSADA = 0
DIVISOR = $FA00
Error = 0
GoSub ACTUALIZAR
L = 0
LABEL_STOP= 0
LEERTECLADO = 0
PORTA.2 = 0
PRESENCIA = 0
RELACION = 13	'CALCULO DE CANTIDAD DE STEP POR MM PARA DIAMETRO 50
RETARDO = 0
T1CON = 0
TMR1H = DIVISORH
TMR1L = DIVISORL
TOPE = 255	
VAR_PRODUCT_A = 0	
TMR0 = 	61              '(256 - 195)--> 195 ES :((F/4)/PRESCALER)/FTRM1 --> ((20E6/4)/256)/10000
												' FRECUENCIA DE TIMER0 = 1000HZ = 10 mSEG

PIR1 = 0							'reseta todos los bitflag de las interrupciones, PIR1 es el registro de las interrupciones
PIE1 = %00000001			'habilito la interrupcion por Timer1
INTCON = %01000000	 	'se habilita interrupcion de perifericos y TIMER0
OPTION_REG= %00000111	'PULL-UP HABILITADO EN PORTB,CLOCK interno, INCREMENTA TIMMER0 DE A 1, PRESCALER 256
T1CON = %00010100			'TIMER1 PRESCALER 1:2, TIMER , CLOCK INTERNO (F/4), STOP TIMER1
ADCON1 = %00001110		'SE SETEAN PUERTO A COMO A0 ANALOGICA Y EL RESTO DIGITALES

'*********************************************** PUERTOS ****************************************************
	
	TRISA.0 = 1			'ENTRDADA DE SENSOR DE ETIQUETA 1
	TRISA.1 = 1			'ENTRDADA DE SENSOR DE ETIQUETA 2 (OPCIONAL)
	TRISA.2 = 0			'SALIDA DE ASSIST 
	TRISA.3 = 0			'SALIDA DE TAMP/BLOW
	TRISA.4 = 1			'ENTRADA PNP DE PRESENCIA
	TRISA.5 = 0			'SALIDA DE PRINT O CODER STEP

	TRISE = %00000000		'CONFIGURO EL PUERTO E COMO O (E0 = ALARMA, RELE ROJA, E1 = RELE AMARILLA, E3 = RELE VERDE)
	TRISB = %11111111		'CONFIGURO EL PUERTO B COMO I/O

	PORTB = 0
	TRISD.4 = 0			'SALIDA DE TECLADO FILA 4			
	TRISD.5 = 0			'SALIDA DE TECLADO FILA 3			
	TRISD.6 = 0			'SALIDA DE TECLADO FILA 2		
	TRISD.7 = 0			'SALIDA DE TECLADO FILA 1			

	TRISC.0 = 1			'ENTRADA DE ENCODER
	TRISC.1 = 0			'SALIDA DE STEP
	TRISC.2 = 0			'SENTIDO DE GIRO DEL MOTOR
	TRISC.3 = 0			'DISABLE DEL DRIVER
	TRISC.6 = 0			'TX RS232
	TRISC.7 = 1			'RX RS232

	On Interrupt GoTo miint 	' Define interrupt handler
	Disable	
 
 '*********************************************** COMIENZO DEL PROGRAMA ***************************************           
		
	GoSub leer_teclado
		If	LEERTECLADO = 1 Then
				If TECLA = ESC	Then		'RESET DEL CONTADOR DE DISPAROS 
					Write 4,0
					PAUSE 10
					Write 5,0
					CONTADOR = 0
				  GoSub CLRLCD   ' Clear LCD screen
					GoSub CONTAD
					PAUSE 1000
				EndIf
				If TECLA = 155   Then	'MODO MANTENIMIENTO
          GoSub CLRLCD
					GoSub MODELO
					GoSub LINEFEED
					Lcdout "  CONFIG. MENU  "
					PAUSE 1000
					GoSub CLRLCD
					GoSub EMPRESA
					GoSub LINEFEED
					GoSub VER
          PAUSE 1000
					TECLA = 0
					NUMERO = 1
					While	TECLA <> ESC
							GoSub	leer_teclado
							PAUSE 200
							If TECLA = ABAJO	Then		'SE PRESIONO LA TECLA BAJAR VALOR
								If NUMERO > 1	 Then
									NUMERO = NUMERO - 1
								EndIf
								TECLA = 0
							EndIf
							If TECLA = ARRIBA	Then		'SE PRESIONO LA TECLA SUBE VALOR
								If NUMERO < 12 Then
									NUMERO = NUMERO + 1
								Else
									NUMERO = 12
								EndIf
								TECLA = 0
							EndIf
'*********************************************************************************************
								If NUMERO = 1 Then		'VALOR DE SENSOR
									GoSub CLRLCD
				     			GoSub VALOR
									If TECLA = ENT Then
										TECLA = 0
										While TECLA <> ESC
											GoSub	leer_teclado	
											ADCIN 0,ENTRADA
											PAUSE 100
									  	GoSub CLRLCD   ' Clear LCD screen
	     								GoSub VALOR
											GoSub LINEFEED
											Lcdout #ENTRADA
										Wend
										TECLA = 0
									EndIf
								EndIf
'*********************************************************************************************
							 	If NUMERO = 2 Then		'OFFSET DE LANZA
									GoSub CLRLCD
				     			GoSub OFFSETLANZA
									If TECLA = ENT	Then
                  	While TECLA = ENT
                  		GoSub	leer_teclado
                  	Wend
               			NUMERO = OFFSET
										TECLA = 0
										TOPE = 1000
										GoSub	INGRESO
										OFFSET = NUMERO
										Write 2,OFFSETH
										PAUSE 10
										Write 3,OFFSETL
                  	TECLA = 0
                  	NUMERO = 2
									EndIf
								EndIf
'*********************************************************************************************
								If NUMERO = 3 Then		'CONTADOR HISTORICO
									GoSub CLRLCD
				     			GoSub CONT
									If TECLA = ENT	Then
							      GoSub LINEFEED
										If CONTADORDH > 0  Then 
											Lcdout #CONTADORDH
											If CONTADORDL < 1000 And CONTADORDL > 99	Then					
												Lcdout "0"
											EndIf
											If CONTADORDL < 100 And CONTADORDL > 9	Then					
												Lcdout "00"
											EndIf
											If CONTADORDL < 10	Then					
												Lcdout "000"
											EndIf
										EndIf
										Lcdout #CONTADORDL
										While TECLA <> ESC 
											GoSub	leer_teclado	
										Wend
										TECLA = 0
                  	NUMERO = 3
									EndIf
								EndIf
'*********************************************************************************************
								If NUMERO = 4 Then		'SINCRONICA, TAMP O BLOW
									GoSub CLRLCD
				     			GoSub MODOT
									If TECLA = ENT	Then
              	  	While TECLA = ENT
                	  	GoSub	leer_teclado
                  	Wend
               			NUMERO = MODO
										TECLA = 0
										TOPE = 1
										GoSub	INGRESO
										MODO = NUMERO
										Write 6,Config
										PAUSE 10
                  	TECLA = 0
                  	NUMERO = 4
									EndIf
								EndIf
'*********************************************************************************************
							If NUMERO = 5 Then	'CICLO DIRECTO O INVERSO
								GoSub CLRLCD
			     			GoSub CICL
								If TECLA = ENT	Then
                	While TECLA = ENT
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = CICLO
									TECLA = 0
									TOPE = 1
									GoSub	INGRESO
									CICLO = NUMERO
									Write 6,Config
									PAUSE 10
                  TECLA = 0
                  NUMERO = 5
								EndIf
							EndIf
'*********************************************************************************************
							If NUMERO = 6 Then	'MENU DE CLAVE
								GoSub CLRLCD
				     		GoSub CLAVE
								GoSub LINEFEED
				     		GoSub NOSI 
								If TECLA = ENT	Then
                	While TECLA = ENT
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = CLAVE_ACTIVADA
									TECLA = 0
									TOPE = 1
									GoSub	INGRESO
									CLAVE_ACTIVADA = NUMERO
									Write 6,Config
									PAUSE 10
                  TECLA = 0
                  NUMERO = 6
								EndIf
							EndIf
'*********************************************************************************************
							If NUMERO = 7 Then		'RAMPA DE ACELERACION
								GoSub CLRLCD
				     		GoSub RAMP
								If TECLA = ENT	Then
            			While TECLA = ENT
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = RAMPA
									TECLA = 0
									TOPE = 30
									GoSub	INGRESO
									RAMPA = NUMERO
									Write 7,RAMPA
									PAUSE 10
                  TECLA = 0
                  NUMERO = 7
								EndIf
							EndIf
'*********************************************************************************************
							If NUMERO = 8 Then		'DELAY INTER-CICLO
								GoSub CLRLCD
				     		GoSub DLYINTER
								If TECLA = ENT	Then
                	While TECLA = ENT
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = INTER_DELAY
									TECLA = 0
									TOPE = 255
									GoSub	INGRESO
									INTER_DELAY = NUMERO
									Write 8,INTER_DELAY
									PAUSE 10
                  TECLA = 0
                  NUMERO = 8
								EndIf
							EndIf
'*********************************************************************************************
							If NUMERO = 9 Then		'DELAY FIN DE CICLO
								GoSub CLRLCD
				     		GoSub DLYFIN
								If TECLA = ENT	Then
                	While TECLA = ENT
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = RETORNO_DELAY
									TECLA = 0
									TOPE = 255
									GoSub	INGRESO
									RETORNO_DELAY = NUMERO
									Write 9,RETORNO_DELAY
									PAUSE 10
                  TECLA = 0
                  NUMERO = 9
								EndIf
							EndIf
'*********************************************************************************************
							If NUMERO = 10 Then		'SENTIDO DE GIRO
								GoSub CLRLCD
				     		GoSub HAND
								If TECLA = ENT	Then
                	While TECLA = ENT
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = GIRO
									TECLA = 0
									TOPE = 1
									GoSub	INGRESO
									GIRO = NUMERO
									Write 6,Config
									PAUSE 10
                  TECLA = 0
                  NUMERO = 10
								EndIf
							EndIf
'*********************************************************************************************
	            If NUMERO = 11 Then		'SHAFT ENCODER
								GoSub CLRLCD
				     		GoSub SHAFT
								GoSub LINEFEED
				     		GoSub NOSI
								If TECLA = ENT	Then
                	While TECLA = ENT
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = ENCODER
									TECLA = 0
									TOPE = 1
									GoSub	INGRESO
									ENCODER = NUMERO
									Write 6,Config
									PAUSE 10
									If ENCODER = 1 Then
										GoSub CLRLCD
										GoSub PULSOS
										GoSub LINEFEED
										NUMERO = STEPDIVISOR
										TOPE = 255
										GoSub	INGRESO
										STEPDIVISOR = NUMERO
							 			Write 14,STEPDIVISOR
										PAUSE 10
									EndIf
                  TECLA = 0
                  NUMERO = 11
								EndIf
							EndIf
'********************************************************************************************
							If NUMERO = 12 Then		'IDIOMA
								GoSub CLRLCD
				     		Lcdout "    LANGUAGE   "
								GoSub LINEFEED							'0 = CASTELLANO
								If TECLA = ENT	Then				'1 = PORTUGUES
                	While TECLA = ENT					'2 = INGLES
                  	GoSub	leer_teclado
                  Wend
               		NUMERO = IDIOMA
									TECLA = 0
									TOPE = 2
									GoSub	INGRESO
									IDIOMA = NUMERO
									Write 15,IDIOMA
									PAUSE 10
                  TECLA = 0
                  NUMERO = 12
								EndIf
							EndIf
'*********************************************************************************************
					Wend
				EndIf
		EndIf
	GoSub ACTUALIZAR
	GoSub CLRLCD
	GoSub EMPRESA
  GoSub LINEFEED
	GoSub MODELO
	PORTC.1 = 1
	PORTC.3 = 1	'HABILITAR EL DRIVER
  INTCON.7 = 1	'SE HABILITA LA INTERRUPCIÓN GLOBAL

'**************************************** INICIO DEL PROGRAMA PRINCIPAL **************************************

inicio:

If PORTB.0 = 1 Then
	PORTB01 = PORTB01 + 1
	PORTB00 = 0
Else
	PORTB00 = PORTB00 + 1
	PORTB01 = 0
EndIf

If PORTA.4 = 0 Then
	PORTA41 = PORTA41 + 1
	PORTA40 = 0
Else
	PORTA40 = PORTA40 + 1
	PORTA41 = 0
EndIf

' ANALISIS DEL FLANCO
If PORTB.0 <> PORTB0L Then 
	If PORTB.0 = 1 And PORTB01 > 1 Then
		PORTB0L = PORTB.0
	EndIf
	If PORTB.0 = 0 And PORTB00 > 1 Then
		PORTB0L = PORTB.0
    PRESENCIA = 1
	EndIf
EndIf

' ANALISIS DEL FLANCO
If PORTA.4 <> PORTA4L Then 
	If PORTA.4 = 0 And PORTA41 > 1 Then
		PORTA4L = PORTA.4
	EndIf
	If PORTA.4 = 1 And PORTA40 > 1 Then
    PORTA4L = PORTA.4
    PRESENCIA = 1
	EndIf
EndIf

If PRESENCIA = 1 And Error = 0 Then
	CONTADOR = CONTADOR + 1
	CONTADORDL = CONTADORDL + 1
	If CONTADORDL > 9999  Then
		CONTADORDL = 0 
		CONTADORDH = CONTADORDH + 1
	EndIf
	Write 4,CONTADORH
'	PRESENCIA = 1
	GoSub CLRLCD
	Write 5,CONTADORL
	GoSub MODELO
	Write 10, CONTADORDHH
	GoSub LINEFEED
	Write 11, CONTADORDHL
	GoSub CONT2
	Write 12, CONTADORDLH
	CONTADOR_PRODUCT = 0
	Write 13, CONTADORDLL
	PORTE.0 = 0			'SALIDA ERROR
	PORTE.2 = 1			'LUZ VERDE ON
	Enable
	While ARRANCA_MOTOR = 0
		If ENCODER = 1 Then
			T1CON.0 = 1		' HABILITO EL TIMER 1
		EndIf
		If CONTADOR_PRODUCT >= VAR_PRODUCT_A	Then
			If MODO = 0 Or (MODO = 1 And CICLO = 0) Then
				PORTE.0 = 0		'DESACTIVACION DE LA SALIDA RELE ROJO Y FLASH ERROR
				PORTE.2 = 1		'ACTIVACION DE LUZ VERDE
				CONTADOR_MS = 0
				GoSub ARRANCAR
				PRESENCIA = 0
		    CONTADOR_PRODUCT = 0
				PORTA.2 = 1		'ACTIVAR EL ASSIST			
			EndIf
			If MODO = 1 And CICLO = 1 Then
				pause INTER_DELAYW	'PAUSA ENTRE EL FIN DEL DISPENSADO Y EL PRINCIPIO DEL TAMP
				PORTA.3 = 1		'SE ACTIVA EL TAMP
				PAUSE TAMPW
				PORTA.3 = 0		'SE DESACTIVA EL TAMP
				PAUSE RETORNO_DELAYW	'PAUSA DE RETORNO DE PISTON
				DISPENSADA = 0
				PRESENCIA = 0
				GoTo inicio
			EndIf
		EndIf
	Wend
Disable
EndIf

If ARRANCA_MOTOR = 1	Then
	Enable
	CONTADOR_MS = 0
	DETENER = 0
	While DETENER = 0 And CONTADOR_MS < CUENTA_ERROR	'REVISAR TIENE QUE VER CON EL LARGO DE LA ETIQUETA
		GoSub DETECTA_CALLE
	Wend
	If CONTADOR_MS >= CUENTA_ERROR Then
		ARRANCA_MOTOR = 0
		PORTA.2 = 0		'DESACTIVAR EL ASSIST
		Error = 1
		CONTADOR_MS = 0
		GoTo SALE_ERROR
	EndIf
	CONTADOR_MS = 0
	While CONTADOR_MS <= LABEL_STOPW
	Wend
	PORTA.2 = 0
	ARRANCA_MOTOR = 0
	If ENCODER = 1 Then
		T1CON = %00000110	'TIMER1 PRESCALER 1:1, TIMER , CLOCK EXTERNO, STOP TIMER1
	EndIf
	
	CONTADOR_MS = 0
	If MODO = 1 And CICLO = 0	Then	'SI ESTA EN MODO TAMP/BLOW Y EL MODO ES DIRECTO HAY QUE APLICAR
		PAUSE INTER_DELAYW		'PAUSA ENTRE EL FIN DEL DISPENSADO Y EL PRINCIPIO DEL TAMP
		PORTA.3 = 1			'SE ACTIVA EL TAMP
		PAUSE TAMPW
		PORTA.3 = 0			'SE DESACTIVA EL TAMP
		PAUSE RETORNO_DELAYW		'PAUSA DE RETORNO DE PISTON
	EndIf
EndIf

If	MODO = 1 And CICLO = 1 And DISPENSADA = 0 Then
	ARRANCA_MOTOR = 1
	DIVISOR = $FA00
	TMR1H = DIVISORH
	TMR1L = DIVISORL
	PORTA.2 = 1		'ACTIVAR EL ASSIST
	DISPENSADA = 1
	PRESENCIA = 0
 	CONTADOR_PRODUCT = 0
	CONTADOR_MS = 0
EndIf
Disable

SALE_ERROR:

If ARRANCA_MOTOR = 0	Then
	INTCON.7 = 0	'SE DESHABILITA LA INTERRUPCIÓN GLOBAL
'*************** MANEJO DE ERRORES Y ALARMAS ***************
	If	Error = 1 Then
		pause 15
		GoSub CLRLCD
		GoSub MODELO
		GoSub LINEFEED
		Lcdout "**  ERROR !!! **"
		PRESENCIA = 0
		PORTE.0 = 1		'ACTIVACION DE LA SALIDA RELE ROJO Y  FLASH ERROR
		PORTE.2 = 0		'DESACTIVACION DE LUZ VERDE
	EndIf
'***********************************************************
'*********************** RUTINA DE ABM *********************
	GoSub leer_teclado
	If LEERTECLADO = 1 Then
		If TECLA = F1	Then 	'SELECCION DE MENSAJE
			DIRECCION = 1
			READ DIRECCION,NUMERO
			PROGRAMA = NUMERO
			GoSub CLRLCD
			GoSub PROG
			GoSub LINEFEED
			Lcdout #PROGRAMA,"      (0-20)"
			TOPE = 20
			GoSub	INGRESO
			PROGRAMA = NUMERO
			Write 1,PROGRAMA
			pause 20
			GoSub ACTUALIZAR
			GoSub CLRLCD
     	GoSub P
			If ENCODER = 1 Then
				GoSub E
			Else
				GoSub V
			EndIf
			If MODO = 1 Then
				GoSub TB
			EndIf
			GoSub LINEFEED
     	GoSub POS
     	GoSub Ret
		EndIf
'**********************************************************************************************************
		If TECLA = F2 Then		'EDITAR PROGRAMA
			If CLAVE_ACTIVADA = 0 Then
				If ENCODER = 0 Then
				'******* INGRESO DE LA VELOCIDAD *****************
					NUMERO = VELOCIDAD
					GoSub CLRLCD
	     		GoSub VEL
	     		GoSub LINEFEED
					Lcdout #(VELOCIDAD + 40),"       "
					TOPE = 330
					GoSub	INGRESO
					VELOCIDAD = NUMERO
				EndIf
				'***** INGRESO DEL TIEMPO DE TAMP/BLOW *************
				If MODO = 1 Then
					NUMERO = TAMP
					GoSub CLRLCD
		    	GoSub TTAMP
					GoSub LINEFEED
					Lcdout #TAMP
					TOPE = 255
					GoSub	INGRESO
					TAMP = NUMERO
				EndIf
				'********* INGRESO DE RETARDO DE PRODUCTO ******
				NUMERO = PRODUCT	'NUMEROB
				GoSub CLRLCD
	     	GoSub RETPROD
				GoSub LINEFEED
				Lcdout #PRODUCT
				TOPE = 1000
				GoSub	INGRESO
				PRODUCT = NUMERO 
				'******** INGRESO DE LA POSICION DE PARADA DE LA ETIQUETA ******************
				NUMERO = LABEL_STOP
				GoSub CLRLCD
	     	GoSub POSET	
				GoSub LINEFEED
				Lcdout #LABEL_STOP
				TOPE = 255
				GoSub	INGRESO
				LABEL_STOP = NUMERO 
				'****************************************************
				Write 1,PROGRAMA
				PAUSE 10
				DIRECCION = 10 * PROGRAMA + 16
				Write DIRECCION,PRODUCTH
				PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,PRODUCTL
				PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,LABEL_STOP
				PAUSE 10
				DIRECCION = DIRECCION + 1
				'Write DIRECCION,LABEL_STOPL
				'PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,GAP
				 PAUSE 10 
				DIRECCION = DIRECCION + 1
				Write DIRECCION,VELOCIDADH
				 PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,VELOCIDADL
				 PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,TAMP
				 PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,L_H
				 PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,L_L
				 PAUSE 10
				GoSub CLRLCD
			  GoSub PROGSAVE
				'PAUSE 50
				GoSub ACTUALIZAR
			Else
				GoSub CLRLCD
     		GoSub NODISP
			EndIf
		EndIf
'********************************************************************************************************
		If TECLA = F3 Then	'RUTINA DE SETUP GENERAL
'			ENABLE
		  If CLAVE_ACTIVADA = 0	Then
				PRESCALERH = $FA	'8 m/min
				PRESCALERL = $90
				T1CON.0 = 0		'DESHABILITO EL TIMER 1
				T1CON = %00010100	'TIMER1 PRESCALER 1:2, TIMER , CLOCK INTERNO (F/4), STOP TIMER1
				T1CON.0 = 1		'HABILITO EL TIMER 1
				GoSub CLRLCD
				GoSub CALIBRANDO
				MAXIMO = 0
				MINIMO = 255
				PRESENCIA = 0
				CONTADOR_PRODUCT = 0	
				ARRANCA_MOTOR = 0
				PORTA.2 = 1	 'ACTIVAR EL ASSIST
				Enable
				CONTADOR_MS = 0
				GoSub ARRANCAR
				While CONTADOR_MS < 5000 'RUTINA DE LECTURA DE CALLE LARGO MAXIMO 50cm
					If ENTRADA >= MAXIMO	Then
						MAXIMO = ENTRADA
					EndIf
					If ENTRADA <= MINIMO Then
						MINIMO = ENTRADA
					EndIf
				Wend
				GAP = MAXIMO - MINIMO
				USO = GAP / 2
				GAP = MINIMO + USO
				DETENER = 0
				CONTADOR_MS = 0
				While DETENER = 0 And CONTADOR_MS < 15000
					GoSub DETECTA_CALLE
				Wend
				DETENER = 0
				CONTADOR_MS = 0
				While DETENER = 0 And CONTADOR_MS < 15000
					GoSub DETECTA_CALLE
				Wend
				L = CONTADOR_MS
				If L >= OFFSET_STEP	Then
					LABEL_STOPW = OFFSET_STEP
				Else
					LABEL_STOPW = OFFSET_STEP // L
				EndIf
				CONTADOR_MS = 0
				While CONTADOR_MS <= LABEL_STOPW
				Wend
				ARRANCA_MOTOR = 0			'INHABILITO QUE SIGA CONTANDO PULSOS DURANTE LAS INTERUPCIONES
				PORTA.2 = 0						'DESACTIVAR EL ASSIST
				CONTADOR_MS = 0
				Disable
				DIRECCION = 10 * PROGRAMA + 16
				DIRECCION = DIRECCION + 2
				LABEL_STOP = LABEL_STOPW / RELACION
				Write DIRECCION,LABEL_STOP
				 PAUSE 10
				DIRECCION = DIRECCION + 1
				'Write DIRECCION,LABEL_STOPL
				' PAUSE 10
				DIRECCION = DIRECCION + 1
				Write DIRECCION,GAP
				 PAUSE 10 
				DIRECCION = DIRECCION + 4
				Write DIRECCION,L_H
				 PAUSE 10	 
				DIRECCION = DIRECCION + 1
				Write DIRECCION,L_L
				 PAUSE 10 
				GoSub CLRLCD
     		GoSub MODELO
				GoSub LINEFEED
				Lcdout "   SENSOR OK!!  "
				Disable
				GoSub ACTUALIZAR
			Else
				GoSub CLRLCD
     		GoSub NODISP
			EndIf
		EndIf
'**********************************************************************************************
		If TECLA = F4	Then
			GoSub CLRLCD
			GoSub MODELO
			GoSub LINEFEED
			Lcdout "**    TEST    **"
			PORTE.0 = 0		'DESACTIVACION DE LA SALIDA RELE ROJO Y FLASH ERROR
			PORTE.2 = 1		'ACTIVACION DE LUZ VERDE
			CONTADOR_MS = 0
			PORTA.2 = 1		'ACTIVAR EL ASSIST
			Error = 0			'QUITO EL ERROR
			GoSub ARRANCAR
			GoSub inicio            'modificacion de leandro (para que no se cuelgue
		EndIf
'************************************** FIN RUTINA DE MANJO DE ABM **********************
	EndIf
EndIf
GoTo 	inicio
'*********************************  FIN PROGRAMA PRINCIPAL **************************************





'*********************************   SUBRUTINAS GENERALES   *************************************
leer_teclado:

'*****************	DECODIFICACION DE LAS TECLAS	******************
'			     C1	     	C2	     	C3	    	C4
'-----------------------------------------------------------------------------
'	F1	|(ESC)183	|(^)	187	|(v)	189	|(ENT)190	| PORTB.6
'		--------------------------------------------------------------
'	F2	|(F1)	215	|(F2)	219	|(F3)	221	|(F4)	222	| PORTB.5
'		--------------------------------------------------------------
'
'
'	ARRIBA		CON	187
'	ABAJO			CON	189
'	ENT				CON	190
'	ESC				CON	183
'	F1				CON	215
'	F2				CON	219
'	F3				CON	221
'	F4				CON	222

LEERTECLADO = 0
If LEERTECLADO = 0 Then
	GoSub borrar_teclado
	PORTD.4 = 0	' ACTIVO LA COLUMNA 4
	GoSub leer_digito
EndIf
If LEERTECLADO = 0 Then	
	GoSub borrar_teclado
	PORTD.5 = 0	' ACTIVO LA COLUMNA 3
	GoSub leer_digito
EndIf
If LEERTECLADO = 0 Then
	GoSub borrar_teclado
	PORTD.6 = 0	' ACTIVO LA COLUMNA 2
	GoSub leer_digito
EndIf
If LEERTECLADO = 0 Then
	GoSub borrar_teclado
	PORTD.7 = 0	' ACTIVO LA COLUMNA 1
	GoSub leer_digito
EndIf
Return
'***********************************************************************************
'***********************************************************************************
borrar_teclado:
	PORTD.4 = 1
	PORTD.5 = 1
	PORTD.6 = 1
	PORTD.7 = 1
Return
'***************************************************************************************
'***************************************************************************************
leer_digito:
TECLA = 0			
NIBLEB = PORTB & %11110000
GENERAL = PORTB & %11110000
If NIBLEB = GENERAL Then
	If NIBLEB <> 240 Then
		TECLA = PORTD & %11110000
		TECLA =  TECLA / 16
		TECLA = TECLA | NIBLEB
		LEERTECLADO = 1
	EndIf
EndIf
Return
'************************************************************************************
INGRESO:

While	TECLA <> ENT And TECLA <> ESC
	GoSub	leer_teclado					
	If TECLA = ABAJO	Then		' SE PRESIONO LA TRECLA DERECHA BAJAR VALOR
		If NUMERO > 0	 Then
			NUMERO = NUMERO - 1
		Else
			 NUMERO = 0
		EndIf
		TECLA = 0
	EndIf
	If TECLA = ARRIBA	Then		' SE PRESIONO LA TECLA IZQUIERDA SUBE VALOR
		If NUMERO < TOPE Then
			NUMERO = NUMERO + 1
		Else
			NUMERO = TOPE
		EndIf
		TECLA = 0
	EndIf
	GoSub LINEFEED
	Lcdout "     "
	GoSub LINEFEED
	Lcdout #NUMERO
	If TECLA = ENT Then		' SE PRESIONO LA TECLA DERECHA SUBE VALOR
		LEERTECLADO = 0
		'PAUSE 100
		Lcdout "<-OK"
		While	TECLA = ENT
			TECLA = 0
			GoSub	leer_teclado
		Wend
		TECLA = ENT
	EndIf
	If TECLA = ESC Then		' SE PRESIONO LA TECLA DERECHA SUBE VALOR
		LEERTECLADO = 0
		'PAUSE 100
		While	TECLA = ESC
			TECLA = 0
			GoSub	leer_teclado
		Wend
		TECLA = ESC
	EndIf
	PAUSE 100			' PAUSA DE 100 MSEG
Wend
TECLA = 0 				' RESET DEL ESTADO DE LA VARIABLE
Return
'****************************************************************************************************
ACTUALIZAR:

INTCON.7 = 0	'SE DEHABILITA LA INTERRUPCIÓN GLOBAL
READ 1,PROGRAMA
 PAUSE 10
READ 2,OFFSETH
 PAUSE 10
READ 3,OFFSETL
 PAUSE 10
READ 4,CONTADORH
 PAUSE 10
READ 5,CONTADORL
 PAUSE 10
READ 6,Config
 PAUSE 10
READ 7,RAMPA
 PAUSE 10
READ 8,INTER_DELAY
 PAUSE 10
INTER_DELAYW = INTER_DELAY * 10
READ 9,RETORNO_DELAY
 PAUSE 10
RETORNO_DELAYW = RETORNO_DELAY * 10
READ 10,CONTADORDHH
 PAUSE 10
READ 11,CONTADORDHL
 PAUSE 10
READ 12,CONTADORDLH
 PAUSE 10
READ 13,CONTADORDLL
 PAUSE 10
READ 14,STEPDIVISOR
 PAUSE 10
READ 15,IDIOMA
 PAUSE 10
DIRECCION = 10 * PROGRAMA + 16
READ DIRECCION,PRODUCTH
 PAUSE 10
DIRECCION = DIRECCION + 1
READ DIRECCION,PRODUCTL
 PAUSE 10		
DIRECCION = DIRECCION + 1
READ DIRECCION,LABEL_STOP
LABEL_STOPW = LABEL_STOP * RELACION
 PAUSE 10			
DIRECCION = DIRECCION + 1
'READ DIRECCION,LABEL_STOPL
' PAUSE 10			
DIRECCION = DIRECCION + 1
READ DIRECCION,GAP
 PAUSE 10 
DIRECCION = DIRECCION + 1
READ DIRECCION,VELOCIDADH
 PAUSE 10			
DIRECCION = DIRECCION + 1
READ DIRECCION,VELOCIDADL
 PAUSE 10			
DIRECCION = DIRECCION + 1
READ DIRECCION,TAMP
 PAUSE 10			
TAMPW = TAMP * 10
DIRECCION = DIRECCION + 1
READ DIRECCION,L_H
 PAUSE 10			
DIRECCION = DIRECCION + 1
READ DIRECCION,L_L
 PAUSE 10
OFFSET_STEP = OFFSET *	RELACION		'CALCULO DE LOS STEPS  SEGUN LOS MILIMETROS INGRESADOS
VAR_PRODUCT_A = PRODUCT * RELACION
WW0 = 17300
WW1 = 6
Disable
bogus = WW0 * WW1		' Multiply to load internal registers with 32-bit value
WRESULT = Div32 VELOCIDAD	' Divide 32-bit value by byte and store in word
Enable
If ENCODER = 1 Then
	T1CON = %00000010	'TIMER1 PRESCALER 1:1, TIMER , CLOCK EXTERNO, STOP TIMER1
	PRESCALER =  65535 - STEPDIVISOR
Else
	T1CON = %00010100	'TIMER1 PRESCALER 1:2, TIMER , CLOCK INTERNO (F/4), STOP TIMER1
	PRESCALER =  65535 - WRESULT
EndIf
CUENTA_ERROR = 2 * L		' = N * (LARGO DE ETIQUETA) = 2 CUENTA A LA QUE DEBE LLEGAR PARA DAR ERROR DE ETIQUETA
If GIRO = 0 Then		'SENTIDO DE GIRO DEL MOTOR
	PORTC.2 = 0		'1 ES DISPENSADORA DERECHA
Else
	PORTC.2 = 1		'0 ES DISPENSADORA IZQUIERDA
EndIf
T1CON.0 = 1		' HABILITO EL TIMER 1
Return
'******************************************************************************************************
ARRANCAR:

INTCON.7 = 1	
ARRANCA_MOTOR = 1
If ENCODER = 1 Then
	DIVISOR = 65500
Else
	DIVISOR = $FA00
EndIf
TMR1H = DIVISORH
TMR1L = DIVISORL	
Return

'***********************************  RUTINA DE INTERRUPCION   *******************************
Disable  
miint:

If PIR1.0 = 1 Then
	If ARRANCA_MOTOR = 1	Then
		PORTC.1 = 0
		If DIVISOR < PRESCALER Then
			DIVISOR = DIVISOR + RAMPA
			TMR1H = DIVISORH
			TMR1L = DIVISORL			
		Else
			TMR1H = PRESCALERH
			TMR1L = PRESCALERL
		EndIf
		CONTADOR_MS = CONTADOR_MS + 1
		ADCIN 0, ENTRADA	'leer el canal 0
		PORTC.1 = 1
	Else
		TMR1H = PRESCALERH
		TMR1L = PRESCALERL
	EndIf
	If PRESENCIA = 1  Then
		CONTADOR_PRODUCT = CONTADOR_PRODUCT + 1
	EndIf
EndIf
PIR1.0 = 0
Resume   ' retorna al programa principal
Enable
'*****************************************************************************************************
DETECTA_CALLE:

If ENTRADA < GAP Then
	LINER = 0
	If LINER <> LINER_PREVIO Then
		DETENER = 1
		LINER_PREVIO = LINER
	EndIf
Else
	LINER = 1
	LINER_PREVIO = LINER
EndIf
Return
'*****************************************************************************************************
CLRLCD:
	Lcdout $fe, 1
Return
'*****************************************************************************************************
LINEFEED:
	Lcdout $fe,$c0
Return
'*****************************************************************************************************

CONTAD:
Select Case IDIOMA
	Case 2
		Lcdout "    COUNTER     "
		GoSub LINEFEED							'INGLES
		Lcdout "    CLEARED     "
	Case Else
		Lcdout "*   CONTADOR   *"
		GoSub LINEFEED							'CASTELLANO Y POTUGUES
		Lcdout "*  REINICIADO  *"
End Select
Return

VALOR:
Select Case IDIOMA
	Case 2
		Lcdout " SENSOR VALUE "
	Case Else
		Lcdout " VALOR SENSOR "
End Select
Return

OFFSETLANZA:
Select Case IDIOMA
	Case 0
		Lcdout "OFFSET DE LANZA "
	Case 1
		Lcdout " OFFSET DA FACA "
	Case 2
		Lcdout "PEEL BAR OFFSET "
End Select
Return

CONT:
Select Case IDIOMA
	Case 2
		Lcdout "PRODUCT COUNTER "
	Case Else
		Lcdout "CONTAD. PRODUCTO"
End Select
Return

MODOT:
Select Case IDIOMA
	Case 2
		Lcdout "MODE 0=SYN 1=T/B"
	Case Else
		Lcdout "MODO 0=SIN 1=T/B"
End Select
Return

CICL:
Select Case IDIOMA
	Case 2
		Lcdout "CYCLE 0=DI 1=INV"
	Case Else
		Lcdout "CICLO 0=DI 1=INV"
End Select
Return

CLAVE:
Select Case IDIOMA
	Case 2
		Lcdout " BLOCK KEYBOARD "
	Case Else
		Lcdout "BLOQUEAR TECLADO"
End Select
Return

NOSI:
Select Case IDIOMA
	Case 0
		Lcdout "       0=NO 1=SI"
	Case 1
		Lcdout "     0=NAO 1=SIM"
	Case 2
		Lcdout "      0=NO 1=YES"
End Select
Return

RAMP:
Select Case IDIOMA
	Case 2
		Lcdout "ACCELERAT. RAMP "
	Case Else
		Lcdout " RAMPA ACELERAC."
End Select
Return

DLYINTER:
Select Case IDIOMA
	Case 2
		Lcdout "DLY INTER CYCLE "
	Case Else
		Lcdout "RET. INTER CICLO"
End Select
Return

DLYFIN:
Select Case IDIOMA
	Case 0
		Lcdout " RET. FIN CICLO "
	Case 1
		Lcdout " RET. FIM CICLO "
	Case 2
		Lcdout "DELAY END CYCLE "
End Select
Return

HAND:
Select Case IDIOMA
	Case 2
		Lcdout "TURN     1=R 0=L"
	Case Else
		Lcdout "GIRO 0=IZQ 1=DER"
End Select
Return

SHAFT:
Lcdout " SHAFT  ENCODER "
Return

PULSOS:
Lcdout " ENCODER (0-255)"
Return

EMPRESA:
Lcdout "****   IP    ***"
Return

MODELO:
Lcdout "**   IP-120   **"
Return

VER:
Lcdout " VER: IP120_v11 "
Return

CONT2:
Select Case IDIOMA
	Case 2
		Lcdout "COUNT:",#CONTADOR
	Case Else
		Lcdout "CONT:",#CONTADOR
End Select
Return

PROG:
Select Case IDIOMA
	Case 2
		Lcdout " SELECT PROGRAM "
	Case Else
		Lcdout "SELECC. PROGRAMA"
End Select
Return

P:
Lcdout "P:",#PROGRAMA
Return

E:
Lcdout " E:",#STEPDIVISOR
Return

V:
Select Case IDIOMA
	Case 2
		Lcdout " SP:",#VELOCIDAD
	Case Else
		Lcdout " V:",#VELOCIDAD
End Select
Return

TB:
Lcdout " TB:",#TAMP
Return

POS:
Lcdout "POS:",#LABEL_STOP
Return

Ret:
Select Case IDIOMA
	Case 2
		Lcdout " DLY:",#PRODUCT
	Case Else
		Lcdout " RET:",#PRODUCT
End Select
Return

VEL:
Select Case IDIOMA
	Case 0
		Lcdout "VELOCIDAD  0-330"
	Case 1
		Lcdout "VELOCIDADE 0-330"
	Case 2
		Lcdout "SPEED      0-330"
End Select
Return

TTAMP:
Select Case IDIOMA
	Case 0
		Lcdout "TIEMPO TAMP/BLOW"
	Case 1
		Lcdout "TEMPO TAMP/BLOW "
	Case 2
		Lcdout "TIME  TAMP/BLOW "
End Select
Return

RETPROD:
Select Case IDIOMA
	Case 2
		Lcdout " PRODUCT DELAY  "
	Case Else
		Lcdout "RETARDO PRODUCTO"
End Select
Return

POSET:
Select Case IDIOMA
	Case 2
		Lcdout "  LABEL STOP   "
	Case Else
		Lcdout " POS. ETIQUETA "
End Select
Return

PROGSAVE:
Select Case IDIOMA
	Case 2
		Lcdout "* PROGRAM #",#PROGRAMA," *"
		GoSub LINEFEED
		Lcdout "**   SAVED    **"
	Case Else
		Lcdout "* PROGRAMA #",#PROGRAMA," *"
		GoSub LINEFEED
		Lcdout "**  SALVADO   **"
End Select
Return

NODISP:
Select Case IDIOMA
	Case 2
		Lcdout "* FUNCTION NOT *"
		GoSub LINEFEED
		Lcdout "*  AVAILABLE   *"
	Case Else
		Lcdout "**  TECLADO   **"
		GoSub LINEFEED
		Lcdout "** BLOQUEADO  **"
End Select
Return

CALIBRANDO:
Select Case IDIOMA
	Case 2
		Lcdout "* CALIBRATING  *"
		GoSub LINEFEED
		Lcdout "  LABEL SENSOR  "
	Case Else
		Lcdout "** AJUSTANDO  **"
		GoSub LINEFEED
		Lcdout "**  SENSOR    **"
End Select
