Вы находитесь на странице: 1из 14

Lenguaje de Programacin

ANSI C y Compilacin en XC8

Definicin

Es el lenguaje de // Directivas de compilacin


#define _XTAL_FREQ 4000000
programacin estndar
(ISO/IEC 9899:1990) para la unsigned int counter1 = 0;
codificacin de programas // Programa principal
informticos void main(void)
{
Tipeado estricto: el char counter2;
programador debe declarar el // ...
}
tipo de dato de todas las
variables antes de usarlas
Cdigo ANSI C
Compilacin en XC8 // Directivas de
compilacin
#define _XTAL_FREQ
4000000
Todo cdigo en ANSI C debe
// Programa principal
ser verificado en sintaxis y void main(void)
convertido a lenguaje {
mquina (opcodes) para // ...
}
crear un programa
ejecutable
El fabricante del
microcontrolador provee Compilacin
compiladores (XC8, XC16,
XC32, ) para crear Archivo HEX
programas compatibles con
00 F8 55 64 A7 10 36 4 9F
sus productos 86 98 3C 57 ...
Cdigo ANSI C
// Directivas de
compilacin
#define _XTAL_FREQ
4000000

// Programa principal
void main(void)
{ PIC18F45
// ... 50
} Contenido de
archivo HEX es
00 F8 55 64
A7 10 36 4A transferido a la
9F 86 98 3C memoria de
57 ... programa del
Compilacin PIC en el proceso
de
Programacin
Archivo HEX
00 F8 55 64 A7 10 36
4A 9F 86 98 3C 57 ...
Programaci
n
Estructura de cdigo ANSI C

// Funcin de usuario
// "Fusibles" del PIC18F4550 void funcion2(int in1)
#pragma config FOSC = INTOSCIO_EC {
#pragma config WDT = OFF unsigned char out;
out = funcion1 ( in1, 0xFF );
// Varias lneas...
// Directivas de compilacin return out;
#define _XTAL_FREQ 4000000 }

#include <xc.h> // Lib. integrada // Programa principal: el PIC ejecuta


de XC8 // PRIMERO esta funcin
void main(void)
#include "SPI.h" // Lib. de {
usuario funcion2(counter);
counter++;
// Variable global
unsigned int counter = 0; // Varias lneas...

// Bucle infinito: el programa se


// Funcin de usuario // detiene en esta lnea (WDT
unsigned char funcion1(char in1, off)
in2) while(1);
{ }
unsigned char out;
// Varias lneas...
return out;
Variables y constantes

Las variables son elementos del lenguaje C que sirven para


almacenar datos en la Memoria de Datos (RAM)
Las constantes son datos almacenados en la Memoria de
Programa (Flash): slo Lectura, tiles para almacenar listas
de datos: coeficientes, tablas, mensajes pregrabados al
usuario, etc.
Deben asignarse a un tipo de dato
Tipos de dato Enteros (XC8)
Valores
extremos
de datos
Enteros
Tipos de dato de Punto Flotante (XC8)
Valores extremos de datos de Punto Flotante
Ejemplos

int data = 123;


double var;
var = data; // double <- int (OK!)
const float PI = 3.1415926535;

var = PI * var;
data = var; // int <- double (!)
// Pierde precisin decimal

PI = PI + 0.253; // ERROR! PI es const


Precisin decimal

Los nmeros representables por los


formatos de punto flotante dependen
del valor del exponente y el nmero
de bits (24 o 32)
Nmero Valor de Siguiente Siguiente
exponente nmero posible nmero posible
(sin Bias) @ 24 bits @ 32 bits
1.0 0 1.0000305 1.0000001
95000.0 16 95002.0 . 95000.00781 .
Arreglos

Son colecciones de datos con el mismo tipo de dato (datos


homogneos)
El tamao de la coleccin debe definirse en Tiempo de
compilacin
Se almacenan en posiciones contiguas en la memoria y su
lectura/escritura se realiza empleando un ndice que
comienza en 0
(zero-based)
Ejemplo

const char msg[] = "Bienvenido! Escriba su nombre: "; // OK


const char* msg1 = "Bienvenido! Escriba su nombre: "; // OK

#define NOMBRES_LEN 30
char nombres[NOMBRES_LEN]; // OK
char msg2[] = "Hola mundo"; // ERROR!
// Slo vlido para constantes.
// Los elementos de los arreglos NO constantes
// toman valor en tiempo de ejecucin:
void main(void)
{
for (i = 0; i < NOMBRES_LEN; i++)
nombres[i] = get_char();
}
Manejo de Registros

El compilador XC8 ofrece variables globales en la librera <xc.h>


para manipular los registros del PIC a nivel de bits, enteros de 8
y de 16 bits
Ejemplo: establecer bit 2 de registro TRISA a 0:
TRISAbits.TRISA2 = 0; // Escritura a 1 bit
Ejemplo: establece todo el registro TRISA (8
b):
TRISA = 0b11111101; // Escritura a 8 bits binario
TRISA = 0xFD; // Escritura a 8 bits
hexadec.
TRISA = 253; // Escritura a 8 bits decimal
TRISA = 0375; // Escritura a 8 bits octal

Вам также может понравиться