Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
J.D.R. dijo:como esta amigo pic-man ese ejemplo me ayudo un poco pero lo que necesito es que cuando yo precione el push button el led se quede encendido hasta que yo lo precione de nuevo, osea que funcione como un interructor
pic-man dijo:maunix yo intenté hacer lo que dijiste en el CCS pero el compilador me marcaba algunos errores, el problema es que no se programar en C y aunque ya estoy documentandome y leyendo un libro de C quisiera, si tuvieras tiempo, que me dijeras como se podría modificar el programa que yo hice para que el led se mantuviera encendido hasta que se volviera a presionar el botón, quiero aprender y ya estoy en ello pero muchas veces los ejemplos son buenos maestros![]()
void main()
{
set_tris_b( 0x01 ); // RB0 como entrada y lo demás del puerto B como salida
puerto_b = 0; // Limpia puerto B
DO{
IF (INPUT(PIN_B0)){ // Si se presiona RB0
output_toggle(PIN_B1); // cambia el estado del pin RB1
WHILE (INPUT(PIN_B0)); // Espera a que se suelte el botón
}
}
WHILE(TRUE);
}
//// Programa para encender y apagar un led pulsando un pulsador ////
#include <16f84a.h> // incluimos la libreria para este pic
#fuses XT,NOWDT,NOPROTECT // configuramos los fusibles de programacion
// XT - cristal de cuarzo
// NOWDWT - no perro guardian
// NOPROTECT - no protegido
#use delay(clock=4000000) // velocidad de reloj en HZ
//// Declaración de variables ////
#byte pb = 6 // puerto B
#byte pa = 5 // puerto A
//// Configuramos salidas y entradas ////
void main (void)
{
pb = 0;
set_tris_b (0x00); // Declaramos puerto B como salida
set_tris_a (0x1F); // Declaramos puerto A como entrada
DO
{
If (!input (PIN_A0)) // Si la entrada es 0
{ delay_ms (10); // esperamos 10 ms
If (!input (PIN_A0)) // comprobamos otra vez la entrada sea 0, por temas de rebote
{ do { } while (!input (PIN_A0)); // esperar a soltar el boton
pb = ~pb; // el puerto b cambia al complementario.
}
}
} WHILE (TRUE); // Bucle infinito
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //Todos estos setup yo no los declare,
setup_timer_1(T1_DISABLED); al utilizar el wizard me los arrojo
setup_timer_2(T2_DISABLED,0,1); por default.
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while (true) {
if (input (pin_b0)) {
output_high(pin_c0);
}
if (!input (pin_b0)) {
output_low(pin_c0);
}
if (input (pin_b1)) {
output_high(pin_c1);
}
if (!input (pin_b1)) {
output_low(pin_c1);
}
if (input (pin_b2)) {
output_high(pin_c2);
}
if (!input (pin_b2)) {
output_low(pin_c2);
}
if (input (pin_b3)) {
output_high(pin_c3);
}
if (!input (pin_b3)) {
output_low(pin_c3);
}
if (input (pin_b4)) {
output_high(pin_c4);
}
if (!input (pin_b4)) {
output_low(pin_c4);
}
if (input (pin_b5)) {
output_high(pin_c5);
}
if (!input (pin_b5)) {
output_low(pin_c5);
}
if (input (pin_b6)) {
output_high(pin_c6);
}
if (!input (pin_b6)) {
output_low(pin_c6);
}
if (input (pin_b7)) {
output_high(pin_c7);
}
if (!input (pin_b7)) {
output_low(pin_c7);
}
}
}
char pul1, pul2, pul3, pul4;
void main(){
trisb=0xff;
option_reg.F7=0;
trisc=0;
portc=0;
pul1=0;
pul2=0;
pul3=0;
pul4=0;
x1:
if(button(&portb,0,1,0))
pul1=1;
if(button(&portb,0,1,1)&&pul1)
{ portc=portc^0b000000001;
pul1=0;
}
if (button (&portb,1,1,0))
pul2=1;
if (button(&portb,1,1,1)&&pul2)
{portc=portc^0b00000010;
pul2=0;
}
goto x1;
}
Saludos.tengo 4 button en el RB0-RB3 y 4 leds en los puerto RC0-RC3 mientras yo presione un button se encienda un leds y presiono ese mismo button se debe de apagar así sucesivamente con todos los buton
yo tambien soy un novatillo en esto, pero he estado practicando, hice un pequeño programa para encender y apagar un led cuando pulsas el pulsador, pero tuve en cuenta un pequeño rebote, lo pongo aqui, en la simulación lo probé y funciona, supongo que a la hora de la verdad también funcionara. El microcontrolador es el pic16f84
Código://// Programa para encender y apagar un led pulsando un pulsador //// #include <16f84a.h> // incluimos la libreria para este pic #fuses XT,NOWDT,NOPROTECT // configuramos los fusibles de programacion // XT - cristal de cuarzo // NOWDWT - no perro guardian // NOPROTECT - no protegido #use delay(clock=4000000) // velocidad de reloj en HZ //// Declaración de variables //// #byte pb = 6 // puerto B #byte pa = 5 // puerto A //// Configuramos salidas y entradas //// void main (void) { pb = 0; set_tris_b (0x00); // Declaramos puerto B como salida set_tris_a (0x1F); // Declaramos puerto A como entrada DO { If (!input (PIN_A0)) // Si la entrada es 0 { delay_ms (10); // esperamos 10 ms If (!input (PIN_A0)) // comprobamos otra vez la entrada sea 0, por temas de rebote { do { } while (!input (PIN_A0)); // esperar a soltar el boton pb = ~pb; // el puerto b cambia al complementario. } } } WHILE (TRUE); // Bucle infinito }
pulsador ;etiqueta para el goto
btfss portb,0 ;cuando pin rb0 sea 1 salta una instrucción sino sigue ala siguiente instrucción
goto pulsador ;regresa ala etiqueta pulsador
btfsc portb,0 ;cuando pin rrb0 sea 0 salta una instrucción sino sigue ala siguiente instrucción
goto $-1 ; retrocede una introducción
milisegundo 100; tiempo rebote para el pulsador
bsf portc,1 ;prender led
goto$
end
list p=16f84a ;directiva que define el procesador
#include <p16f84a.inc> ;definicion de variables especificas del procesador
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
ORG 0X000 ;vector reset de procesador
INTCOM
CLRF INTCOM ;desabilito interrupciones
BSF STATUS,RP0 ;para acceder al banco1 de registro(se escribe rp0 no rpo)osea con cero
MOVLW 1F
MOVWF TRISA ;porta como entrada
CLRF TRISB ;portb como salida
BCF STATUS,RP0 ;para acceder al banco de registros
REP MOVF PORTA,W ;leo porta en w
MOVWF PORTB ;copio en w en potrb
CLRF 0C ;borro la primera posicion de ram
DLY DECFSZ 0C,F ;decremento la primera posicion de ram
GOTO DLY ;genero retardo de apox 767 ciclos
GOTO REP ;repito el ciclo
END.
#define PRESIONADO 0b0
#define NO_PRESIONADO (!PRESIONADO)
#define DB_TIME 20
#define LED_1 RB0
#define PB_1 RB1
enum flag {ACTIVO, INACTIVO} estado_PB_1 = INACTIVO;
void main(void)
{
inicializar_puerto();
while (1)
{
if (PB_1 == PRESIONADO){
__delay_ms(DB_TIME);
if ((PB_1 == PRESIONADO) && (estado_PB_1 == INACTIVO))
estado_PB_1 = ACTIVO;
}
if ((PB_1 == NO_PRESIONADO) && (estado_PB_1 == ACTIVO)){
__delay_ms(DB_TIME);
if (PB_1 == NO_PRESIONADO){
LED_1 = ~LED_1;
estado_PB_1 = INACTIVO;
}
}
}
}