Autor Tema: ayuda, con almacenaje de datos  (Leído 2240 veces)

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

Desconectado artgos

  • PIC10
  • *
  • Mensajes: 20
ayuda, con almacenaje de datos
« en: 26 de Abril de 2005, 02:32:00 »
Hola a todos:

Haber antes de nada decir que tengo abierto otro hilo parecido asi que si los administradores deciden cerrar este lo entiendo.

Tengo que leer cuatro datos de un teclado matricial y compararlos con otros metidos en memoria (vamos comprobar un codigo de acceso)

Y el direccionamiento indirecto me esta volviendo loco, ya que el FSR me avanza de 3 en tres por cada pulsacion.

Colgue el codigo en el otro hilo (que seguramente yo mismo quite y deje este)

El codigo que voy a adjuntar es el nuevo codigo modificado

Y lo simulo en el proteus.

Bueno pues nada adjunto el asm

Desconectado artgos

  • PIC10
  • *
  • Mensajes: 20
RE: ayuda, con almacenaje de datos
« Respuesta #1 en: 26 de Abril de 2005, 02:36:00 »
no me deja adjuntar nada (no se por que, me dice que no hay espacio)

asi que os pego el codigo, siento si soy un poco cargante pero me urge mucho y no veo el error.

Por cierto como vereis las contestaciones que me dieron ya las tube en cuenta y realice las correcciones correspondientes ademas de otras de mi cosecha

Un saludo




;   Declaracion de micro
;-------------------------------------------------------------
   list P=16f870
   include "P16f870.inc"

;   Declaracion de vectores, inicio e interrupcion   
;-------------------------------------------------------------

   org 0x00
   goto inicio
   org 0x04
   goto interrupcion
   org 0x05

;   Configuracion del pic
;---------------------------------------------------------------

inicio
      
   bsf STATUS,RP0
   clrf TRISC
   movlw b"00000110"
   movwf ADCON1
   clrf TRISA
   movlw b"11111111"
   movwf TRISB
   movlw b"10010111"
   movwf OPTION_REG

;   Configuracion de vector de interrupcion para interrupcion RB4-7 y RB0   
;------------------------------------------------------------------------------

   movlw b"00011000"
   movwf INTCON
   bcf STATUS,RP0
   clrf PORTA
   clrf PORTB
   clrf PORTC

;   rutina principal
;-------------------------------------------------------------------

   contador      equ 0x20
   contador2      equ 0x21
   contador3      equ 0x22
   tab1         equ 0x23
   tab2         equ 0x24
   auxiliar      equ 0x25
taqui   movlw d"9"
   movwf tab2
   movlw 0x25
   movwf FSR
   bsf INTCON,GIE
aqui   movlw d"3"
   movwf contador
   clrf contador2
alli   movfw contador2
   call cuenta
   movwf PORTA
   incf contador2
   decfsz contador
   goto alli
   goto aqui

;   almacen
;--------------------------------------------------------
almacen
   
        movwf INDF
        INCF     FSR,1    
        movwf PORTC
        call delay
        call delay
        call delay
        call delay
        clrf PORTC
   retfie

;   interrupcion
;---------------------------------------------------------------------
interrupcion
   bcf INTCON,RBIF

fila1   btfss PORTB,4
   goto fila2
   call delay
   btfss PORTB,4
   retfie
   btfss PORTA,0
   goto columna2
   movlw d"1"
   goto almacen
columna2
   btfss PORTA,1
   goto columna3
   movlw d"2"
   goto almacen
columna3   
   movlw d"3"
   goto almacen
fila2   
   btfss PORTB,5
   goto fila3
   call delay
   btfss PORTB,5
   retfie
   btfss PORTA,0
   goto columna2b
   movlw d"4"
   goto almacen

columna2b

btfss PORTA,1
   goto columna3b
   movlw d"5"
   goto almacen
columna3b
   movlw d"6"
   goto almacen
fila3   
   btfss PORTB,6
   goto fila4
   call delay
   btfss PORTB,6
   retfie
   btfss PORTA,0
   goto columna2c
   movlw d"7"
   goto almacen
columna2c
   btfss PORTA,1
   goto columna3c
   movlw d"8"
   goto almacen
columna3c
   movlw d"9"
   goto almacen
fila4
   movlw d"0"
   goto almacen
   


;   tabla de salidas
;-------------------------------------------------------------------

cuenta:
   addwf PCL,F
   retlw   b"00000001"
   retlw    b"00000010"
   retlw    b"00000100"
   return



;      rutina de retardo
;-------------------------------------------------------------------
delay:
   movwf auxiliar
   movlw d"100"
   movwf contador3
   bcf INTCON,T0IF
   movlw d"100"
   movwf TMR0   
delay1
   btfss INTCON,T0IF
   goto delay1
   decfsz contador3
   goto vuelta
   goto delay
vuelta
   movfw auxiliar
   return

   end

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: ayuda, con almacenaje de datos
« Respuesta #2 en: 28 de Abril de 2005, 18:09:00 »
Buenas.

Estamos en el problema de que no compruebas cuando se suelta el boton pulsado. Utilizas la interrupción por cambio de estado en el puerto B. Cuando pulsas un boton, la interrupción salta, capturas el dato pulsado y lo guardas con el fsr bien. Lo que pasa es que cuando sales de la interrupción, el boton siguen pulsado, luego cuando escanees otra fila, la iterrupción vuelve a saltar, y así sucesivamente hasta el infinito. Si se te adelanta en 3 el fsr es por pura casualidad, por que si tienes el boton pulsado más tiempo se te incrementará aun más, o porlo menos eso he podido ver en el código.

Antes de salir de la interrupción, compruba que el boton que se había pulsado pasa a cero, a ver si se soluciona el problema.

Desconectado artgos

  • PIC10
  • *
  • Mensajes: 20
RE: ayuda, con almacenaje de datos
« Respuesta #3 en: 13 de Mayo de 2005, 03:43:00 »


Muchisimas gracias hombre, joder que despiste mas tonto.

Lo probare haber y hos cuento.

Perdonar por lo distanciado de las respuestas pero el trabajo y la carrera no me dan para mas

Un saludo

Desconectado artgos

  • PIC10
  • *
  • Mensajes: 20
RE: ayuda, con almacenaje de datos
« Respuesta #4 en: 13 de Junio de 2005, 06:06:00 »

Hola a todos:

Ya he conseguido que funcione, tenia un error muy tonto, pero muy tonto, antes de nada perdonar por la brasa que he dado y lo distanciado de mis respuestas.

Antes de nada, os digo el error, al venir la pulsacion por el puertob que actua por cambio de nivel, me daba problemas tb al dejar de pulsar, de hay que me hiciera eso. Entonces lo que he hecho a sido resetar el puerto cada vez

Hos pego el codigo, ya se que habria que depurarlo mucho (que habria que quitar muchas instrucciones, ya que he hecho mil pruebas para sacarlo, error de principiante, no aplicar la teoria a la practica, pero bueno asi se aprende,jejej)

Aqui teneis el codigo para el que quiera utilizarlo, de momento a mi me va, solo almacena datos en memoria, como tratarlos dependera de la aplicacion en cuestion

Un saludo



;   Declaracion de micro
;-------------------------------------------------------------
   list P=16f870
   include "P16f870.inc"

;   Declaracion de vectores, inicio e interrupcion   
;-------------------------------------------------------------

   org 0x00
   goto inicio
   org 0x04
   goto interrupcion
   org 0x05

;   Configuracion del pic
;---------------------------------------------------------------

inicio
      
   bsf STATUS,RP0
   clrf TRISC
   movlw b"00000110"
   movwf ADCON1
   clrf TRISA
   movlw b"11111111"
   movwf TRISB
   movlw b"10010111"
   movwf OPTION_REG
   

;   Configuracion de vector de interrupcion para interrupcion RB4-7 y RB0   
;------------------------------------------------------------------------------

   
   movlw b"00011000"
   movwf INTCON
   bcf STATUS,RP0
   clrf PORTA
   clrf PORTB
   clrf PORTC

;   rutina principal
;-------------------------------------------------------------------

   contador   equ 0x20
   contador2   equ 0x21
   alarma       equ 0x22
   alarma2      equ 0x23
   auxiliar   equ 0x24
   dig1      equ 0x28
   dig2      equ 0x29
   dig3      equ 0x2a
   dig4      equ 0x2b
   contador3   equ 0x25
   contador4   equ 0x26
   movlw 0x28
   movwf FSR
   bsf INTCON,GIE
   movlw d"4"
   ;movwf contador4
   ;movlw 0x29
   movwf contador3
aqui   movlw d"3"
   movwf contador
   clrf contador2
alli   movfw contador2
   call cuenta
   movwf PORTA
   
   incf contador2
   decfsz contador
   goto alli
   goto aqui
   

;   tabla de salidas
;-------------------------------------------------------------------

cuenta:
   addwf PCL,F
   retlw   b"00000001"
   retlw    b"00000010"
   retlw    b"00000100"

;      inicio de codigo de interrupcion
;-------------------------------------------------------------------

interrupcion
   
;   Rutina de visualizacion de tecla   
;-------------------------------------------------------------------
   call delay2
   btfss INTCON,RBIF
   retfie
   clrf INTCON
fila1   btfss PORTB,4
   goto fila2
   btfss PORTA,0
   goto columna2
   clrf INTCON
   clrf PORTB
   movlw 0x01
   movwf PORTC
   clrf PORTB
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
columna2
   btfss PORTA,1
   goto columna3
   clrf INTCON
   clrf PORTB
   movlw 0x02
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
columna3
   clrf INTCON
   clrf PORTB
   movlw 0x03
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
fila2   
   btfss PORTB,5
   goto fila3
   call delay2
   btfss PORTB,5
   retfie
   btfss PORTA,0
   goto columna2b
   clrf INTCON
   clrf PORTB
   movlw 0x04
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
columna2b
   btfss PORTA,1
   goto columna3b
   clrf INTCON
   clrf PORTB
   movlw 0x05
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
columna3b
   clrf INTCON
   clrf PORTB
   movlw 0x06
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
fila3   

   btfss PORTB,6
   goto fila4
   call delay2
   btfss PORTB,6
   retfie
   btfss PORTA,0
   goto columna2c
   clrf INTCON
   clrf PORTB
   movlw 0x07
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
columna2c
   btfss PORTA,1
   goto columna3c
   clrf INTCON
   clrf PORTB
   movlw 0x08
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final
columna3c
   clrf INTCON
   clrf PORTB
   movlw 0x09
   movwf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final

fila4   clrf INTCON
   clrf PORTB
   movlw 0x00
   clrf PORTC
   call delay2
   call delay2
   call delay2
   clrf PORTC
   goto final



;   final
;--------------------------------------------------------------------
final
   
   movwf INDF
   incf FSR
   clrf W
   call delay2
   call delay2
   call delay2
   call delay2
   call delay2
   call delay2
   movlw b"00011000"
   movwf INTCON
   retfie

; rutina de retardo
;-------------------------------------------------------------------
delay2:
   clrf PORTB
   movwf auxiliar
   movlw d"100"
   movwf contador3
   bcf INTCON,T0IF
   movlw d"100"
   movwf TMR0
delay1
   btfss INTCON,T0IF
   goto delay1
   decfsz contador3
   goto vuelta
   goto delay2
vuelta
   movfw auxiliar
   return
   end