Autor Tema: problema con programa en asm  (Leído 1676 veces)

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

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
problema con programa en asm
« en: 16 de Diciembre de 2008, 13:11:22 »
Hola amigos!
Tengo este programa que decrementa un numero en un display de 7 segmentos. El codigo compila (o ensambla) sin problemas, pero a la hora de conectar todo, a veces anda y otras no. El circuito esta 100% bien, porq con otros programas (hecho en C) funciona. Quisiera saber cual es el problema, a ver si alguno de ustedes lo ve. Perdonen si es un error tonto, es q deje asm hace mucho y estoy bastante oxidado con eso.

Código: ASM
  1. LIST P=PIC16F84A
  2.         #INCLUDE <P16F84A.INC>
  3.         __CONFIG    _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
  4.  
  5.         CBLOCK 0CH
  6.         work,stat,contador
  7.         ENDC
  8.         #DEFINE banco0 bcf STATUS,RP0
  9.         #DEFINE banco1 bsf STATUS,RP0
  10.        
  11.         org 00H                 ;vector de reset
  12.         goto inicio
  13.         org 04H                 ;vector de interrupcion
  14. ;---------------------------------------------ISR
  15.         bcf INTCON,T0IF ;bajamos la bandera
  16.         movwf work              ;guardamos el estado de w
  17.         movf STATUS,w
  18.         movwf stat              ;guardamos STATUS
  19.  
  20.         decfsz contador,f
  21.         goto hecho
  22.         movlw 09H
  23.         movwf contador
  24. hecho
  25.         movf stat,w
  26.         movwf STATUS
  27.         swapf work,f
  28.         swapf work,w
  29.         retfie
  30. ;-------------------------------programa principal
  31. inicio
  32.         banco1
  33.         movlw b'00000111'       ;configuramos todos los reg
  34.         movwf OPTION_REG
  35.         movlw b'10100000'
  36.         movwf INTCON
  37.         movlw 00H
  38.         movwf TRISB                     ;todo puertoB como salida
  39.         banco0
  40. bucle
  41.         movf contador,w
  42.         call tabla
  43.         banco0
  44.         movwf PORTB
  45.         goto bucle
  46. tabla
  47.         ADDWF   PCL,f   ;cargamos el valor del acumulador en el registro
  48.         RETLW   40H     ;Para mostrar el 0
  49.         RETLW   79H     ;Para mostrar el 1
  50.         RETLW   24H     ;Para mostrar el 2
  51.         RETLW   30H     ;Para mostrar el 3
  52.         RETLW   19H     ;Para mostrar el 4
  53.         RETLW   12H     ;Para mostrar el 5
  54.         RETLW   02H     ;Para mostrar el 6
  55.         RETLW   78H     ;Para mostrar el 7
  56.         RETLW   00H     ;Para mostrar el 8
  57.         RETLW   10H     ;Para mostrar el 9
  58.  
  59.         END

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: problema con programa en asm
« Respuesta #1 en: 16 de Diciembre de 2008, 13:28:06 »
Es que falta inicializar la variable "contador", asi:

inicio   banco1
   movlw b'00000111'   ;configuramos todos los reg
   movwf OPTION_REG
   movlw b'10100000'
   movwf INTCON
   movlw 00H
   movwf TRISB         ;todo puertoB como salida
   banco0
;*************************
                movlw   d'9'
                movwf   contador
;*************************
bucle
                movf contador,w
   call tabla
                ....

Javicho.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: problema con programa en asm
« Respuesta #2 en: 16 de Diciembre de 2008, 13:31:03 »
hmm, pequeño bug jeje. Pero aunque no la inicialice... no deberia llegar a 0 alguna vez? aunq su contenido inicial sea basura?
De todos modos, ahora pruebo de nuevo y vemos q onda, gracias javicho!!!!

EDIT:
acabo de probarlo y funciono!!! como cuesta ver estos bugs en asm, q facil era poner int contador=9; en C jajaja
muchas gracias javicho!!! perdon por el error tonto, saludos!
« Última modificación: 16 de Diciembre de 2008, 13:37:39 por gera »

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: problema con programa en asm
« Respuesta #3 en: 16 de Diciembre de 2008, 14:02:21 »
Lo que sucede es que al no inicializar el contador éste empieza en un valor aleatorio y si es mayor que 9 pues al llamar a la tabla el PCL apunta afuera de la tabla y el flujo del programa se fue al ultramundo. Y seguro que a veces al conectarle la alimentación al pic dicho contador iniciaba con un valor menor igual a 9 por ello caiadentro de la tabla y todo seguia su curso normal.

Javicho.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: problema con programa en asm
« Respuesta #4 en: 16 de Diciembre de 2008, 19:35:55 »
Claro, ese era el problema. Entendido a la perfeccion.
Muchas gracias amigo!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein


 

anything