Objetivo: Os terminais RB1 são configurados como saída e RBO como entrada. (com resistor de pull-up). A saída deve ter o mesmo valor que a entrada. Usa -se um interruptor na entrada e um led na saída
Código feito em CCS C Compiler
#include <16F877A.h>
#fuses XT, NOWDT
#use delay (clock = 4MHz)
#BYTE TRISB = 0x86 //TRISB em 86h
#BYTE PORTB = 0x06 //PORTB em 06h
#BYTE OPTION_REG = 0x81 //em 81h
void main(){
bit_clear(OPTION_REG, 7); //habilita Pull-up
bit_set(TRISB, 0); //B0 como entrada
bit_clear(TRISB, 1); //B1 como saída
bit_clear(PORTB, 1); //Apaga led
while(TRUE){
if(bit_test(portb, 0)== 1) //se RB0 == 1, apaga led
bit_clear(portb, 1);
else
bit_set(portb, 1); //se RB0 == 0, acende led
}
}
/*
CÓDIGO REESCRITO
#include <16F877A.h>
#fuses XT, NOWDT
#use delay (clock = 4MHz)
#use fixed_io(b_outputs = pin_b1)
void main(){
port_b_pullups(TRUE);
output_low(PIN_B1);
while (TRUE){
if(input(PIN_B0) == 1)
output_low(PIN_B1);
else
output_high(PIN_B1);
}
}
#include <16F877A.h>
#fuses XT, NOWDT
#use delay (clock = 4MHz)
//ponteiros
#define TRISB (int*) 0x86
#define PORTB (int*) 0x06
#define OPTION (int*) 0x81
void main() {
*option &= 0b01111111;
*trisb = 0x01;
*portb = 0x00;
while(TRUE){
if(*portb & 0x01) //le RB0 se é 1
*portb = 0x00;
else
*portb = 0x02; // se é 0 entao acende led (RB1 == 1)
}
}*/
Nenhum comentário:
Postar um comentário