Your SlideShare is downloading. ×
Micro2 tema 1
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Micro2 tema 1

1,539
views

Published on

Published in: Education

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,539
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
165
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. MICROCONTROLADORES II(FAMILIA PIC16F87X)(FAMILIA PIC16F87X)LENGUAJE C PARA PICSTEMA 1PROF. LUIS ZURITA
  • 2. 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.• 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
  • 3. CARACTERÍSTICAS (PERIFÉRICOS)• Posee 5 puertos de entrada y salida (PORTA, B, C, D, E)• Timer 0: timer/counter de 8 bits con un preescaler de 8valores.• Timer 1: 16 bits con timer/counter con preescaler• Timer 2: 8 bits con timer/counter con registro de estado• Timer 2: 8 bits con timer/counter con registro de estadode 8-bit, preescaler y post escaler• Dos módulos de Captura, Comparación y PWM(Modulación por anchura de pulso)– Captura es de 16 bits, máx. resolución es 12.5 ns– Comparación es de 16 bits, máx. resolución es 200 ns– PWM con una resolución de 10 bits máxima.Prof. Luis Zurita Microcontroladores II
  • 4. CARACTERÍSTICAS (PERIFÉRICOS 2)• Convertidor analógico a digital de 10-bit multicanal (de5 a 8 canales)• Puerto serial síncrono (SSP) con SPI. (modo maestro) e I2C(maestro/esclavo)• Transmisor-Receptor síncrono-asíncrono universal(USART/SCI) con 8 – 9 bits(USART/SCI) con 8 – 9 bits• Puerto paralelo esclavo (PSP) con 8 bits de ancho, conterminales 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
  • 5. LENGUAJE C. TIPOS DE DATOS.El compilador CCS acepta los siguientes tipos de variables:Especificación Significado Tamaño Rangochar 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ónByte Entero de 8 bits 8 bits 0 a 255double Float doble precisión No soportado No para PCMdouble Float doble precisión No soportado No para PCMvoid Sin valor nulo Ningunoint1 Entero de 1 bit 1 bit 0 a 1int8 Entero de 8 bits 8 bits 0 a 255 (sin signo)int16 Entero de 16 bits 16 bits 0 a 65535int32 Entero de 32 bits 32 bits 0 a (232-1)Short Entero de 1 bit 1 bit 0 a 1long Entero de 16 bits 16 bits 0 a 65535 (sin signo)Prof. Luis Zurita Microcontroladores II
  • 6. LENGUAJE C. TIPOS DE DATOSTodos los tipos de datos son por defecto sin signo (unsigned)salvo los de tipo float.Para almacenar datos con signo, hay que introducir elmodificador signed delante del tipo. El efecto que se consigue es elrecogido en la siguiente tabla.Especificación Significado Tamaño RangoSigned char caractér consigno8 bits -128 a 128Signed int Entero con signo 8 bits -128 a 128Los números negativos se codifican en complemento a 2.Cuando se opera con distintos grupos de datos en una mismaexpresión, se aplican una serie de reglas para resolver lasdiferencias.En general se produce una “promoción” hacia los tipos de datosde mayor longitud presentes en la expresión.Signed int Entero con signo 8 bits -128 a 128Signed long Coma flotante 16 bits -32768 a 32768Prof. Luis Zurita Microcontroladores II
  • 7. LENGUAJE C. CONSTANTESConstantes123 Decimal0123 OctalValor fijo que no cambiará a lo largo del programa. Tipos aceptados:Prof. Luis Zurita Microcontroladores II0123 Octal0x123 Hexadecimal0b01001101 Binario‘X’ Carácter‘010’ Carácter octal‘X’ Carácter especial; x puede ser: ¿n, t, b, r, f, ‘ , d, v?“abcdef” Cadena (el carácter nulo se agrega al final)
  • 8. LENGUAJE C. CONSTANTES• A una constante se le puede asignar un nombre oetiqueta por medio de la directiva #define:#define PI=3.1416;• Cada vez que se escriba la etiqueta “PI” la compilaciónse encargará de reemplazarla por el valor 3.1416se encargará de reemplazarla por el valor 3.1416• A veces es necesario guardar las constantes en lamemoria del programa, mediante la declaración:const tipo nombre_constante= valor;Ejemplo:const int TOPECONTADOR=100;Prof. Luis Zurita Microcontroladores II
  • 9. OPERADORES• Las expresiones son una combinación deoperandos y operadores. Los operandos son losvalores sobre los cuales se van a trabajar y losoperadores especifican lo que se va a hacer conlos operandos. Ejemplo:los operandos. Ejemplo:C= A + B;• Donde “=“ y “+” son operandos de asignación ysuma respectivamente.• Indican la tarea que se va a ejecutar sobre losoperandos A, B y C.Prof. Luis Zurita Microcontroladores II
  • 10. OPERADORES ARITMÉTICOSOperador Descripción Ejemplo+ Suma (enteros o reales) Resul=var1 + var2- Resta (enteros o reales) Resul=var1 - var2* Multiplicación (enteros o reales) Resul=var1 * var2/ División (enteros o reales) Resul=var1 / var2- Cambio de signo en enteros o reales -var1% Módulo; resto de una división entera Rango=n[A1]%256OPERADORES RELACIONALESProf. Luis Zurita Microcontroladores II% Módulo; resto de una división entera Rango=n[A1]%256Operador Descripción˂ Menor que˃ Mayor que˂= Menor o igual que˃= Mayor o igual que== Igual a!= Distinto de
  • 11. OPERADORES LÓGICOSOPERADORES A NIVEL DE BITSOperador Descripción! NO lógico (NOT)&& Y lógico (AND)|| O lógico (OR)OPERADORES A NIVEL DE BITSProf. Luis Zurita Microcontroladores IIOperador Descripción~ Negación de bits (complemento a 1)& Y de bits (AND)˄˄ O exclusivo de bits (XOR)| O de bits (OR)
  • 12. OPERADORES DE INCREMENTO YDECREMENTOOPERADORES DE CORRIMIENTOOperador Descripción++ Incremento- - DecrementoOPERADORES DE CORRIMIENTOProf. Luis Zurita Microcontroladores IIOperador Descripción˃˃ Desplazamiento a la derecha˂˂ Desplazamiento a la izquierdaEjemplo. Sea A= 0b00001000, si se ejecuta: A˃˃3;El nuevo valor de A será= 0b00000001, ya con las 3 rotaciones deposición a la derecha.
  • 13. VARIABLES• Las variables se utilizan para nombrar posiciones de memoriaRAM; se deben declarar, obligatoriamente, antes deutilizarlas; para ello se debe indicar el nombre y el tipo dedato 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.– 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;int UNIDAD;int UNIDAD=0, DECENA=0, CENTENA=0;Prof. Luis Zurita Microcontroladores II
  • 14. VARIABLES• Las variables pueden ser de tipo LOCAL o GLOBAL.• Las variables locales sólo se utilizan en la funcióndonde se encuentran declaradas; las variablesglobales se pueden utilizar en todas las funciones delglobales se pueden utilizar en todas las funciones delprograma. Ambas deben declararse antes de serutilizadas y las globales deben declararse antes decualquier función y fuera de ellas. Las variablesglobales son puestas a cero cuando se inicia lafunción principal main().Prof. Luis Zurita Microcontroladores II
  • 15. EJEMPLO DE VARIABLES LOCALES YGLOBALESint16 counter; //Variable globalVoid FUNCION ( ){int dato1, dato2=34; //Variables locales}}void main(){int8 suma; //Variable local}Prof. Luis Zurita Microcontroladores II
  • 16. FUNCIONESLas funciones son los bloques constructivosfundamentales en C.Todas las sentencias deben encontrarse dentro defunciones.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, …)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. Sino se indica nada, se entiende que devuelve un entero. Sino devuelve nada debe incluirse una especificación tipovoid.Prof. Luis Zurita Microcontroladores II
  • 17. La manera que tiene una función para devolver unvalor es mediante la sentencia return:return (expresión); ó return expresión;La expresión debe proporcionar el mismo tipo dedato que el especificado en la función. Si no debedevolver nada, se finaliza con:return;return;Cuando una función se encuentra con una sentenciareturn se vuelve a la rutina de llamada inmediatamente ylas sentencias posteriores a return no se ejecutan.Además de con las sentencia return, las funcionesterminan su ejecución y vuelven al lugar desde donde seles llamó cuando alcanzan la llave de cierre de función }tras ejecutar la última sentencia de la misma.Prof. Luis Zurita Microcontroladores II
  • 18. Además de devolver valores, una función también puederecibir parámetros (denominados argumentos) según se indicóen su definición.Por ejemplo:int suma(int a, int b){return(a+b);}main()Parámetrosformalesmain(){int c;c= suma(10 , 23);}Los argumentos se pueden pasar a las funciones por valor opor referencia.La llamada por valor copia el argumento de llamada en elparámetro formal de la función y no modifica su valor en lafunción de partida.Argumentosde llamadaProf. Luis Zurita Microcontroladores II
  • 19. DECLARACIONES DE CONTROLIf-elseCuando la expresión evaluada es verdadera, Lasinstrucciones de la sentencia 1 son ejecutadas. Si la expresión esfalsa, las instrucciones de la sentencia 2 son ejecutadas. Laexpresión debe ser evaluada a un valor entero. Los paréntesisque encierra la expresión son obligatorios.La palabra especial “else sentencia 2” es opcional.If – else:if (expresión)sentencia1;elsesentencia2;If – else:if (expresión) {sentencia1;}else {sentencia2;}La palabra especial “else sentencia 2” es opcional.Prof. Luis Zurita Microcontroladores II
  • 20. Sentencia if.Se ejecuta una sentencia o bloque de código si la expresión queacompañ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-elseSentencia if-elseSe evalúa una expresión y, si es cierta se ejecuta el primer bloquede código o sentencia 1. Si es falsa, se ejecuta el segundo.if (expresión)sentencia 1;elsesentencia 2;Abreviatura: (expresión)?(sentencia 1): (sentencia 2);NOTA: Se pueden combinar variosif-else para establecer múltiplescaminos de decisiónProf. Luis Zurita Microcontroladores II
  • 21. A=0? C=5B=10If (A==0) B=10;Else C=5;NOSIIf (A!=1) B=10;Else C=5;Prof. Luis Zurita Microcontroladores II
  • 22. If (A>10){IF(A>20) B=5;Else B=15;}A>10?SINOA>20? B=15B=5NOSIProf. Luis Zurita Microcontroladores II
  • 23. B=5if (A>10){IF(A>20) B=15;}else B=5;A>10?SINOA>20? B=15B=5SINOProf. Luis Zurita Microcontroladores II
  • 24. Sentencia switchSustituye a if-else cuando se realiza una selección múltiple quecompara una expresión con una lista de constantes enteras ocaracteres. Cuando se da una coincidencia, el cuerpo de sentenciasasociadas a esa constante se ejecuta hasta que aparezca break.switch (expresión){case constante 1:grupo de sentencias;Nota: break es opcional. Sino aparece se sigue con elcase siguiente.break;case constante 2:grupo de sentencias;break;…default:grupo n de sentencias;}No puede haber dosconstantes iguales en doscase de la misma sentenciaswitch.default es opcional y elbloque asociado se ejecutasólo si no hay ningunacoincidencia con lasconstantes especificadas.Prof. Luis Zurita Microcontroladores II
  • 25. A=2? B=2SIA=0?NOB=1SIswitch (A){case 0:B=1;break;case 2:B=2;break;A=2? B=2A=3? B=3SINONObreak;case 3:B=3;break;default:break;}Prof. Luis Zurita Microcontroladores II
  • 26. Sentencia de bucle for.Se emplea para repetir una sentencia o bloque desentencias:for (inicialización; condición; incremento){sentencia(s);}En la inicialización se le asigna un valor inicial a unavariable que se emplea para el control de la repetición delvariable que se emplea para el control de la repetición delbucle.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 decontrol cada vez que se repite el bucle.Es posible anidar bucles for para modificar dos o másvariables de control.Prof. Luis Zurita Microcontroladores II
  • 27. N<=10?NONOSIN=1for(N=1;N<=10;N++){Printf(“%u”,N);}for(cont=0;cont<=200;cont++){PORTB=cont;IMPRIMIR NN=N+1Prof. Luis Zurita Microcontroladores IIPORTB=cont;}for(cont=200;cont<=0;cont--){PORTB=cont;}
  • 28. 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 nose ejecuta la sentencia o bloque de sentencias.Sentencia de bucle do-while:Sentencia de bucle do-while:do{sentencia(s);}while (expresión)Las sentencias se ejecutan antes de que se evalúe la expresión, porlo que el bucle se ejecuta siempre al menos una vez.Prof. Luis Zurita Microcontroladores II
  • 29. ConditionTrue?StatementBlock ConditionStatementBlockComparación entre loops WHILE y DO WHILEBlock ConditionTrue?(a) While loop (b) Do..While loop
  • 30. Comparación 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; // This loop is notwhile (count!=0) // executedwhile (count!=0) // executed{ output_C(outbyte1);outbyte1++;count--;}count=0; // This loop isdo // executed{ output_C(outbyte2);outbyte2++;count--;} while (count!=0);while(1){};}
  • 31. OTRAS SENTENCIAS• Return: se emplea para devolver datos en lasfunciones.• Break: permite salir de un bucle, se utiliza paraWhile, For, Do y Switch.• Goto: provoca un salto incondicional.Prof. Luis Zurita Microcontroladores IIlabelStatementBlockContinueGotoBreak
  • 32. 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 destinationwhile(1){output_C(outbyte); // Loop operationdelay_ms(10);outbyte++;if (!input(PIN_D0)) continue; // Restart loopif (!input(PIN_D1)) break; // Terminate loopdelay_ms(100);if (outbyte==100) goto again; // Unconditional jump}}
  • 33. COMENTARIOSLos comentarios se incluyen en el código fuente para documentar yorientar al programador sobre el código que se diseña.Son ignorados por el compilador y no afectan a la longitud nirapidez de ejecución del código final.Un comentario se puede colocar en cualquier lugar del programa ypueden tener la longitud y el número de líneas que se quiera.Hay dos formatos posibles para los comentarios: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 anidarcomentarios con este formato. Ejemplos:/*Esto también esun comentario*//*Pero esto que /*parece un comentario válido*/ no lo es*/Prof. Luis Zurita Microcontroladores II
  • 34. DIRECTIVAS DE INTERÉSLas directivas de pre-procesado comienzan con el símbolo# y continúan con un comando específico. La sintaxisdepende del comando. Algunos comandos no permitenotros elementos sintácticos en la misma expresión.#DEVICE chip: permite definir el PIC con el que serealizará la compilación. Ejemplo:#device PIC16F877#device PIC16F877#FUSES options: permite definir la palabra deconfiguración para programar un PIC. Ejemplo:#fuses XT,NOWDT,PUT,NOPROTECT, NOLVP#INCLUDE <archivo>: permite incluir un fichero en elprograma. Ejemplo:#INCLUDE <16f877.h>Prof. Luis Zurita Microcontroladores II
  • 35. DIRECTIVAS DE INTERÉS#USE DELAY (CLOCK=SPEED): permite definir las frecuenciasdel oscilador del PIC, el compilador lo utiliza para realizarcálculos de tiempo. Se puede utilizar M, MHZ, K y KHZ paradefinir la frecuencia. Ejemplo:#use delay(clock=4000000)#use delay(clock=4000000)Luego de definida en las declaraciones se pueden utilizarlas 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
  • 36. MANEJO DE LOS PUERTOSFUNCIONES• El compilador CCS suministra una serie de funcionespredefinidas para acceder y utilizar el PIC y susperiféricos. Estas funciones facilitan la configuracióndel PIC sin entrar en el nivel de los registrosespeciales.MANEJO DE LOS PUERTOS• En lenguaje C se pueden gestionar los puertos de dosformas:– Se declaran los registros TRISX y PORTX definiendosu posición en la memoria RAM como variables deC.– Utilizando las directivas específicas del compilador(#USE FAST_IO,#USE STANDARD_IO)Prof. Luis Zurita Microcontroladores II
  • 37. 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 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 09hProf. Luis Zurita Microcontroladores II
  • 38. MANEJO DE LOS PUERTOS• Una vez definidas estas variables se puedenconfigurar y controlar los puertos a través de loscomandos de asignación.TRISA= 0xFF;TRISB= 0x00;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
  • 39. MANEJO DE LOS PUERTOSExisten unas funciones de C que permiten trabajarbit a bit con los registros o variables definidaspreviamente. Estas funciones son las siguientes:bit_clear(var,bit); //Pone a 0 el bit indicado de la variablebit_set(var,bit); //Pone a 1 el bit indicado de la variableBit_test(var,bit); // Pregunta por el estado lógico del bitBit_test(var,bit); // Pregunta por el estado lógico del bitSwap(var); // intercambia nibbles de la variableEjemplos: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
  • 40. MANEJO DE LOS PUERTOS• Se puede declarar un bit de un registro mediante ladirectiva #BIT, lo que permite trabajar directamentecon el terminal:#BIT nombre = posición.bit. Ejemplo:#BIT nombre = posición.bit. Ejemplo:#BIT RA2=0x05.2 //PORTA=0x05#BIT RB4=0x06.4 //PORTB=0x06RB4=0;RA2=1;Prof. Luis Zurita Microcontroladores II
  • 41. MANEJO DE LOS PUERTOS#include <16F877.h>#fuses XT,NOWDT,NOLVP#use delay (clock=4000000)#BYTE TRISB=0x86#BYTE PORTB=0x06#BYTE OPTION_REG=0x81void main ( ) {bit_clear (OPTION_REG,7);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);elsebit_set(PORTB,1);}}Prof. Luis Zurita Microcontroladores II
  • 42. MANEJO DE PUERTOS• Las funciones output_x() e input_x()dependen de la directiva tipo #USE_IO queesté activa. Directivas:#USE FAST_IO(PUERTO)#USE FAST_IO(PUERTO)Con la función output_x() se saca el valor alpuerto y con la función input_x() se lee elpuerto. La directiva no modifica previamenteel registro TRIS correspondiente. (Se utilizarána partir del segundo proyecto)Prof. Luis Zurita Microcontroladores II
  • 43. MANEJO DE PUERTOS• A través de las directivas (Se utilizarán a partir del segundoproyecto)El compilador ofrece funciones predefinidas para trabajar conlos puertos. Estas funciones son:output_X(valor); //X = (PORTA, B, C, D o E)input_X( );input_X( );set_tris_X(valor);port_b_pullups (valor); //True o FALSEget_tris( );Ejemplo:output_A(0xFF);valor=input_B( );set_tris_C(0x0F);Prof. Luis Zurita Microcontroladores II
  • 44. MANEJO DE PUERTOS• Existen una serie de funciones asociadas a un pin*. Elparámetro pin se define en el fichero include con un formatodel tipo PIN_Xn, donde X es el puerto y n es el número de pin.#define PIN_A0 40#define PIN_A1 41Las funciones son: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 flotanteinput_state (pin*);Input (pin*);Prof. Luis Zurita Microcontroladores II
  • 45. 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);set_tris_B(0x01);output_low(PIN_B1);while (1){if (input(PIN_B0)==1)output_low(PIN_B1);elseoutput_high (PIN_B1);}}Prof. Luis Zurita Microcontroladores II
  • 46. MANEJO DE PUERTOS#USE STANDARD_IO(PUERTO)Con la función output_x() el compilador seasegura de que el terminal, o terminalescorrespondientes sean de salida mediante lamodificación del TRIS correspondiente. Con lamodificación del TRIS correspondiente. Con lafunción input_x() ocurre lo mismo peroasegurando el terminal o terminales comoentrada. Es la directiva por defecto. Entonces, elejemplo anterior quedaría (Se utilizarán a partirdel segundo proyecto):Prof. Luis Zurita Microcontroladores II
  • 47. 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);port_b_pullups (TRUE);output_low(PIN_B1);while (1){if (input(PIN_B0)==1)output_low(PIN_B1);elseoutput_high (PIN_B1);}}Prof. Luis Zurita Microcontroladores II
  • 48. ESTRUCTURA DE UN PROGRAMA EN C( ciclo while )// Definición de variables globales// Definición de funcionesvoid main(void){// Definición de variables locales// Configuración de registros (recursos y puertos)// ciclo infinitowhile ( 1 ){// Programa de usuario}}Prof. Luis Zurita Microcontroladores II
  • 49. ESTRUCTURA DE UN PROGRAMA EN C( ciclo for )// Definición de variables globales// Definición de funcionesvoid main(void){// Definición de variables locales// Configuración de registros (recursos y puertos)// ciclo infinitofor ( ; ; ){// Programa de usuario}}Prof. Luis Zurita Microcontroladores II
  • 50. ESTRUCTURA DE UN PROGRAMA EN C( ciclo do - while )// Definición de variables globales// Definición de funcionesvoid main(void){// Definición de variables locales// Configuración de registros (recursos y puertos)// ciclo infinitodo{// Programa de usuario} while ( 1 ) ;}Prof. Luis Zurita Microcontroladores II

×