Autor Tema: duda con de 16F84A a 16F88 :::urgidisimo:::  (Leído 3593 veces)

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

Desconectado pablocabrera

  • PIC10
  • *
  • Mensajes: 20
duda con de 16F84A a 16F88 :::urgidisimo:::
« en: 04 de Agosto de 2009, 01:05:02 »
Hola estimados, tengo una pequeña duda de pasar un codigo probado del 16F84A a  un 16F88 con osilador interno bueno realise el codigo .asm con distintos programas de web y me funciono re-bien ahora lo quiero hacer en un 16F88 sialguin me puede ayudar este es el codigo

    LIST P=16F84A
   #INCLUDE "P16F84A.INC"


estado   equ   0x03   ; Haciendo asignaciones
trisa   equ   0x05
trisb   equ   0x06        
porta   equ   0x05
portb   equ   0x06
RET      equ h'0C'
RET1   equ h'0D'
RET2   equ h'0E'
PDel0   equ h'0D'
PDel1   equ h'0E'

llaves   equ   0x0C   ; almacenara el estado de las llaves


;============== Configuración de puertos ==================

        ORG     0x0000
        GOTO    inicio
        ORG     0x0005

inicio   BSF     estado,5   ; cambio al banco 1 del pic
        MOVLW   b'00001111'
        MOVWF   trisa      ; Asigna al puerto A como entrada
        MOVLW   0x00   
        MOVWF   trisb      ; y Al puerto B como salida
        BCF     estado,5   ; Regresa al banco 0
        CLRF    porta      ; limpia el puerto A
        CLRF    portb      ; limpia el puerto B


swich   MOVF   porta,0      ; carga w con el puerto A
        ANDLW   b'00001111'   ; retiene los 4 bits de interes (las llaves)
      MOVWF   llaves      ; y los guarda en llaves
        XORLW   0x01      ; verifica si es el primer efecto
        BTFSC   estado,2   ; si es así
        CALL    efect1      ; lo llama y lo ejecuta
        MOVF    llaves,0   ; sino, carga llaves en w
        XORLW   0x02      ; y verifica si es el segundo efecto
        BTFSC   estado,2   ; si es así
        CALL    efect2      ; lo llama y lo ejecuta
        MOVF    llaves,0   ; y así con los demás
        XORLW   0x04      ; ya me aburrí
        BTFSC   estado,2   ; como verás el resto es lo mismo
        CALL    efect3
        MOVF    llaves,0
      XORLW   0x08
      BTFSC   estado,2
      CALL   efect4
      MOVF   llaves,0
         
            
       GOTO    swich      ; Comienza a revisar de nuevo

;======================== Efectos =========================

efect1   MOVLW b'10000000'
      MOVWF PORTB
      CALL clokon
      MOVLW b'11000000'
      MOVWF PORTB
      CALL clokon
      MOVLW b'11100000'
      MOVWF PORTB
      CALL clokon
      MOVLW b'11110000'
      MOVWF PORTB   
      CALL clokon
      MOVLW b'11111000'
      MOVWF PORTB
      CALL clokon
      MOVLW b'11111100'
      MOVWF PORTB   
       CALL clokon
      MOVLW b'11111110'
      MOVWF PORTB
      CALL clokon
      MOVLW b'11111111'
      MOVWF PORTB   
      CALL clokon
      MOVLW b'01111111'
      MOVWF PORTB
      CALL clokon
      MOVLW b'00111111'
      MOVWF PORTB
      CALL clokon
      MOVLW b'00011111'
      MOVWF PORTB
      CALL clokon
      MOVLW b'00001111'
      MOVWF PORTB   
      CALL clokon
      MOVLW b'00000111'
      MOVWF PORTB
      CALL clokon
      MOVLW b'00000011'
      MOVWF PORTB   
       CALL clokon
      MOVLW b'00000001'
      MOVWF PORTB
      CALL clokon
      MOVLW b'00000000'
      MOVWF PORTB   
      CALL clokon
        return

efect2  CLRF    portb      
        BSF     portb,0      ; (00000001)
        CALL    clokon
        BSF     portb,1      ; (00000011)
        CALL    clokon
        BSF     portb,2      ; (00000111)
        CALL    clokon
        BSF     portb,3      ; (00001111)
        CALL    clokon
        BSF     portb,4      ; (00011111)
        CALL    clokon
        BSF     portb,5      ; (00111111)
        CALL    clokon
        BSF     portb,6      ; (01111111)
        CALL    clokon
        BSF     portb,7      ; (11111111)
        CALL    clokon
        BCF     portb,0      ; (11111110)
        CALL    clokon
        BCF     portb,1      ; (11111100)
        CALL    clokon
        BCF     portb,2      ; (11111000)
        CALL    clokon
        BCF     portb,3      ; (11110000)
        CALL    clokon
        BCF     portb,4      ; (11100000)
        CALL    clokon
        BCF     portb,5      ; (11000000)
        CALL    clokon
        BCF     portb,6      ; (10000000)
        CALL    clokon
        RETURN             ; a revisar nuevamente las llaves

efect3  CLRF    portb      ; limpia el puerto B
        BSF     portb,7      ; (10000000)
      BSF     portb,0      ; (10000001)
        CALL    clokon
        BSF     portb,6      ; (11000001)
        BSF     portb,1      ; (11000011)
        CALL    clokon
        BSF     portb,5      ; (11100011)
        BSF     portb,2      ; (11100111)
        CALL    clokon
        BSF     portb,4      ; (11110111)
        BSF     portb,3      ; (11111111)
        CALL    clokon
        BCF     portb,7      ; (01111111)
        BCF     portb,0      ; (01111110)
        CALL    clokon
        BCF

efect4   MOVLW b'11000000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'01100000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00110000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00011000'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'00001100'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00000110'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'00000011'
      MOVWF PORTB
      CALL DELAY
      
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
        MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      
      MOVLW b'00000110'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00001100'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00011000'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'00110000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'01100000'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'11000000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'11000000'
      MOVWF PORTB
      CALL DELAY
      
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
        MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
      MOVWF PORTB
      CALL  clokon
      MOVLW B'11111111'
      MOVWF PORTB
      CALL  clokon

      MOVLW b'11000000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'01100000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00110000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00011000'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'00001100'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00000110'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'00000011'
      MOVWF PORTB
      CALL DELAY
      
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
        MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      
      MOVLW b'00000110'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00001100'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'00011000'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'00110000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'01100000'
      MOVWF PORTB   
      CALL DELAY
      MOVLW b'11000000'
      MOVWF PORTB
      CALL DELAY
      MOVLW b'11000000'
      MOVWF PORTB
      CALL DELAY
      
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
        MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
      MOVWF PORTB
      CALL  clokon
      MOVLW B'11111111'
      MOVWF PORTB
      CALL  clokon

      MOVLW B'11000011'
        MOVWF PORTB
        CALL  DEMORA ;retardo de 500mS
        CLRF  PORTB
        CALL  DEMORA
         MOVLW B'11000011'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
      CALL  DEMORA
      MOVLW B'11000011'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
      CALL  DEMORA      
   
      MOVLW B'00111100'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'00111100'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'00111100'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      
      MOVLW B'00001111'            ;nuevo comienzo
        MOVWF PORTB
        CALL  DEMORA ;retardo de 500mS
        CLRF  PORTB
        CALL  DEMORA
         MOVLW B'00001111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
      CALL  DEMORA
      MOVLW B'00001111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
      CALL  DEMORA
         
      MOVLW B'11110000'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11110000'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11110000'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA

      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
       
      MOVLW B'00001111'
        MOVWF PORTB
        CALL  DEMORA ;retardo de 500mS
        CLRF  PORTB
        CALL  DEMORA
         MOVLW B'00001111'
        MOVWF PORTB

        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
        MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA

      MOVLW B'11000011'
        MOVWF PORTB
        CALL  DEMORA ;retardo de 500mS
        CLRF  PORTB
        CALL  DEMORA
         MOVLW B'11000011'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
      CALL  DEMORA
      MOVLW B'11000011'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
      CALL  DEMORA      
   
      MOVLW B'00111100'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'00111100'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
      MOVLW B'00111100'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA

        RETURN


   
;**********RUTINA DE RETARDO***********

clokon         MOVLW H'2'
            MOVWF RET
LOOP2         MOVLW H'90'
            MOVWF RET1
LOOP1         MOVLW H'90'
            MOVWF RET2
LOOP         DECFSZ RET2,F
            GOTO LOOP
            DECFSZ RET1,F
            GOTO LOOP1
            DECFSZ RET,F
            GOTO LOOP2
            RETURN

DEMORA      movlw     .100     
            movwf     PDel0   
PLoop1      movlw     .100     
            movwf     PDel1   
PLoop2      clrwdt             
PDelL1      goto      PDelL2         
PDelL2      goto      PDelL3         
PDelL3      clrwdt             
            decfsz    PDel1,  1
            goto      PLoop2   
            decfsz    PDel0,  1
            goto      PLoop1   
PDelL4      goto      PDelL5         
PDelL5      goto      PDelL6         
PDelL6      goto      PDelL7         
PDelL7      clrwdt             
            return   


DELAY      MOVLW h'2'
         MOVWF RET
LOOP21      MOVLW h'75'
         MOVWF RET1
LOOP12      MOVLW h'86'
         MOVWF RET2
BLOOP      DECFSZ RET2,f
         GOTO BLOOP
         DECFSZ RET1,f
         GOTO LOOP12
         DECFSZ RET,f
         GOTO LOOP21
         return
   END

bueno saque algunas partes por lo latoso y largo es un secuencial para unas balizas de emergencia (tipo estrobo parte del codigo lo saque del foro)

lo otro si alguin me puede ayudar con cambiar los efectos con un boton pulsador cuando esta un seleccionador en posicion 0x08 en el bit 3 de RA....


bueno espero que me ayuden

muchas gracias  :lol:

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: duda con de 16F84A a 16F88 :::urgidisimo:::
« Respuesta #1 en: 04 de Agosto de 2009, 11:50:37 »
Tengo entendido que el 16F88 es compatible pin a pin con el 16F84, en el software primero tendrias que poner los bits de configuracion para habilitar el oscilador interno, revisar los registros del ADC para usar los pines como I/O digitales , y si usas la EEPROM creo que debes cambiar la forma de leerla y escribirla porque son diferentes, revisa la hoja de datos para ver todas las diferencias.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: duda con de 16F84A a 16F88 :::urgidisimo:::
« Respuesta #2 en: 04 de Agosto de 2009, 21:44:33 »
uyy pero hay faltan muchas cosas, por ejemplo la palabra de configuración ¿donde esta? si es allí donde empiezas a elegir el oscilador interno.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado pablocabrera

  • PIC10
  • *
  • Mensajes: 20
Re: duda con de 16F84A a 16F88 :::urgidisimo:::
« Respuesta #3 en: 04 de Agosto de 2009, 23:12:57 »
up's si no coloque lo que hace. bueno basicamente es un secuencial led para vehiculos de emergencia. he sacado buena parte del codigo de la pagina web http://r-luis.xbot.es/ y otra de este mismo foro. Bueno si no ingrese la parte de _CONFIG.. ya que no se bien como generar el oscilador interno. he leido que no es mucho lo que hay que cambiar pero si me pueden orientar se los agradeceria un muchisimo...  ha y la otra cosa que quiero hacer en el codigo es que cuando este en esta parte 
      XORLW   0x08
      BTFSC   estado,2
      CALL   efect4   ; aca creo que se puede hacer un goto a un subcodigo o subinstruccion y de hay colocar un pulsador...
      MOVF   llaves,0

poder colocar un pulsador con para cambiar a los otros efectos sin nesecidad de tener un seleccionador o dipswitch eso es basicamente ojala no sea mucho pedir...
« Última modificación: 04 de Agosto de 2009, 23:23:18 por pablocabrera »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: duda con de 16F84A a 16F88 :::urgidisimo:::
« Respuesta #4 en: 05 de Agosto de 2009, 09:53:20 »
faltan mas datos:

1.- ¿a que frecuencia de oscilación vas a trabajar?
2.- ¿cuantos pulsadores son?
3.- ¿cuantos efectos son en total?
 
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado pablocabrera

  • PIC10
  • *
  • Mensajes: 20
Re: duda con de 16F84A a 16F88 :::urgidisimo:::
« Respuesta #5 en: 06 de Agosto de 2009, 22:37:16 »
Hola PalitroqueZ, gracias por responder mira el que hice con 16F84A le coloque una cristal de 4Mhz con condensadores de 22pF y creo que andaria bien. he leido el datasheet pero no se generar el codigo. en lo de los pulsadores es solo uno que puede ir conextado a RA5 o RA6. y los efectos en total no se hasta el momento tengo como 6.

gracias :lol: :o

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: duda con de 16F84A a 16F88 :::urgidisimo:::
« Respuesta #6 en: 07 de Agosto de 2009, 16:00:43 »
la forma de configurar el oscilador interno a 4 Mhz:

vamos a mirar la figura 4-6 del datasheet




observa que tenemos un bloque que multiplexa las 4 fuentes de oscilación, escogemos el Internal Oscillator Block, con _INTRC_IO

ahora debemos configurar el postcaler del oscilador interno. Mirando nuevamente la imagen, tenemos que cargar el binario 110 al registro OSCCON.

dentro de OSCCON hay 2 registros adicionales que configurar

OSTS que define la fuente de oscilación (en este caso se coloca a cero)

e IOFS, a mi paricularmente me gusta preguntar por este bit, porque es el que define cuando la frecuencia se estabiliza. Es de solo lectura, asi que servirá para preguntar mas adelante en el código antes de ir al bucle principal.

ah! hay otro bit de configuración _IESO_OFF que le indica al micro que no habrá cambio de fuente de oscilación en caliente.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado pablocabrera

  • PIC10
  • *
  • Mensajes: 20
Re: duda con de 16F84A a 16F88 :::urgidisimo:::
« Respuesta #7 en: 23 de Agosto de 2009, 21:35:39 »
Hola palitroqueZ mira trate de hacer algo revisando otros programas y con lo que tu dejaste poteado, en el programa que  adjunto funciona simulando en el proteus funciona  la primera secuencia (efect1) pero no cambia de efecto y cuando lo quemo en el pic solo prende el bit 0, bueno adjunto el program para ver si me puedes ayudar u otro amigo del foro...

Gracias