Você está na página 1de 56

IUT Cumaná

MICROCONTROLADORES II
(FAMILIA PIC16F87X)
LENGUAJE C PARA PICS
TEMA 1

PROF. LUIS ZURITA


IUT Cumaná

CARACTERÍSTICAS
• Velocidad de operación: 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
IUT Cumaná

PUERTOS DE ENTRADA Y SALIDA


• PORTA ( RA5, RA4, RA3, RA2, RA1, RA0 )
• PORTB ( RB7, RB6, RB5, RB4, RB3, RB2, RB1, RB0 )
• PORTC ( RC7, RC6, RC5, RC4, RC3, RC2, RC1, RC0 )
• PORTD ( RD7, RD6, RD5, RD4, RD3, RD2, RD1, RD0 )
• PORTE ( RE2, RE1, RE0 )

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

CARACTERÍSTICAS (PERIFÉRICOS)
• Timer 0: timer/counter de 8 bits con un pre-
escalador de 8 valores.
• Timer 1: 16-bit timer/counter con pre-escalador
• Timer 2: 8-bit timer/counter con registro de estado
de 8-bit, pre-escalador y post-escalador
• Dos módulos de Captura, Comparación y PWM
(Modulación por anchura de pulso)
– Capture es de 16-bit, max. resolución es 12.5 ns
– Compare es de 16-bit, max. resolución es 200 ns
– PWM max. resolución de 10-bit

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

CARACTERÍSTICAS (PERIFÉRICOS 2)
• Convertidor analógico a digital de 10-bit multi-
canal
• Puerto serial síncrono (SSP) con SPI. (modo
maestro) e I2C (maestro/esclavo)
• Transmisor-Receptor síncrono-asíncrono
universal (USART/SCI) con 9-bit
• Puerto paralelo esclavo (PSP) con 8-bits de
ancho, con terminales de control RD, WR y CS

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

ARQUITECTURA INTERNA
• 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


IUT Cumaná

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

FUNCIONES PORTA
Terminal Funciones
RA0 Ent. Digital Sal. Digital Ent. Analógica

RA1 Ent. Digital Sal. Digital Ent. Analógica

RA2 Ent. Digital Sal. Digital Ent. Analógica VREF -

RA3 Ent. Digital Sal. Digital Ent. Analógica VREF +

RA4 Ent. Digital Sal. Digital Ent. contador 1

RA5 Ent. Digital Sal. Digital Ent. Analógica

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

FUNCIONES PORTB
Terminal Funciones
RB0 Ent. Digital Sal. Digital Ent. Interrupción 0

RB1 Ent. Digital Sal. Digital

RB2 Ent. Digital Sal. Digital

RB3 Ent. Digital Sal. Digital PGM ( función LVP )

RB4 Ent. Digital Sal. Digital

RB5 Ent. Digital Sal. Digital

RB6 Ent. Digital Sal. Digital PGC ( función LVP )

RB7 Ent. Digital Sal. Digital PGD ( función LVP )

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

FUNCIONES PORTC
Terminal Funciones
Ent. Digital Sal. Digital Sal. Osc timer 1 Ent. Contador 1
RC0
Ent. Digital Sal. Digital Ent. Osc Timer 1 Captura/Comp/PWM 1
RC1
Ent. Digital Sal. Digital Captura/Comp/PWM 2
RC2
Ent. Digital Sal. Digital Reloj sincrono SPI Reloj síncrono I2C
RC3
Ent. Digital Sal. Digital Datos entrada SPI Datos I2C
RC4
Ent. Digital Sal. Digital Datos salida SPI
RC5
Ent. Digital Sal. Digital Transmisión USART
RC6
Ent. Digital Sal. Digital Recepción USART
RC7
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

FUNCIONES PORTD
Terminal Funciones
RD0 Ent. Digital Sal. Digital Bit 0 puerto paralelo esclavo

RD1 Ent. Digital Sal. Digital Bit 1 puerto paralelo esclavo

RD2 Ent. Digital Sal. Digital Bit 2 puerto paralelo esclavo

RD3 Ent. Digital Sal. Digital Bit 3 puerto paralelo esclavo

RD4 Ent. Digital Sal. Digital Bit 4 puerto paralelo esclavo

RD5 Ent. Digital Sal. Digital Bit 5 puerto paralelo esclavo

RD6 Ent. Digital Sal. Digital Bit 6 puerto paralelo esclavo

RD7 Ent. Digital Sal. Digital Bit 7 puerto paralelo esclavo

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

FUNCIONES PORTE
Terminal Funciones
RE0 Ent. Digital Sal. Digital Ent. Analógica Lectura PSP

RE1 Ent. Digital Sal. Digital Ent. Analógica Escritura PSP

RE2 Ent. Digital Sal. Digital Ent. Analógica Habilitación PSP

Prof. Luis Zurita Microcontroladores II


LENGUAJE C. TIPOS DE DATOS. IUT Cumaná

El compilador CCS acepta los siguientes tipos de variables:


Especificación Significado Tamaño Rango
char carácter 8 bits 0 a 255 (sin signo)
Int entero 8 bits 0 a 255 (sin signo)
float Coma flotante 32 bits 6 bits de precisión
double Float doble No soportado No para PCM
precisión
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 IUT Cumaná

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.
Especificación Significado Tamaño Rango
Signed char caractér con 8 bits -128 a 128
signo
Signed int Entero con signo 8 bits -128 a 128

Signed long Coma flotante 16 bits -32768 a 32768


Los números negativos se codifican en complemento a 2.
Cuando se opera con distintos grupos de datos en una misma
expresión, se aplican una serie de reglas para resolver las
diferencias.
En general se produce una “promoción” hacia los tipos de datos
de mayor longitud presentes en la expresión.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

LENGUAJE C. CONSTANTES

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

OPERADORES ARITMÉTICOS

OPERADORES RELACIONALES

!=
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

OPERADORES LÓGICOS

OPERADORES A NIVEL DE BITS

Prof. Luis Zurita Microcontroladores II


OPERADORES DE INCREMENTO Y IUT Cumaná

DECREMENTO

OPERADORES DE CORRIMIENTO

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

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 k = 5;
byte const SEMANAS = 52;
float temp_limit=500.0;
char k, kant=‘0’;
int x,y,z;

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

VARIABLES
• Las variables pueden ser de tipo LOCAL o GLOBAL.
• Las variables locales sólo se utilizan en la función
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 función y fuera de ellas. Las variables
globales son puestas a cero cuando se inicia la
función principal main().

Prof. Luis Zurita Microcontroladores II


EJEMPLO DE VARIABLES LOCALES Y IUT Cumaná

GLOBALES
int16 counter; //Variable global
Void FUNCION ( )
{
int dato1, dato2=34; //Variables locales
}
void main()
{
int8 suma; //Variable local
}

Prof. Luis Zurita Microcontroladores II


FUNCIONES IUT Cumaná

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 definición de una función:
Tipo_dato nombre_función (tipo param1, tipo param2, …)
{
cuerpo de la función (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 especificación tipo
void.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

La manera que tiene una función para devolver un


valor es mediante la sentencia return:
return (expresión); ó return expresión;
La expresión debe proporcionar el mismo tipo de
dato que el especificado en la función. Si no debe
devolver nada, se finaliza con:
return;
Cuando una función se encuentra con una sentencia
return se vuelve a la rutina de llamada inmediatamente y
las sentencias posteriores a return no se ejecutan.
Además de con las sentencia return, las funciones
terminan su ejecución y vuelven al lugar desde donde se
les llamó cuando alcanzan la llave de cierre de función }
tras ejecutar la última sentencia de la misma.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

Además de devolver valores, una función también puede


recibir parámetros (denominados argumentos) según se indicó
en su definición.
Por ejemplo:
int suma(int a, int b) Parámetros
{ formales
return(a+b);
}
main()
{
int c; Argumentos
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
parámetro formal de la función y no modifica su valor en la
función de partida.
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

DECLARACIONES DE CONTROL
If-else
Cuando la expresión evaluada es verdadera, Las
instrucciones de la sentencia 1 son ejecutadas. Si la expresión es
falsa, las instrucciones de la sentencia 2 son ejecutadas. La
expresión debe ser evaluada a un valor entero. Los paréntesis
que encierra la expresión son obligatorios.
La palabra especial “else sentencia 2” es opcional.
If – else: If – else:
if (expresión) if (expresión) {
sentencia1; sentencia1;}
else else {
sentencia2; sentencia2;}
Prof. Luis Zurita Microcontroladores II
Sentencia if. IUT Cumaná

Se ejecuta una sentencia o bloque de código si la expresión que


acompaña al if tiene un valor distinto a cero (verdadero). Si es cero
(falso) continúa sin ejecutar la sentencia o bloque de sentencias.
if (expresión) ó if (expresión=
sentencia; {
sentencia 1;
sentencia 2;

}
Sentencia if-else
Se evalúa una expresión y, si es cierta se ejecuta el primer bloque
de código o sentencia 1. Si es falsa, se ejecuta el segundo.
if (expresión) NOTA: Se pueden combinar varios
sentencia 1; if-else para establecer múltiples
else caminos de decisión
sentencia 2;
Abreviatura: (expresión)?(sentencia 1): (sentencia 2);

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

NO
A=0? C=5

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

B=10

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

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

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

NO
A>20? B=15

SI

B=5

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

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

NO

Prof. Luis Zurita Microcontroladores II


Sentencia switch IUT Cumaná

Sustituye a if-else cuando se realiza una selección múltiple que


compara una expresión 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 (expresión)
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; sólo si no hay ninguna
break; coincidencia con las
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
IUT Cumaná

SI
switch (A){
A=0? B=1 case 0:
B=1;
NO break;
case 2:
SI B=2;
A=2? B=2
break;
case 3:
NO
B=3;
break;
SI
A=3? B=3 default:break
;}
NO

Prof. Luis Zurita Microcontroladores II


IUT Cumaná
Sentencia de bucle for.
Se emplea para repetir una sentencia o bloque de
sentencias:
for (inicialización; condición; incremento)
{
sentencia(s);
}
En la inicialización se le asigna un valor inicial a una
variable que se emplea para el control de la repetición del
bucle.
La condición se evalúa antes de ejecutar la sentencia.
Si es cierta, se ejecuta el bucle. Si no, se sale del mismo.
El incremento establece cómo cambia la variable de
control cada vez que se repite el bucle.
Es posible anidar bucles for para modificar dos o más
variables de control.

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

For(N=1;N<=10;N++)
N=1 {
NO Printf(“%u”,N);
}
NO
N<=10?

SI

IMPRIMIR N
N=N+1 SI

NO

Prof. Luis Zurita Microcontroladores II


Sentencia de bucle while: IUT Cumaná

La repetición se lleva a cabo mientras sea cierta una expresión.


while (expresión)
{
sentencia(s);
}
La expresión se evalúa antes de cualquier iteración. Si es falsa, ya no
se ejecuta la sentencia o bloque de sentencias.
Sentencia de bucle do-while:
do
{
sentencia(s);
}
while (expresión)
Las sentencias se ejecutan antes de que se evalúe la expresión, por
lo que el bucle se ejecuta siempre al menos una vez.

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

COMENTARIOS
Los comentarios se incluyen en el código fuente para documentar y
orientar al programador sobre el código que se diseña.
Son ignorados por el compilador y no afectan a la longitud ni
rapidez de ejecución del código final.
Un comentario se puede colocar en cualquier lugar del programa y
pueden tener la longitud y el número de líneas que se quiera.
Hay dos formatos posibles para los comentarios:
Formato 1. Empiezan por // y llegan hasta el final de la línea.
// Esto es un comentario.
Formato 2. Empiezan por /* y finalizan por */. No es posible anidar
comentarios con este formato. Ejemplos:
/*Esto también es
un comentario*/
/*Pero esto que /*parece un comentario válido*/ no lo es*/

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

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.

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

DIRECTIVAS
• Las directivas de pre-procesado comienzan
con el símbolo # y continúan con un comando
específico. La sintaxis depende del comando.
Algunos comandos no permiten otros
elementos sintácticos en la misma expresión.

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

DIRECTIVAS DE INTERÉS
# DEVICE chip: permite definir el PIC con el que se
realizará la compilación. Ejemplo:
#device PIC16F877
#FUSES options: permite definir la palabra de
configuración 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


IUT Cumaná

DIRECTIVAS DE INTERÉS
#USE DELAY (CLOCK=SPEED): permite definir las frecuencias
del oscilador del PIC, el compilador lo utiliza para realizar
cálculos 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 máquina)

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

FUNCIONES
• El compilador CCS suministra una serie de funciones
predefinidas para acceder y utilizar el PIC y sus
periféricos. Estas funciones facilitan la configuración
del PIC sin entrar en el nivel de los registros
especiales.

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

MANEJO DE LOS PUERTOS


• En lenguaje C se pueden gestionar los puertos de dos
formas:
– Se declaran los registros TRISX y PORTX definiendo
su posición en la memoria RAM como variables de
C.
– Utilizando las directivas específicas del compilador
(#USE FAST_IO,#USE STANDARD_IO)

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

MANEJO DE LOS PUERTOS


• A través 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

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

MANEJO DE LOS PUERTOS


• Una vez definidas estas variables se pueden
configurar y controlar los puertos a través de los
comandos de asignación.
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
IUT Cumaná

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);
bit_set(var,bit);
Bit_test(var,bit);
Swap(var);
Ejemplos:
bit_set(PORTC,4);
If (bit_test(PORTB,0)==1) bit_clear(PORTB,1);
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

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 = posición.bit. Ejemplo:
#BIT RB4=0x06.4 //PORTB=0x06
RB4=0;

Prof. Luis Zurita Microcontroladores II


MANEJO DE LOS PUERTOS
IUT Cumaná

#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
IUT Cumaná

MANEJO DE PUERTOS
• A través de las directivas
El compilador ofrece funciones predefinidas para trabajar con
los puertos. Estas funciones son:
output_X(valor);
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
IUT Cumaná

MANEJO DE PUERTOS
• Existen una serie de funciones asociadas a un pin*. El
parámetro pin se define en el fichero include con un formato
del tipo PIN_Xn, donde X es el puerto y n es el número 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 tensión flotante
input_state (pin*);
Input (pin*);
Prof. Luis Zurita Microcontroladores II
IUT Cumaná

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 función output_x() se saca el valor al
puerto y con la función input_x() se lee el
puerto. La directiva no modifica previamente
el registro TRIS correspondiente.

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

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
IUT Cumaná

MANEJO DE PUERTOS
#USE STANDARD_IO(PUERTO)
Con la función output_x() el compilador se
asegura de que el terminal, o terminales
correspondientes sean de salida mediante la
modificación del TRIS correspondiente. Con la
función input_x() ocurre lo mismo pero
asegurando el terminal o terminales como
entrada. Es la directiva por defecto. Entonces,
el ejemplo anterior quedaría:

Prof. Luis Zurita Microcontroladores II


IUT Cumaná

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 IUT Cumaná

( ciclo while )
// Definición de variables globales
// Definición de funciones
void main(void)
{
// Definición de variables locales
// Configuración de registros (recursos y puertos)
// ciclo infinito
while ( 1 )
{
// Programa de usuario
}
}
Prof. Luis Zurita Microcontroladores II
ESTRUCTURA DE UN PROGRAMA EN C IUT Cumaná

( ciclo for )
// Definición de variables globales
// Definición de funciones
void main(void)
{
// Definición de variables locales
// Configuración de registros (recursos y puertos)
// ciclo infinito
for ( ; ; )
{
// Programa de usuario
}
}
Prof. Luis Zurita Microcontroladores II
ESTRUCTURA DE UN PROGRAMA EN C IUT Cumaná

( ciclo do - while )
// Definición de variables globales
// Definición de funciones
void main(void)
{
// Definición de variables locales
// Configuración de registros (recursos y puertos)
// ciclo infinito
do
{
// Programa de usuario
} while ( 1 ) ;
}
Prof. Luis Zurita Microcontroladores II

Você também pode gostar