Está en la página 1de 50

MICROCONTROLADORES II

(FAMILIA PIC16F87X)
LENGUAJE C PARA PICS
TEMA 1
PROF. LUIS ZURITA

CARACTERSTICAS

Velocidad de operacin: hasta 20 MHz de reloj.


8K x 14 bits por palabra de memoria de programa FLASH.
368 x 8 bytes de memoria de datos (RAM)
256 x 8 bytes de memoria de datos EEPROM.
14 fuentes de interrupciones.
Memoria de pila (stack) de 8 niveles de profundidad.
Protecciones:
Power-on Reset (POR)
Power-up Timer (PWRT)
Oscillator Start-up Timer (OST)
Watchdog Timer (WDT) independiente del cristal.

Prof. Luis Zurita

Microcontroladores II

CARACTERSTICAS (PERIFRICOS)
Posee 5 puertos de entrada y salida (PORTA, B, C, D, E)
Timer 0: timer/counter de 8 bits con un preescaler de 8
valores.
Timer 1: 16 bits con timer/counter con preescaler
Timer 2: 8 bits con timer/counter con registro de estado
de 8-bit, preescaler y post escaler
Dos mdulos de Captura, Comparacin y PWM
(Modulacin por anchura de pulso)
Captura es de 16 bits, mx. resolucin es 12.5 ns
Comparacin es de 16 bits, mx. resolucin es 200 ns
PWM con una resolucin de 10 bits mxima.
Prof. Luis Zurita

Microcontroladores II

CARACTERSTICAS (PERIFRICOS 2)
Convertidor analgico a digital de 10-bit multicanal (de
5 a 8 canales)
Puerto serial sncrono (SSP) con SPI. (modo maestro) e I2C
(maestro/esclavo)
Transmisor-Receptor sncrono-asncrono universal
(USART/SCI) con 8 9 bits
Puerto paralelo esclavo (PSP) con 8 bits de ancho, con
terminales de control RD, WR y CS
Arquitectura HARVARD.
Buses separados (datos e instrucciones).
Memoria de programa : 14 bits.
Memoria de datos: 8 bits.
Recursos mapeados en memoria de datos.
Prof. Luis Zurita

Microcontroladores II

LENGUAJE C. TIPOS DE DATOS.


El compilador CCS acepta los siguientes tipos de variables:
Especificacin Significado

Tamao

Rango

char

carcter

8 bits

0 a 255 (sin signo)

Int

entero

8 bits

0 a 255 (sin signo)

float

Coma flotante

32 bits

6 bits de precisin

Byte

Entero de 8 bits

8 bits

0 a 255

double

Float doble precisin No soportado

No para PCM

void

Sin valor

nulo

Ninguno

int1

Entero de 1 bit

1 bit

0a1

int8

Entero de 8 bits

8 bits

0 a 255 (sin signo)

int16

Entero de 16 bits

16 bits

0 a 65535

int32

Entero de 32 bits

32 bits

0 a (232-1)

Short

Entero de 1 bit

1 bit

0a1

long

Entero de 16 bits

16 bits

0 a 65535 (sin signo)

Prof. Luis Zurita

Microcontroladores II

LENGUAJE C. TIPOS DE DATOS


Todos los tipos de datos son por defecto sin signo (unsigned)
salvo los de tipo float.
Para almacenar datos con signo, hay que introducir el
modificador signed delante del tipo. El efecto que se consigue es el
recogido en la siguiente tabla.
Especificacin

Significado

Tamao

Rango

Signed char

caractr con
signo

8 bits

-128 a 128

Signed int

Entero con signo 8 bits

-128 a 128

Signed long

Coma flotante

-32768 a 32768

16 bits

Los nmeros negativos se codifican en complemento a 2.


Cuando se opera con distintos grupos de datos en una misma
expresin, se aplican una serie de reglas para resolver las
diferencias.
En general se produce una promocin hacia los tipos de datos
de mayor longitud presentes en la expresin.
Prof. Luis Zurita

Microcontroladores II

LENGUAJE C. CONSTANTES
Valor fijo que no cambiar a lo largo del programa. Tipos aceptados:
Constantes
123
0123
0x123
0b01001101
X
\010
\X
abcdef
Prof. Luis Zurita

Decimal
Octal
Hexadecimal
Binario
Carcter
Carcter octal
Carcter especial; x puede ser: n, t, b, r, f, , \d, v?
Cadena (el carcter nulo se agrega al final)
Microcontroladores II

LENGUAJE C. CONSTANTES
A una constante se le puede asignar un nombre o
etiqueta por medio de la directiva #define:
#define PI=3.1416;
Cada vez que se escriba la etiqueta PI la compilacin
se encargar de reemplazarla por el valor 3.1416
A veces es necesario guardar las constantes en la
memoria del programa, mediante la declaracin:
const tipo nombre_constante= valor;
Ejemplo:
const int TOPECONTADOR=100;
Prof. Luis Zurita

Microcontroladores II

OPERADORES
Las expresiones son una combinacin de
operandos y operadores. Los operandos son los
valores sobre los cuales se van a trabajar y los
operadores especifican lo que se va a hacer con
los operandos. Ejemplo:
C= A + B;
Donde = y + son operandos de asignacin y
suma respectivamente.
Indican la tarea que se va a ejecutar sobre los
operandos A, B y C.
Prof. Luis Zurita

Microcontroladores II

OPERADORES ARITMTICOS
Operador

Descripcin

Ejemplo

Suma (enteros o reales)

Resul=var1 + var2

Resta (enteros o reales)

Resul=var1 - var2

Multiplicacin (enteros o reales)

Resul=var1 * var2

Divisin (enteros o reales)

Resul=var1 / var2

Cambio de signo en enteros o reales

-var1

Mdulo; resto de una divisin entera

Rango=n[A1]%256

OPERADORES RELACIONALES
Operador

Prof. Luis Zurita

=
=
==
!=

Descripcin

Menor que
Mayor que
Menor o igual que
Mayor o igual que
Igual a
Distinto de

Microcontroladores II

OPERADORES LGICOS
Operador

Descripcin
!

NO lgico (NOT)

&&

Y lgico

(AND)

||

O lgico

(OR)

OPERADORES A NIVEL DE BITS


Operador
~

Negacin de bits (complemento a 1)

&

Y de bits (AND)

O exclusivo de bits (XOR)

|
Prof. Luis Zurita

Descripcin

O de bits (OR)
Microcontroladores II

OPERADORES DE INCREMENTO Y
DECREMENTO
Operador

Descripcin
++

Incremento

--

Decremento

OPERADORES DE CORRIMIENTO
Operador

Descripcin

Desplazamiento a la derecha

Desplazamiento a la izquierda

Ejemplo. Sea A= 0b00001000, si se ejecuta: A3;


El nuevo valor de A ser= 0b00000001, ya con las 3 rotaciones de
posicin a la derecha.
Prof. Luis Zurita

Microcontroladores II

VARIABLES
Las variables se utilizan para nombrar posiciones de memoria
RAM; se deben declarar, obligatoriamente, antes de
utilizarlas; para ello se debe indicar el nombre y el tipo de
dato que se manejar. Se definen de la siguiente forma:
TIPO NOMBRE_VARIABLE[=VALOR INICIAL]
TIPO hace referencia a cualquiera de los tipos de datos
NOMBRE_VARIABLE puede ser cualquiera y el valor inicial es opcional.
Ejemplos:

byte
byte
float
char
int
int
int
Prof. Luis Zurita

k = 5;
const SEMANAS = 52;
temp_limit=500.0;
k, kant=0;
x,y,z;
UNIDAD;
UNIDAD=0, DECENA=0, CENTENA=0;
Microcontroladores II

VARIABLES
Las variables pueden ser de tipo LOCAL o GLOBAL.
Las variables locales slo se utilizan en la funcin
donde se encuentran declaradas; las variables
globales se pueden utilizar en todas las funciones del
programa. Ambas deben declararse antes de ser
utilizadas y las globales deben declararse antes de
cualquier funcin y fuera de ellas. Las variables
globales son puestas a cero cuando se inicia la
funcin principal main().

Prof. Luis Zurita

Microcontroladores II

EJEMPLO DE VARIABLES LOCALES Y


GLOBALES
int16 counter;
Void FUNCION ( )
{
int dato1, dato2=34;
}
void main()
{
int8 suma;
}
Prof. Luis Zurita

//Variable global
//Variables locales

//Variable local

Microcontroladores II

FUNCIONES
Las funciones son los bloques constructivos
fundamentales en C.
Todas las sentencias deben encontrarse dentro de
funciones.
Las funciones deben ser definidas antes de ser utilizadas.
Formato general de definicin de una funcin:
Tipo_dato nombre_funcin (tipo param1, tipo param2, )
{
cuerpo de la funcin (sentencias);
}
El tipo de dato devuelto se indica mediante tipo_dato. Si
no se indica nada, se entiende que devuelve un entero. Si
no devuelve nada debe incluirse una especificacin tipo
void.
Prof. Luis Zurita

Microcontroladores II

La manera que tiene una funcin para devolver un


valor es mediante la sentencia return:
return (expresin);
return expresin;
La expresin debe proporcionar el mismo tipo de
dato que el especificado en la funcin. Si no debe
devolver nada, se finaliza con:
return;
Cuando una funcin se encuentra con una sentencia
return se vuelve a la rutina de llamada inmediatamente y
las sentencias posteriores a return no se ejecutan.
Adems de con las sentencia return, las funciones
terminan su ejecucin y vuelven al lugar desde donde se
les llam cuando alcanzan la llave de cierre de funcin }
tras ejecutar la ltima sentencia de la misma.
Prof. Luis Zurita

Microcontroladores II

Adems de devolver valores, una funcin tambin puede


recibir parmetros (denominados argumentos) segn se indic
en su definicin.
Por ejemplo:
Parmetros
int suma(int a, int b)
{
formales
return(a+b);
}
main()
{
Argumentos
int c;
c= suma(10 , 23);
de llamada
}
Los argumentos se pueden pasar a las funciones por valor o
por referencia.
La llamada por valor copia el argumento de llamada en el
parmetro formal de la funcin y no modifica su valor en la
funcin de partida.
Prof. Luis Zurita

Microcontroladores II

DECLARACIONES DE CONTROL
If-else

Cuando la expresin evaluada es verdadera, Las


instrucciones de la sentencia 1 son ejecutadas. Si la expresin es
falsa, las instrucciones de la sentencia 2 son ejecutadas. La
expresin debe ser evaluada a un valor entero. Los parntesis
que encierra la expresin son obligatorios.
La palabra especial else sentencia 2 es opcional.

If else:
if (expresin)
sentencia1;
else
sentencia2;
Prof. Luis Zurita

If else:
if (expresin) {
sentencia1;}
else {
sentencia2;}
Microcontroladores II

Sentencia if.
Se ejecuta una sentencia o bloque de cdigo si la expresin que
acompaa al if tiene un valor distinto a cero (verdadero). Si es cero
(falso) contina sin ejecutar la sentencia o bloque de sentencias.
if (expresin)
if (expresin)
sentencia;
{
sentencia 1;
sentencia 2;

}
Sentencia if-else
Se evala una expresin y, si es cierta se ejecuta el primer bloque
de cdigo o sentencia 1. Si es falsa, se ejecuta el segundo.
if (expresin)
NOTA: Se pueden combinar varios
sentencia 1;
if-else para establecer mltiples
else
caminos de decisin
sentencia 2;
Abreviatura: (expresin)?(sentencia 1): (sentencia 2);
Prof. Luis Zurita

Microcontroladores II

A=0?

SI

NO

C=5

If (A==0) B=10;
Else C=5;

B=10

If (A!=1) B=10;
Else C=5;

Prof. Luis Zurita

Microcontroladores II

NO

If (A>10)
{IF(A>20) B=5;
Else B=15;}

A>10?

SI

A>20?

NO

B=15

SI
B=5

Prof. Luis Zurita

Microcontroladores II

NO

if (A>10)
{IF(A>20) B=15;}
else B=5;

A>10?

SI
B=5
A>20?

SI

B=15

NO

Prof. Luis Zurita

Microcontroladores II

Sentencia switch
Sustituye a if-else cuando se realiza una seleccin mltiple que
compara una expresin con una lista de constantes enteras o
caracteres. Cuando se da una coincidencia, el cuerpo de sentencias
asociadas a esa constante se ejecuta hasta que aparezca break.
switch (expresin)
Nota: break es opcional. Si
{
no aparece se sigue con el
case constante 1:
case siguiente.
grupo de sentencias;
break;
default es opcional y el
case constante 2:
bloque asociado se ejecuta
grupo de sentencias; slo si no hay ninguna
coincidencia
con
las
break;
constantes especificadas.

default:
No puede haber dos
grupo n de sentencias; constantes iguales en dos
case de la misma sentencia
}
switch.

Prof. Luis Zurita

Microcontroladores II

SI

A=0?

B=1

NO

SI

A=2?

B=2

NO

SI

A=3?
NO
Prof. Luis Zurita

B=3

switch (A){
case 0:
B=1;
break;
case 2:
B=2;
break;
case 3:
B=3;
break;
default:break;
}
Microcontroladores II

Sentencia de bucle for.


Se emplea para repetir una sentencia o bloque de
sentencias:
for (inicializacin; condicin; incremento)
{
sentencia(s);
}
En la inicializacin se le asigna un valor inicial a una
variable que se emplea para el control de la repeticin del
bucle.
La condicin se evala antes de ejecutar la sentencia.
Si es cierta, se ejecuta el bucle. Si no, se sale del mismo.
El incremento establece cmo cambia la variable de
control cada vez que se repite el bucle.
Es posible anidar bucles for para modificar dos o ms
variables de control.
Prof. Luis Zurita

Microcontroladores II

N=1
NO

N<=10?

SI
IMPRIMIR N
N=N+1

NO

for(N=1;N<=10;N++)
{
Printf(%u,N);
}
for(cont=0;cont<=200;cont++)
{
PORTB=cont;
}
for(cont=200;cont<=0;cont--)
{
PORTB=cont;
}

Prof. Luis Zurita

Microcontroladores II

Sentencia de bucle while:


La repeticin se lleva a cabo mientras sea cierta una expresin.
while (expresin)
{
sentencia(s);
}
La expresin se evala antes de cualquier iteracin. Si es falsa, ya no
se ejecuta la sentencia o bloque de sentencias.

Sentencia de bucle do-while:


do
{
sentencia(s);
}
while (expresin)
Las sentencias se ejecutan antes de que se evale la expresin, por
lo que el bucle se ejecuta siempre al menos una vez.
Prof. Luis Zurita

Microcontroladores II

Comparacin entre loops WHILE y DO WHILE


Condition
True?

Statement
Block

(a) While loop

Statement
Block

Condition
True?

(b) Do..While loop

Comparacin entre loops WHILE y DO WHILE


//
//

DOWHILE.C
Comparison of WHILE and DO WHILE loops

#include "16F877A.H"
main()
{
int outbyte1=0;
int outbyte2=0;
int count;
count=0;
while (count!=0)
{
output_C(outbyte1);
outbyte1++;
count--;
}

// This loop is not


// executed

count=0;
do
{
output_C(outbyte2);
outbyte2++;
count--;
} while (count!=0);

// This loop is
// executed

while(1){};
}

OTRAS SENTENCIAS
Return: se emplea para devolver datos en las
funciones.
Break: permite salir de un bucle, se utiliza para
While, For, Do y Switch.
Goto: provoca un salto incondicional.
label

Statement
Block
Goto

Prof. Luis Zurita

Continue
Break

Microcontroladores II

Diferencia entre Continue, Break & Goto


//
//

CONTINUE.C
Continue, break and goto jumps

#include "16F877A.H"
#use delay(clock=4000000)
main()
{
int outbyte;
again: outbyte=0;

// Goto destination

while(1)
{
output_C(outbyte);
delay_ms(10);
outbyte++;

// Loop operation

if (!input(PIN_D0)) continue;
if (!input(PIN_D1)) break;
delay_ms(100);
if (outbyte==100) goto again;
}
}

// Restart loop
// Terminate loop
// Unconditional jump

COMENTARIOS
Los comentarios se incluyen en el cdigo fuente para documentar y
orientar al programador sobre el cdigo que se disea.
Son ignorados por el compilador y no afectan a la longitud ni
rapidez de ejecucin del cdigo final.
Un comentario se puede colocar en cualquier lugar del programa y
pueden tener la longitud y el nmero de lneas que se quiera.
Hay dos formatos posibles para los comentarios:
Formato 1. Empiezan por // y llegan hasta el final de la lnea.
// Esto es un comentario.
Formato 2. Empiezan por /* y finalizan por */. No es posible anidar
comentarios con este formato. Ejemplos:
/*Esto tambin es
un comentario*/
/*Pero esto que /*parece un comentario vlido*/ no lo es*/

Prof. Luis Zurita

Microcontroladores II

DIRECTIVAS DE INTERS
Las directivas de pre-procesado comienzan con el smbolo
# y continan con un comando especfico. La sintaxis
depende del comando. Algunos comandos no permiten
otros elementos sintcticos en la misma expresin.
#DEVICE chip: permite definir el PIC con el que se
realizar la compilacin. Ejemplo:
#device
PIC16F877
#FUSES options: permite definir la palabra de
configuracin para programar un PIC. Ejemplo:
#fuses XT,NOWDT,PUT,NOPROTECT, NOLVP
#INCLUDE <archivo>: permite incluir un fichero en el
programa. Ejemplo:
#INCLUDE <16f877.h>
Prof. Luis Zurita

Microcontroladores II

DIRECTIVAS DE INTERS
#USE DELAY (CLOCK=SPEED): permite definir las frecuencias
del oscilador del PIC, el compilador lo utiliza para realizar
clculos de tiempo. Se puede utilizar M, MHZ, K y KHZ para
definir la frecuencia. Ejemplo:
#use delay(clock=4000000)
Luego de definida en las declaraciones se pueden utilizar
las funciones:
delay_ms(tiempo en milisegundos)
delay_us(tiempo en microsegundos)
delay_cycles(tiempo en base a los ciclos de mquina)

Prof. Luis Zurita

Microcontroladores II

FUNCIONES
El compilador CCS suministra una serie de funciones
predefinidas para acceder y utilizar el PIC y sus
perifricos. Estas funciones facilitan la configuracin
del PIC sin entrar en el nivel de los registros
especiales.

MANEJO DE LOS PUERTOS


En lenguaje C se pueden gestionar los puertos de dos
formas:
Se declaran los registros TRISX y PORTX definiendo
su posicin en la memoria RAM como variables de
C.
Utilizando las directivas especficas del compilador
(#USE FAST_IO,#USE STANDARD_IO)
Prof. Luis Zurita

Microcontroladores II

MANEJO DE LOS PUERTOS


A travs de la RAM:
#BYTE variable=constante. Ejemplo:
#BYTE TRISA=0x85
//variable TRISA en 85h
#BYTE PORTA=0x05
//variable PORTA en 05h
#BYTE TRISB=0x86
//variable TRISB en 86h
#BYTE PORTB=0x06
//variable PORTB en 06h
#BYTE TRISC=0x87
//variable TRISC en 87h
#BYTE PORTC=0x07
//variable PORTC en 07h
#BYTE TRISD=0x88
//variable TRISD en 88h
#BYTE PORTD=0x08
//variable PORTD en 08h
#BYTE TRISE=0x89
//variable TRISE en 89h
#BYTE PORTE=0x09
//variable PORTE en 09h
Prof. Luis Zurita

Microcontroladores II

MANEJO DE LOS PUERTOS


Una vez definidas estas variables se pueden
configurar y controlar los puertos a travs de los
comandos de asignacin.
TRISA= 0xFF;
TRISB= 0x00;
TRISC=0x0F;
Escritura en los puertos:
PORTC=0x0A;
Lectura de puertos:
dato=PORTA;
// Asigna el valor del puerto A a la
// variable dato.
Prof. Luis Zurita

Microcontroladores II

MANEJO DE LOS PUERTOS


Existen unas funciones de C que permiten trabajar
bit a bit con los registros o variables definidas
previamente. Estas funciones son las siguientes:
bit_clear(var,bit); //Pone a 0 el bit indicado de la variable
bit_set(var,bit);
//Pone a 1 el bit indicado de la variable
Bit_test(var,bit); // Pregunta por el estado lgico del bit
Swap(var);
// intercambia nibbles de la variable
Ejemplos:
bit_set(PORTC,4);
If (bit_test(PORTB,2)==1) //Si RB2 es igual a uno
{ bit_clear(PORTB,5); //Pone RB5 a cero
}

Prof. Luis Zurita

Microcontroladores II

MANEJO DE LOS PUERTOS


Se puede declarar un bit de un registro mediante la
directiva #BIT, lo que permite trabajar directamente
con el terminal:
#BIT nombre = posicin.bit. Ejemplo:
#BIT RA2=0x05.2 //PORTA=0x05
#BIT RB4=0x06.4 //PORTB=0x06
RB4=0;
RA2=1;

Prof. Luis Zurita

Microcontroladores II

MANEJO DE LOS PUERTOS


#include
<16F877.h>
#fuses
XT,NOWDT,NOLVP
#use delay
(clock=4000000)
#BYTE TRISB=0x86
#BYTE PORTB=0x06
#BYTE OPTION_REG=0x81
void main ( ) {
bit_clear (OPTION_REG,7);
bit_set (TRISB,0);
bit_clear (TRISB,1);
bit_clear (PORTB,1);
while (1){
if (bit_test(PORTB,0)==1)
bit_clear(PORTB,1);
else
bit_set(PORTB,1);
}
}
Prof. Luis Zurita

Microcontroladores II

MANEJO DE PUERTOS
Las funciones output_x() e input_x()
dependen de la directiva tipo #USE_IO que
est activa. Directivas:
#USE FAST_IO(PUERTO)
Con la funcin output_x() se saca el valor al
puerto y con la funcin input_x() se lee el
puerto. La directiva no modifica previamente
el registro TRIS correspondiente. (Se utilizarn
a partir del segundo proyecto)
Prof. Luis Zurita

Microcontroladores II

MANEJO DE PUERTOS
A travs de las directivas (Se utilizarn a partir del segundo
proyecto)
El compilador ofrece funciones predefinidas para trabajar con
los puertos. Estas funciones son:
output_X(valor);
//X = (PORTA, B, C, D o E)
input_X( );
set_tris_X(valor);
port_b_pullups (valor); //True o FALSE
get_tris( );
Ejemplo:
output_A(0xFF);
valor=input_B( );
set_tris_C(0x0F);
Prof. Luis Zurita

Microcontroladores II

MANEJO DE PUERTOS
Existen una serie de funciones asociadas a un pin*. El
parmetro pin se define en el fichero include con un formato
del tipo PIN_Xn, donde X es el puerto y n es el nmero de pin.
#define PIN_A0
40
#define PIN_A1
41
Las funciones son:
output_low (pin*);
output_high (pin*);
output_bit (pin*,valor);
output_toggle (pin*);
output_float (pin*);
// pin de entrada a tensin flotante
input_state (pin*);
Input (pin*);
Prof. Luis Zurita

Microcontroladores II

MANEJO DE PUERTOS
#include
<16F877.h>
#fuses
XT,NOWDT,NOLVP
#use delay (clock=4000000)
#use fast_io(B)
void main ( ) {
port_B_pullups (TRUE);
set_tris_B(0x01);
output_low(PIN_B1);
while (1){
if (input(PIN_B0)==1)
output_low(PIN_B1);
else
output_high (PIN_B1);
}
}
Prof. Luis Zurita

Microcontroladores II

MANEJO DE PUERTOS
#USE STANDARD_IO(PUERTO)
Con la funcin output_x() el compilador se
asegura de que el terminal, o terminales
correspondientes sean de salida mediante la
modificacin del TRIS correspondiente. Con la
funcin input_x() ocurre lo mismo pero
asegurando el terminal o terminales como
entrada. Es la directiva por defecto. Entonces, el
ejemplo anterior quedara (Se utilizarn a partir
del segundo proyecto):
Prof. Luis Zurita

Microcontroladores II

MANEJO DE PUERTOS
#include
<16F877.h>
#fuses XT,NOWDT,NOLVP
#use delay (clock=4000000)
#use standard_io(B)
void main ( ) {
port_b_pullups (TRUE);
output_low(PIN_B1);
while (1){
if (input(PIN_B0)==1)
output_low(PIN_B1);
else
output_high (PIN_B1);
}
}
Prof. Luis Zurita

Microcontroladores II

ESTRUCTURA DE UN PROGRAMA EN C
( ciclo while )
// Definicin de variables globales
// Definicin de funciones
void main(void)
{
// Definicin de variables locales
// Configuracin de registros (recursos y puertos)
// ciclo infinito
while ( 1 )
{
// Programa de usuario
}

Prof. Luis Zurita

Microcontroladores II

ESTRUCTURA DE UN PROGRAMA EN C
( ciclo for )
// Definicin de variables globales
// Definicin de funciones
void main(void)
{
// Definicin de variables locales
// Configuracin de registros (recursos y puertos)
// ciclo infinito
for ( ; ; )
{
// Programa de usuario
}

Prof. Luis Zurita

Microcontroladores II

ESTRUCTURA DE UN PROGRAMA EN C
( ciclo do - while )
// Definicin de variables globales
// Definicin de funciones
void main(void)
{
// Definicin de variables locales
// Configuracin de registros (recursos y puertos)
// ciclo infinito
do
{
// Programa de usuario
}

} while ( 1 ) ;

Prof. Luis Zurita

Microcontroladores II

También podría gustarte