en binario
#include <16F877A.h>
#use delay(clock=4M)
void main()
{
int i=0b10000000;
set_tris_b(0x00);
while (true){
i=i>>1;
output_b(i);
delay_ms(1000);
}
}
en decimal
#include <16F877A.h>
#use delay(clock=4M)
void main()
{
int i=0;
set_tris_b(0x00);
while (true){
i++;
output_b(i);
delay_ms(1000);
}
}
Ejemplo 1
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,PUT //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use standard_io(B) //puerto B como salida
#byte portb= 0x6 //direccion port b
///PROGRAMA
void main(void)
{
int led_on=0b00000001; //led a iluminar
set_tris_b(0x00); //portb como salida (algunas desactivadas)
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
do{ //bucle...
do{ //iluminacion hacia izquierda
portb=led_on;
rotate_left(&led_on,1);
delay_ms(300);
}while(bit_test(led_on,7)==0);
do{ //iluminacion hacia derecha
portb=led_on;
rotate_right(&led_on,1);
delay_ms(300);
}while(bit_test(led_on,0)==0);
}while(TRUE); //...infinito
}
Ejemplo 2
#include <16F877A.h> /// libreria para el manejo del pic16f877a
#use delay(clock=4000000) /// declara la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
int conteo=0;
#use fast_io(A)
#use fast_io(B)
#use fast_io(C) /// con esta instruccion evitamos que
#use fast_io(D) /// se este configurando cada vez que usamos
#use fast_io(E) /// alguna instruccion de entrada o salida
#byte porta = 5
#byte portb = 6
#byte portc = 7 /// se definen direcciones de memoria
#byte portd = 8
#byte porte = 9
void main(void)
{
set_tris_b(0x00);
while(true) //bucle infinito
{
conteo++;
if((conteo&0x0f)>9) // aqui observamos si el primer display llego a 10
// para solo comparar los primeros 4 bit hacemos una
// operacion and con 0x0f
{
conteo=conteo+10; // hacemos que los 4 bits mas significativos incrementen
conteo=conteo&0xf0;
}
if(conteo>99) {conteo=0;} // verificamos que la cuenta se haga de 0 a 99
else{ portb=conteo; delay_ms(400);}
} //fin de ciclo while
} //fin de programa
No hay comentarios:
Publicar un comentario