SlideShare una empresa de Scribd logo
1 de 56
IUT Cumaná MICROCONTROLADORES II(FAMILIA PIC16F87X)LENGUAJE C PARA PICS PROF. LUIS ZURITA
CARACTERÍSTICAS IUT Cumaná 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-onReset (POR) Power-up Timer (PWRT)  OscillatorStart-up Timer (OST) WatchdogTimer (WDT) independiente del cristal. Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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 ) IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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 IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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 IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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. IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
FUNCIONES PORTA IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
FUNCIONES PORTB IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
FUNCIONES PORTC IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
FUNCIONES PORTD IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
FUNCIONES PORTE IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná LENGUAJE C. TIPOS DE DATOS. El compilador CCS acepta los siguientes tipos de variables: Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná 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. 	    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
LENGUAJE C. CONSTANTES IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
OPERADORES ARITMÉTICOS IUT Cumaná OPERADORES RELACIONALES != Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
OPERADORES LÓGICOS IUT Cumaná OPERADORES A NIVEL DE BITS Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
OPERADORES DE INCREMENTO Y DECREMENTO IUT Cumaná OPERADORES DE CORRIMIENTO Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
VARIABLES IUT Cumaná 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; floattemp_limit=500.0; char 	k, kant=‘0’; intx,y,z; Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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(). IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
EJEMPLO DE VARIABLES LOCALES Y GLOBALES int16 counter; 			//Variable global Void FUNCION ( ) { int dato1, dato2=34; 	//Variables locales } voidmain() { 		int8 suma;			//Variable local } IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná 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 definición de una función: Tipo_datonombre_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) 		{ return(a+b); 		} main() 		{ int c; 			c= suma(10 , 23); 		} 		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. Parámetros formales Argumentos de llamada Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
DECLARACIONES DE CONTROL IUT Cumaná 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 (expresión) 		sentencia1; else 		sentencia2; If – else: if (expresión) { 		sentencia1;} else { 		sentencia2;} Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná Sentencia if. 	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) 		sentencia 1; else 		sentencia 2; Abreviatura: (expresión)?(sentencia 1): (sentencia 2); NOTA: Se pueden combinar varios if-else para establecer múltiples caminos de decisión Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná A=0? C=5 NO If (A==0) B=10; Else C=5; SI B=10 If (A!=1) B=10; Else C=5; Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná A>10? NO If (A>10)    {IF(A>20) B=5; Else B=15;} SI A>20? B=15 NO SI B=5 Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná A>10? NO if (A>10)    {IF(A>20) B=15;} else B=5; SI B=5 A>20? B=15 SI NO Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná Sentencia switch 	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) {						 case constante 1:			 			grupo de sentencias;	 			break;	 case constante 2:			 			grupo de sentencias;	 			break;			 …						 default:					 			grupo n de sentencias; }		 Nota: break es opcional. Si no aparece se sigue con el case siguiente. default es opcional y el bloque asociado se ejecuta sólo si no hay ninguna coincidencia con las constantes especificadas. No puede haber dos constantes iguales en dos case de la misma sentencia switch. Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná A=0? switch (A){   	case 0: 	B=1; 	break; 	case 2: 	B=2; 	break; 	case 3: 	B=3; 	break; default:break;} B=1 SI NO A=2? B=2 SI NO A=3? B=3 SI 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++) { Printf(“%u”,N); } N=1 NO N<=10? NO SI IMPRIMIR N N=N+1 SI NO Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná Sentencia de bucle while: 	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
COMENTARIOS IUT Cumaná       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
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.  IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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. IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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> IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
DIRECTIVAS DE INTERÉS IUT Cumaná #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
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. IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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) IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
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 IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
MANEJO DE LOS PUERTOS IUT Cumaná 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
MANEJO DE LOS PUERTOS IUT Cumaná 	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
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; IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná 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 voidmain ( ) { 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 IUT Cumaná 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
MANEJO DE PUERTOS IUT Cumaná 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
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. IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
MANEJO DE PUERTOS IUT Cumaná #include 	<16F877.h> #fuses 	XT,NOWDT,NOLVP #use delay	(clock=4000000) #use fast_io(B) voidmain ( ) { 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 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: IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
MANEJO DE PUERTOS #include 	<16F877.h> #fuses 	XT,NOWDT,NOLVP #use delay	(clock=4000000) #use standard_io(B) voidmain ( ) { port_b_pullups (TRUE); output_low(PIN_B1); while (1){ if (input(PIN_B0)==1) output_low(PIN_B1); else output_high (PIN_B1); 		} } IUT Cumaná Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná ESTRUCTURA DE UN PROGRAMA EN C( ciclo while ) // Definición de variables globales // Definición de funciones voidmain(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
IUT Cumaná ESTRUCTURA DE UN PROGRAMA EN C ( ciclo for ) // Definición de variables globales // Definición de funciones voidmain(void) {       // Definición de variables locales 	// Configuración de registros (recursos y puertos)       // ciclo infinito for ( ; ; ) 	{ 	    // Programa de usuario 	} } Prof. Luis Zurita                                                                                                                                                                                            Microcontroladores II
IUT Cumaná ESTRUCTURA DE UN PROGRAMA EN C ( ciclo do - while ) // Definición de variables globales // Definición de funciones voidmain(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

Más contenido relacionado

Destacado

Admision y matriculación ciclos formativos 2016/2017 Extremadura
Admision y matriculación ciclos formativos 2016/2017 ExtremaduraAdmision y matriculación ciclos formativos 2016/2017 Extremadura
Admision y matriculación ciclos formativos 2016/2017 ExtremaduraJosé María Delgado Casado
 
Presentación Erasmus Curso 2012/2013 IES Javier García Téllez
Presentación Erasmus Curso 2012/2013 IES Javier García TéllezPresentación Erasmus Curso 2012/2013 IES Javier García Téllez
Presentación Erasmus Curso 2012/2013 IES Javier García TéllezJosé María Delgado Casado
 
Comparar registros de 16 bits
Comparar registros de 16 bitsComparar registros de 16 bits
Comparar registros de 16 bitsLuis Zurita
 
Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupcionesLuis Zurita
 
Diagramas de flujo del examen del marcador
Diagramas de flujo del examen del marcadorDiagramas de flujo del examen del marcador
Diagramas de flujo del examen del marcadorLuis Zurita
 
Presentación Erasmus IES Javier García Téllez - Curso 2013 2014
Presentación Erasmus IES Javier García Téllez - Curso 2013 2014Presentación Erasmus IES Javier García Téllez - Curso 2013 2014
Presentación Erasmus IES Javier García Téllez - Curso 2013 2014José María Delgado Casado
 

Destacado (10)

Admision y matriculación ciclos formativos 2016/2017 Extremadura
Admision y matriculación ciclos formativos 2016/2017 ExtremaduraAdmision y matriculación ciclos formativos 2016/2017 Extremadura
Admision y matriculación ciclos formativos 2016/2017 Extremadura
 
Clase 1
Clase 1Clase 1
Clase 1
 
Bolascriollas
BolascriollasBolascriollas
Bolascriollas
 
Presentación Erasmus Curso 2012/2013 IES Javier García Téllez
Presentación Erasmus Curso 2012/2013 IES Javier García TéllezPresentación Erasmus Curso 2012/2013 IES Javier García Téllez
Presentación Erasmus Curso 2012/2013 IES Javier García Téllez
 
Herramientas colaborativas
Herramientas colaborativasHerramientas colaborativas
Herramientas colaborativas
 
Comparar registros de 16 bits
Comparar registros de 16 bitsComparar registros de 16 bits
Comparar registros de 16 bits
 
Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupciones
 
Diagramas de flujo del examen del marcador
Diagramas de flujo del examen del marcadorDiagramas de flujo del examen del marcador
Diagramas de flujo del examen del marcador
 
Insercion laboral alumnos IES San Roque
Insercion laboral alumnos IES San RoqueInsercion laboral alumnos IES San Roque
Insercion laboral alumnos IES San Roque
 
Presentación Erasmus IES Javier García Téllez - Curso 2013 2014
Presentación Erasmus IES Javier García Téllez - Curso 2013 2014Presentación Erasmus IES Javier García Téllez - Curso 2013 2014
Presentación Erasmus IES Javier García Téllez - Curso 2013 2014
 

Más de Luis Zurita

TALLER NORMAS APA
TALLER NORMAS APATALLER NORMAS APA
TALLER NORMAS APALuis Zurita
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUSLuis Zurita
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y tecladoLuis Zurita
 
Grupos micro2 13
Grupos micro2 13Grupos micro2 13
Grupos micro2 13Luis Zurita
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreLuis Zurita
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronicaLuis Zurita
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iycLuis Zurita
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013Luis Zurita
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronicaLuis Zurita
 

Más de Luis Zurita (20)

TALLER NORMAS APA
TALLER NORMAS APATALLER NORMAS APA
TALLER NORMAS APA
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUS
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y teclado
 
Pevmicroi ieo
Pevmicroi ieoPevmicroi ieo
Pevmicroi ieo
 
Pevmicroii13 2
Pevmicroii13 2Pevmicroii13 2
Pevmicroii13 2
 
Pevmicro1 t2 13
Pevmicro1 t2 13Pevmicro1 t2 13
Pevmicro1 t2 13
 
Pev electronica
Pev electronicaPev electronica
Pev electronica
 
Grupos micro2 13
Grupos micro2 13Grupos micro2 13
Grupos micro2 13
 
Pevmicro1 t2 13
Pevmicro1 t2 13Pevmicro1 t2 13
Pevmicro1 t2 13
 
Micro2 tema 5
Micro2 tema 5Micro2 tema 5
Micro2 tema 5
 
Micro2 tema 4
Micro2 tema 4Micro2 tema 4
Micro2 tema 4
 
Micro2 tema 3
Micro2 tema 3Micro2 tema 3
Micro2 tema 3
 
Micro2 tema 2
Micro2 tema 2Micro2 tema 2
Micro2 tema 2
 
Micro2 tema 1
Micro2 tema 1Micro2 tema 1
Micro2 tema 1
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladore
 
Pevmicroii13 2
Pevmicroii13 2Pevmicroii13 2
Pevmicroii13 2
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronica
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iyc
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronica
 

MICROCONTROLADORES II EN C. TEMA 1

  • 1. IUT Cumaná MICROCONTROLADORES II(FAMILIA PIC16F87X)LENGUAJE C PARA PICS PROF. LUIS ZURITA
  • 2. CARACTERÍSTICAS IUT Cumaná 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-onReset (POR) Power-up Timer (PWRT) OscillatorStart-up Timer (OST) WatchdogTimer (WDT) independiente del cristal. Prof. Luis Zurita Microcontroladores II
  • 3. 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 ) IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 4. 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 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 5. 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 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 6. 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. IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 7. IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 8. IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 9. FUNCIONES PORTA IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 10. FUNCIONES PORTB IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 11. FUNCIONES PORTC IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 12. FUNCIONES PORTD IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 13. FUNCIONES PORTE IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 14. IUT Cumaná LENGUAJE C. TIPOS DE DATOS. El compilador CCS acepta los siguientes tipos de variables: Prof. Luis Zurita Microcontroladores II
  • 15. IUT Cumaná 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. 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
  • 16. LENGUAJE C. CONSTANTES IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 17. OPERADORES ARITMÉTICOS IUT Cumaná OPERADORES RELACIONALES != Prof. Luis Zurita Microcontroladores II
  • 18. OPERADORES LÓGICOS IUT Cumaná OPERADORES A NIVEL DE BITS Prof. Luis Zurita Microcontroladores II
  • 19. OPERADORES DE INCREMENTO Y DECREMENTO IUT Cumaná OPERADORES DE CORRIMIENTO Prof. Luis Zurita Microcontroladores II
  • 20. VARIABLES IUT Cumaná 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; floattemp_limit=500.0; char k, kant=‘0’; intx,y,z; Prof. Luis Zurita Microcontroladores II
  • 21. 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(). IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 22. EJEMPLO DE VARIABLES LOCALES Y GLOBALES int16 counter; //Variable global Void FUNCION ( ) { int dato1, dato2=34; //Variables locales } voidmain() { int8 suma; //Variable local } IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 23. IUT Cumaná 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 definición de una función: Tipo_datonombre_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
  • 24. 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
  • 25. 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) { return(a+b); } main() { int c; c= suma(10 , 23); } 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. Parámetros formales Argumentos de llamada Prof. Luis Zurita Microcontroladores II
  • 26. DECLARACIONES DE CONTROL IUT Cumaná 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 (expresión) sentencia1; else sentencia2; If – else: if (expresión) { sentencia1;} else { sentencia2;} Prof. Luis Zurita Microcontroladores II
  • 27. IUT Cumaná Sentencia if. 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) sentencia 1; else sentencia 2; Abreviatura: (expresión)?(sentencia 1): (sentencia 2); NOTA: Se pueden combinar varios if-else para establecer múltiples caminos de decisión Prof. Luis Zurita Microcontroladores II
  • 28. IUT Cumaná A=0? C=5 NO If (A==0) B=10; Else C=5; SI B=10 If (A!=1) B=10; Else C=5; Prof. Luis Zurita Microcontroladores II
  • 29. IUT Cumaná A>10? NO If (A>10) {IF(A>20) B=5; Else B=15;} SI A>20? B=15 NO SI B=5 Prof. Luis Zurita Microcontroladores II
  • 30. IUT Cumaná A>10? NO if (A>10) {IF(A>20) B=15;} else B=5; SI B=5 A>20? B=15 SI NO Prof. Luis Zurita Microcontroladores II
  • 31. IUT Cumaná Sentencia switch 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) { case constante 1: grupo de sentencias; break; case constante 2: grupo de sentencias; break; … default: grupo n de sentencias; } Nota: break es opcional. Si no aparece se sigue con el case siguiente. default es opcional y el bloque asociado se ejecuta sólo si no hay ninguna coincidencia con las constantes especificadas. No puede haber dos constantes iguales en dos case de la misma sentencia switch. Prof. Luis Zurita Microcontroladores II
  • 32. IUT Cumaná A=0? switch (A){ case 0: B=1; break; case 2: B=2; break; case 3: B=3; break; default:break;} B=1 SI NO A=2? B=2 SI NO A=3? B=3 SI NO Prof. Luis Zurita Microcontroladores II
  • 33. 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
  • 34. IUT Cumaná For(N=1;N<=10;N++) { Printf(“%u”,N); } N=1 NO N<=10? NO SI IMPRIMIR N N=N+1 SI NO Prof. Luis Zurita Microcontroladores II
  • 35. IUT Cumaná Sentencia de bucle while: 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
  • 36. COMENTARIOS IUT Cumaná 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
  • 37. 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. IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 38. 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. IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 39. 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> IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 40. DIRECTIVAS DE INTERÉS IUT Cumaná #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
  • 41. 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. IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 42. 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) IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 43. 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 IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 44. MANEJO DE LOS PUERTOS IUT Cumaná 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
  • 45. MANEJO DE LOS PUERTOS IUT Cumaná 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
  • 46. 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; IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 47. IUT Cumaná 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 voidmain ( ) { 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
  • 48. MANEJO DE PUERTOS IUT Cumaná 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
  • 49. MANEJO DE PUERTOS IUT Cumaná 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
  • 50. 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. IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 51. MANEJO DE PUERTOS IUT Cumaná #include <16F877.h> #fuses XT,NOWDT,NOLVP #use delay (clock=4000000) #use fast_io(B) voidmain ( ) { 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
  • 52. 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: IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 53. MANEJO DE PUERTOS #include <16F877.h> #fuses XT,NOWDT,NOLVP #use delay (clock=4000000) #use standard_io(B) voidmain ( ) { port_b_pullups (TRUE); output_low(PIN_B1); while (1){ if (input(PIN_B0)==1) output_low(PIN_B1); else output_high (PIN_B1); } } IUT Cumaná Prof. Luis Zurita Microcontroladores II
  • 54. IUT Cumaná ESTRUCTURA DE UN PROGRAMA EN C( ciclo while ) // Definición de variables globales // Definición de funciones voidmain(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
  • 55. IUT Cumaná ESTRUCTURA DE UN PROGRAMA EN C ( ciclo for ) // Definición de variables globales // Definición de funciones voidmain(void) { // Definición de variables locales // Configuración de registros (recursos y puertos) // ciclo infinito for ( ; ; ) { // Programa de usuario } } Prof. Luis Zurita Microcontroladores II
  • 56. IUT Cumaná ESTRUCTURA DE UN PROGRAMA EN C ( ciclo do - while ) // Definición de variables globales // Definición de funciones voidmain(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