Академический Документы
Профессиональный Документы
Культура Документы
A continuacin se presentan varios proyectos simples para microcontrolador PIC que te permitirn conocer algunos de los fundamentos de esta pequea maravilla. Algunos estn escritos en Assembler, otros en lenguaje C (para compilador CCS). Aunque estn diseados para apuntar a algunos modelos de PIC en particular, son fcilmente modificables para que funcionen en cualquier otro. Parpadeo mltiple en C (sin usar interrupcin)
Para PIC16F874/874A/877/877A, escrito en C para compilador CCS-C Compiler. Este programa sirve para probar el buen funcionamiento de cada uno de los pines de I/O del PIC16F874. Para ello, se prenden y apagan intermitentemente cada 500 ms. Recordar que pin A4 es open drain (debe usarse un resistencia pull-up en ese pin) !
Diagrama esquemtico
#use STANDARD_IO(C) #use STANDARD_IO(D) #use STANDARD_IO(E) void main() { short int i; i = 0; while(1) { output_bit(PIN_B0,i); output_bit(PIN_B1,i); output_bit(PIN_B2,i); output_bit(PIN_B3,i); output_bit(PIN_B4,i); output_bit(PIN_B5,i); output_bit(PIN_B6,i); output_bit(PIN_B7,i); output_bit(PIN_A0,i); output_bit(PIN_A1,i); output_bit(PIN_A2,i); output_bit(PIN_A3,i); output_bit(PIN_A4,i); output_bit(PIN_A5,i); output_bit(PIN_E0,i); output_bit(PIN_E1,i); output_bit(PIN_E2,i); output_bit(PIN_C0,i); output_bit(PIN_C1,i); output_bit(PIN_C2,i); output_bit(PIN_C3,i); output_bit(PIN_C4,i); output_bit(PIN_C5,i); output_bit(PIN_C6,i); output_bit(PIN_C7,i); output_bit(PIN_D0,i); output_bit(PIN_D1,i); output_bit(PIN_D2,i); output_bit(PIN_D3,i); output_bit(PIN_D4,i); output_bit(PIN_D5,i); output_bit(PIN_D6,i); output_bit(PIN_D7,i); i=!i; delay_ms(500); } }
Para PIC16F84, escrito en Assembler. Este sencillo programa funciona de la siguiente manera: si el pin RB0 est en 0, entonces apaga el LED conectado a RA0. Si el pin RB0 est en 1, entonces prende el LED conectado a RA0. Qu complicado! Recuerda conectar el pin RA0 al LED a travs de una resistencia de unos 330 ohms.
Diagrama esquemtico
STATUS,RP1 STATUS,RP0 ;banco 1 B'00011110' TRISA ;PORTA output slo RA0 H'FF' TRISB ;PORTB es input, en particular RB0
STATUS,RP0
;banco 0
PORTB,0 ;RB0 est en 0? PRENDE_LED ;si NO (o sea,RB0=1), entonces prende el LED PORTB,0 ;RB0 est en 1? APAGA_LED ;si NO (o sea,RB0=0), entonces apaga el LED LOOP
PRENDE_LED BSF PORTA,0 ;pone en 1 el pin RA0 RETURN APAGA_LED BCF PORTA,0 ;pone en 0 el pin RA0 RETURN END