Portal    Foro    Talleres    Buscar    FAQ    Registrarse    Conectarse
Publicar Nuevo Tema  Responder al Tema Página 1 de 5
Ir a la Página 1, 2, 3, 4, 5  Siguiente
PIC16F877A
Autor Mensaje
Responder Citando  
Mensaje PIC16F877A 
 
Minitutorial de uC PIC16F877A

La idea de este tutorial es empezar a programar los uC PIC, solo se necesita tener una pequeña base o conocimiento de las instrucciones de los PIC's, ya que no pretendo escribir un libro, sino mostrar las aplicaciones más comunes desde las ideas más básicas como "encender un LED" hasta "manejar el bus I2C para conectar un RTC (Reloj de tiempo real)". Empezaremos con las características principales del PIC16F877A y en los siguientes posts ya estaremos programando.

Caraterísticas:
Memoria de Programa tipo Flash 8Kx14
Memoria Datos 368 bytes
EEPROM 256 bytes
33 pines de Entrada/Salida
Encapsulado: 40 pines DIP, 44 pines PLCC y 44 pines TQFP
Soporta Xtal 20MHz
Voltaje de Operación: 2.0 hasta 5.5VDC

Periféricos:
1 Conversor A/D de 10-bits (8 canales)
2 Módulos CCP (Captura, Comparador, PWM)
1 Modulo I2C
1 USART (Puerto Serie)
2 Timers de 8 bits
1 Timer 16 bits



El juego de instrucciones lo pueden encontrar en la Biblioteca del foro.
  




____________
Comparte el conocimiento !!!

Si lo oigo, lo olvido; Si lo veo, lo recuerdo; Si lo hago, lo entiendo.
Proverbio.


Just Burz
Diario del Ingeniebrio
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
AQUÍ PUEDE IR TU PUBLICIDAD
Responder Citando  
Mensaje Clase 02. Acceso y almacenamiento de datos en la memoria. 
 
Primeros Programas

Para empezar, necesitas tener el MPLAB y crear un nuevo proyecto, en el tema MPLAB de la sección Software del foro se explica como, luego si quieres ir probando cada ejemplo, pero no simulado sino implementado en un protoboard y no tienes un grabador de PIC's pues en mi Blog enseño como hacer uno.

Problema 1. Resolver: 50+15-8
   ;Mi primer programa: 50+15-8
    list p=16f877A    ;Indica al compilador que PIC estoy usando

    org 0000H        ;dirección de inicio del código en la memoria de programa
    movlw    .8        ;cargo en el registro de trabajo W el valor decimal 8 (W=8)
    sublw    .15        ;resto 15-W y el resultado se guarda en W (W=15-8)
    addlw    .50        ;sumo 50+W y el resultado se guarda en W (W=50+(15-8))
    
    goto    $        ;bucle infinito
    end                ;fin de programa


El símbolo $ se usa junto con goto para saltar sobre la misma linea de comando. Como se darán cuenta empiezo a ingresar los datos de atrás para adelante, es decir, primero ingresé 8 y al último 50, eso se debe a a sintáxis de las instrucciones de operaciones con literales.

Problema 2. Más que un problema, es un ejemplo de como se accede a la memoria de datos.

;Acceso a la memoria de datos
    list p=16f877A

    org        0000H
    incf    20H,1    ;Incremento en 1 el dato almacenado en la dirección 20H
    decf    21H,1    ;Decremento en 1 el dato almacenado en la direccion 21H
    movlw    52H        ;Almaceno en W el dato hexadecimal 52H (W=52H)
    addwf    22H,1    ;Sumo al dato almacenado en 22H el dato almacenado en W y el resultado lo almaceno en la dirección 22H
    subwf    23H,0    ;Resto al dato almacenado en la dirección 23H el dato almacenado en W y el resultado lo almaceno en W
    movlw    13H        ;Almaceno el dato 13H en W
    iorwf    24H,1    ;El dato almacenado en 24H hace un OR con W y el resultado se almacena en 24H
    swapf    24H,1    ;Intercambio de posición el dato almacenado en 24H, el dato AB ahora será BA
    rlf        24H,0    ;Desplazo un bit a la derecha del dato almacenado en 24H y el resultado lo almaceno en W
    goto    $        ;Bucle infinito

    end                ;Fin de programa


Problema 3. Almacenar datos en la memoria de datos.

;Almacenar datos en memoria
    LIST p=16F877A
    INCLUDE<P16F877A.INC>    ;Librería del PIC16F877A donde se definen configuraciones, registros y otros bits de
                            ;information útiles

    ORG        0000H        ;Indica el origen, inicio, posición del código en la memoria de programa.
    movlw    .5            ;W=5    no se puede enviar un dato directamente a memoria de datos, primero debe pasar por W
    movwf    20H            ;20H=5    luego de W se envía recién a la posición de memoria deseada.
    movlw    .6            ;W=6
    movwf    21H            ;21H=6
    movlw    .7            ;W=7
    movwf    22H            ;22H=7
                        ;se grabaron los datos 5,6 y 7 en las posiciones de memoria 20H,21H y 22H.

    bsf        STATUS,RP0    ;Cambiando de banco de memoria, ahora estamos en el banco 1
    movlw    .8            ;W=8
    movwf    20H            ;20H=8
    movlw    .9            ;W=9
    movwf    21H            ;21H=9
    movlw    .10            ;W=10
    movwf    22H            ;22H=10
    goto    $            ;Bucle infinito

    end                    ;Fin del programa.


Para visualizar mejor la ejecución de estos 3 ejemplitos debes usar las opciones Watch y File Registers del MPLAB. Fijate aquí: MPLAB

Revisar en la Biblioteca el tema Bancos de Memoria del PIC para entender mejor el último programita.

Más básico pues en ninguna parte, el próximo post encendemos y apagamos LED's.  Nerd




NOTA: Agregar .INC al nombre de la librería, es decir, debe decir P16F877A.INC dentro de los símbolos <> luego del INCLUDE, yo uso la opción CODE para publicar el código pero por alguna razón este elimina la extensión INC del nombre de la librería. Agregenle la extensión y vuelvan a compilar sus programas. Usen la opción DESCARGAR para bajar el código y luego le cambian la extensión .txt por .asm, finalmente abren el codigo con el MPLAB y lo agregan a su proyecto. Suerte.

  




____________
Comparte el conocimiento !!!

Si lo oigo, lo olvido; Si lo veo, lo recuerdo; Si lo hago, lo entiendo.
Proverbio.


Just Burz
Diario del Ingeniebrio
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: PIC16F877A 
 
Cheere..!!!!!!
Ta muy bueno compadre...
Pero que pasaria si alguien que NO entiende ni jota de terminaciones (siglas y demas) desean seguir tus pasos. Pues creo que aqui nomas quedan...
Seria bueno un buen tutorial de terminaciones, siglas y demás o en todo caso un quick review de electronica basica.

Solo comentario ah!

Halamos
  




____________
Te interesa los juegos en Linea...
KingsOfChaos
http://www.kingsofchaos.com/recruit.php?uniqid=456468iq
WW2
http://www.ww2game.net/recruit.php?uniqid=6546
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Yahoo Messenger
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: PIC16F877A 
 
interesante , tengo una consulta se puede usar algun otro programa para copilarlo como visual u otro ....

PIC16F877A se puede usar en la etapa de radio control de un robot , en el control de motores , en el PWM(control de ancho de pulso) para la velocidad de los motores y mucha mas ......

esta chevere el tutorial  
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: PIC16F877A 
 
Bueno, cuando creas un programa en assembler lo puedes hacer incluso en el block de notas, ahora si deseas compilar ese codigo puedes usar diferentes softwares, MPLAB es el que proporciona el fabricante de los uC PIC osea Microchip, pero existen otros compiladores incluso que trabajan en Linux. Pero Visual no es uno de ellos. Ahora también puedes programar en Basic, y lenguaje C; los compiladores más conocidos para lenguaje C para PIC son PCH de CSS y PICC de Hi-tech, ambas versiones soportan PICs de la gama media, claro que también tienen sus versiones para la gama alta (18FXXX) al igual que MPLAB y su C18. Para programar en Basic para PICs el compilador más conocido es el PIC Basic Pro.

Existen muchos más, pero esos son los más usados, ya es cuestión de uno elegir tal o cual, total en gustos y colores jajajaja.  

Bytes.
  




____________
Comparte el conocimiento !!!

Si lo oigo, lo olvido; Si lo veo, lo recuerdo; Si lo hago, lo entiendo.
Proverbio.


Just Burz
Diario del Ingeniebrio
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Clase 03. Manejo de los puertos de I/O. 
 
En esta oportunidad vamos a aprender a trabajar con los puertos "digitales" que trae el PIC16F877A. El uso del puerto analógico se verá más adelante, cuando lleguemos al Conversor A/D.

Primero que nada se tiene que aclarar varios puntos:
  1. Librería P16F877A.INC
    En el problema 3 hicimos uso de la librería P16F877A.INC con el comando INCLUDE<P16F877A>, por qué? bueno, en la Memoria de Datos se encuentran los Registros Especiales o SFR los cuales gobiernan al uC y sus recursos, solo hace falta configurarlos para poder hacer uso de ellos. Por tal motivo debemos conocer en que dirección se encuentra el registro que nos permite, por ejemplo, configurar los puertos como entradas o salidas, o que registro nos permite usar el periférico PWM, etc. Cada registro posee una dirección establecida (ver Memoria de Datos) pero hay una manera más sencilla de utilizar estos registros y no tener que memorizar cada dirección, Microchip en el MPLAB nos facilita esta tarea con las librerías *.INC según el modelo del uC, en estas librerías encontraremos los nombres de los registros asignados a su dirección respectiva, por ejemplo:
    STATUS EQU H'0003'
    RP0 EQU H'0005'

    bsf STATUS,RP0 ;el bit 5 del registro STATUS se pone a 1

    es lo mismo que poner:

    bsf .3,.5

    solo que el primer ejemplo lo entendemos mejor, nos indica que estamos configurando el bit RP0 del Registro STATUS.

    Estas librerías las encontramos en la carpeta Microchip/MPASM Suite por si queremos indagar más. EQU es un comando que sirve para relacionar un valor con un nombre, viene de la palabra "equal" que significa "igual", lo podemos usar no solo para relacionar direcciones sino también para crear constantes y variables, eso lo veremos en los ejemplos.

  2. Qué es el Registro de Estado (STATUS)
    El Registro de Estado se encuentra en los 4 bancos de la memoria RAM (pueden constatarlo en el artículo Memoria de Datos) es un Registro muy usado porque, entre otras cosas, nos permite acceder a los registros de cualquier banco de memoria con solo configurar algunos bits, y para que necesitamos eso? pues los registros que hacen posible configurar los puertos como Entrada o Salida de datos pues están en el Banco 1 y por defecto nos encontramos en el Banco 0. El registro STATUS tienen la siguiente estructura:

    -----| IRP | RP1 | RP0 | TO# | PD# | Z | DC | C |
    Bit-----7-----6------5------4------3-----2---1-----0

    Por ahora solo nos interesa conocer como cambiar de Banco, para esto se utilizan los bits RP1 y RP0.

    RP1 y RP0: Nos permiten elegir el Banco de Memoria

    | RP1|  RP0 |  Banco  |
    |--0--|---0--| Banco 0 |
    |--0--|---1--| Banco 1 |
    |--1--|---0--| Banco 2 |
    |--1--|---1--| Banco 3 |

    Ejemplo: Estamos en el Banco 0 y queremos pasar a Banco 1

    bsf STATUS,RP0 ;RP1=0 y RP0=1 con lo que estamos pasando al Banco 1 según la tabla anterior (RP1=0 por defecto luego de resetear el uC).

    Bueno vamos aprovechar también para conocer para que sirven los bits Z y C.

    Z: más conocido como señalizador de 0, se activa o pone en nivel alto "1" cuando el resultado de una operación es 0, por ejemplo:

    movlw .10
    sublw  .10

    esta operación da como resultado 0, en ese instante el bit Z del Registro STATUS cambia a "1".

    C: más conocido como señalizador de acarreo, se pone en nivel alto "1" en las operaciones de suma cuando existe acarreo y se pone en nivel bajo "0" en las operaciones de resta cuando también existe acarreo por lo general cuando se resta un numero mayor de uno menor, por ejemplo:

    movlw .255
    addwl  .1

    la suma supera los 8 bits, por lo tanto se activa "1" el señalizador de acarreo indicando que se ha superado el límite de registro, es decir, hubo un desbordamiento y por consiguiente un acarreo.

    movlw .5
    sublw  .4

    la resta da como resultado un número negativo, por lo tanto se pone a "0" el señalizador de acarreo.

    movlw B'10000000'    
    movwf 22H
    rlf 22H,7

    en este caso también se activa "1" el señalizador de acarreo.

  3. Puertos A, B, C, D y E

    Puerto A: Tiene 6 bits, de los cuales 5 pueden trabajar como Entradas Analógicas o Entradas/Salidas Digitales. Por defecto, al resetear el PIC, estos 5 bits (RA0,RA1,RA2,RA3 y RA5) se configuran como entradas o canales analógicos para trabajar con el Conversor A/D. Para configurarlos con Entradas/Salidas Digitales se debe configurar antes el registro ADCON1, ubicado en la dirección 9FH en el Banco 1, con el valor 0000011x, x puede ser 1 o 0.

    movlw B'00000110'
    movwf ADCON1

    De esta forma se configura el puerto A como Entradas/Salidas Digitales, luego para especificar que pines son de Entrada y cuales de Salida se debe modificar el Registro TRISA.

    bsf STATUS,RP0
    movlw B'11110000'
    movwf TRISA
    bcf STATUS,RP0

    Esto significa que los bits 0..3 están configurados como Salidas Digitales y los pines 4..7 están configurados como Entradas Digitales.

    Puerto B: Este puerto es netamente Digital, tiene 8 bits y solo basta con modificar el Registro TRISB para especificar que bits son de Entrada y cuales de Salida. Por defecto, luego de un Reset todos los puertos están configurados como entradas (TRISX=11111111).

    Puerto C: Este puerto es similar al Puerto B, con la diferencia que también pueden cumplir otras funciones que no veremos por ahora. Por defecto es un puerto Digital y solo hay que configurar los bits como Entrada o Salida por medio del Registro TRISC.

    Puerto D: Este puerto a diferencia de los 2 anteriores dispone en sus entradas de un Trigger Schmitt. Cuenta con 8 bits, por defecto es un puerto Digital y solo hay que configurar los bits como Entrada o Salida por medio del Registro TRISD.

    Puerto E: Este puerto tiene 3 bits y se puede configurar como E/S Digitales o como entradas analógicas.Por defecto es Digital y hay que configurar si son Entradas o Salidas por medio del Registro TRISE.


Luego de la teoría viene la práctica.

Problema 4. Colocamos una resistencia de 220ohms en serie con un LED a la salida del pin RB0, el ánodo del LED se conecta con la resistencia y el cátodo a tierra. Se pide encender el LED.
;Activar el LED del pin RB0. A la salida del Pin RB0 se coloca una
;resistencia en serie con el ánodo del LED y el cátodo del LED a tierra.
    LIST P=16F877A
    INCLUDE<P16F877A.INC>    ;Librería para el PIC16F877A

    ORG        0000H        ;Dirección inicial del Código de Programa
    bsf        STATUS,RP0    ;Cambiando al Banco-1
    bcf        TRISB,0        ;Configurando el pin RB0 como salida
    bcf        STATUS,RP0    ;Regresando al Banco-0

    bsf        PORTB,0        ;Mandando una señal ALTA "1" por RB0 para encender
                        ;el LED
    goto    $            ;Bucle infinito

    END                    ;Fin de Programa.


Problema 5. Encender y Apagar el LED sucesivamente.
;LED del pin RB0 oscila entre ON/OFF
    LIST p=16F877A
    INCLUDE<P16F877A.INC>

    ORG        0000H
    bsf        STATUS,RP0    ;Banco-1
    bcf        TRISB,0        ;RB0 como salida
    bcf        STATUS,RP0    ;Banco-0
REPITE                    ;Etiqueta REPITE
    btfss    PORTB,0        ;Es RB0=1?
    goto    ACTIVAR        ;NO lo es -> salto hasta ACTIVAR
    bcf        PORTB,0        ;SI lo es -> RB0=0 (Apago el LED)
    goto    REPITE
ACTIVAR                    ;Etiqueta ACTIVAR
    bsf        PORTB,0        ;RB0=1 (Enciendo el LED)
    goto    REPITE        ;Salto hasta REPITE

    END                    ;Fin de Programa.


Problema 6. Conteo Binario. Esta vez colocamos un pulsador a la entrada de RB0, se configura para que cada pulso ingrese un "1" al pin RB0. A la salida del Puerto D colocamos 8 LEDs con sus respectivas resistencias de tal manera que se enciendan cuando se mande un "1" por el Pierto D. Se pide encender los LEDs cada vez que se presione el pulsador, de tal manera que se visualize un conteo binario de 8 bits.
;Enciendo LEDs colocados en Puerto D luego de presionar un pulsador colocado
;en RB0. Se visualiza un conteo en binario cada que presionamos el Pulsador.
    LIST p=16F877A
    INCLUDE<P16F877A.INC>

    ORG        0000H
    bsf        STATUS,RP0    ;Banco-1
    bsf        TRISB,0        ;RB0 como entrada
    clrf    TRISD        ;PORTD como salida
    bcf        STATUS,RP0    ;Banco-0
;=========================================
    clrf    PORTD        ;PORTD=00 (Apago todos los LEDs)
REPITE
    btfss    PORTB,0        ;Es RB0=1? (Se presionó el pulsador?)
    goto    $-1            ;NO -> Regreso a la instrucción anterior
    incf    PORTD,1        ;SI -> PORTD=PORTD+1 (Encienden los LEDs)
    btfsc    PORTB,0        ;Es RB0=0? (Se soltó el pulsador?)
    goto    $-1            ;NO -> Regreso a la instrucción anterior
    goto    REPITE        ;SI -> Repito el proceso o bucle
    
    END                    ;Fin de Programa.


Así finalizamos esta clase. Espero haya sido de su agrado.  Book

Bytes.  wav




NOTA: Agregar .INC al nombre de la librería, es decir, debe decir P16F877A.INC dentro de los símbolos <> luego del INCLUDE, yo uso la opción CODE para publicar el código pero por alguna razón este elimina la extensión INC del nombre de la librería. Agregenle la extensión y vuelvan a compilar sus programas. Usen la opción DESCARGAR para bajar el código y luego le cambian la extensión .txt por .asm, finalmente abren el código con el MPLAB y lo agregan a su proyecto. Suerte.

  




____________
Comparte el conocimiento !!!

Si lo oigo, lo olvido; Si lo veo, lo recuerdo; Si lo hago, lo entiendo.
Proverbio.


Just Burz
Diario del Ingeniebrio
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Clase 04. Llamadas a rutinas y Configuración de los FUSES. 
 
En esta clase entenderemos el llamado a rutinas usando la instrucción CALL y su diferencia con los saltos GOTO. Luego para finalizar explicaré la configuración de los famosos FUSES o palabra de Configuración que se presentan cuando queremos programar nuestro PIC y no sabemos como configurarlos para un correcto grabado.

Llamado a Rutinas

Dentro del set de instrucciones de los microcontroladores PIC encontramos 2 instrucciones de salto los cuales son: GOTO y CALL, ambas instrucciones nos permiten "saltar" o desplazarnos a otra dirección de código de nuestro programa, pero con algunas diferencias, mientras que con GOTO nos desplazamos a una posición del programa o hacia una etiqueta, con CALL nos desplazamos hacia una posición de programa donde se encuentra una rutina (conjunto de instrucciones) y para regresar usamos la instrucción RETURN, en esta operación se ve involucrado el uso de la Pila.

Ejemplo: Uso del GOTO

instruccion1
instruccion2
ETIQUETA
instruccion3
instruccion4
.
.
.
instruccionN
GOTO ETIQUETA
.
.

Explicación: Las instrucciones 1,2,3,..N se ejecutan y luego del GOTO el contador de programa PC se dirige hasta la posición ETIQUETA y se vuelven a ejecutar las instrucciones 3,4,5,...N.

NOTA: PC o Contador de Programa es un registro especial de 13 bits que se encarga de direccionar la memoria de código, almacena la posición de la instrucción a ejecutar. Se observa mejor su funcionamiento usando el MPLAB.

Ejemplo: Uso de CALL

instruccion1
instruccion2
CALL RUTINA1
instruccion4
instruccion5
.
.
.
RUTINA1
instruccionN
instruccion(N+1)
.
.
RETURN

Explicación: Se ejecutan las instrucciones 1 y 2, luego se desplaza el PC hasta la RUTINA1 pero se almacena en la Pila la posición de la instrucción 4 (PC+1), luego se ejecutan las intrucciones que están dentro de la RUTINA1 y cuando encuentra la instrucción RETURN, el PC lee la Pila para saber donde debe regresar, en este caso regresa a la instrucción 4 la ejecuta y continua ejecutando las que siguen.

NOTA: La Pila es un segmento de memoria de 8 niveles donde se almacena las posiciones de retorno cada vez que se usa la instrucción CALL, esto significa que no se puede usar más de 8 llamadas a rutinas una dentro de otra, es decir, dentro del llamado de una RUTINA llamo a otra RUTINA y así sucesivamente; de superar el límite se desbordará la Pila y el programa hará cualquier cosa menos lo que queremos, ya que regresará a cualquier dirección de memoria de código.

Problema 7. Probando el funcionamiento de la instrucción CALL. En MPLAB usar la herramienta Hardware Stack para ver el comportamiento de la Pila al usar CALL. (Ver tutorial del MPLAB).
;Prueba de CALL
    LIST P=16F877A
    INCLUDE    <P16F877A.INC>

;Los números que aparecen como comentario al final de cada instrucción, indican
;el valor del contador de programa PC.
;Las instrucciones "nop" no hacen nada en especial más que gastar un ciclo de intrucción

    ORG 0000H
    nop                    ;0
    call    RUTINA1        ;1
    nop                    ;2
    call    RUTINA2        ;3
    nop                    ;4
    goto    $            ;5
;****************************************
RUTINA1
    nop                    ;6
    return                ;7
;****************************************
RUTINA2
    nop                    ;8
    call    RUTINA1        ;9
    call    RUTINA3        ;A
    nop                    ;B
    return                ;C
;****************************************
RUTINA3
    return                ;D
    
    END


OBS: La memoria de programa del PIC16F877A es de 8k y el PC es un registro de 13 bits precisamente equivalente a 8k para poder abarcar toda la extensión de la memoria; pero las instrucciones GOTO y CALL son de 11 bits, con lo cual solo abarcan 2k de memoria, en teoría de esta forma no se podría saltar desde la posición inicial de la memoria hasta la final; pero anteriormente hemos visto que la memoria se divide en bancos de 2k, es cuestión de seleccionar el banco adecuado e indicar la posición del salto. Eso se hace con ayuda del registro PCLATH, pero se verá más adelante, por ahora nuestros programas son muy pequeños y no involucran más de 2k de memoria, así que aún no es motivo de preocupación.

Palabra de Configuración (FUSES)

Luego de hacer un programa es lógico que queramos grabarlo en nuestro PIC para poder probar su funcionamiento, para esto existen infinidad de grabadores y softwares que nos permiten hacer esta tarea. Una vez grabado el programa muchas veces nos damos con la sorpresa que no funciona nuestra aplicación y en muchos casos se debe a que no configuramos antes el software para grabar el PIC, y nos dicen que se trata de los FUSES, que debemos configurarlos, a que se refieren?

Bueno, los PIC's incluyen en una posición reservada de memoria (2007H) la famosa Palabra de Configuración y a la cual solo se accede durante la grabación. El como configuremos este registro determinará las características de funcionamiento del PIC.

Palabra de Configuración:

/ CP1 / CP0 / DEBUG / --- / WRT / CPD / LVP / BODEN / CP1 / CP0 / PWRTE# / WDTE / FOSC1 / FOSC0 /
- 13  -- 12 --    11    -- 10 --  9  --   8  --  7   --     6   --   5  --   4   --     3    --     2    --      1   --    0   -- bits

CP1-CP0: Código de protección de memoria de programa. Si no están activos cualquiera puede leer nuestro progama que grabamos en la memoria. Se suele activar solo cuando tienes una aplicación final que deseas vender y no quieres que lean tu código.

DEBBUG: Modo Depurador en Circuito. Se usa cuando se tiene herramientas de Emulación como el ICD2 que combinado con el MPLAB permiten Emular una aplicación directamente en Hardware.

WRT: Permiso para escritura en Modo FLASH. Se usa cuando en nuestro programa accedemos a la memoria de datos EEPROM.

CPD: Código de Proteccíon de la memoria EEPROM de Datos. Es como nuestro password en caso de querer proteger esa parte de la memoria.

LVP: Bit de Permiso para Programación en Bajo Voltaje. Se usa con algunos modelos de PIC's sobretodo con los LF que trabajan con voltajes de 3V hasta 6V.

BODEN: Bit de Permiso para el Reseteo por Caída de Tensión.

PWRTE#: Bit de Permiso para el Timer de conexión de alimentación. Se usa para resetear el PIC cada vez que se conecta la fuente de alimentación de nuestra aplicación.

WDTE: Bit de Permiso del Timer del Perro Guardián. Se activa cuando se usa el Perro Guardián o WDT en nuestras aplicaciones, se verá más adelante.

FOSC1-FOSC0: Sirve para elegir el tipo de Xtal que usamos. LP (Baja potencia, de 35 a 200kHz), XT (Estándar, de 100kHz a 4MHz), HS (Alta Velocidad, más de 4MHz), RC (Cuando usamos una Resistencia y un Condensador en vez de un Xtal).

La palabra de configuración se puede configurar desde el programa de grabación o desde el código de programa.

En el WinPIC800 para el caso del PIC16F877A yo lo configuro de esta forma:
Image

En caso de querer configurar directamente desde nuestro código de programa, deberemos agregar una línea de código como esta:
LIST    P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG  _BODEN_OFF&_CP_OFF&_WRT_ENABLE_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF
;resto del programa...

de esta manera nos aseguramos de tener configurados los FUSES usemos el software que usemos (Ese código hace lo mismo que la configuración en WinPIC800 que mostramos arriba).

Eso es todo por hoy, espero haya sido de su agrado.

La próxima clase, haremos rutinas de retardos con bucles.

Bytes.  Mr. Green
  




____________
Comparte el conocimiento !!!

Si lo oigo, lo olvido; Si lo veo, lo recuerdo; Si lo hago, lo entiendo.
Proverbio.


Just Burz
Diario del Ingeniebrio
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: PIC16F877A 
 
hOLA bURZ,
me ha parecido un buen turorial, sin embargo., no c porque pienso que que un microcontrolador a mas patas, mas dificil, pero mayor capacidad. Mas bien me gustaria ver los registros de configuracion de este micro (por ejemplo para configurar el conversor AD o el bus I2C), si es que se encuentran en la biblioteca, dejame decirte que he intentado entrar pero el servidor de la pagina dice que no estoy permitido....bueno....
Otra cosa que observo en estos PIC (de la misma familia que este creo) es que tienen una cualidad llamada "self-programming",logicamente literalmente seria "autoprogramacion"....sin embargo no lo se, me podrias ayudar????
gracias
chau Nerd
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: PIC16F877A 
 
Hola
Tengo un problema con el programa icprog
pues cuando cargo el archivo .hex
me dice "el fichero no contiene un valor ID para el dispositivo"
y no se que pueda estar pasando
asi esta el comienzo del progrma
    LIST        p=16F877A, f=INHX32
    INCLUDE        "P16F877A.INC"
    __CONFIG  _BODEN_OFF&_CP_OFF&_WRT_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC&_DEBUG_OFF&_CPD_OFF&_LVP_OFF

    errorlevel      -302    ;Eliminate bank warning
...............
(sigue)
si alguien sabe por favor deme una ayuda Tick
gracias
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: PIC16F877A 
 
Hola neggo:

prueba de esta manera

LIST P=16F877A, F=INHX32
INCLUDE <P16F877A.INC>
__CONFIG _BODEN_OFF & _CP_OFF & _WRT_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF

ERRORLEVEL 1;-302 ;Eliminate bank warning


Suerte.  Cool

Burz.

PD. Haz este tipo de preguntas abriendo un nuevo tema, para que este se conserve como tal; te recomiendo que te presentes en la sección PRESENTACIÓN.
  




____________
Comparte el conocimiento !!!

Si lo oigo, lo olvido; Si lo veo, lo recuerdo; Si lo hago, lo entiendo.
Proverbio.


Just Burz
Diario del Ingeniebrio
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Mostrar mensajes anteriores:
Resumen de Valoraciones:
Media de Valoración Valoración Mínima Valoración Máxima Número de Valoraciones
5.96 1 10 27
Ver Información Detallada
Elegir Valoración: 
Publicar Nuevo Tema  Responder al Tema   Página 1 de 5
Ir a la Página 1, 2, 3, 4, 5  Siguiente

Usuarios navegando en este Tema: 0 Registrados, 0 Ocultos y 0 Invitados
Usuarios Registrados conectados: Ninguno


 
Lista de Permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No Puede descargar archivos
Puede enviar eventos al Calendario