lenguaje c - microcontroladores
TRANSCRIPT
![Page 1: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/1.jpg)
MPLAB X
MPLAB XC8 C COMPILER
LENGUAJE C
GERMÁN ANDRÉS ZAPATA PUERTA
![Page 2: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/2.jpg)
TIPOS DE DATOS ENTEROS
![Page 3: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/3.jpg)
RANGO DE DATOS ENTEROS
![Page 4: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/4.jpg)
TIPOS DE DATOS REALES
![Page 5: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/5.jpg)
RANGO DE DATOS REALES
![Page 6: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/12.jpg)
OPERADORES DE ASIGNACIÓN
Operador Operación
= Asigna el valor a una variable
![Page 13: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/15.jpg)
IF - ELSE
if (EXPRESIÓN)
{
INSTRUCCIÓN 1;
INSTRUCCIÓN 2;
…….
}
else
{
INSTRUCCIÓN 1;
INSTRUCCIÓN 2;
…….
}
![Page 16: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/18.jpg)
DO - WHILE (HAGA - MIENTRAS QUE)
do
{
INSTRUCCIÓN 1;
INSTRUCCIÓN 2;
…….
}
while (EXPRESIÓN);
![Page 19: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/21.jpg)
PLANTILLA INICIAL
![Page 22: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/22.jpg)
EJERCICIOS PROPUESTOS
![Page 23: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/27.jpg)
VECTORES
APLICACIONES CON VECTORES:
Display 7 segmentos.
Matrices de LEDS.
![Page 28: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/29.jpg)
PANTALLAS LCD
![Page 30: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/30.jpg)
PANTALLAS LCD
![Page 31: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/31.jpg)
PANTALLAS LCD
En el proyecto se debe adicionar:
En Header Files:lcd.h
En Source Files:lcd.c
![Page 32: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/33.jpg)
PANTALLAS LCD
![Page 34: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/34.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/35.jpg)
TECLADO MATRICIAL
Descargar el archivo TECLADO.X.rar de lapágina.
![Page 36: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/36.jpg)
TECLADO MATRICIAL
![Page 37: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/37.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/38.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/39.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/40.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/41.jpg)
CONVERSOR ANÁLOGO / DIGITAL (C A/D)
Ver ejemplo completo en CAD_LCD.X
![Page 42: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/42.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/43.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/44.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/45.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/46.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/47.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/48.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/49.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/50.jpg)
PWM(MODULACIÓN POR ANCHO DE PULSO)
![Page 51: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/51.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/52.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/53.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/54.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/55.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/56.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/57.jpg)
MÓDULO USART
![Page 58: LENGUAJE C - MICROCONTROLADORES](https://reader030.vdocuments.co/reader030/viewer/2022012507/618352128b6dc7754f7205cb/html5/thumbnails/58.jpg)
G E R M Á N A N D R É S Z A P A T A P U E R T A
GRACIAS