elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15
51  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 9 Septiembre 2010, 02:17 am
Meta:

Envíame el archivo completo.

              Nos vemos.
52  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 8 Septiembre 2010, 23:48 pm
Meta:

Acabo de probar tu código y me funciona bien.

Asegúrate de dar click en Debug > Reset Persistent Model Data para que se borre lo que tenía la 24lc256 y se cargue el nuevo archivo .bin

             Hasta pronto.
53  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 8 Septiembre 2010, 20:03 pm
Hola, Meta:

¿Estas seguro que el mensaje guardado en la EEPROM 24lc256 termina en 0 (Me refiero al valor 0 y no al ascii '0')?

La rutina de mensaje a LCD busca el valor 0 para finalizar.

          Nos vemos.
54  Informática / Electrónica / Re: Temporizador para insoladora en: 8 Septiembre 2010, 20:00 pm
Meta:

Te envié al correo el programa modificado.

Eso es todo. Saludos y buen día.
55  Informática / Electrónica / Re: Temporizador para insoladora en: 8 Septiembre 2010, 06:06 am
Meta:

En realidad no cargo 1200, no se puede porque en un byte el máximo es 255.

Sucede lo siguiente:

Supongamos que tenemos un número, por ejemplo, 325 (decimal). Este número en hexadecimal se representa como: 0x0145.

El operador high retorna el byte alto de ese valor. Entonces, poner:

     movlw   high(.325)

Es lo mismo que poner:

    movlw   0x01

El operador low retorna el byte bajo de ese valor. Entonces, poner:

    movlw   low(.325)

Es lo mismo qe poner:

    movlw   0x45

La ventaja está en que la conversión de decimal a hexadecimal la hace el propio ensamblador; tú no tienes que hacerla.

Cualquier duda me avisas.

              Saludos
56  Informática / Electrónica / Re: Temporizador para insoladora en: 8 Septiembre 2010, 04:03 am
Mira, te hice un programa un tanto sencillo para mostrarte como debe modificarse tu programa.

Código
  1. ; Este programa lo único que hace es contar desde 20 minutos hasta 0,
  2. ; es decir, no puede ajustarse, a menos que se edite el programa.
  3.  
  4. LIST P=16F84A
  5. INCLUDE "P16F84A.INC"
  6.  
  7. CBLOCK 0CH
  8. Reg_50ms, Tiempo_H, Tiempo_L
  9. ENDC
  10.  
  11. ; Ojo: En vez de usar una variable llamada TIEMPO debes usar dos:
  12.  ; - Una para almacenar el byte alto de la cantidad de segundos,
  13. ; llamada Tiempo_H.
  14. ; - Una para almacenar el byte bajo de la cantidad de segundos,
  15. ; llamada Tiempo_L.
  16. ;
  17. ; ¿Por qué 2 bytes? Pues porque para temporizar hasta 20 minutos se
  18. ; requieren hasta 20 x 60 = 1200 segundos. La cantidad 1200 se representa
  19. ; con mínimo 2 bytes.
  20.  
  21. #DEFINE Alarma PORTB,0
  22.  
  23. ORG 00H
  24. goto Inicio
  25.  
  26. ORG 04H
  27. goto Interrupcion
  28.  
  29. Inicio
  30. bcf Alarma
  31. bsf STATUS,RP0
  32. movlw b'11000111'
  33. movwf OPTION_REG
  34. bcf Alarma
  35. bcf STATUS,RP0
  36.  
  37. call LCD_Inicializa
  38. movlw high(.1200) ; Carga el byte alto del tiempo en la variable
  39. movwf Tiempo_H ; Tiempo_H.
  40. movlw low(.1200) ; Carga el byte bajo del tiempo en la variable
  41. movwf Tiempo_L ; Tiempo_L.
  42. call Visualiza_Tiempo ; Visualiza el tiempo en la pantalla.
  43.  
  44. movlw .20 ; Se prepara para temporizar.
  45. movwf Reg_50ms
  46. movlw .60
  47. movwf TMR0
  48. bcf INTCON,T0IF
  49. bsf INTCON,T0IE
  50. bsf INTCON,GIE ; Habilita interrupciones.
  51.  
  52. Ciclo
  53. goto Ciclo
  54.  
  55. ; Rutina de servicio a la interrupción.
  56. Interrupcion
  57. movlw .60
  58. movwf TMR0 ; Recarga el TMR0.
  59. decfsz Reg_50ms ; ¿Ya pasó 1 segundo?
  60. goto Fin_Interrupcion
  61.  
  62. movlw .20 ; Sí, entonces recarga el registro.
  63. movwf Reg_50ms
  64.  
  65. ; Ojo: Aquí se va a realizar el decremento del tiempo, pero
  66. ; es un decremento de 16 bits.
  67. decf Tiempo_L,F ; Decrementa en 1 el byte bajo.
  68. movlw 0xFF
  69. subwf Tiempo_L,W
  70. btfsc STATUS,Z ; ¿El resultado es negativo?
  71. decf Tiempo_H,F ; Sí, entonces decrementa en 1 el byte alto.
  72.  
  73. call Visualiza_Tiempo ; Visualiza el tiempo en la pantalla.
  74.  
  75. ; Atención: Anteriormente sólo decrementamos el tiempo, pero NO
  76. ; verificamos si llegó al valor 0. Aquí se realiza esto. Si los
  77. ; dos bytes del tiempo valen 0 significa que el tiempo terminó.
  78. movf Tiempo_H,F
  79. btfss STATUS,Z ; ¿Vale 0 el byte alto?
  80. goto Fin_Interrupcion ; No, pues sale de la interrupción.
  81. movf Tiempo_L,F
  82. btfss STATUS,Z ; ¿Vale 0 el byte bajo?
  83. goto Fin_Interrupcion ; No, pues sale de la interrupción.
  84.  
  85. ; Llegamos aquí porque los dos bytes valen 0, es decir, el tiempo terminó.
  86. bsf Alarma ; Activa la alarma
  87. call Retardo_2s ; durante un corto tiempo.
  88. bcf Alarma
  89.  
  90. bcf INTCON,T0IE ; Prohibe la interrupción del TMR0
  91. ; Para que detener el conteo.
  92.  
  93. Fin_Interrupcion
  94. bcf INTCON,T0IF ; Borra la bandera de interrupción
  95. retfie ; y retorna.
  96.  
  97. ; Subrutina Visualiza_Tiempo.
  98. ;
  99. ; Observa que antes sólo se hacía:
  100. ;
  101. ; movf TIEMPO,W
  102. ; call MinutosSegundos
  103. ;
  104. ; Pues ahora el tiempo es de dos bytes y debe hacerse como sigue.
  105. Visualiza_Tiempo
  106. call LCD_Borra
  107. ; Debes hacerlo así para que funcione. La rutina MinutosSegundos
  108. ; modificada maneja los registros MinutosSegundos_TiempoH y
  109. ; MinutosSegundos_TiempoL.
  110. movf Tiempo_H,W
  111. movwf MinutosSegundos_TiempoH
  112. movf Tiempo_L,W
  113. movwf MinutosSegundos_TiempoL
  114. call MinutosSegundos ; Convierte de segundos a minutos y
  115. ; segundos.
  116. movf Minutos,W
  117. call BIN_BCD
  118. call LCD_ByteCompleto
  119. movlw ':'
  120. call LCD_Caracter
  121. movf Segundos,W
  122. call BIN_BCD
  123. call LCD_ByteCompleto
  124. return
  125.  
  126. ; La rutina BIN_BCD yo la hice, pero puedes usar la que tú tienes.
  127. ; Lo que pasa es que la hice porque no la tengo.
  128. ; Insisto, puedes usar la que tú tienes.
  129. BIN_BCD
  130. CBLOCK
  131. Unidades, Decenas, Centenas
  132. ENDC
  133.  
  134. movwf Unidades
  135. clrf Decenas
  136. clrf Centenas
  137. BIN_BCD_Resta10
  138. movlw .10
  139. subwf Unidades,F
  140. btfss STATUS,C
  141. goto Fin_BIN_BCD
  142.  
  143. incf Decenas,F
  144. movlw .10
  145. subwf Decenas,W
  146. btfss STATUS,C
  147. goto BIN_BCD_Resta10
  148.  
  149. clrf Decenas
  150. incf Centenas,F
  151. goto BIN_BCD_Resta10
  152.  
  153. Fin_BIN_BCD
  154. movlw .10
  155. addwf Unidades,F
  156. movf Unidades,W
  157. swapf Decenas,F
  158. iorwf Decenas,W
  159. swapf Decenas,F
  160. return
  161.  
  162. ; Aquí está la subrutina MinutosSegundos modificada para manejar
  163. ; números de 2 bytes. Ésta sí úsala en lugar de la otra.
  164. MinutosSegundos
  165. CBLOCK
  166. Segundos, Minutos
  167. MinutosSegundos_TiempoH
  168. MinutosSegundos_TiempoL
  169. ENDC
  170.  
  171. clrf Minutos ; Borra los minutos.
  172. ; Le resta 60 al tiempo que está almacenado en las variables
  173. ; MinutosSegundos_TiempoH y MinutosSegundos_TiempoL.
  174. MinutosSegundos_Resta60
  175. movlw .60
  176. subwf MinutosSegundos_TiempoL,F ; Resta 60 del byte bajo.
  177. btfss STATUS,C ; ¿Es negativo?
  178. decf MinutosSegundos_TiempoH,F ; Sí, entonces decrementa en
  179. ; 1 el byte alto.
  180. btfsc MinutosSegundos_TiempoH,7 ; ¿El resultado es negativo?
  181. goto Fin_MinutosSegundos ; Sí, pues ya terminamos de convertir.
  182.  
  183. incf Minutos,F ; Incrementa en 1 la cantidad de minutos.
  184. goto MinutosSegundos_Resta60 ; Sigue revisando si hay más minutos.
  185.  
  186. Fin_MinutosSegundos
  187. movlw .60 ; Le suma 60 a la cantidad de tiempo ya que
  188. ; previamente se le restó 60 y el resultado
  189. ; fue negativo.
  190. addwf MinutosSegundos_TiempoL,W
  191. movwf Segundos
  192. return
  193.  
  194. INCLUDE "LCD_4BIT.INC"
  195. INCLUDE "RETARDOS.INC"
  196.  
  197. END

Bien, en el programa podrás darte cuenta que cargué un valor en las variables Tiempo_H y Tiempo_L:

Código:
movlw	high(.1200)	; Carga el byte alto del tiempo en la variable
movwf Tiempo_H ; Tiempo_H.
movlw low(.1200) ; Carga el byte bajo del tiempo en la variable
movwf Tiempo_L ; Tiempo_L.

Pero tú en tu programa quieres darle incrementos. Estos incrementos deben ser ahora un tanto diferentes:

Código
  1. ; Incrementar la variable de tiempo.
  2.   movlw   IncrementoTiempo ; Le suma un valor de incremento al
  3.   addwf    Tiempo_L,F           ; byte bajo.
  4.   btfsc      STATUS,C             ; ¿Hubo acarreo?
  5.   incf       Tiempo_H,F            ; Sí, entonces se lo suma al byte alto.

Edito -------------------

Te mandé al correo la carpeta con el programa y el circuito en proteus.

              Nos vemos.
57  Informática / Electrónica / Re: Temporizador para insoladora en: 8 Septiembre 2010, 01:43 am
Hola, Meta:

Una pregunta: ¿Por qué dices que sólo puedes contar de 4:15 para abajo?

Espero tu respuesta. Saludos.

¡Ups!... EDITO -------------------

Acabo de leer el por qué sólo 4:15, pero eso no es por la capacidad del timer, sino porque las operaciones deben ser de 16 bits. Es decir, la rutina para convertir de binario a BCD deben manejar números de 16 bits. El decremento que realizas (decfsz   TIEMPO,F) deberá ser ahora un decremento de 16 bits.

Dame un poco de tiempo y te muestro unas rutinas para solucionar esto.

                Nos vemos luego, si Dios quiere.
58  Programación / Programación Visual Basic / Re: [Ayuda] Duda problema ¿cómo? en: 7 Septiembre 2010, 03:34 am
Pues mira:

Con App.path puedes averiguar la ruta desde donde se está ejecutando la aplicación.

Ejemplo:
Código:
Option Explicit

Private Sub Command1_Click()
Dim s As String
    s = App.Path
End Sub

Si no es lo que quieres o si le falta algo hazlo saber.
59  Programación / Programación Visual Basic / Re: [Ayuda] Duda problema ¿cómo? en: 7 Septiembre 2010, 03:17 am
jorgelin95:

¿Se supone que la ruta del archivo es conocida de antemano o el programa debe averiguar dónde está el archivo?
 
        Saludos
60  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 6 Septiembre 2010, 03:34 am
¡Vaya! La verdad que yo nunca me había fijado en Exclude from simulation.

Que bueno que ya funciona. Nos vemos.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines