TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: prossis en 20 de Abril de 2004, 04:26:00
-
Hola ha todos si alguien me puede ayudar , estoy haciendo un secuenciador utilizando distintas salidas del pic por un tema de hardaware , y el problema es que de todas las salidas que utilizo hay dos que no me las activa , las salidas son la b3 y la a4, sin embargo lo pruebo en el simulador de virtualbread borad y me da que la secuencia que tengo programada funciona lo cargo en el pic y hace cualquier cosa, ya he cambiado de todo en el programa y nada
le paso el programa que tengo a ver si me pueden ayudar
#include <16F877.h>
//#device adc=10
#use delay(clock=4000000)
#fuses XT,PUT,BROWNOUT
#byte puerto_a = 5 /* dirección del puerto B */
#byte puerto_b = 6 /* dirección del puerto B */
#byte puerto_c = 7 /* dirección del puerto B */
#byte puerto_d = 8 /* dirección del puerto B */
#byte puerto_e = 9 /* dirección del puerto B */
void main(int) {
int a,b,c,e;
//setup_psp(PSP_DISABLED);
//setup_spi(FALSE);
//setup_counters(RTCC_INTERNAL,WDT_18MS);
// setup_timer_1(T1_DISABLED);
// setup_timer_2(T2_DISABLED,0,1);
set_tris_a( 0xC0 ); /* puerto a como salida */
set_tris_b( 0x00 ); /* puerto B como salida */
set_tris_c( 0x00 ); /* puerto c como salida */
set_tris_d( 0x00 ); /* puerto d como salida */
set_tris_e( 0x00 ); /* puerto e como salida */
a=0;
b=0;
c=0;
e=0;
puerto_a = 0;
puerto_b = 0; /* apaga todos los led */
puerto_c = 0; /* apaga todos los led */
puerto_d = 0; /* apaga todos los led */
puerto_e = 0; /* apaga todos los led */
do{
for(a=0;a!=8;++a){
b=a+2;
c=a-7;
e=a-4;
delay_ms(10000); /* espera para Bajar ( Tiempo de espera entre ciclos) */
bit_set( puerto_b, a );
delay_ms( 2000); /* espera para soplar*/
bit_set( puerto_e, e );
bit_set( puerto_c, c );
delay_ms(1000); /*tiempo de soplado*/
bit_clear( puerto_a, b );
bit_clear( puerto_e, e );
bit_clear( puerto_c, c );
delay_ms(2000); /* espera para subir*/
bit_clear( puerto_b, a );
}
} while( TRUE ); /* Repetir siempre */
}
espero que alguien me pueda ayudar, gracias a todos
-
Que te parece si pones el enunciado completo del automatismo, indicando la secuencia correcta que debe de salir.
Qué dos salidas son las que no se te activan?
-
que tipo de compilador estas a usar???qual o cristal esta usando???? qual o real objetivo deste projeto????o seu compildador deixa utilizar diretivas em espanhol como "puerto"???
#include <16F877.h>
#use delay(clock=4000000)
#fuses hs,PUT,BROWNOUT,nowdt
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08
#byte porte = 0x09
void main(int) {
int a=0,b=0,c=0,e=0;
set_tris_a(0b11000000);//0xc0
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
set_tris_e(0b00000000);
setup_adc_ports(no_analogs);
porta=0x00; portb=0x00; portc=0x00; portd=0x00; porte=0x00;
//só mudei ate aqui não entendi o que faz o projeto
do{
for(a=0;a!=8;++a){
b=a+2;
c=a-7;
e=a-4;
delay_ms(1000); /* espera para Bajar ( Tiempo de espera entre ciclos) */
if(a==3)
{
bit_set( puerto_d, 7 );
}
if (a!=3){
bit_set( puerto_b, a );
}
delay_ms( 2000); /* espera para soplar*/
if(a==2)
{
bit_set( puerto_c, 1 );
}
if (a!=2){
bit_set( puerto_a, b );
}
bit_set( puerto_e, e );
bit_set( puerto_c, c );
delay_ms(1000); /*tiempo de soplado*/
if(a==2)
{
bit_clear( puerto_c, 1 );
}
if (a!=2){
bit_clear( puerto_a, b );
}
bit_clear( puerto_e, e );
bit_clear( puerto_c, c );
delay_ms(2000); /* espera para subir*/
if(a==3)
{
bit_clear( puerto_d, 7 );
}
if (a!=3){
bit_clear( puerto_b, a );
}
}
} while( TRUE ); /* Repetir siempre */
}
espero que alguien me pueda ayudar, gracias a todos
-
Lo he estado mirando más detenidamente y veo que estas metiendo valores negativos a bit_set(var,bit).
Por ejemplo, inicialmente a=0, entonces e=a-4=-4
Lo que metas en "bit", no puede ser un número negativo sino un número comprendido entre 0-7, 0-15 ó 0-31 dependiendo de la longitud de "var", en tu caso como es int debe ser entre 0-7
Piénsalo y me cuentas.