Lenguaje C Mplab X PDF
Lenguaje C Mplab X PDF
Lenguaje C Mplab X PDF
MPLAB X
MPLAB XC8 C COMPILER
Tipo Rango
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.
+ Suma
- Resta
* Multiplicación
/ División
-- Decremento
OPERADORES RELACIONALES
Operador Operación
== igual
!= no igual (diferente de)
> mayor que
< menor que
>= mayor que o igual a
<= menor que o igual a
OPERADORES DE
ASIGNACIÓN
Operador Operación
= Asigna el valor a una variable
ESTRUCTURAS DE CONTROL
DECISIÓN O SELECTIVAS
if, else, switch (case)
REPETITIVAS (CICLOS)
while, do – while, for
BIFURCACIÓN DE CONTROL
goto, break, return
DECISIÓN SIMPLE
if (EXPRESIÓN)
{
INSTRUCCIÓN 1;
INSTRUCCIÓN 2;
…….
}
while (EXPRESIÓN)
{
INSTRUCCIÓN 1;
INSTRUCCIÓN 2;
…….
}
void main()
{
….
C = suma(A,B);
….
}
VECTORES
Los vectores son espacios de memoria en los cuales se pueden almacenar
valores que luego serán utilizados en el programa.
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};
VECTORES
int
vect[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);
}
….
}
VECTORES
APLICACIONES CON VECTORES:
Display 7 segmentos.
Matrices de LEDS.
PANTALLAS LCD
NOTA: Hay que copiar los archivos: lcd.h y lcd.c en la carpeta del
proyecto, 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 que
se copio en la carpeta del proyecto hay que adicionarlo a header files
(archivos cabeza).
PANTALLAS LCD
PANTALLAS LCD
PANTALLAS LCD
En el proyecto se
debe adicionar:
En Header Files:
lcd.h
En Source Files:
lcd.c
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ínea
lcd_puts("PRUEBA LCD...");
lcd_goto(0x40); // selecciono la segunda línea
lcd_puts("HOLA MUNDO");
while (1);
}
NOTA:
lcd_puts(“texto”); //lcd_puts: envía texto
lcd_putch(variable); //lcd_putch: envía variables (variable+48)=ASCII
PANTALLAS LCD
TECLADO MATRICIAL
Funcionan como una matriz: por filas y
columnas
Generalmente se van multiplexando las filas y
escaneando las columnas.
Se deben colocar resistencias en las columnas a
GND o a +5V, o si el teclado esta en el Puerto
B activar las resistencias de pull up.
Se debe incluir la librería “keydr.h” y adicionar
al proyecto los archivos: keydr.h, initkey.c y
getckey.c
TECLADO MATRICIAL
ADCON0
Reg. de control
ADCON1
ANSEL Ent. y Sal. Análogas o
digitales
ANSELH
ADRESL Resultado de la
conversión
ADRESH
Ver Datasheet
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)
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)
CCP1CON
PR2
Reg. de control
T2CON
CCPR1L Config. del Periodo
TMR2
Config. del Ancho del Pulso
Ver Datasheet
PWM
(MODULACIÓN POR ANCHO DE PULSO)
CONFIGURACIÓN TÍPICA:
CCP1CON = 0B00001100;
P1M = 00 (Salida simple – no se va a utilizar
puente H)
DC1B = 00 (Los LSB del Duty en 0)
CCP1M = 1100 (Modo PWM)
PWM
(MODULACIÓN POR ANCHO DE PULSO)
CÁLCULO DEL PERIODO:
CONFIGURACIÓN TÍPICA:
PR2 = 99;
T2CON = 0B00000100;
TMR2ON = 1 (Enciende TMR2)
T2CKPS = 00 (Prescaler = 1)
01 (Prescaler = 4)
1X (Prescaler = 16)
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;
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);
}
}
PWM
(MODULACIÓN POR ANCHO DE PULSO)
U1
1 25
RE3/MCLR/VPP RB4/AN11/P1D
26
RB5/AN13/T1G
2 27
0 3
RA0/AN0/ULPWU/C12IN0-
RA1/AN1/C12IN1-
RB6/ICSPCLK
RB7/ICSPDAT
28
4
RA2/AN2/VREF-/CVREF/C2IN+
5 11
0 6
RA3/AN3/VREF+/C1IN+
RA4/T0CKI/C1OUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
12
7 13
RA5/AN4/SS/C2OUT RC2/CCP1/P1A
10 14
RA6/OSC2/CLKOUT RC3/SCK/SCL
9 15
RA7/OSC1/CLKIN RC4/SDI/SDA
16
RC5/SDO
21 17
RB0/AN12/INT RC6/TX/CK
22 18
RB1/AN10/P1C/C12IN3- RC7/RX/DT A
23
RB2/AN8/P1B
24
RB3/AN9/PGM/C12IN2- B
PIC16F883
C
D
PWM
(MODULACIÓN POR ANCHO DE PULSO)
MÓDULO USART
(RECEPCIÓN TRANSMISIÓN SINCRONA ASINCRONA
UNIVERSAL)
TXSTA
Reg. de control
RCSTA
SPBRG
Config. de la velocidad (Baudios)
TXREG
RCREG Reg. de transmisión y recepción
Ver Datasheet
MÓDULO USART
CÁLCULO DE LA VELOCIDAD (BAUDIOS):