You are on page 1of 4

Programas en Lenguaje C para el PIC16F877 - Compilador CCS

1. Encender y apagar un LED en el puerto B

#if defined(__PCM__) //Compilador para micros con instrucción de 14 bits

#include <16F877.h> //Archivo que incluye encabezados y definiciones

#use delay (clock = 4000000)

#use standard_io(B)

void main()

set_tris_A(255);

set_tris_C(255);

set_tris_D(255);

set_tris_E(255); // Configuro los puertos A,C,D,E como entradas digitales

set_tris_B(254); // Configuro el puerto B como entradas digitales exepto el pin 1 do {


output_low(PIN_B0); delay_ms(100); output_high(PIN_B0); delay_ms(100); } while(true); //
Bucle infinito }

2. Rotar un uno hacia la izquierda como un secuenciador en el puerto B

#if defined(__PCM__) //Compilador para micros con instrucción de 14 bits #include


<16F877.h> #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT #use delay (clock =
4000000) // a trabajar con 4MHz #use standard_io(B) #byte puerto_b=06 void main() { int
sqcia; set_tris_A(255); set_tris_C(255); set_tris_D(255); set_tris_E(255); // Puertos A,C,D,E
como entradas digitales set_tris_B(0); // Puerto B como salidas digitales puerto_b = 255; //
Puerto B en 0 do { for (sqcia = 0; sqcia < 8; sqcia++) { delay_ms(1000); puerto_b = puerto_b / 2;
// divido entre 2 para rotar hacia la izquirda } puerto_b = 255; // vuelvo y inicio el ciclo }
while(true); // bucle }

3. Conversión A/D de 8 bits y se muestra el número binario en LEDS de puerto B

#if defined(__PCM__) #include <16f877.h> #fuses


XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // configuración del micro para quemarlo
#use delay (clock = 4000000) // 4MHz #use standard_io(B) // Indica que usará el puerto B
#byte puerto_b = 06 // Define una variable llamada puerto_b void main() { int conversion;
set_tris_A(255); set_tris_C(255); set_tris_D(255); set_tris_E(255); // Puerto A,C,D,E como
entradas digitales set_tris_B(0); // Puerto B como salida digitales puerto_b = 0; // inicializo el
puertoB setup_adc_ports(RA0_RA1_ANALOG_RA3_REF); // configuro los pines de la
conversion setup_adc(adc_clock_div_32); // configuro el conversor análogo digital conversion
= 0; do { set_adc_channel(0); // escojo el canal a convertir delay_ms(1); // esperar mientras se
inicializa el módulo A/D conversion = read_adc(); // leer el valor delay_ms(1); puerto_b =
conversion; // visualizo por el puerto_ B } while(true); // bucle }
4. Escribir un mensaje en una pantalla LCD a 4 bits, RS = pin RB1, E=pin RB0, R/W=pin RB2
Pines RB4 a RB7 corresponden al bus de datos D4 a D7 de la pantalla

#if defined(__PCM__) #include <16f877.h> #use delay(clock = 4000000) #define use_portb_lcd


TRUE #include <lcd.c> void main() { do { lcd_init(); // se imicializa la lcd lcd_gotoxy(5,1);
printf(lcd_putc,"MICROCHIP"); delay_ms(1000); } while(true); }
Bueno no me funciona después de muchos intentos. A ver si me podeis ayudar. Explico
inicialmente el conexionado.

Pic 16f628 con oscilador interno activado a 4mhz


74HCT164 como registro de desplazamiento tiene conectado 5 leds de las salidas q0 a
q4.

Patilla RB3 del pic como data al pin 1 data in del 74hc164
Patilla RB4 del pic como clock al pin 8 clk del 74hc164
Patilla RB2 del pic (con resistencia 10k) al pin 9 (clr) del 74hc164

Programa en c

#include <16F628.h>

#fuses NOWDT, INTRC_IO, PUT, NOPROTECT, NOMCLR, NOBROWNOUT, NOLVP

#use delay(clock=4000000)

#use fast_io(B)

void main()

byte i[8]= 1,0,1,1,0,0,0,0;


byte n;

delay_ms(5000); // Dejamos un retardo antes del inicio del programa para evitar
fallo con el programador
set_tris_b(0x00); //activamos puerta b como salida
while (true)

{
output_bit(PIN_B2,0); //clear
delay_us(1);
output_bit(PIN_B2,1);
output_bit(PIN_B4,0); // clock low

for (n=0;n<7;n++)
{
output_bit(PIN_B3,i[n]); //data
output_bit(PIN_B4,1); // clock high
delay_us(1); //
output_bit(PIN_B4,0); // clock low
}

Lo que se pretende como se podrá observar es que se iluminen los leds 1, 3,4 y 5. Si le
quito el clear en cada while hace exactamnte lo mismo.

Con todo esto se encienden todos los leds sin más. He conseguido con otras
modificaciones encender los leds con parpadeos muy rápidos pero sin sentido.

You might also like