Microprocesadores Y Microcontroladores Ingenieria Control Industrial

Preview only show first 6 pages with water mark for full document please download

Transcript

Microprocesadores y Microcontroladores Ingenieria Control Industrial Experiencia No. 02 Microcontroladores Título: Elementos básicos de código en C para un circuito programable con arquitectura Harvard Objetivo: identificar componentes elementales de la arquitectura de un MCU PIC 16F877A y características básicas de programas en lenguaje C. Materiales: componentes de hardware, hoja de datos 16F877A, MPLAB, Grabador de MCU Descripción. Complete el circuito de la experiencia 1, de la sesión pasada, agregando un puerto de entrada como se muestra en la Figura #2.1. Observe que se conectan solo 4 bits del puerto C. El circuito armado sobre un protoboard debe, al menos, mostrar una presentación como se muestra en la figura #2.2. Observación: en el diagrama esquemático no se muestra la alimentación, la cual debe ser conectada 4 MHz 22pFx2 Vdd=+5V R>=4K7 4K7 x 8 comun Vdd=+5V comun 330R x 8 Figura #2.1 Proceda a conectar la alimentación del circuito y verificar su funcionamiento, de acuerdo al código que se muestra a continuación. Analizar el programa y comprender su interacción con el hardware: a.- Interacción entrada/salida #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { while(1) { while(input(PIN_C0)) { output_high(PIN_D0); delay_ms(50); output_low(PIN_D0); delay_ms(500); } output_low(PIN_D0); } } Figura #2.2 JEA/jea/exp02.docx 1/4 Microprocesadores y Microcontroladores Ingenieria Control Industrial A continuación se muestran programas que ilustran las sentencias típicas a ser usadas en aplicaciones construidas con lenguaje C. Guarde en sus notas personales estos códigos, ya que son un resumen didáctico de todas las instrucciones del lenguaje. Analice y estudie estos códigos para una comprensión cabal. Proceda a compilar y cargar en el MCU todos estos programas y ejecútelos en el circuito. Es obligatorio para superar esta experiencia que usted ejecute en el MCU, las rutinas desde la (a) hasta la (j). Debe mostrar al profesor o ayudante la ejecución de cada una de estas rutinas b.- Definición de una variable /* VARI.C */ #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { int x; x=0x99; output_D(x); } c.- Lazo iterativo indefinido /* ENDLESS.C */ #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { int x=0x00; while(1) { output_D(x); x++; } } d.- Sentencia IF y lectura de entrada /* IFIN.C */ #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { int x=0x00; output_D(0); while(1) { x = input(PIN_C0); if(x==1)output_high(PIN_D0); } } e.- Lazo iterativo condicional /* WHILELOOP.C */ #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { while(1) { while(input(PIN_C0)); { output_high(PIN_D0); delay_ms(300); output_low(PIN_D0); delay_ms(500); } output_low(PIN_D0); } } Nota: bajar manual de referencia del compilador desde http://www.ccsinfo.com/downloads.php#manuals JEA/jea/exp02.docx 2/4 Microprocesadores y Microcontroladores Ingenieria Control Industrial f.- Lazo iterativo con sentencia FOR /* FORLOOP.C */ #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=1000000) void main() { int x; while(input(PIN_C0)){}; for ( x=0; x<5; x++ ) { output_high(PIN_D0); delay_ms(500); output_low(PIN_D0); delay_ms(500); } while(1){}; } g.- Sentencia CONTINUE y BREAK /* CONTINUE.C */ #include "16F877A.H" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { unsigned outbyte; restart: outbyte=0; while(1) { output_C(outbyte); delay_ms(10); outbyte++; if (!input(PIN_D0)) continue; if (!input(PIN_D1)) break; delay_ms(100); if (outbyte==100) goto restart; } } h.- Comparación entre la sentencia WHILE y DO-WHILE /* DOWHILE.C */ #include "16F877A.H" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { int outbyte1=0; int outbyte2=0; int count; count=0; while (count!=0) { output_C(outbyte1); outbyte1++; count--; } count=0; do { output_C(outbyte2); outbyte2++; count--; } while (count!=0); while(1){}; } JEA/jea/exp02.docx 3/4 Microprocesadores y Microcontroladores Ingenieria Control Industrial i.-Sentencia IF con ELSE #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { while(1) { if (!input(PIN_D0)) output_C(15); else output_C(0); } } j.- Sentencia Switch /* Demo of SWITCH .. CASE comparado con IF .. ELSE */ #include "16F877A.h" #fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #use delay (clock=4000000) void main() { int8 entrada; while(1) { entrada = input_D(); switch(inbits) { case 1: output_C(1); break; case 2: output_C(3); break; case 3: output_C(7); break; default:output_C(0); } if (input(PIN_D0)) output_C(1); if (input(PIN_D1)) output_C(3); if (input(PIN_D0) && input(PIN_D1)) output_C(7); else output_C(0); } } JEA/jea/exp02.docx 4/4