LENGUAJE C - MICROCONTROLADORES

58
MPLAB X MPLAB XC8 C COMPILER LENGUAJE C GERMÁN ANDRÉS ZAPATA PUERTA

Transcript of LENGUAJE C - MICROCONTROLADORES

Page 1: LENGUAJE C - MICROCONTROLADORES

MPLAB X

MPLAB XC8 C COMPILER

LENGUAJE C

GERMÁN ANDRÉS ZAPATA PUERTA

Page 2: LENGUAJE C - MICROCONTROLADORES

TIPOS DE DATOS ENTEROS

Page 3: LENGUAJE C - MICROCONTROLADORES

RANGO DE DATOS ENTEROS

Page 4: LENGUAJE C - MICROCONTROLADORES

TIPOS DE DATOS REALES

Page 5: LENGUAJE C - MICROCONTROLADORES

RANGO DE DATOS REALES

Page 6: LENGUAJE C - MICROCONTROLADORES

RANGO DE DATOS REALES

Tipo Rango

FLOAT ±1.17549435082 x 10-38 .. ±6.80564774407 x 1038

DOUBLE ±1.17549435082 x 10-38 .. ±6.80564774407 x 1038

LONG DOUBLE ±1.17549435082 x 10-38 .. ±6.80564774407 x 1038

Page 7: LENGUAJE C - MICROCONTROLADORES

REPRESENTACIÓN

NOTA: Los comentarios se hacen con:

//para una solo línea

/* para iniciar un bloque de comentarios

*/ para finalizar un bloque de comentarios

Page 8: LENGUAJE C - MICROCONTROLADORES

EXPRESIONES Y OPERADORES

LÓGICOS (AND, OR, NOT…)

ARITMÉTICOS (SUMA, RESTA, MÓDULO…)

ASIGNACIÓN (=)

RELACIONALES (MAYOR, MENOR, IGUAL…)

Page 9: LENGUAJE C - MICROCONTROLADORES

OPERADORES LÓGICOS

Operador operación

& AND; compara pares de bits y regresa 1 si ambos son 1’s, de otra

manera regresa 0.

| OR (inclusive); compara pares de bits y regresa 1 si uno o ambos

son 1’s, de otra manera regresa 0.

^ OR (exclusiva); compara pares de bits y regresa 1 si los bits son

complementarios, de otra manera regresa 0.

~ Complemento (unitario); invierte cada bit

<< Corrimiento hacia la izquierda; mueve los bits hacia la izquierda,

descartando el bit mas a la izquierda y asignando ceros al bit a la

derecha.

>> Corrimiento hacia la derecha; mueve los bits hacia la derecha,

descartando el bit mas a la derecha y asignando ceros al bit a la

izquierda.

Page 10: LENGUAJE C - MICROCONTROLADORES

OPERADORES ARITMÉTICOS

Operador Operación

+ Suma

- Resta

* Multiplicación

/ División

% Módulo, regresa el residuo de la división entera (no puede ser usado

con variables flotantes

++ Incremento

-- Decremento

Page 11: LENGUAJE C - MICROCONTROLADORES

OPERADORES RELACIONALES

Operador Operación

== igual

!= no igual (diferente de)

> mayor que

< menor que

>= mayor que o igual a

<= menor que o igual a

Page 12: LENGUAJE C - MICROCONTROLADORES

OPERADORES DE ASIGNACIÓN

Operador Operación

= Asigna el valor a una variable

Page 13: LENGUAJE C - MICROCONTROLADORES

ESTRUCTURAS DE CONTROL

DECISIÓN O SELECTIVAS

if, else, switch (case)

REPETITIVAS (CICLOS)

while, do – while, for

BIFURCACIÓN DE CONTROL

goto, break, return

Page 14: LENGUAJE C - MICROCONTROLADORES

DECISIÓN SIMPLE

if (EXPRESIÓN)

{

INSTRUCCIÓN 1;

INSTRUCCIÓN 2;

…….

}

NOTA: Si sólo hay una instrucción no es necesario colocar llaves { }.

Page 15: LENGUAJE C - MICROCONTROLADORES

IF - ELSE

if (EXPRESIÓN)

{

INSTRUCCIÓN 1;

INSTRUCCIÓN 2;

…….

}

else

{

INSTRUCCIÓN 1;

INSTRUCCIÓN 2;

…….

}

Page 16: LENGUAJE C - MICROCONTROLADORES

DECISIÓN MULTIPLE (CASOS)switch (EXPRESIÓN)

{

case CONST1: INSTRUCCIÓN 1;

break;

case CONST2: INSTRUCCIÓN 2;

break;

…..

default: INSTRUCCIÓN N;

break;

}

Page 17: LENGUAJE C - MICROCONTROLADORES

CICLO WHILE (MIENTRAS)

while (EXPRESIÓN)

{

INSTRUCCIÓN 1;

INSTRUCCIÓN 2;

…….

}

NOTA: Si sólo hay una instrucción no es necesario colocar llaves { }.

Page 18: LENGUAJE C - MICROCONTROLADORES

DO - WHILE (HAGA - MIENTRAS QUE)

do

{

INSTRUCCIÓN 1;

INSTRUCCIÓN 2;

…….

}

while (EXPRESIÓN);

Page 19: LENGUAJE C - MICROCONTROLADORES

CICLO FOR (PARA)

for (EXP1; EXP2; EXP3)

{

INSTRUCCIÓN 1;

INSTRUCCIÓN 2;

…….

}

EXP1: CONDICIÓN INICIAL

EXP2: CONDICIÓN FINAL

EXP3: INCREMENTO O DECREMENTO

Page 20: LENGUAJE C - MICROCONTROLADORES

RETARDOS DE TIEMPO (DELAY)

__delay_ms(tiempo en miliseg.);

__delay_us(tiempo en microseg.);

NOTA: Requiere incluir la librería: <htc.h>

#include <htc.h>

Page 21: LENGUAJE C - MICROCONTROLADORES

PLANTILLA INICIAL

Page 22: LENGUAJE C - MICROCONTROLADORES

EJERCICIOS PROPUESTOS

Page 23: LENGUAJE C - MICROCONTROLADORES

FUNCIONES Las FUNCIONES, SUBPROGRAMAS o SUBRUTINAS son

programas dentro del programa principal, que pueden ser invocadosen cualquier momento desde éste o desde otra función, y permitenrealizar una tarea específica.

DECLARACIÓN DE UNA FUNCIÓN:Las declaraciones de funciones generalmente son especificadas por: Un nombre único: nombre de la función con el que se identifica y se

distingue de otras. No podrá haber otra función con ese nombre. Una lista de parámetros(datos de entrada): especificación del

conjunto de argumentos (pueden ser cero, uno o más) que la funcióndebe recibir para realizar su tarea.

Un tipo de dato de retorno: tipo de dato del valor que la funcióndevolverá al terminar su ejecución.

El código u órdenes de procesamiento: conjunto de órdenes ysentencias que debe ejecutar la subrutina.

Page 24: LENGUAJE C - MICROCONTROLADORES

FUNCIONESint A,B,C;

int suma(int x, int y);{int z;z = x + y;return z;}

void main(){

….C = suma(A,B);….

}

Page 25: LENGUAJE C - MICROCONTROLADORES

VECTORES Los vectores son espacios de memoria en los cuales se pueden almacenar

valores que luego serán utilizados en el programa.

Funcionan como las TABLAS en assembler.

Van desde cero hasta el número de elementos menos unoEj: vect[10] : va desde 0 hasta 9

Se definen así:Tipo_de_dato Nombre [#_de_elementos] = {elemento1,elemento2,….elementoN};

Ejemplo:int vect[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67};

Page 26: LENGUAJE C - MICROCONTROLADORES

VECTORESintvect[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67};

int conta;

void main()

{

….

for (conta=0;conta<=9;conta++)

{

PORTB = vect[conta];

__delay_ms(1000);

}

….

}

Page 27: LENGUAJE C - MICROCONTROLADORES

VECTORES

APLICACIONES CON VECTORES:

Display 7 segmentos.

Matrices de LEDS.

Page 28: LENGUAJE C - MICROCONTROLADORES

Visualizan caracteres alfa-numéricos.

Se polarizan con GND y +5V

El contraste se puede manejar con una resistencia a GND.

Se pueden trabajar con 4 u 8 bits de datos.

Manejan el estándar HD44780 de Hitachi.

Solo reciben caracteres ASCII.

NOTA: Hay que copiar los archivos: lcd.h y lcd.c en la carpeta delproyecto, ejemplo: c:\mplabx\lcd\lcd.x

Además el archivo lcd.c que se copio en la carpeta del proyecto

hay que adicionarlo a source files (archivos fuentes) y el archivo lcd.h quese copio en la carpeta del proyecto hay que adicionarlo a header files(archivos cabeza).

PANTALLAS LCD

Page 29: LENGUAJE C - MICROCONTROLADORES

PANTALLAS LCD

Page 30: LENGUAJE C - MICROCONTROLADORES

PANTALLAS LCD

Page 31: LENGUAJE C - MICROCONTROLADORES

PANTALLAS LCD

En el proyecto se debe adicionar:

En Header Files:lcd.h

En Source Files:lcd.c

Page 32: LENGUAJE C - MICROCONTROLADORES

PANTALLAS LCD#include <pic.h>#include <htc.h>#include "lcd.h“ //Se debe adicionar para el manejo del LCD

void main(){

lcd_init();lcd_goto(0); // selecciono la primera línealcd_puts("PRUEBA LCD...");lcd_goto(0x40); // selecciono la segunda línealcd_puts("HOLA MUNDO");

while (1);

}NOTA:lcd_puts(“texto”); //lcd_puts: envía textolcd_putch(variable); //lcd_putch: envía variables (variable+48)=ASCII

Page 33: LENGUAJE C - MICROCONTROLADORES

PANTALLAS LCD

Page 34: LENGUAJE C - MICROCONTROLADORES

TECLADO MATRICIAL

Funcionan como una matriz: por filas ycolumnas

Generalmente se van multiplexando las filas yescaneando las columnas.

Se deben colocar resistencias en las columnas aGND o a +5V, o si el teclado esta en el PuertoB activar las resistencias de pull up.

Se debe incluir la librería “keydr.h” y adicionaral proyecto los archivos: keydr.h, initkey.c ygetckey.c

Page 35: LENGUAJE C - MICROCONTROLADORES

TECLADO MATRICIAL

Descargar el archivo TECLADO.X.rar de lapágina.

Page 36: LENGUAJE C - MICROCONTROLADORES

TECLADO MATRICIAL

Page 37: LENGUAJE C - MICROCONTROLADORES

CONVERSOR ANÁLOGO / DIGITAL (C A/D)

Resolución = Vref/#bits

Típicamente se trabaja con Vref = 5V (también sepuede trabajar con -5V ≤ Vref ≤ +5V)

Para la familia 16F la conversión es de 10 bits(1024)

Resolución = 5V/1024 = 4.88mV/bit

Calculo de #bits: #bits =Vin / Res

#bits = Vin / 4.88mV/bit

Calculo de Voltaje: Vin = #bits * Res

Vin = #bits * 4.88mV/bit

Page 38: LENGUAJE C - MICROCONTROLADORES

CONVERSOR ANÁLOGO / DIGITAL (C A/D)

Registros que lo controlan:

ADCON0

ADCON1

ANSEL

ANSELH

ADRESL

ADRESH

Ver Datasheet

Reg. de control

Ent. y Sal. Análogas o digitales

Resultado de la conversión

Page 39: LENGUAJE C - MICROCONTROLADORES

CONVERSOR ANÁLOGO / DIGITAL (C A/D)

CONFIGURACIÓN TÍPICA:

ADCON0 = 0B11000001;

Reloj = 11 (RC interno 500KHz)

Canal = 0000 = AN0 = RA0

GO = 0 (conversión no iniciada)

ADON = 1 (Módulo C A/D encendido)

Page 40: LENGUAJE C - MICROCONTROLADORES

CONVERSOR ANÁLOGO / DIGITAL (C A/D)

CONFIGURACIÓN TÍPICA:

ADCON1 = 0B10000000;

ADFM = 1 (Justificación a Derecha)

VCFG1 = 0 (Vref- = VSS)

VCFG0 = 0 (Vref+ = VDD)

ANSEL = 0B00000001; //RA0 = ENT. ANALOGA

ANSELH = 0B00000000; //PORTB = DIGITAL

Page 41: LENGUAJE C - MICROCONTROLADORES

CONVERSOR ANÁLOGO / DIGITAL (C A/D)

Ver ejemplo completo en CAD_LCD.X

Page 42: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

Control de velocidad para motores

Control de intensidad luz

Control de potencia de cargas

Muy utilizado en la industria

Fácil configuración (Frecuencia y Ancho delpulso)

Se recomienda opto-acoplar la salida

Page 43: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

Registros que lo controlan:

CCP1CON

PR2

T2CON

CCPR1L

TMR2

Reg. de control

Config. del Periodo

Config. del Ancho del Pulso

Ver Datasheet

Page 44: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

CONFIGURACIÓN TÍPICA:

CCP1CON = 0B00001100;

P1M = 00 (Salida simple – no se va a utilizarpuente H)

DC1B = 00 (Los LSB del Duty en 0)

CCP1M = 1100 (Modo PWM)

Page 45: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

CÁLCULO DEL PERIODO:

PWM Periodo = [(PR2) + 1] * 4 * Tosc * (TMR2 Prescaler)

PR2 = [(PWM Periodo) / (4 * Tosc * TMR2 Prescaler)] – 1

NOTA: Tosc = 1 / Fosc

Ej: Frec. = 10 KHz => PWM Periodo = 1/10KHz = 0.1ms

Fosc = 4MHz => Tosc = 0.25us TMR2 Prescaler = 1

PR2 = 99 NOTA: PR2 ≤ 255

Page 46: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

CONFIGURACIÓN TÍPICA:

PR2 = 99;

T2CON = 0B00000100;

TMR2ON = 1 (Enciende TMR2)

T2CKPS = 00 (Prescaler = 1)

01 (Prescaler = 4)

1X (Prescaler = 16)

Page 47: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

TRISA=0B11111111; //RA0=PULSA_INCRE, RA1=PULSA_DECRE

TRISB=0B11111111;

TRISC=0B11111011; //RC2=SALIDA_PWM

ANSEL=0B00000000; //PORTA=DIGITAL

ANSELH=0B00000000; //PORTB=DIGITAL

CCP1CON=0B00001100; //MODO PWM

PR2=99; //FRECUENCIA A 10KHz

T2CON=0B00000100; //PRESCALER = 1

CCPR1L=0; //DUTY = 0

TMR2=0;

Page 48: LENGUAJE C - MICROCONTROLADORES

while(1) // Bucle infinito

{

if (RA0 == 1) //PULSADOR PARA INCREMENTAR DUTY

{

CCPR1L++;

if (CCPR1L>99) //COMPARACIÓN PARA QUE NO SE PASE DE 99 (PR2)

{

CCPR1L=99;

}

__delay_ms(200);

}

if (RA1 == 1) //PULSADOR PARA DECREMENTAR DUTY

{

CCPR1L--;

if (CCPR1L == 255) //COMPARACIÓN PARA QUE NO PASE DE 0

{

CCPR1L=0;

}

__delay_ms(200);

}

}

Page 49: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

RA0/AN0/ULPWU/C12IN0-2

RA1/AN1/C12IN1-3

RA2/AN2/VREF-/CVREF/C2IN+4

RA4/T0CKI/C1OUT6

RA5/AN4/SS/C2OUT7

RB0/AN12/INT21

RB1/AN10/P1C/C12IN3-22

RB2/AN8/P1B23

RA7/OSC1/CLKIN9

RA6/OSC2/CLKOUT10

RC0/T1OSO/T1CKI11

RC1/T1OSI/CCP212

RB7/ICSPDAT28

RB6/ICSPCLK27

RB5/AN13/T1G26

RB4/AN11/P1D25

RC7/RX/DT18

RC6/TX/CK17

RC5/SDO16

RC4/SDI/SDA15

RC3/SCK/SCL14

RC2/CCP1/P1A13

RA3/AN3/VREF+/C1IN+5

RB3/AN9/PGM/C12IN2-24

RE3/MCLR/VPP1

U1

PIC16F883

0

0

A

B

C

D

Page 50: LENGUAJE C - MICROCONTROLADORES

PWM(MODULACIÓN POR ANCHO DE PULSO)

Page 51: LENGUAJE C - MICROCONTROLADORES

MÓDULO USART(RECEPCIÓN TRANSMISIÓN SINCRONA ASINCRONA

UNIVERSAL)

Módulo de comunicación serie.

Síncrona (Reloj)

Asíncrona (Tiempo - sin reloj)

Maneja el protocolo RS-232.

Permite la comunicación entre el µC y otrodispositivo como el PC u otro IC.

Para la comunicación con el PC se requiere unMAX232 para el acople de niveles de voltaje.

Page 52: LENGUAJE C - MICROCONTROLADORES

MÓDULO USART

Registros que lo controlan:

TXSTA

RCSTA

SPBRG

TXREG

RCREG

Reg. de control

Config. de la velocidad (Baudios)

Reg. de transmisión y recepción

Ver Datasheet

Page 53: LENGUAJE C - MICROCONTROLADORES

MÓDULO USART

CÁLCULO DE LA VELOCIDAD (BAUDIOS):

Baudios = Fosc / (B * [SPBRG + 1])

B=64 BRGH = 0 Baja velocidad

B=16 BRGH = 1 Alta velocidad

SPBRG = (Fosc / [B * Baudios]) – 1

Ej: Fosc = 4MHz, 9600 Baudios, B=64 (BRGH=0)

SPBRG = 5 o SPBRG = 6

Fosc = 4MHz, 9600 Baudios, B=16 (BRGH=1)

SPBRG = 25

Page 54: LENGUAJE C - MICROCONTROLADORES

MÓDULO USART

TRISA=0B11111111; // PORTA todo entradas

TRISB=0B11111110; // RB0 = salida

TRISC=0B10111111; // PORTC7:entrada(RX) PORTC6:salida(TX)

ANSEL=0B00000000;

ANSELH=0B00000000;

TXSTA=0B00100100; //SE CONFIGURA LA TRANSMISION

RCSTA=0B10010000; //SE CONFIGURA LA RECEPCION

SPBRG=25; //SE CONFIGURA LA VELOCIDAD A 9600 BAUDIOS

TXREG='O'; //TRANSMITE EL CARACTER O

__delay_ms(5);

TXREG='K'; //TRANSMITE EL CARACTER K

__delay_ms(5);

RB0=0;

Page 55: LENGUAJE C - MICROCONTROLADORES

while(1) { // Bucle infinito

if (RCIF==1) //pregunta si recibió algo en la bandera RCIF de reg. PIR1

{

DATO=RCREG; //le lleva a DATO lo que llego por el puerto

RCIF=0; //se coloca la bandera nuevamente en 0

}

if (DATO=='A')

{

RB0=1;

TXREG='O'; //TRANSMITE EL CARACTER O

__delay_ms(5);

TXREG='N'; //TRANSMITE EL CARACTER N

__delay_ms(5);

TXREG=' '; //TRANSMITE EL CARACTER ESPACIO

__delay_ms(5);

DATO=0;

}

Page 56: LENGUAJE C - MICROCONTROLADORES

if (DATO=='B')

{

RB0=0;

TXREG='O'; //TRANSMITE EL CARACTER O

__delay_ms(5);

TXREG='F'; //TRANSMITE EL CARACTER F

__delay_ms(5);

TXREG='F'; //TRANSMITE EL CARACTER F

__delay_ms(5);

TXREG=' '; //TRANSMITE EL CARACTER ESPACIO

__delay_ms(5);

DATO=0;

}

}

Page 57: LENGUAJE C - MICROCONTROLADORES

MÓDULO USART

Page 58: LENGUAJE C - MICROCONTROLADORES

G E R M Á N A N D R É S Z A P A T A P U E R T A

GRACIAS