Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

11/03/2012 #1


Problema con delay_ms
Hola a todos y muy buen día!!

Soy nueva en este foro, bueno nueva en cuanto a escribir, pero ya me había pasado por aquí en otras ocasiones y la verdad que es un muy buen foro.

Tengo un pequeño problemilla con un programa y espero que alguien me pueda ayudar.

Estoy haciendo un sencillo programa, es de corrimiento de un LED, con el PIC18F4550 en CCS, lo que tengo que hacer es con un dip switch controlar la velocidad del corrimiento y la dirección (7 bits para velocidad y 1 bit para sentido).

Hice el programa y ya que me quedo (con la entrada en el puerto B, bit0 para sentido y los demás control de velocidad, salida en PORTD) lo simulé en Proteus y todo bien, me dispuse a armarlo y para mi sorpresa, no me funciona.

Después de revisar todo me di cuenta que lo que no me funciona es delay_ms de hecho lo probe para que sólo encienda y apague un led con un delay pero no me funciona al hacerlo físico, alguien me podría ayudar.

De antemano gracias.

Aquí les dejo mi programa para que lo vean.
Código:
#include <18f4550.h>
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,NOVREGEN, NOPBADEN
#use delay(clock=48000000)

#byte trisb =0xF93
#byte portb =0xF81

#byte trisd =0xF95
#byte portd =0xF83

int y; //Variable para controlar el delay (diferentes velocidades).
char puerto; //Variable del corrimiento.

void main() {

set_tris_b(0xFF);//PORTB entradas.
set_tris_d(0x0);//PORTD salidas.

//Configuración----------------------------------
disable_interrupts(global);
disable_interrupts(int_timer1);
disable_interrupts(int_rda);
disable_interrupts(int_ext);
disable_interrupts(int_ext1);
disable_interrupts(int_ext2);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(TRUE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_oscillator(False);

output_d (0); //Salida en ceros de inicio.


y=160; //Valor inicial del delay
puerto=0x01; //Valor para que un solo LED este prendido y sea el que se vea el movimiento, igual puede ser 0xFE un solo LED apagado.

do
{

//Lee el puerto B para elegir valor de velocidad (cambia delay_ms(y), solo con bit 7-1, el bit cero puede ser 1 o 0 dependiendo del sentido )
if (input_B()==(0x01))
            y=160;
else if (input_B()==(0x03))
            y=140;
else if (input_B()==(0x05))
            y=120;
else if (input_B()==(0x09))
            y=100;
else if (input_B()==(0x11))
            y=80;
else if (input_B()==(0x21))
            y=60;
else if (input_B()==(0x41))
            y=40;
else if (input_B()==(0x81))
            y=20;

else
            y=y;


if (input_B()==(0x00))
            y=160;
else if (input_B()==(0x02))
            y=140;
else if (input_B()==(0x04))
            y=120;
else if (input_B()==(0x08))
            y=100;
else if (input_B()==(0x10))
            y=80;
else if (input_B()==(0x20))
            y=60;
else if (input_B()==(0x40))
            y=40;
else if (input_B()==(0x80))
            y=20;

else
            y=y;

delay_ms(y);
output_d (puerto);


if (input(pin_B0)==0)

#asm
rrncf puerto,1 ;rota derecha y guarda en mismo registro (puerto).
#endasm

else //if (input(pin_B0)==0)

#asm
rlncf puerto,1 ;rota izquierda y guarda en mismo registro.
#endasm




}while (1);
}
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.