Duda como hacer una instrucción en PIC

#1
Hola estoy desarrollando un programa en C para un 16f628a y tengo una duda.

Estoy utilizando una instrucción.
if (PORTA & 0x01) PORTB |= 0x02;
-->> si puerto A es 0000.0001 entonces puerto B es 0000.0010

Entonces tengo un pulsador en puerto A y quiero que mientras yo pulse se mantenga la salida del puerto B y cuando lo suelte se quite. Sé que parece una tontería pero no lo consigo.

Entendido? necesito que se mantenga solo esa instrucción mientras yo pulse el pulsador y que cuando lo suelte el puerto B se apague.


Gracias.
 
#2
Tienes que ponerlo en un bucle infinito:
while(1){
if (PORTA & 0x01) PORTB |= 0x02;
}

Tienes que poner en el registro ADCON1 como pines digitales, y el TRISA como entrada y TRISB como salida.
Un Saludo
 
#3
Hola! nunca he programado nada, pero estoy interesado en aprender a programar microcontroladores. Deseo saber si puedo lograrlo solo con ayuda de ustedes. de ser asi, deseo que alguien con experiencia me de una guia de pasos ordenados secuencialmente, para yo seguirla. Empezando desde lo mas elemental. Mi mayor confusion, es con las instrucciones, no comprendo como escribir estas. Muchas gracias!
 
#4
Mira turbojet..una solucion sencilla seria que negaras la accion...es decir en tu codigo escribes:
if (PORTA & 0x01) PORTB |= 0x02;
-->> si puerto A es 0000.0001 entonces puerto B es 0000.0010

intenta esto
-->> si puerto A es diferente de 0000.0000 entonces puerto B es 0000.0010
if (PORTA # 0x01) PORTB |= 0x02;

o si no la otra opcion es que le pongas un
Else o elseif
es decir si no cumple tu condicion que pones entonces que se cumpla la
if (PORTA & 0x01) PORTB |= 0x02;
else PORTB |= 0x00;

espero te sirva
 
#5
Hola! nunca he programado nada, pero estoy interesado en aprender a programar microcontroladores. Deseo saber si puedo lograrlo solo con ayuda de ustedes. de ser asi, deseo que alguien con experiencia me de una guia de pasos ordenados secuencialmente, para yo seguirla. Empezando desde lo mas elemental. Mi mayor confusion, es con las instrucciones, no comprendo como escribir estas. Muchas gracias!
Hay varios tutoriales en este foro... revisa los temas marcados como "Destacados"

Saludos...
 
#6
He intentado hacer lo del bucle infinito pero no lo he conseguido, lo que necesito esque la salida del puerto B se me active cuando tenga la entrada del puerto A en nivel alto

Código:
#include <16F628A.h>
#FUSES NOWDT // No Watch Dog Timer
#FUSES XT // Crystal osc <= 4mhz
//#FUSES NOPUT // No Power Up Timer
//#FUSES NOPROTECT // Code not protected from reading
//#FUSES NODEBUG // No Debug mode for ICD
//#FUSES NOBROWNOUT // No brownout reset
//#FUSES NOLVP // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
//#FUSES NOCPD // No EE protection
//#FUSES WRT_50% // Lower half of Program Memory is Write Protected
#use delay(clock=12000000) // Reloj a 4 MHz

#BYTE TRISA = 0x85 // Variable TRISB en 86h
#BYTE TRISB = 0x86 // Variable TRISA en 85h
#BYTE PORTA = 0x05 // Variable PORTB en 06h
#BYTE PORTB = 0x06 // Variable PORTA en 05h
#BYTE OPTION_REG = 0x81 // Variable OPTION_REG en 81h
void main()

{    bit_clear(OPTION_REG,7);
    TRISB = 0x00; // Puerto B: B0...B7 Salidas
    TRISA = 0xFF; // Puerto A: A0...A7 Entradas
    output_B(0x00);
        while(true)
        {
        if (PORTA & 0x01) PORTB |= 0x02;    
        }
}
 

Temas similares

Arriba