Autor Tema: el codigo no es correcto ?  (Leído 4364 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
el codigo no es correcto ?
« en: 30 de Marzo de 2009, 11:29:34 »
Hola amigos no conozco nada de assembler y tengo un pic que al quemar con el codigo que voy a poner abajo no consigo lo esperado ! la verdad no entiendo el codigo pero me doy una muy leve imaginacion por que soy programdador junior en delphi !

si me pueden ayudar estare muy agradecido y si no tambien jeje  :D !

el codigo :

;***********************************************************************************
;Este programa muestra en un display 7 segmentos los numero del 0 al 9 cada vez que
;se presiona el pulsador SW1.
;***********************************************************************************


   list      p=16F84A            ; list directive to define processor
   #include <p16F84A.inc>        ; processor specific variable definitions

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.


;*******************************VARIABLE DEFINITIONS********************************

w_temp        EQU     0x0C        ; variable used for context saving
status_temp   EQU     0x0D        ; variable used for context saving
NUMERO         EQU     0X0E     ; variable usada por la rutina CONVER






;**********************************VECTOR RESET*************************************
      ORG     0x000             ; processor reset vector
        goto    MAIN              ; go to beginning of program


;*******************************VECTOR DE INTERRUPCION*******************************      

      ORG     0x004             ; interrupt vector location
      movwf   w_temp            ; save off current W register contents
      movf   STATUS,w          ; move status register into W register
      movwf   status_temp       ; save off contents of STATUS register





      movf    status_temp,w     ; retrieve copy of STATUS register
      movwf   STATUS            ; restore pre-isr STATUS register contents
      swapf   w_temp,f
      swapf   w_temp,w          ; restore pre-isr W register contents
      retfie                    ; return from interrupt


;**********************************PROGRAMA PRINCIPAL********************************
MAIN
   BSF   STATUS,RP0   ;paso al banco 1 de la RAM
   MOVLW   B'01000'   
   MOVWF   TRISA      ;configuro el registro puerto A
   MOVLW   B'00000000'   
   MOVWF   TRISB      ;configuro el registro del puerto B
   BCF   STATUS,RP0   ;paso al banco 0 de la RAM
   
   CLRF   PORTA      ;limpio el puerto A
   CLRF   PORTB      ;limpio el puerto B
   CLRF   NUMERO      ;limpio el registro NUMERO
   
INI   BTFSC   PORTA,3      ;pregunto si se activo el pulsador
   GOTO   INI
INI1   BTFSS   PORTA,3      ;pregunto si se desactivo el pulsador
   GOTO    INI1
   
   CALL   CONVER      ;llamo a la rutina CONVER que permite representar la variable numero en un display de 7 entos
   MOVWF   PORTB      ;paso el valor de W al puerto B
   INCF   NUMERO,1   ;incremento el registro NUMERO
   GOTO   INI      ;voy a INI

CONVER   MOVF   NUMERO,W   ;paso NUMERO a W
   ADDWF   PCL,F      ;sumo a PCL el valor de W
   RETLW   0X7F      ;retorno con W = 0x7F
   RETLW   0X0C      ;retorno con W = 0x0C
   RETLW   0XB6      ;retorno con W = 0xB6
   RETLW   0X9E      ;retorno con W = 0x9E
   RETLW   0xCC      ;retorno con W = 0xCC
   RETLW   0xDA      ;retorno con W = 0xDA
   RETLW   0XFA      ;retorno con W = 0xFA
   RETLW   0X0F      ;retorno con W = 0x0F
   RETLW   0XFF      ;retorno con W = 0xFF
   RETLW   0XCE      ;retorno con W = 0xCE

   END         ;fin de programa

Saludos  :-/

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: el codigo no es correcto ?
« Respuesta #1 en: 30 de Marzo de 2009, 16:01:31 »
Bueno , pero dinos que problemas tienes.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: el codigo no es correcto ?
« Respuesta #2 en: 30 de Marzo de 2009, 22:54:42 »
Hola Mind-field.

Una pregunta y una sugerencia.

La pregunta, ¿ Hiciste bien la conección?, el pulsador debe ir al puerto A, bit 3 (RA3) se activa con un 0 lógico. El display 7 segmento debe ser de cátodo (-) común.

Y la sugerencia, puedes borrar tranquilamente lo siguiente porque no se utiliza.
Código: ASM
  1. *******************************VECTOR DE INTERRUPCION*******************************      
  2.  
  3.       ORG     0x004             ; interrupt vector location
  4.       movwf   w_temp            ; save off current W register contents
  5.       movf   STATUS,w          ; move status register into W register
  6.       movwf   status_temp       ; save off contents of STATUS register
  7.  
  8.  
  9.  
  10.  
  11.  
  12.       movf    status_temp,w     ; retrieve copy of STATUS register
  13.       movwf   STATUS            ; restore pre-isr STATUS register contents
  14.       swapf   w_temp,f
  15.       swapf   w_temp,w          ; restore pre-isr W register contents
  16.       retfie                    ; return from interrupt

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: el codigo no es correcto ?
« Respuesta #3 en: 31 de Marzo de 2009, 01:03:06 »
el programa compila sin ningun error, cuando lo simulo no aparecen los numeros como deben ser, yo cambie los datos de la tabla asi y me funcionó
   RETLW   B'00111111'     
   RETLW   B'00000110'     
   RETLW   B'01011011'     
   RETLW   B'01001111'     
   RETLW   B'01100110'     
   RETLW   B'01101101'     
   RETLW   B'01111100'     
   RETLW   B'00000111'     
   RETLW   B'11111111'     
   RETLW   B'01100111'     


ahora me parece a mi que de acuerdo como esta planteado el programa el pulso en RA3 es un permiso para mostrar en el display, pienso yo que deberia plantearse para q al pulsar se incremente el registro numero y luego se muestre
« Última modificación: 31 de Marzo de 2009, 13:57:48 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: el codigo no es correcto ?
« Respuesta #4 en: 31 de Marzo de 2009, 02:54:59 »
Hola jhozate una consulta, ¿con qué programa lo simulaste? porque lo que hiciste es exactamente lo mismo, solo que en vez de ponerlo en hexadecimal, lo pusiste en binario. Son los mismo valores.

RA3, lo que hace, es incrementar en 1 un registro en forma indirecta.

Lo que si, hay un error que me acabo de dar cuenta ahora. Cuando se hallan mostrado los 10 números, cuando se precione por enécima vez (11 veces) la variable número tendrá el valor 11 y cuando se dirija a la tabla, el CP saltará afuera de la tabla. Hay que corregir eso.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: el codigo no es correcto ?
« Respuesta #5 en: 31 de Marzo de 2009, 13:18:41 »
yo simulo en proteus, y cuando lo simule el display no mostraba lo q era, ni siquiera eran numeros lo q mostraba, pero los cambie a binario y funcionó, y como se corrige el problema q viste?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: el codigo no es correcto ?
« Respuesta #6 en: 31 de Marzo de 2009, 13:21:11 »
Hola a todos ! voy a responder en orden amigos , hola pibe el error es que quemo el pic pero en la plaqueta de prueba no responde nada como si el programa no estuviera bien !

Gracias Leon Pic ya lo estoy probando en isis de proteus y si funciona ! , la plaqueta es de Plaquetodo curso microcontroladores y con algunos programas anda re bien , voy a ver si esta algo mal en la plaqueta !

jhozate gracias por tu aporte pero no entiendo ni j lo que me decis ! voy a buscar esas palabras extrañas jeje  :mrgreen:

al parecer hasta ahora el problema esta en la plaqueta , cuando mi esposa me deje un rato en santa paz  :D lo pruevo y les cuento amigos  :-/

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: el codigo no es correcto ?
« Respuesta #7 en: 31 de Marzo de 2009, 18:12:27 »
yo simulo en proteus, y cuando lo simule el display no mostraba lo q era, ni siquiera eran numeros lo q mostraba, pero los cambie a binario y funcionó, y como se corrige el problema q viste?

Muy sencillo.
Código: ASM
  1. CALL   CONVER      ;llamo a la rutina CONVER que permite representar la variable numero en un display de 7 entos
  2.    MOVWF   PORTB      ;paso el valor de W al puerto B
  3.    INCF   NUMERO,1   ;incremento el registro NUMERO
  4.    GOTO   INI      ;voy a INI

Antes de la instrucción GOTO INI, chequear o constatar si NUMERO es 11. Si es 11, borramos NUMERO y ejecutamos GOTO INI y si es menor a 11 ejecutamos la línea GOTO INI

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: el codigo no es correcto ?
« Respuesta #8 en: 31 de Marzo de 2009, 19:26:08 »
y en la tabla no se puede poner q cuando se llegue a la pulsacion 11 se vuelva a iniciar el conteo desde cero?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: el codigo no es correcto ?
« Respuesta #9 en: 31 de Marzo de 2009, 20:30:14 »
y en la tabla no se puede poner q cuando se llegue a la pulsacion 11 se vuelva a iniciar el conteo desde cero?

Si!, seria lo mas simple  :mrgreen:

  CALL   CONVER      ;llamo a la rutina CONVER que permite representar la variable numero en un display de 7 entos
   MOVWF   PORTB      ;paso el valor de W al puerto B
   INCF   NUMERO,1   ;incremento el registro NUMERO
   GOTO   INI      ;voy a INI

CONVER   MOVF   NUMERO,W   ;paso NUMERO a W
   ADDWF   PCL,F      ;sumo a PCL el valor de W
   RETLW   0X7F      ;retorno con W = 0x7F
   RETLW   0X0C      ;retorno con W = 0x0C
   RETLW   0XB6      ;retorno con W = 0xB6
   RETLW   0X9E      ;retorno con W = 0x9E
   RETLW   0xCC      ;retorno con W = 0xCC
   RETLW   0xDA      ;retorno con W = 0xDA
   RETLW   0XFA      ;retorno con W = 0xFA
   RETLW   0X0F      ;retorno con W = 0x0F
   RETLW   0XFF      ;retorno con W = 0xFF
   RETLW   0XCE      ;retorno con W = 0xCE

  CLRF NUMERO
   RETLW   0X7F      ;retorno con W = 0x7F   :mrgreen:

Norberto

PD, yo veo que no tiene un antirrebotes, en la practica "REAL" no creo que funcione bien el pulsador....
« Última modificación: 31 de Marzo de 2009, 20:32:16 por todopic »
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: el codigo no es correcto ?
« Respuesta #10 en: 31 de Marzo de 2009, 20:36:36 »
 :shock: disculpa la ignorancia...como seria eso del antirrebote?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: el codigo no es correcto ?
« Respuesta #11 en: 31 de Marzo de 2009, 22:41:44 »
y en la tabla no se puede poner q cuando se llegue a la pulsacion 11 se vuelva a iniciar el conteo desde cero?

Coincido con Norberto, es más fácil.  :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: el codigo no es correcto ?
« Respuesta #12 en: 01 de Abril de 2009, 01:56:11 »
y como puedo hacer para escribir solo un numero en un display de 7 segmentos con un pic 16f84a un ejemplo simple para empezar de cero

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: el codigo no es correcto ?
« Respuesta #13 en: 01 de Abril de 2009, 08:47:38 »
Hola jhozate un antirrebote es un metodo para que una tecla no genere varios pulsos , ya que al soltar la tecla puede que esta rebote ! , en cordoooobes basico  seria un circuito que permita un retardo al presionar en un switch y obvie los posibles rebotes en dicho switch o un retardo en el programa para que no tome en cuenta esos rebotes en el switch !

espero que lo puedas entender amigo , no soy bueno explicando !

vamos de nuevo ! jeje y como puedo hacer para escribir solo un numero en un display de 7 segmentos con un pic 16f84a un ejemplo simple para empezar de cero por favor ! , no quiero pulsadores ni nada raro ! solo que al conectar el pic se vea un numero ! ! nadamas !

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: el codigo no es correcto ?
« Respuesta #14 en: 01 de Abril de 2009, 09:24:10 »
http://www.todopic.com.ar/foros/index.php?topic=24720.msg201401#msg201401
En esta dieccion del foro te explica como se hace todo esto incluido el antirrebotes por sotwere, un poco mas adelante te pone un ejemplo con tres displays multiplexados que cuentan de 0 a 999.

saludos tapi8