Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Meta

#1531
Cita de: Tokes en  9 Septiembre 2010, 18:22 PM
Hola, Meta:

En verdad que esta vez sí tenías muchos errores. Te mencionaré unos pocos:

1. La rutina para enviar mensaje al LCD nunca borraba la pantalla. Por eso el mensaje ocupaba todo el LCD.

Aquí te pongo la subrutina corregida. Nota que la única diferencia es que esta vez sí se borra la pantalla.

Código (asm) [Seleccionar]
M24LC256_Mensaje_a_LCD
movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
clrf M24LC256_AddressLow
call M24LC256_InicializaLectura
call LCD_Borra    ; Borra la pantalla.
M24LC256_LeeOtroByte
call I2C_LeeByte ; Lee la memoria 24LC256.
movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
btfsc STATUS,Z ; que sea "0x00", que es código indicador final
goto M24LC256_FinMensaje ; del mensaje, sale de la subrutina.
movf M24LC256_ValorCaracter,W ; Recupera el valor leído.
call LCD_Caracter ; Lo visualiza en la pantalla del LCD.
incf M24LC256_AddressLow,F ; Apunta a la siguiente posición.
goto M24LC256_LeeOtroByte
M24LC256_FinMensaje
call M24LC256_FinalizaLectura
return


Si lo he hecho en el programa principal y lo he quitado, lo has hecho aquí. Hay que tener en cuenta una cosa. El LDC es de 20x4. Uso las 4 líneas independiente, es decir. En una goto de configuración puede salir un mensaje en la línea 1. Luego otra en la líena 4. Si borra el LCD completo, sólo se ve el último mensaje. Se tiene que ver las 4 líneas independiente. Para mi hay que usar la rutina "LCD_LineaEnBlanco", puede que no sea la adecuata, pero lo nombro por si acaso, debo hacer más pruebas hasta que me salga.

2. En tu programa principal tienes un bucle infinito:

Código (asm) [Seleccionar]
Principal
movlw PAGINA_00
call M24LC256_Mensaje_a_LCD
call Retardo_2s
goto Principal


Si no lo quitas jamás vas a llegar a la zona de configuraciones (mejor, porque en la zona donde están las configuraciones tienes el error más grande).

Dejé ese bucle infinito adrede para hacer pruebas, lo que me olvidé quitarlos con ;.


3. En tu código tienes esto:

Código (asm) [Seleccionar]
movf   PORTC,W
  andlw   b'00111111'
  addwf   PCL,F
  call      Configuracion


Eso está bastante mal, porque la instrucción addwf   PCL,F es el encabezado de las configuraciones. Esa instrucción debería estar dentro de la subrutina Configuracion.

Código (asm) [Seleccionar]
movf   PORTC,W
  andlw   b'00111111'
  call      Configuracion


Y dentro de la rutina Configuracion:

Código (asm) [Seleccionar]
Configuracion
addwf PCL,F   ; Aquí debe estar la instrucción addwf PCL,F.
goto Configuracion0 ; 0 0 0 0 0 0
goto Configuracion1 ; 0 0 0 0 0 1
goto Configuracion2 ; 0 0 0 0 1 0
                         .
                         .
                         .


Lo tendré en cuenta, sólo quería ahorrar espacio, mejor lo pongo en el programa principal otra vez.

4. Tu rutina Configuración nunca retorna (nunca ejecuta la instrucción return).

Lo que sucede es que en tu rutina Configuración pones instrucciones de brinco:

   goto   Configuracion0
   goto   Configuracíon1
         .
         .

y en las respectivas zonas de códigos ejecutas un goto al programa principal.

Código (asm) [Seleccionar]
Configuracion1
              goto ActivaSalida
                      .
                      .
                      .
         ActivaSalida
               goto        Principal


Nunca ejecutas Return.

En los ejemplos del libro www.pic16f84a.org se usa sin el return. Los return se usa en subrutinas, es más aconsejable para que se sepa que si tienes un return, tienes un subrutina que el que lo llama es "call".

En realidad no hace falta los return, si hace falta se los pondré, ya que crees que hay que ponerlos. Recuerdo que en el libro jamás se usa un return en este tipo de tablas.


5. Por estética, es mejor que todos los elementos de una rutina estén todos en un mismo archivo. ¿Qué es lo que sucede con tu código?

La rutina Configuracion hace brincos (goto) hacia instrucciones que se encuentran en tu programa principal. Lo mejor es que esas instrucciones se encuentren también dentro del archivo de la subrutina de Cofiguracion.

En fín, te mandé al correo el programa corregido. Este sí debes revisarlo muy bien, porque le corregí muchas cosas.

Sigue echándole muchas ganas. Yo también empecé así. Me ocurrió casi de todo. He cometido casi todos los errores que se pueden cometer en ensamblador y es por eso que he podido resolver los tuyos.

               Saludos.

Lo voy a meter todo otra vez en el archivo principal. Los gotos. ;)

Gracias por la ayuda.

Hice cambios, puse los gotos otra vez en la primera página. Hice cosas que tocando el RC0 a 1, para que se muestre que el mensje 1 se vea en la primera línea, y si pulsas el RC0 otra vez, se muestre en la tercera línea del LCD pero se ve siempre en la primera.

Recuerda que cada entrade del LCD puede haber mensajes a la vez en diferentes líneas, no que se borre toda la pantalla y que se vea sola una línea por cada actualización. Esto de la EEPROM y asm es un poco infierno.

Gracias de nuevo por tu tiempo.
Te envío otra vez.
#1533
Esto de usar la EEPROM externas para cambiar de mensajes de avisos rápidamente no vale la pena. ¿Verdad?

A lo mejor es porque es muy lento.
#1534
Programación General / Re: Leer puerto paralelo
9 Septiembre 2010, 07:44 AM
Te paso el manual.

Ver manual puerto paralelo C#, C++ y Visual Basic .net

Saludo.
#1535
Enviado.

Edito:

En la librería se usa el LCD a 16x2, en mi caso el 20x4. Quizás no sea igual la configuración. Me lo confirmas por si acaso.

Código (asm) [Seleccionar]
LCD_2Lineas4Bits5x7 ; Define la pantalla de 2 líneas, con caracteres
movlw b'00101000' ; de 5x7 puntos y conexión al PIC mediante bus de
; goto LCD_EnviaComando ; 4 bits.
#1536
Hola:

Lo hago siempre tal como me enseñaste. (Contigo se aprende mucho).

Debe verse el código siempre en la primera línea del LCD. La cosa rara que hace es que al princpio se ve en la primera línea el mensaje, luego salta a la tercera, luego desplazado a la segunda y al final a la cuarta y vuelta a empezar pero con desplazamiento.



Sólo debe mostrarse en la primera línea "Hola amigo del foro", 0x00 (con su cero al final en hex).

Otra cosa que pasa, que cada vez le cuesta leer y tarda más en verse en el LCD. Ya que veo, hace un chequeo cada dos por tres en el puerto de entrada PORTC para detectar algún cambio y cambie de configuración. Como no cambia simpre lee el estado actual varias veces, pero no debería hacer cosas raras en el LCD.

¿Te voy a pasar el proyecto completo  otra vez por e-mail?

#1537
Electrónica / Re: Temporizador para insoladora
8 Septiembre 2010, 22:28 PM
Hello:

Muy bueno a estudiarlo paso a paso a ver que hiciste exactamente. No se como el autor no lo pudo hacer.

Haciendo pruebas me sorprende que funcione en muy bien en poco tiempo.



Probado hasta donde puede llegar el temporizador. ¿Hasta dónde llega? ¿99:99? Ocurre cosas raras como esto.

Se me puso así: 045:37:015 por poner un ejemplo. Hice pruebas otra vez y ya no pasa nada.

Voy a mirar las librerías a ver exactamente que has tocado, no creo que sea tan engorroso como el ejemplo de arriba.

Muchísimas gracias por la ayuda, ahora si voy a montar la insoladora.
#1538
Hello:

Segurísimo, el 0 lo he puesto en la parte hexadecimal (0x00), no en la parte ASCII (0) del winpic800.

La parte modificada de esta librería. Ya que se me retaban los mensajes. Aunque no lo hay amodificado se comporta igual.

Código (asm) [Seleccionar]
;**************************** Librería "M24LC256.INC" ***********************************
;

;
; Estas subrutinas permiten realizar las tareas de manejo de la memoria EEPROM serie
; 24LC256 que transmite y recibe la información vía serie a través de un bus I2C.
;
; Subrutina "M24LC256_InicializaEscritura" ----------------------------------------------
;
; Prepara la memoria para iniciar su escritura a partir de la posición de memoria fijada
; por los registros:
; - (M24LC256_AddressHigh), indica el número del bloque o página de memoria a escribir.
; - (M24LC256_AddressLow), indica posición a escribir dentro del bloque.

CBLOCK
M24LC256_AddressHigh ; Guarda el valor de la dirección de memoria a
M24LC256_AddressLow ; escribir o leer.
M24LC256_Dato
ENDC
;
M24LC256_DIR_ESCRITURA EQU b'10100000'; Dirección de la memoria 24LC256 para
M24LC256_DIR_LECTURA EQU b'10100001'; escritura y lectura respectivamente.

M24LC256_InicializaEscritura
call I2C_EnviaStart ; Envía condición de Start.
movlw M24LC256_DIR_ESCRITURA ; Envía dirección de escritura del
call I2C_EnviaByte ; esclavo.
movf M24LC256_AddressHigh,W ; A partir de la dirección apuntada por los
call I2C_EnviaByte ; registros M24LC256_AddressHigh y
movf M24LC256_AddressLow,W ; M24LC256_AddressLow.
call I2C_EnviaByte
return

; Subrutina "M24LC256_InicializaLectura" ------------------------------------------------
;
; Prepara la memoria para iniciar su lectura a partir de la posición de memoria fijada
; por los registros:
; - (M24LC256_AddressHigh), indica el número del bloque o página de memoria a leer.
; - (M24LC256_AddressLow), indica posición a escribir dentro del bloque.

M24LC256_InicializaLectura
bcf I2C_UltimoByteLeer ; Todavía no ha comenzado a leer ningún dato.
call I2C_EnviaStart ; Envía condición de Start.
movlw M24LC256_DIR_ESCRITURA ; Envía dirección de escritura del
call I2C_EnviaByte ; esclavo.
movf M24LC256_AddressHigh,W ; A partir de la dirección apuntada por los
call I2C_EnviaByte ; registros M24LC256_AddressHigh y
movf M24LC256_AddressLow,W ; M24LC256_AddressLow.
call I2C_EnviaByte
call I2C_EnviaStop
;
call I2C_EnviaStart ; Envía condición de Start.
movlw M24LC256_DIR_LECTURA ; Indica a la memoria 24LC256 que va a
call I2C_EnviaByte ; proceder a la lectura.
return

; Subrutina "M24LC256_Mensaje_a_LCD" ----------------------------------------------------
;
; Lee el mensaje grabado en la memoria 24LC256 y lo visualiza en la pantalla del módulo LCD.
; En el registro de trabajo W se introduce la página de la memoria a partir de cuya primera
; posición se va a leer. La lectura termina cuando encuentre el código 0x00. Así por ejemplo,
; si (W)=2Fh lee el mensaje que comienza en la posición 0 de la página 2Fh de la memoria,
; que es la posición 2F00h absoluta.
;
CBLOCK
M24LC256_ValorCaracter ; Valor ASCII del carácter leído.
ENDC

M24LC256_Mensaje_a_LCD
movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
clrf M24LC256_AddressLow
call M24LC256_InicializaLectura
M24LC256_LeeOtroByte
call I2C_LeeByte ; Lee la memoria 24LC256.
movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
btfsc STATUS,Z ; que sea "0x00", que es código indicador final
goto M24LC256_FinMensaje ; del mensaje, sale de la subrutina.
movf M24LC256_ValorCaracter,W ; Recupera el valor leído.
call LCD_Caracter ; Lo visualiza en la pantalla del LCD.
incf M24LC256_AddressLow,F ; Apunta a la siguiente posición.
goto M24LC256_LeeOtroByte
M24LC256_FinMensaje
call M24LC256_FinalizaLectura
return

; Subrutina "M24LC256_FinalizaLectura" ------------------------------------------------
;
; Activa el bit I2C_UltimoByteLeer para que la subrutina I2C_LeeByte ponga en alta
; impedancia la línea SDA y pueda ejecutarse posteriormente la condición de Start o Stop
; que fija el protocolo del bus I2C.

M24LC256_FinalizaLectura
bsf I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
call I2C_LeeByte ; alta impedancia la línea SDA. No importa el
call I2C_EnviaStop ; resultado de la lectura realizada.
return

; Subrutina "M24LC256_Mensaje_a_LCD" ----------------------------------------------------
;
; Lee un mensaje grabado en la memoria 24LC256 y lo visualiza por el módulo LCD. En caso que
; sea más largo que la longitud de la pantalla se desplaza hacia la izquierda con sensación
; de movimiento. En el registro de trabajo W se introduce la página de la memoria a partir
; de cuya primera posición va a leer. La visualización termina cuando encuentre el código
; 0x00. Así por ejemplo si (W)= 2Fh lee el mensaje que comienza en la posición 0 de la
; página 2Fh de la memoria, que es la posición 2F00h absoluta.
;
CBLOCK
; M24LC256_ValorCaracter ; Valor ASCII del carácter leído.
M24LC256_CursorPosicion
ENDC

;M24LC256_Mensaje_a_LCD
bcf I2C_UltimoByteLeer
movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
clrf M24LC256_AddressLow
call M24LC256_InicializaLectura
M24LC256_PrimeraPosicion
clrf M24LC256_CursorPosicion ; El cursor en la posición 0 de la línea.
call LCD_Borra ; Se sitúa en la primera posición de la línea 1 y
M24LC256_VisualizaCaracter ; borra la pantalla.
movlw LCD_CaracteresPorLinea ; ¿Ha llegado a final de línea?
subwf M24LC256_CursorPosicion,W
btfss STATUS,C
goto M24LC256_NoEsFinalLinea
M24LC256_EsFinalLinea
call Retardo_200ms ; Lo mantiene visualizado durante este tiempo.
call Retardo_200ms
call M24LC256_FinalizaLectura
incf M24LC256_AddressLow,F
call M24LC256_InicializaLectura
goto M24LC256_PrimeraPosicion
M24LC256_NoEsFinalLinea
call I2C_LeeByte ; Obtiene el ASCII del carácter apuntado.
movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
btfsc STATUS,Z ; que sea "0x00", que es código indicador final
goto M24LC256_FinMensaje ; de mensaje, sale fuera.
M24LC256_NoUltimoCaracter
call LCD_Caracter ; Visualiza el carácter ASCII leído.
incf M24LC256_CursorPosicion,F ; Contabiliza el incremento de posición del
; cursor en la pantalla.
goto M24LC256_VisualizaCaracter ; Vuelve a visualizar el siguiente carácter
;M24LC256_FinMensaje ; de la línea.
; call M24LC256_FinalizaLectura
; return

; -----------------------------------------------------------------------------------------

#1539
Hola de nuevo:

Al ejecutar este código. Se me repite el mismo mensaje por todo el LCD. ¿Hay un amanera de ponerle STOP en el mensaje? Porque cada vez que lee el ciclo del goto en la configuración 0, pasa esto.

Código (asm) [Seleccionar]
; ZONA DE DATOS **********************************************************************

TITLE "LCD Sensor PS2"
SUBTITLE "Revisión 1.00"
LIST P=16F886
INCLUDE <P16F886.INC>
__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

CBLOCK 0x20
Contador
Apuntador
ENDC

PAGINA_00 EQU 0x00 ;
PAGINA_01 EQU 0x01 ;
PAGINA_02 EQU 0x02 ;
PAGINA_03 EQU 0x03 ;
PAGINA_04 EQU 0x04 ;
PAGINA_05 EQU 0x05 ;
PAGINA_06 EQU 0x06 ;
PAGINA_07 EQU 0x07 ;
PAGINA_09 EQU 0x09 ; "                    " Línea .
PAGINA_0A EQU 0x0A ; "                    " Línea .
PAGINA_0B EQU 0x0B ; "                    " Línea .
PAGINA_0C EQU 0x0C ; "                    " Línea .
PAGINA_0D EQU 0x0D ; "                    " Línea .
PAGINA_0E EQU 0x0E ; "                    " Línea .
PAGINA_0D EQU 0x0D ; "                    " Línea .
PAGINA_0F EQU 0x0F ; "                    "

#DEFINE RESET_RC0 PORTC,0
#DEFINE EJECT_RC1 PORTC,1
#DEFINE OPEN_RC2 PORTC,2
#DEFINE CLOSE_RC3 PORTC,3
#DEFINE GREEN_RC4 PORTC,4
#DEFINE RED_RC5 PORTC,5
#DEFINE Auxiliar_6 PORTC,6
#DEFINE Auxiliar_7 PORTC,7

; ZONA DE CÓDIGOS ********************************************************************

ORG 0 ; El programa comienza en la dirección 0.

Inicio
call LCD_Inicializa
BANKSEL TRISC ; Banco 1.
bsf RESET_RC0 ; Se configura como entradas.
bsf EJECT_RC1
bsf OPEN_RC2
bsf CLOSE_RC3
bsf GREEN_RC4
bsf RED_RC5
bsf Auxiliar_6
bsf Auxiliar_7
BANKSEL PORTC ; Banco 0.
clrw
clrf Apuntador ; Inicializa el contador
Principal
movlw PAGINA_01
call M24LC256_Mensaje_a_LCD
call Retardo_2s
goto Principal

movf PORTC,W ; Lee los sensores.
andlw b'00111111' ; Máscara para quedarse con el valor de los sensores.
addwf PCL,F ; Salta a la configuración adecuada.
goto Configuracion0 ; 0 0 0 0 0 0
goto Configuracion1 ; 0 0 0 0 0 1
goto Configuracion2 ; 0 0 0 0 1 0
goto Configuracion3 ; 0 0 0 0 1 1
goto Configuracion4 ; 0 0 0 1 0 0
goto Configuracion5 ; 0 0 0 1 0 1
goto Configuracion6 ; 0 0 0 1 1 0
goto Configuracion7 ; 0 0 0 1 1 1
goto Configuracion8 ; 0 0 1 0 0 0
goto Configuracion9 ; 0 0 1 0 0 1
goto Configuracion10 ; 0 0 1 0 1 0
goto Configuracion11 ; 0 0 1 0 1 1
goto Configuracion12 ; 0 0 1 1 0 0
goto Configuracion13 ; 0 0 1 1 0 1
goto Configuracion14 ; 0 0 1 1 1 0
goto Configuracion15 ; 0 0 1 1 1 1
goto Configuracion16 ; 0 1 0 0 0 0
goto Configuracion17 ; 0 1 0 0 0 1
goto Configuracion18 ; 0 1 0 0 1 0
goto Configuracion19 ; 0 1 0 0 1 1
goto Configuracion20 ; 0 1 0 1 0 0
goto Configuracion21 ; 0 1 0 1 0 1
goto Configuracion22 ; 0 1 0 1 1 0
goto Configuracion23 ; 0 1 0 1 1 1
goto Configuracion24 ; 0 1 1 0 0 0
goto Configuracion25 ; 0 1 1 0 0 1
goto Configuracion26 ; 0 1 1 0 1 0
goto Configuracion27 ; 0 1 1 0 1 1
goto Configuracion28 ; 0 1 1 1 0 0
goto Configuracion29 ; 0 1 1 1 0 1
goto Configuracion30 ; 0 1 1 1 1 0
goto Configuracion31 ; 0 1 1 1 1 1
goto Configuracion32 ; 1 0 0 0 0 0
goto Configuracion33 ; 1 0 0 0 0 1
goto Configuracion34 ; 1 0 0 0 1 0
goto Configuracion35 ; 1 0 0 0 1 1
goto Configuracion36 ; 1 0 0 1 0 0
goto Configuracion37 ; 1 0 0 1 0 1
goto Configuracion38 ; 1 0 0 1 1 0
goto Configuracion39 ; 1 0 0 1 1 1
goto Configuracion40 ; 1 0 1 0 0 0
goto Configuracion41 ; 1 0 1 0 0 1
goto Configuracion42 ; 1 0 1 0 1 0
goto Configuracion43 ; 1 0 1 0 1 1
goto Configuracion44 ; 1 0 1 1 0 0
goto Configuracion45 ; 1 0 1 1 0 1
goto Configuracion46 ; 1 0 1 1 1 0
goto Configuracion47 ; 1 0 1 1 1 1
goto Configuracion48 ; 1 1 0 0 0 0
goto Configuracion49 ; 1 1 0 0 0 1
goto Configuracion50 ; 1 1 0 0 1 0
goto Configuracion51 ; 1 1 0 0 1 1
goto Configuracion52 ; 1 1 0 1 0 0
goto Configuracion53 ; 1 1 0 1 0 1
goto Configuracion54 ; 1 1 0 1 1 0
goto Configuracion55 ; 1 1 0 1 1 1
goto Configuracion56 ; 1 1 1 0 0 0
goto Configuracion57 ; 1 1 1 0 0 1
goto Configuracion58 ; 1 1 1 0 1 0
goto Configuracion59 ; 1 1 1 0 1 1
goto Configuracion60 ; 1 1 1 1 0 0
goto Configuracion61 ; 1 1 1 1 0 1
goto Configuracion62 ; 1 1 1 1 1 0
goto Configuracion63 ; 1 1 1 1 1 1
Configuracion0
movlw PAGINA_00 ; Lee a partir de la dirección 00 de esta página
call M24LC256_Mensaje_a_LCD ; de la memoria.
goto ActivaSalida
Configuracion1
goto ActivaSalida
Configuracion2
goto ActivaSalida
Configuracion3
goto ActivaSalida
Configuracion4
goto ActivaSalida
Configuracion5
goto ActivaSalida
Configuracion6
goto ActivaSalida
Configuracion7
goto ActivaSalida
Configuracion8
goto ActivaSalida
Configuracion9
goto ActivaSalida
Configuracion10
goto ActivaSalida
Configuracion11
goto ActivaSalida
Configuracion12
goto ActivaSalida
Configuracion13
goto ActivaSalida
Configuracion14
goto ActivaSalida
Configuracion15
goto ActivaSalida
Configuracion16
goto ActivaSalida
Configuracion17
goto ActivaSalida
Configuracion18
goto ActivaSalida
Configuracion19
goto ActivaSalida
Configuracion20
goto ActivaSalida
Configuracion21
goto ActivaSalida
Configuracion22
goto ActivaSalida
Configuracion23
goto ActivaSalida
Configuracion24
goto ActivaSalida
Configuracion25
goto ActivaSalida
Configuracion26
goto ActivaSalida
Configuracion27
goto ActivaSalida
Configuracion28
goto ActivaSalida
Configuracion29
goto ActivaSalida
Configuracion30
goto ActivaSalida
Configuracion31
goto ActivaSalida
Configuracion32
goto ActivaSalida
Configuracion33
goto ActivaSalida
Configuracion34
goto ActivaSalida
Configuracion35
goto ActivaSalida
Configuracion36
goto ActivaSalida
Configuracion37
goto ActivaSalida
Configuracion38
goto ActivaSalida
Configuracion39
goto ActivaSalida
Configuracion40
goto ActivaSalida
Configuracion41
goto ActivaSalida
Configuracion42
goto ActivaSalida
Configuracion43
goto ActivaSalida
Configuracion44
goto ActivaSalida
Configuracion45
goto ActivaSalida
Configuracion46
goto ActivaSalida
Configuracion47
goto ActivaSalida
Configuracion48
goto ActivaSalida
Configuracion49
goto ActivaSalida
Configuracion50
goto ActivaSalida
Configuracion51
goto ActivaSalida
Configuracion52
goto ActivaSalida
Configuracion53
goto ActivaSalida
Configuracion54
goto ActivaSalida
Configuracion55
goto ActivaSalida
Configuracion56
goto ActivaSalida
Configuracion57
goto ActivaSalida
Configuracion58
goto ActivaSalida
Configuracion59
goto ActivaSalida
Configuracion60
goto ActivaSalida
Configuracion61
goto ActivaSalida
Configuracion62
goto ActivaSalida
Configuracion63
goto ActivaSalida
ActivaSalida
; movwf PORTB
goto Principal

;
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje1
DT "aaaaaaaaaaaaaaaaaaaa", 0x00
Mensaje2
DT "bbbbbbbbbbbbbbbbbbbb", 0x00
Mensaje3
DT "cccccccccccccccccccc", 0x00
Mensaje4
DT "dddddddddddddddddddd", 0x00
Mensaje5
DT "e", 0x00
Mensaje6
DT "M", 0x00
Mensaje7
DT "S", 0x00
Mensaje8
DT "M", 0x00
;

FinTabla
;MensajeAnuncio
; DT " fgfd ", 0x00

IF (FinTabla > 0xFF)
ERROR "¡CUIDADO!: La tabla ha superado el tamaño de la página de los"
MESSG "primeros 256 bytes de memoria ROM. NO funcionará correctamente."
ENDIF

INCLUDE <BIN_BCD.INC>
INCLUDE  <BUS_I2C.INC> ; Subrutinas de control del bus I2C.
INCLUDE  <M24LC256.INC> ; Subrutinas de control de la memoria 24LC256.
INCLUDE  <LCD_4BIT.INC>
INCLUDE  <LCD_MENS.INC>
INCLUDE  <RETARDOS.INC>
END


Un cordial saludo.
#1540
Electrónica / Re: Temporizador para insoladora
8 Septiembre 2010, 06:37 AM
Gracias por la explicación.

No me sale mucho implementar tu código al que original que te envié. ¿Puedes lograrlo? Prefiero que si lo haces eso de mostrar 99 minutos como máximo, por poner un ejemplo, puedes argumentarlo.

Se te da mucho el ensamblador, si que tienes experiencias.

Desde que todo me funcione bien, compraré los componentes del PCB, LCD, tubos actínicos, etc. La base lo meteré dentro de un escaner viejo grande que me regalaron. Ya pasaré fotos cuando lo acabe.