0% encontró este documento útil (0 votos)
81 vistas47 páginas

Microcontroladores Programacion

Este documento describe los tipos de datos, variables y operadores soportados por el compilador CCS para microcontroladores PIC. Incluye una lista de los tipos de datos comunes como int, float y char junto con su tamaño y rango de valores. También explica las reglas para declarar variables y los diferentes tipos de operadores aritméticos, relacionales, lógicos y de bits. Por último, resume las principales instrucciones de control de flujo como if-else, while y for.

Cargado por

Odain Quiroz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
81 vistas47 páginas

Microcontroladores Programacion

Este documento describe los tipos de datos, variables y operadores soportados por el compilador CCS para microcontroladores PIC. Incluye una lista de los tipos de datos comunes como int, float y char junto con su tamaño y rango de valores. También explica las reglas para declarar variables y los diferentes tipos de operadores aritméticos, relacionales, lógicos y de bits. Por último, resume las principales instrucciones de control de flujo como if-else, while y for.

Cargado por

Odain Quiroz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 47

Microcontroladores

Programación en microcontroladores PIC


Tipos de datos de C-Compiler
Tipo Tamaño Rango Descripción
Int1 1 bit 0a1 Entero de 1 bit

Short
Int 8 bit 0 a 255 Entero

Int8
Int16 16 bit 0 a 65,535 Entero de 16 bit

Long
Int32 32 bit 0 a 4,294,967,295 Entero de 32 bit
Float 32 bit 1.5x10-45 a 3.402x1038 Coma flotante
Char 8 bit 0 a 255 Carácter
Void - - Sin valor
Signed Int8 8 bit -128 a +127 Entero con signo
Signed Int16 16 bit -32,768 a +32,767 Entero largo con signo
Signed Int32 32 bit -2147483648 a +2147483647 Entero 32 bits con signo
Variables
• Se debe declarar obligatoriamente, de acuerdo a las reglas ANSI del lenguaje C

TIPO NOMBRE [=VALOR INICIAL];

• TIPO: Se refiere al tipo de datos


• NOMBRE: Un nombre válido de acuerdo a las normas ANSI del lenguaje

Ejemplo:
• int voltaje = 20;
• int1 LED;
Reglas de Variables
• Deben empezar con una letra o guión bajo. Ejemplo: amperios, _7segmentos;

• No debe empezar con números o caracteres especiales. Ejemplos: 3voltios, 7segmentos, -


voltaje, %contador, &luz( contienen números y caracteres especiales que no admite las
variables)

• No debe tener el mismo nombre que una “palabra reservada” del lenguaje. Ejemplo: for,
if, int, while, do, entre otras son palabras reservadas del lenguaje que no pueden ser
usadas.

• No pueden llevar tildes. Ejemplo: Número, ecuación, lección, dígito; son palabras que
tienen tilde y no deben usarse.

• No debe existir espacios en blanco. Ejemplo: la ciudad. Hay un espacio en blanco entre
las palabras la y ciudad. En esta forma no se puede utilizar.
Variables
#include <18F4550.h>
#fuses HS
#use delay (clock=12000000)
Las variables pueden ser de tipo
LOCAL o GLOBAL. Las variables
int puertos; //variable global
locales se utilizan sólo en la función
void main()
donde se encuentran declaradas y {
las globales en todas las funciones int8 voltaje; //variable local
del programa. Ambas variables }
deben declararse antes de cualquier void función (void)
función y fuera de ella. Las variables {
globales son puestas a cero cuando float res ; //variable local
se inicia la función principal main (). }
Operadores
Los operadores aritméticos que soporta el compilador CCS.

Símbolo Significado
+ Suma
- Resta
* Multiplicación
/ División
% Módulo, resto de una división entera
++ Incremento
-- Decremento
Sizeof Determina el tamaño, en bytes de un operando
De Asignación
Símbolo Significado
+= Asignación de suma: m +=n, es lo mismo m= m+n
-= Asignación de resta: m -=n, es lo mismo m= m-n
*= Asignación de multiplicación: m *=n, es lo mismo m= m*n
/= Asignación de división: m /=n, es lo mismo m= m/n
%= Asignación del resto de la división: m %=n, es lo mismo m= m%n
<<= Asignación de desplazamiento a la izquierda: m <<=n, es lo mismo m= m<<n

>>= Asignación de desplazamiento a la derecha: m >>=n, es lo mismo m= m>>n


&= Asignación AND de bits: m &=n, es lo mismo m= m&n
|= Asignación OR de bits: m |=n, es lo mismo m= m|n
^^= Asignación de OR exclusivo de bits
^= Asignación de suma: m ^=n, es lo mismo m= m^n
~= ~= Asignación de negación de bits
Relacionales
Compara dos operandos y da un resultado entero: 1 (verdadero); 0 (falso).

Símbolo Significado

<  Menor que

>  Mayor que

>= Mayor o igual que


<= Menor o igual que
== Igual
!= Diferente
?: Expresión condicional
Lógicos o booleanos De bits
Estos operadores permiten actuar sobre
Al igual que los operadores relacionales, los operandos a nivel de bits y sólo
éstos devuelven 1 (verdadero), 0 (falso) pueden ser de tipo entero (incluyendo
tras la evaluación de sus operandos. el tipo char)

Símbolo Significado Símbolo Significado

~ Complemento a 1 (Inversión)

! NOT & AND

&& AND ^^ XOR

|| OR | OR
Operadores de desplazamiento

Estos operadores utilizan dos


operandos enteros (tipo int): el primero es
El formato es: m Operando n.
el elemento a desplazar y el segundo, el
Donde: m, es el elemento a desplazar.
número de posiciones de bits que se
desplaza.

Operando, desplazamiento a la izquierda <<, o desplazamiento


a la derecha >>, y n, indica el número de posiciones que se
>>  Desplazamiento a la derecha. desplazarán los bits.
<<  Desplazamiento a la izquierda
Operadores de desplazamiento
Ejemplo: En una variable x se almacena el número binario 111000101. Si se realizan las
operaciónes indicadas, cuáles son los nuevos valores de x para cada caso.

a. x= 11000101 << 1 En todos los casos los “unos” son reemplazados por “ceros”,
b. x= 11000101 << 2 desde el bit menos significado y los bits que superan la
c. x= 11000101 << 3 capacidad del entero del bit más significativo se desbordan y
d. x= 11000101 >> 1 desaparecen
e. x= 11000101 >> 2
f. x= 11000101 >> 3
Operadores de desplazamiento

El 1 después del signo << indica que los bits se desplazarán


x= 11000101 << 1 una posición a la izquierda. Por tanto, el nuevo valor de x es
10001010. En este caso es lo mismo que realizar una
multiplicación al número binario por 2.

El 2 después del signo << indica que los bits se desplazarán


x= 11000101 << 2 dos posiciones a la izquierda. Por tanto, el nuevo valor de x es
00010100. En este caso es lo mismo que realizar una
multiplicación al número binario por 4.

El 3 después del signo << indica que los bits se desplazarán tres
posiciones a la izquierda. Por tanto, el nuevo valor de x es
x= 11000101 << 3 00101000. En este caso es lo mismo que realizar una multiplicación
al número binario por 8
Operadores de desplazamiento
Para el desplazamiento a la derecha, los “unos” son reemplazados por “ceros” desde el bit más
significativo y al superar la capacidad del número el bit menos significativo desparece.

El 1 después del signo >> indica que los bits se desplazarán una
x= 11000101 >> 1 posición a la derecha. Por tanto, el nuevo valor de x es 01100010. En
este caso es lo mismo que realizar una multiplicación al número
binario por 2.

El 2 después del signo >> indica que los bits se desplazarán dos
x= 11000101 >> 2 posiciones a la derecha. Por tanto, el nuevo valor de x es 00110001.
En este caso es lo mismo que realizar una multiplicación al
número binario por 4.

El 3 después del signo >> indica que los bits se desplazarán


x= 11000101 >> 3 tres posiciones a la derecha. Por tanto, el nuevo valor de x es
00011000. En este caso es lo mismo que realizar una
multiplicación al número binario por 4.
Instrucciones de control ( condiciones)
Las instrucciones de control para los programas con condiciones o que necesiten bucles o lazos repetitivos
que admite CCS, son los mismos del ANSI C original:

• IF - ELSE
• WHILE
• DO – WHILE
• FOR

• RETURN
• BREAK
• GOTO
• SWITCH – CASE
• CONTINUE
Instrucciones de control ( condiciones)
IF – ELSE
Sirve para tomar decisiones en un
programa.

Ejemplo
Si la condición es
if (condición){ if (x==1) { verdadera (True o 1) se
Instrucción1; ejecuta la Instrucción1.
} bit_set(port_b,0);
Else { si es falsa (False o 0) se
}
Instrucción2; ejecuta la instrucción2
else {
}
bit_set(port_b,1);

}
Instrucciones de control ( condiciones)
WHILE DO WHILE
Repite una serie de instrucciones, mientras Con DO WHILE la expresión se evalúa al final de las instrucciones
la expresión sea cierta (TRUE o 1). do
while (expresión) {
{ instrucciones;
instrucciones; }
} while(expresión)

Se puede ejecutar un bucle sin fin. Las instrucciones primero se ejecutan y se evalúa la
expresión al final, si ésta resulta cierta (TRUE), se repite el bucle
while (1) hasta que la condición sea falsa (FALSE).
{
instrucciones; También con DO WHILE, se puede ejecutar un bucle
} sin fin. Por ejemplo:
O también utilizando el formato: do
{
while (TRUE) instrucciones;
{ }
instrucciones; while(1);
}
Instrucciones de control ( condiciones)
FOR
Es el más usado en la mayoría de lenguajes de
programación. En CCS es similar al formato del Un bucle sin fin usando FOR se genera mediante el siguiente
ANSI C original, formato:

for ( ; ; )
for (valor_inicial, valor_final, incremento) {
{ instrucciones;
instrucciones; }
}

Ejemplo: Las instrucciones se repiten mientras la variable j


sea menor o igual a 9. La variable j se incrementa
for (j=0; j<=9;++j) su valor en 1 cada vez que se ejecute una
instrucción.
Funciones de retardo Esta función realiza retardos del valor especificado en la variable
tiempo.
El valor es un int16 (0-65535) en milisegundos. Ejemplo:
delay_ms(tiempo)
delay_ms(500); //genera un retardo de 500 ms.

Los retardos conseguidos con esta función son


especificados en la variable tiempo en microsegundos y
es un int16 (0-65535). Ejemplo:
delay_us(tiempo)
delay_us(500); //genera un retardo de 500 us.
Funciones de retardo

Con esta función, se realizan retardos de acuerdo al número de


ciclos de máquina especificado en la variable contador. Los valores
van desde 1 a 255.
Un ciclo de máquina o instrucción es igual a cuatro ciclos de reloj.
delay_cycles(contador) Ejemplo:
delay_cycles( 5 ); // retardo de 5 ciclos instrucción

Es decir, si el microcontrolador trabaja con un oscilador de 4 MHz, el


ciclo de instrucción o de máquina (CM) será igual:
CM= 4*1/4000000Hz = 1us
Por tanto, en el ejemplo anterior se ha obtenido un retardo de 5 us.
Familias de microcontroladores PIC
Microchip produce diferentes dispositivos que según el número de terminales lo clasifica en:

Gama baja
• Microcontroladores de 8 bits, de bajo coste, de 6 pines y bajas prestaciones. Algunos PIC’s de las serie
PIC10 se conocen como gama enana.
• PIC12: microcontroladores de 8 bits, de bajo coste, de 8 pines y bajas prestaciones.

Gama media
• PIC16: microcontroladores de 8 bits, con gran variedad de número de pines y prestaciones medias.

Gama alta
• PIC17 y PIC18: microcontroladores de 8 bits, con gran variedad de número de pines y prestaciones
medias/altas.
• PIC24: microcontroladores de 16 bits.
• PIC32: microcontroladores de 32 bits.
• dsPIC’s. Microcontroladores especializados para el procesamiento de señales digitales.
Familias de microcontroladores PIC
CARACTERÍSTICAS PICF16F84A PIC16F627A PIC16F628A PIC16F648A PIC16F88
Memoria FLASH
(Words) 1024 1024 2048 4096 4096
Memoria EEPROM
(bytes) 64 128 128 256 256
Memoria SRAM
68 224 224 256 368
(bytes)
Puertos I/O 2 2 2 2 2
Pines de I/O 13 16 16 16 16
Oscilador Externo Interno/Externo Interno/ Externo Interno/Externo Interno/Externo

Fuentes de interrupción 10 10 10 10 12
AUSART, SSP
Comunicación serial USART USART USART USART
(SPI e I2C)
Comparadores - 2 2 2 2
7 canales
Conversores AD - - - -
mulltiplexados
CARACTERÍSTICAS PIC16F877A PIC16F887
Frecuencia Máxima 20MHZ 20MHZ
Memoria FLASH (Words) 8192 8192
Memoria EEPROM (bytes) 256 256
Memoria SRAM (bytes) 368 368
Puertos I/O 33 35
Timer (8/16 bits) ½ ½
Oscilador Externo Interno/Externo
Comparadores 2 2
Conversores AD 8 canales (10 bits) 14 canales (10 bits)
Frecuencias INTOSC - 31 KHZ-8 MHZ
Fuentes de interrupción 15 15
ECCP/CCP 0/2 ½
Comunicación serial USART/MSSP EUSART/MSSP
Modos de oscilador 4 8
Los fuses
Todos los microcontroladores PIC tienen incorporados circuitos especiales que se pueden activar o desactivar
según los requerimientos de la aplicación o algún caso en particular.

Los fuses permiten entre otras cosas seleccionar


• El oscilador interno o externo que se va utilizar,
• La frecuencia de trabajo del sistema,
• El uso del Master Clear (reset del sistema), etc.

Los fuses internamente en el microcontrolador son controlados por registros internos y que se pueden habilitar o
deshabilitar mediante software o por medio del equipo programador. CCS provee de instrucciones de alto nivel
que permiten de forma transparente configurar los FUSES (fusibles)
Los fuses
FUSE DESCRIPCIÓN
LP Low power osc < 200 kHz
XT Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
HS High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
RC Resistor/Capacitor Osc with CLKOUT
EC External clock with CLKOUT
EC_IO External clock
H4 High speed osc with HW enabled 4X PLL
RC_IO Resistor/capacitor osc
RC Resistor/Capacitor Osc with CLKOUT
INTRC_IO Internal RC Osc, no CLKOUT
INTRC Internal RC Osc
NOFCMEN Fail-safe clock monitor disabled
FCMEN Fail-safe clock monitor enabled
IESO Internal External Switch Over mode enabled
NOIESO Internal External Switch Over mode disabled
PUT Power up timer
NOPUT No power up timer
BROWNOUT Reset when brownout detected
Configuración del reloj
La mayoría de los microcontroladores PIC de la familia 16F y 18F tienen incorporado un sistema
de reloj para ser utilizado según las necesidades del diseño. El hardware de control del oscilador es el
registro OSCCON (Oscillator Control Register) y el registro oscilador de ajuste OSCTUNE (Oscillator
Tuning Register), se utiliza para ajustar frecuencia interna vía software.
Tipos de osciladores:

• XT Crystal / Resonador (se usa para cristales <= 4 MHZ).


• HS alta velocidad Crystal / Resonador (>4MHZ).
• HSPLL alta velocidad Crystal / Resonador con PLL activado.
• EC reloj externo con FOSC / 4 de salida.
• ECIO reloj externo con I / O en RA6.
• ECPLL Reloj externo con PLL Activado y FOSC / 4 Salida en RA6.
• ECPIO Reloj externo con PLL habilitado, I/O en RA6.
• INTHS oscilador interno utilizado como
• Microcontroladores fuente de reloj, HS
Configuración del reloj

• Oscilador utilizado como USB Fuente de reloj


• INTIO oscilador interno utilizado como:
• Microcontrolador fuente de reloj, EC
• Oscilador utilizado como fuente de reloj USB,
• I/O digital en RA6
• INTCKO oscilador interno utilizado como
• Microcontrolador fuente de reloj, EC
• Oscilador utilizado como fuente de reloj USB,
• FOSC / 4 Salida en RA6
Configuración del reloj
Para un pic18f4550 , el oscilador se conecta en los pines RA6/OSC2/CLKO y OSC1/CLK1.
Configuración del reloj
Configuración del oscilador

La instrucción para utilizar el tipo de oscilador es:


#fuses TIPO DE OSCILADOR

Donde el TIPO DE OSCILADOR hace referencia a los descritos en este punto.


Ejemplo:
#fuses HS
#use delay (clock=12000000)

Se indica al microcontrolador que utilizará un oscilador externo de alta velocidad (HS)


con un cristal de 12000000 Hz. Para indicar directamente la frecuencia en MHz, se puede
utilizar la notación: #use delay (clock=12M)
Configuración del reloj
Para el caso que utilicemos la fuente de reloj interno del microcontrolador, se utilizaría así:
#fuses INTRC_IO
#use delay (clock=8M)
Gestión de puertos
En el compilador CCS se pueden gestionar los puertos de dos formas:

• Definiendo la posición de la memoria RAM como una variable C para los


registros TRISX y PORTX.

• Usando la directivas específicas del compilador (#USE FAST_IO, #USE


FIXED_IO, #USE STANDARD_IO)

Usando la memoria RAM


Las posiciones de memoria que utilizan los registros TRISX y PORTX del PIC18 se identifican así:
#BYTE tris_n = Dir
#BYTE port_n = Dir

Donde, n es el nombre del puerto (A, B, C, D, E) y la variable Dir la dirección en la memoria RAM.

Ejemplo:
#BYTE tris_b = 0xF93
#BYTE port_b = 0xF81
Gestión de puertos
Definidas las variables se pueden controlar los puertos por comandos de
asignación.
Ejemplos:
• tris_a = 0xFF ; Define todo el puerto a como entrada
• tris_b = 0x00; Define todo el puerto b como salida
• tris_d = 0x0F; Define los 4 primeros bits del puerto d como entrada y los 4
bits (MSB) como salida.

Luego se escribe o lee los datos en el puerto.

Escritura del puerto:


port_b = 0x0B; El dato 1011, se coloca en el puerto b.

Lectura del puerto:


Contador = port_a; El dato del puerto a se asigna a la variable Contador.
Ejemplo1: Prender y apagar un LED conectado en el puerto B0
Pasos :

1. En el programa primero debemos definir el microcontrolador a utilizarse, para lo cual se utiliza la directiva:
#include <18F4550.h> //Librería para usar el PIC18F4550.

2. Se procede a configurar los fusibles. Dependerá de la aplicación que se esté desarrollando, pero el fusible que
siempre se debe incluir es el reloj que se utilice. En este caso definimos un cristal de alta velocidad HS
#fuses HS,NOWDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.

3. Se define la frecuencia del oscilador:


#use delay (clock=12000000) // FOSC =12MHz.

4. Se define el bit a utilizar mediante la instrucción


#bit b0= 0xF81.0

5. Se establece l registro TRISB que está definido en la localidad 0xF93 como indica en las hojas técnicas del
microcontrolador PIC18F4550
#byte tris_b = 0xF93
Ejemplo1: Prender y apagar un LED conectado en el puerto B0
Otro aspecto importante que se debe tomar en cuenta dentro de la programación es la definición del
puerto como salida. La instrucción tris_b = 0x00; configura el puerto como salida, para que permita
establecer los niveles lógicos de 0 y 1.
#include <18F4550.h> //Librería para usar el PIC18F4550.
#fuses HS, NOWDT, NOPROTECT, PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=12000000) // FOSC =12MHz.
#byte tris_b = 0xF93 //Define el registro tris b en la localidad 0xF93.
#bit b0= 0xF81.0 //Define el bit b0 en la localidad 0xF81.0.
void main() //Función principal main.
{
disable_interrupts (GLOBAL); //Deshabilita las interrupciones globales
tris_b = 0x00; //Configura el puerto B como salida.
do{ //Inicio del bucle infinito.
b0= 0; //El puerto RB0 = 0.
delay_ms( 500 ); //Retardo de 500 ms.
b0 =1; //El Puerto RB0 = 1.
delay_ms(500); //Retardo de 500 ms.
} while ( TRUE ); //Bucle infinito.
} //Fin del bucle main.
Ejemplo1: Prender y apagar un LED conectado en el puerto B0
Ejemplo2: Prender y apagar un LEDs conectado en el puerto B0

#include <18F4550.h> //Librería para usar el PIC18F4550.


#fuses HS,NOWDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=12000000) / / FOSC = 12MHz.
#byte port_b = 0xF81 //Identificador para el puerto b en la localidad 0xF81.
#byte tris_b = 0xF93 //Identificador para el registro tris b en la localidad 0xF93.

void main() //Función principal main.


{ disable_interrupts(GLOBAL); //Deshabilita todas las interrupciones globales.
tris_b = 0x00; //Configura todo el puerto B como salida.
port_b = 0x00; // Asigna a todo el Puerto B cero (0).
do{ // Hace o empieza el bucle infinito.
port_b = 0xFF; //Coloca todo el puerto B en 1.
delay_ms( 500 ); //Retardo de 500 ms.
port_b = 0x00; //Coloca todo el puerto B en 0.
delay_ms(500); //Retardo de 500 ms.
} while ( TRUE ); //Bucle infinito.
} //Fin del bucle main.
Ejemplo2: Prender y apagar un LEDs conectado en el puerto B0
Ejemplo 3 . Secuencia de encendido y apagado de LEDS.
El ejercicio siguiente, consiste en activar y desactivar los LEDS que están conectados al puerto uno a uno
empezando desde el puerto RB0 hasta llegar al RB7 en forma indefinida.

Para realizar el programa, se utiliza la siguiente lógica de programación:


• Inicializar el puerto B con (00000001), para activar el LED que está
conectado en RB0.
• Mostrar este valor durante un tiempo (100 ms).
• Desplazar el valor del puerto una posición a la izquierda (port_b = port_b<<1).
• Repetir este proceso hasta que llegue el 1 al puerto RB7. Mediante el
bucle for se controla que el bit 1 que está en puerto RB0, se desplace hasta llegar al puerto RB7. Como el
puerto tiene ocho bits, entonces el desplazamiento se debe repetir 7 veces. La instrucción que realiza esta
función es: for (i=1;i<=8;++i).
• Al llegar el bit a la posición 7 el valor del puerto será 128 (27=128). A partir de este valor, en este punto,
el desplazamiento se realiza a la derecha (port_b=port_b>>1) hasta que el bit llegue a RB0.
• Repetir el proceso.
Ejemplo 3 . Secuencia de encendido y apagado de LEDS.
#include <18f4550.h> //Librería para usar el PIC18F4550
#fuses HS,NOWDT,NOPROTECT,PUT, NOPBADEN //Configuración de fusibles.
#use delay (clock=12000000) //FOSC=12MHz
#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81.
int i; //Variable i tipo int para el bucle FOR.

void main(void) { //Función principal main


set_tris_b(0x00); //Puerto B como salida
disable_interrupts(GLOBAL); //Todas las interrupciones desactivadas

while(TRUE) //Bucle infinito


{ /Inicio del bucle.
port_b=0x01; //Puerto RB0 = 1
for (i=1;i<=8;++i) //Realiza el bucle para i = 0 hasta que sea menor o igual 8 en
{
delay_ms(100); //Retardo de 100 ms
port_b= port_b<<1; //Desplaza el valor del puerto a la izquierda en 1
}
Ejemplo 3 . Secuencia de encendido y apagado de LEDS.

port_b= 128; //port_b = 128.


for (i=1;i<=8;++i) //Realiza el bucle para i = 0 hasta que sea
menor o igual
//8 en incrementos de 1.
{
delay_ms(100); //Retardo de 100 ms
port_b= port_b>>1; //Desplaza el valor del puerto a la derecha
en 1
}
}
}
Ejemplo 4: contador de 0 a 9 con PIC .
Ejemplo 4: contador de 0 a 9 con PIC .
Ejemplo 5 : Dispositivo de salida Display 16x2 .
Ejemplo 5 : Dispositivo de salida Display 16x2 .
Ejemplo 5 : Dispositivo de salida Display 16x2 .
Ejemplo 6 : configurar puesto analogico – digital .
La resolución de un microcontrolador PIC
depende del voltaje de referencia que se
establezca en el dispositivo.
Generalmente si no se define este voltaje de
referencia el dispositivo usará el voltaje de
alimentación como siendo la referencia (es
decir 5v).

Por lo tanto, cuando la señal análoga sea 0V, a


esta señal le corresponde un número de 0.
Cuando sea 2.5V le corresponde un número de
512. Si es 5V, le corresponde un número de
1023. Claro está, que puede tomar cualquier
valor entre 0-1023.
Ejemplo 6 : configurar puesto analógico – digital .
LCD1
LM016L
U1
X1 13
OSC1/CLKIN RB0/INT
33
CRYSTAL 14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5

VDD
VSS

VEE
5 39

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
RV1 RA3/AN3/VREF+ RB6/PGC

E
6 40
RA4/T0CKI/C1OUT RB7/PGD
10K 7
RA5/AN4/SS/C2OUT
15

1
2
3

4
5
6

7
8
9
10
11
12
13
14
RC0/T1OSO/T1CKI
8 16
48%

RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA

D4
D5
D6
D7
RS

E
RW
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
R1 RD0/PSP0
20
E
10K RD1/PSP1 RS
21
RD2/PSP2 RW
22
RD3/PSP3
27
RD4/PSP4 D4
28
RD5/PSP5 D5
29
RD6/PSP6 D6
30
RD7/PSP7 D7
PIC16F877A
Ejemplo 6 : configurar puesto analógico – digital .
# include <16f877a.h>

#device adc = 10 // estable la resolucion que tendra el convertidor


#fuses HS,NOWDT,NOPROTECT,NOPUT,NOLVP,BROWNOUT
#use delay(clock=8M)

#include <lcd.c>

long VOLTAJE_ADC;

void main()
{
lcd_init();
setup_adc_ports(AN0); // CONFIGURA LOS PUERTOS COMO ANALOGICOS
setup_adc(adc_clock_internal); // SELECCIONA EL MODO PARA HACER LA CONVERCION SI ES RELOJ INTERNO O DIVISORES DE RECUENCIA)

while(true)
{
set_adc_channel(0); // SELECCIONA EL CANAL QUE SE OCUPARA Q VAN DESDE 0 HASTA 7
delay_us(2);
VOLTAJE_ADC = read_adc(); // LEE EL VALOR ANALOGICO EN EL PIN AN0

lcd_gotoxy(1,1);
printf(lcd_putc, "Voltaje: %Lu", VOLTAJE_ADC);
delay_ms(100);

También podría gustarte