Ir al contenido



Foto

Prácticas Básicas - primeros ejercicios con un PIC


  • Por favor identifícate para responder
13 respuestas en este tema

#1 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 28 febrero 2009 - 09:53

Cuando nos iniciamos en el mundo de los microcontroladores, en este caso los Pic, el mayor obstáculo es saber por donde empezar. Generalmente comenzamos leyendo un manual, un libro, un apunte, donde se describe toda la arquitectura interna del microcontrolador, como ser  memoria, registros, puertos, etc. y también el repertorio de instrucciones  que lo conforman. Todo esto es muy importante aprenderlo y a su vez el mejor camino para comprenderlo es empezar a realizar prácticas básicas para ver el funcionamiento del microcontrolador en forma real.

En este hilo vamos a ir viendo pequeños programas escritos en asm (ensamblador) que nos muestran de forma visual lo que realizan determinadas instrucciones del microcontrolador y de esta forma comprender mejor el funcionamiento desde la práctica.

Lo que necesitamos es disponer de un programador de Pic para grabar los programas en la memoria del micro, tener instalado el entorno de desarrollo MPLAB IDE de Microchip para crear los proyectos y compilarlos, por último armar un simple circuito electrónico con un microcontrolador Pic 16F84A para comprobar el funcionamiento de cada programa y poder visualizarlo en una salida de 8 leds.

El circuito necesario para las prácticas es el siguiente:


Imagen Enviada


Puede ser armado en una placa experimental o bien en un protoboard.

También necesitamos una fuente de alimentación de 5 volts para alimentar al circuito anterior: 

Imagen Enviada


En la próxima entrega veremos como crear un proyecto desde el MPLAB y el primer programa.

  • 0

#2 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 11 marzo 2009 - 01:09

Continuamos

CREAR UN PROYECTO DESDE EL MPLAB IDE

Para la realización de nuestros programas para los microcontroladores Pic utilizamos el software  MPLAB IDE de Microchip.  Lo primero que tenemos que hacer para comenzar con nuestras prácticas es crear un  proyecto, de esta forma nos vamos familiarizando con el entorno de desarrollo del Mplab.

La creación de un proyecto puede ser realizada por el “Proyect Wizard” desde el menú  Proyect > Proyect Wizard, en este caso lo vamos a realizar en forma manual para conocer los pasos, particularmente es la que utilizo siempre. 

Comenzamos creando una carpeta en el disco de la PC con el nombre que elijamos, por ejemplo Pic , Proyecto, Prácticas, etc. A continuación abrimos el programa Mplab y  realizamos lo siguiente:

1. Lo primero es seleccionar el microcontrolador Pic que vamos a utilizar en nuestro programa, en este caso es el Pic 16F84A. En el menú desplegable cliqueamos con el mouse  Configure > Select Device,

Imagen Enviada


Se abrirá una ventana y buscamos en el casillero “Device” el Pic 16F84A, lo seleccionamos y aceptamos en OK.

Imagen Enviada


2. Desde el menú cliqueamos en File > New

Imagen Enviada


Aparecerá la ventana del editor de texto del MPLAB, aquí­ es donde escribiremos nuestro programa fuente o bien podemos “pegar” el código desde otro archivo de texto donde fuera escrito dicho programa.

3. Estando la ventana del editor de texto del MPLAB en blanco, tal cual apareció, la guardamos con el nombre de nuestro proyecto con “Save As”


Imagen Enviada


en la carpeta que habí­amos creado para nuestras practicas sin olvidar de escribir el tipo de extensión, que en nuestro caso serí­a “.asm” (ensamblador), si fuera en otro lenguaje con la extensión que corresponda.

Imagen Enviada


Si ya disponemos del archivo fuente podemos saltear esta etapa, simplemente copiamos dicho archivo a la carpeta creada para nuestras prácticas o bien copiamos y pegamos el código en el editor del MPLAB. 

4. Una vez salvado el archivo, Cliqueamos con el mouse en el menú Project > New...

Imagen Enviada


se abrirá una ventana donde debemos escribir el nombre del proyecto, en nuestro caso lo nombraremos Proyecto_1. En segundo lugar escribimos la ruta donde será guardado, que será la carpeta creada en un principio y que ya contiene el archivo que guardamos anteriormente; en nuestro ejemplo escribirí­amos C:\Proyectos_Pic\Proyecto_1 o bien cliqueamos sobre Browse y buscamos manualmente la carpeta. Aceptamos en el botón OK .

Imagen Enviada


5. Volvemos nuevamente al menú Project, buscamos y cliqueamos en la lista Add Files to Projet (sumar archivos al proyecto).

Imagen Enviada


Se abrirá la ventana de diálogo donde se encuentra el archivo que habí­amos guardado al comienzo, lo seleccionamos 

Imagen Enviada


y será incorporado a nuestro  proyecto.

Imagen Enviada


También se puede realizar clikeando con el botón derecho del Mouse sobre la ventana de proyecto en Source Files > Add Files…

6. Cliqueamos sobre el archivo anexado, en nuestro caso “Proyecto_1.asm”, para que aparezca nuevamente la ventana del editor de texto del MPLAB.

Imagen Enviada


7. En el menú abrimos Project  y salvamos el proyecto con Save Project.

Imagen Enviada


Ahora ya tenemos todo preparado para comenzar a escribir nuestro programa.

Imagen Enviada


8. Seguidamente en el menú desplegable  Proyect ubicamos Build All, o bien desde la barra de herramientas:

Imagen Enviada


cliqueamos con el mouse y entonces el Mplab compilará nuestro proyecto, esto significa que el Mplab ensamblará el archivo fuente, para que nosotros podamos corregir, si los hubiera, los errores de sintaxis que pudimos haber cometido y a su vez traducir las instrucciones del mismo a códigos binarios, que son los que posteriormente se grabarán en la memoria del microcontrolador Pic.

Imagen Enviada


9.  Si todo está en orden y no aparece ningún error, el Mplab generará el archivo con extensión .hex necesario para trasladar nuestro programa a la memoria de programa del microcontrolador Pic.


NOTA: El MPLAB no admite rutas de archivo mayores a 64 caracteres. Por eso es conveniente crear una carpeta de proyecto en C:\  u otro directorio como se explicó anteriormente. Si se excede el máximo de 64 caracteres en la ruta del proyecto, el MPLAB generará un error al momento de compilar el archivo fuente, aunque este último no tenga ningún error.



  • 0

#3 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 11 marzo 2009 - 06:40

Gracias WillyP, ya con ese ejemplo pues el MPLAB se dejo. :D


Un Saludo. (y)

#4 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 02:51

Continuamos:

Anteriormente habí­amos visto como crear un proyecto desde el MPLAB IDE. Ahora ya podemos escribir los programas o bien copiar y  pegar algún código en el editor, la siguiente etapa es compilar desde la barra de herramientas -> Buill Hall para  que se genere el archivo con extensión .hex que es el que necesitamos para grabar la memoria del Pic con un programador.   

Otro circuito más fácil de implementar con un microcontrolador 16F627A, donde ocho leds están conectados al puerto B.

Imagen Enviada



Este microcontrolador tiene mejores caracterí­sticas y precio que el 16F84. En este caso no utilizamos un oscilador externo sino que implementamos el oscilador interno del microcontrolador, de esta forma reducimos los componentes del circuito.

El siguiente programa incrementa el encendido de los leds conectados al puerto B, desde 0 hasta 255, repitiéndose el ciclo infinitamente.



asm
  1. ;============================================================================================
  2. ;TITULO : Led_incf.asm
  3. ;DESCRIPCION : Los leds conectados al puerto b se encienden en código binario incrementandose
  4. ;desde 0 a 255, al ser un incremento el sentido de la cuenta en port B, va desde RB0 hacia RB7
  5. ;cuando llega al final comienza nuevamente en forma infinita.
  6. ;La temporización es de aproximadamente 100 mls. 
  7. ;============================================================================================
  8. ; Tipo de microcontrolador
  9.      
  10.     list      p=16F627A            ; directiva que define al microcontrolador
  11.     #include  <p16F627A.inc>        ; definición de variables del microcontrolador
  12. ; configuración:
  13.  
  14.     __config _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
  15. ;===============================
  16. ; Registros utilizados
  17. CONTA_1  EQU    0x20 ; registro de usuario en dirección 0x20   
  18. CONTA_2    EQU    0x21 ; registro de usuario en dirección 0x21
  19. ;===========================
  20. ; configura puerto B
  21. RESET
  22.   ORG    0x00  ; origen en vector de reset, dirección 0x00
  23.   GOTO    START  ; ir a START
  24. START
  25.   ORG    05H  ; origen en dirección 0x05, salta el vector de reset
  26.   BSF    STATUS,RP0 ; selecciona banco 1
  27.   MOVLW  B'00000000' ; configuración de port b todo salidas
  28.   MOVWF  PORTB  ; el W mueve la configuración a port b
  29.   BCF    STATUS,RP0 ; retorna a banco 0 
  30.   CLRF    PORTB  ; borra port b       
  31.   GOTO    INICIO  ; ir a inicio
  32. ;===========================
  33. ; Inicia el programa
  34. INICIO     
  35.     INCF PORTB,; comenzamos incrementando una unidad en port b
  36. ;===========================
  37. ; temporización
  38.   MOVLW  .110  ; cargamos literal 110 en W
  39.   MOVWF  CONTA_2  ; el W lo mueve al registro CONTA_2
  40. LOOP_2
  41.   MOVLW  .181  ; cargamos literal 181 en W
  42.   MOVWF  CONTA_1  ; el W lo mueve al registro CONTA_1
  43. LOOP_1
  44.   NOP    ; nop = consume un ciclo de instrucción
  45.   NOP    ; idem
  46.   DECFSZ  CONTA_1,F ; decrementa CONTA_1
  47.   GOTO    LOOP_1  ; si no es "0", continúa el loop 1 
  48.   DECFSZ  CONTA_2,F ; al finalizar loop 1, decrementa CONTA_2
  49.   GOTO    LOOP_2  ; si no es "0", continúa el loop 2, recarga
  50.   NOP    ; nuevamente el registro CONTA_1
  51.   NOP    ;
  52.   GOTO    INICIO  ; al finalizar salta a INICIO y comienza de nuevo
  53.   END


  • 0

#5 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 02:59

En este programa decrementamos los leds del puerto B desde 255 hasta 0 en un ciclo infinito.



asm
  1. ;TITULO : Led_decfsz.asm
  2. ;DESCRIPCION : Los leds conectados al puerto B se encienden en código binario decrementandose
  3. ;desde 255 hasta 0, al ser un decremento el sentido de la cuenta va desde RB7 hacia RB0,
  4. ;cuando llega al final comienza nuevamente en forma infinita.
  5. ;La temporización es de aproximadamente 100 mls. 
  6.  
  7.      
  8.     list      p=16F627A            ; directiva que define al microcontrolador
  9.     #include  <p16F627A.inc>        ; definición de variables del microcontrolador
  10. ; configuración:
  11.  
  12.     __config _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
  13. ;===============================
  14. ; REGISTROS DE UTILIZADOS 
  15. ;===============================
  16. CONTA_1  EQU    0x20 ; registro de usuario en dirección 0x20   
  17. CONTA_2    EQU    0x21 ; registro de usuario en dirección 0x21
  18. ;===============================
  19. RESET
  20.   ORG    0x00  ; origen en vector de reset, dirección 0x00
  21.   GOTO    START  ; ir a START
  22. START
  23.   ORG    05H  ; origen en dirección 0x05, salta el vector de reset
  24.   BSF    STATUS,RP0 ; selecciona banco 1
  25.   MOVLW  B'00000000' ; configuración de port b todo salidas
  26.   MOVWF  PORTB  ; el W mueve la configuración a port b
  27.   BCF    STATUS,RP0 ; retorna a banco 0 
  28.   CLRF    PORTB  ; borra port b       
  29.   GOTO    INICIO  ; ir a inicio
  30. INICIO     
  31.     DECF PORTB,; comenzamos decrementando una unidad port b
  32. ;===============================
  33. ; temporización
  34.   MOVLW  .110  ; cargamos literal 110 en W
  35.   MOVWF  CONTA_2  ; el W lo mueve al registro CONTA_2
  36. LOOP_2
  37.   MOVLW  .181  ; cargamos literal 181 en W
  38.   MOVWF  CONTA_1  ; el W lo mueve al registro CONTA_1
  39. LOOP_1
  40.   NOP    ; nop = consume un ciclo de instrucción
  41.   NOP    ; idem
  42.   DECFSZ  CONTA_1,F ; decrementa CONTA_1
  43.   GOTO    LOOP_1  ; si no es "0", continúa el loop 1 
  44.   DECFSZ  CONTA_2,F ; al finalizar loop 1, decrementa CONTA_2
  45.   GOTO    LOOP_2  ; si no es "0", continúa el loop 2, recarga
  46.   NOP    ; nuevamente el registro CONTA_1
  47.   NOP    ;
  48.   GOTO    INICIO  ; al finalizar salta a INICIO y comienza de nuevo
  49.   END 


  • 0

#6 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 03:14

Complemento del puerto B





asm
  1. ;DESCRIPCION : Los leds conectados al puerto b encienden y apagan por el resultado de la instrucción
  2. ;comf, que realiza el complemento bit a bit, en este caso del puerto b .- 
  3.    
  4. ; Tipo de microcontrolador
  5.      
  6.     list      p=16F627A            ; directiva que define al microcontrolador
  7.     #include  <p16F627A.inc>        ; definición de variables del microcontrolador
  8. ; configuración:
  9.  
  10.     __config _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
  11. ;==================================
  12. ; Registros utilizados
  13.                  
  14. CONTA_1    EQU    0x20       
  15. CONTA_2    EQU    0x21       
  16. CONTA_3    EQU    0x22
  17. BYTE    EQU    0x23
  18. ;===================================
  19.          
  20. RESET
  21.             ORG    00H            ;dirección origen 00hex 
  22.             GOTO    START          ;ir a start
  23. START     
  24.             ORG    05H            ;salta vector de interrupción (04hex), y origen 05hex
  25.             BSF    STATUS,5        ;se sitúa en página 1
  26.             MOVLW  B'00000000'    ;configura port b como salidas
  27.             MOVWF  PORTB          ;
  28.             BCF    STATUS,5        ;regresa a página 0
  29.             CLRF    PORTB          ;reset de port b
  30.     GOTO    INICIO          ;ir a inicio para comenzar el programa
  31.    
  32. INICIO     
  33.     COMF    PORTB,F
  34. ;===================================
  35. ; temporización
  36.      
  37.     MOVLW  .14
  38.             MOVWF  CONTA_1
  39. LOOP_1      MOVLW  .72
  40.             MOVWF  CONTA_2
  41. LOOP_2    MOVLW  .247
  42.     MOVWF  CONTA_3
  43. LOOP_3      NOP
  44.             DECFSZ  CONTA_3,F
  45.             GOTO    LOOP_3
  46.             DECFSZ  CONTA_2,F
  47.             GOTO    LOOP_2
  48.     DECFSZ  CONTA_1,F
  49.             GOTO    LOOP_1
  50.     INCFSZ  BYTE,F
  51.     GOTO    INICIO
  52.  
  53.             END


  • 0

#7 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 03:33

Manejo de una tabla Rom:



asm
  1. ;TITULO : Led_tabla.asm
  2. ;DESCRIPCION :Los leds conectados al puerto b se encienden de acuerdo a la secuencia de bits
  3. ;alojados en una tabla de datos.-
  4.    
  5. ; Tipo de microcontrolador
  6.      
  7.     list      p=16F627A            ; directiva que define al microcontrolador
  8.     #include  <p16F627A.inc>        ; definición de variables del microcontrolador
  9. ; configuración:
  10.  
  11.     __config _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
  12. ;===============================
  13. ; Registros utilizados
  14.                  
  15. CONTA_1 EQU    0x20       
  16. CONTA_2 EQU    0x21         
  17. CONTA_3 EQU    0x22
  18. BYTE    EQU    0x23
  19. RESET
  20.     ORG    00H            ;dirección origen 00hex 
  21.     GOTO    START          ;ir a start
  22. START     
  23.     ORG    05H            ;salta vector de interrupción (04hex), y origen 05hex
  24.     BSF    STATUS,5        ;se sitúa en página 1
  25.     MOVLW  B'00000000'    ;configura port b como salidas
  26.     MOVWF  PORTB          ;
  27.     BCF    STATUS,5        ;regresa a página 0
  28.     CLRF    PORTB          ;reset de port b
  29.     CLRF    BYTE
  30.     GOTO    INICIO          ;ir a inicio para comenzar el programa
  31.    
  32. INICIO     
  33.     BTFSC  BYTE,3
  34.     CLRF    BYTE
  35.     MOVF    BYTE,W
  36.     CALL    TABLA
  37.     MOVWF  PORTB
  38.     MOVLW  .20
  39.     MOVWF  CONTA_1
  40. LOOP_1
  41.     MOVLW  .20
  42.     MOVWF  CONTA_2
  43. LOOP_2
  44.     MOVLW  .150
  45.     MOVWF  CONTA_3
  46. LOOP_3 
  47.     NOP
  48.     DECFSZ  CONTA_3,F
  49.     GOTO    LOOP_3
  50.     DECFSZ  CONTA_2,F
  51.     GOTO    LOOP_2
  52.     DECFSZ  CONTA_1,F
  53.     GOTO    LOOP_1
  54.     INCF    BYTE,F
  55.     GOTO    INICIO
  56. TABLA
  57.     ADDWF  PCL,1            ;suma el contenido de W al PCL
  58.  
  59.     RETLW  B'10000001'
  60.     RETLW  B'01000010'
  61.     RETLW  B'00100100'
  62.     RETLW  B'00011000'
  63.     RETLW  B'00100100'
  64.     RETLW  B'01000010'
  65.     RETLW  B'10000001'
  66.     RETLW  B'11111111'
  67.  
  68.     END


  • 0

#8 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 03:45

Los leds encienden rotando hacia la derecha en el Puerto B



asm
  1. ;TITULO : Led_rlf.asm
  2. ;DESCRIPCION : Los leds conectados al puerto b se encienden secuencialmente uno por vez desde
  3. ;rb0 a rb7 rotando hacia la derecha, cuando llega al final comienza nuevamente en forma infinita.
  4.  
  5. ; Tipo de microcontrolador
  6.      
  7.     list      p=16F627A            ; directiva que define al microcontrolador
  8.     #include  <p16F627A.inc>        ; definición de variables del microcontrolador
  9. ; configuración:
  10.  
  11.     __config _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
  12. ;===============================
  13. ; Registros utilizados
  14.                  
  15. CONTA_1    EQU    0x20       
  16. CONTA_2    EQU    0x21         
  17. ROTACION    EQU    0x22
  18.  
  19. RESET
  20.     ORG    0x00            ;dirección origen 00hex 
  21.     GOTO    START          ;ir a start
  22. START     
  23.     ORG    0x05            ;salta vector de interrupción (04hex), y origen 05hex
  24.     BSF    STATUS,5        ;se sitúa en página 1
  25.     MOVLW  B'00000000'    ;configura port b como salidas
  26.     MOVWF  PORTB          ;
  27.     BCF    STATUS,5        ;regresa a página 0
  28.     CLRF    PORTB          ;reset de port b
  29.     BSF    STATUS,C        ;pone en 1 el bit c del registro status 
  30.     GOTO    INICIO          ;ir a inicio para comenzar el programa
  31. INICIO
  32.     MOVLW  .66
  33.     MOVWF  CONTA_1
  34. LOOP_1
  35.     MOVLW  .181
  36.     MOVWF  CONTA_2
  37. LOOP_2
  38.     NOP
  39.     NOP
  40.     DECFSZ  CONTA_2,F
  41.     GOTO    LOOP_2
  42.     DECFSZ  CONTA_1,F
  43.     GOTO    LOOP_1
  44.     NOP
  45.     NOP
  46.     RLF    PORTB,F
  47.     GOTO    INICIO   
  48.     END


  • 0

#9 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 03:49

Los leds encienden rotando hacia la izquierda en el puerto B



asm
  1. ;TITULO : Led_rrf.asm
  2. ;DESCRIPCION : Los leds conectados al puerto b se encienden secuencialmente uno por vez desde
  3. ;rb0 a rb7 rotando hacia la izquierda, cuando llega al final comienza nuevamente en forma infinita.
  4. ; Tipo de microcontrolador
  5.      
  6.     list      p=16F627A            ; directiva que define al microcontrolador
  7.     #include  <p16F627A.inc>        ; definición de variables del microcontrolador
  8. ; configuración:
  9.  
  10.     __config _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
  11. ;===============================
  12. ; Registros utilizados
  13.                  
  14. CONTA_1    EQU    0x20       
  15. CONTA_2    EQU    0x21         
  16. ROTACION    EQU    0x22
  17. RESET
  18.     ORG    0x00            ;dirección origen 00hex 
  19.     GOTO    START          ;ir a start
  20. START     
  21.     ORG    0x05            ;salta vector de interrupción (04hex), y origen 05hex
  22.     BSF    STATUS,5        ;se sitúa en página 1
  23.     MOVLW  B'00000000'    ;configura port b como salidas
  24.     MOVWF  PORTB          ;
  25.     BCF    STATUS,5        ;regresa a página 0
  26.     CLRF    PORTB          ;reset de port b
  27.     BSF    STATUS,C        ;pone en 1 el bit c del registro status 
  28.     GOTO    INICIO          ;ir a inicio para comenzar el programa
  29. INICIO
  30.     MOVLW  .66
  31.     MOVWF  CONTA_1
  32. LOOP_1
  33.     MOVLW  .181
  34.     MOVWF  CONTA_2
  35. LOOP_2
  36.     NOP
  37.     NOP
  38.     DECFSZ  CONTA_2,F
  39.     GOTO    LOOP_2
  40.     DECFSZ  CONTA_1,F
  41.     GOTO    LOOP_1
  42.     NOP
  43.     NOP
  44.     RRF    PORTB,F
  45.     GOTO    INICIO   
  46.     END


  • 0

#10 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 04:01

Intercambio de bits -> Msb a Lsb y Lsb a Msb



asm
  1. ;TITULO : Led_swapf.asm
  2.  
  3. ;DESCRIPCION : Se intercambian los 4 bits de mayor peso (msb)con los 4 bits de menor peso
  4. ;(lsb)en un registro del microcontrolador y se envian al puerto b visualizandose por los leds.       
  5.  
  6. ; Tipo de microcontrolador
  7.      
  8.     list      p=16F627A            ; directiva que define al microcontrolador
  9.     #include  <p16F627A.inc>        ; definición de variables del microcontrolador
  10.  
  11. ; configuración:
  12.  
  13.     __config _CP_OFF & _DATA_CP_OFF & _LVP_OFF
  14. & _BOREN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
  15.  
  16. ;===============================
  17. ; Registros utilizados
  18.  
  19. CONTA_1    EQU    0x20
  20. CONTA_2     EQU    0x21
  21. CONTA_3    EQU    0x22
  22. INV        EQU    0x23
  23.  
  24. ;===============================
  25.  
  26. RESET
  27.     ORG    0x00            ;dirección origen 00hex 
  28.     GOTO    START          ;ir a start
  29. START     
  30.     ORG    0x05            ;salta vector de interrupción (04hex), y origen 05hex
  31.     BSF    STATUS,5        ;se sitúa en página 1
  32.     MOVLW  B'00000000'    ;configura port b como salidas
  33.     MOVWF  PORTB          ;
  34.     BCF    STATUS,5        ;regresa a página 0
  35.     CLRF    PORTB          ;reset de port b
  36.     MOVLW  .8
  37.     MOVWF  CONTA_3
  38.     MOVLW  B'11110000'
  39.     MOVWF  INV
  40.     GOTO    INICIO          ;ir a inicio para comenzar el programa
  41. INICIO     
  42.     SWAPF  INV,F
  43.     MOVF    INV,W
  44.     MOVWF  PORTB
  45.     MOVLW  .37
  46.     MOVWF  CONTA_1
  47. LOOP_1
  48.     MOVLW  .20
  49.     MOVWF  CONTA_2
  50. LOOP_2
  51.     MOVLW  .80
  52.     MOVWF  CONTA_3
  53. LOOP_3
  54.     NOP
  55.     DECFSZ  CONTA_3,F
  56.     GOTO    LOOP_3
  57.     DECFSZ  CONTA_2,F
  58.     GOTO    LOOP_2
  59.     DECFSZ  CONTA_1,F
  60.     GOTO    LOOP_1
  61.     GOTO    INICIO
  62.  
  63.     END


  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.404 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2009 - 04:30

Hola Willy, ¿esa fuente de 5 Voltios puede ser una de esas fuentes DC multivoltaje o necesariamente debe ser ese esquematico?.

Saludos.
  • 0

#12 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 05:09

Hola, cualquier fuente que entrege 5 volts Dc sirve, el circuito correspondiente es sólo a titulo de ejemplo en caso que se quiera armar. Eso si, no exceder los 5 volts ni tampoco menos de 4.5 volts.

Saludos.- 
  • 0

#13 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.404 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2009 - 05:18

Ah perfecto (y).

Saludos.

PD. Aprovecho este momento para avisarte que existen etiquetas para el lenguaje ASM, para conocer todas las etiquetas del foro, en mi firma está el link. ;)
  • 0

#14 WillyP

WillyP

    Member

  • Miembro Platino
  • PipPip
  • 22 mensajes

Escrito 16 marzo 2009 - 05:35

Ok, aunque estuve probando al copiar código con la etiqueta .asm y poní­a todo sobre un margen, no se que estarí­a haciendo mal. De esta forma si se copiaba el código no funcionarí­a ya que sólo las etiquetas pueden estar al margen no así­ las instrucciones. Alguna recomendación?   
  • 0