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

Temas similares

03/09/2010 #1


aprendiendo a programar pics
Hola un saludos a todos.

Soy nuevo en este mundo de la programacion, me encontré un programa para prender y apagar un led el codigo es el siguiente:

#include <16f84A.h>

#fuses XT ,NOWDT
#use delay(clock=4000000)

#define LED pin_A2

void main()
{
set_tris_a(0x00);

while (1)
{
output_high (LED); // Encender LED.
delay_ms(1000); // Esperar 1 sec.
output_low(LED); // Apagar LED.
delay_ms(1000); // Esperar 1 sec.
}
}

Mi problemas es como hacer que el led prenda en una salida determinada, por ejemplo, que en Rb1 flashee un led cuando yo active RA1 y que se repita el ciclo de prender y apagar este led en esta salida hasta que se desactive ra1 y que al momento de activar Ra2 se active Rb2 y repita el ciclo anterior pero en esta salida, no se si me dia aentender??

conozco un poco de programacion en lenguaje c. estoy empezando con las programaciones de pics en la escuela y pues este fue un proyecto que propuse como trabajo en la escuela... gracias
04/09/2010 #2


Respuesta: aprendiendo a programar pics
no entiendo muy bien lo que quieres hacer, pero lo puedes hacer con las siguientes instrucciones:

input_state(pin): esta te devuelve un 1 si el pin esta a 1 y un 0 en caso contrario. sustituyes pin por el pin que quieras, por ejemplo PIN_A1.
output_toggle(pin): esta complementa la salida, es decir, si la salida esta a 1, la pone a 0 y si esta a 0 la pone a 1. lo mismo que antes, sustituyes pin por el pin que quieras.
y luego las que ya has utilizado, output_high(pin) y output_low(pin) que ya sabes lo que hacen. todas estas junto a un if que compruebe si esta activa una entrada podrás hacerlo.
creo que lo que quieres hacer seria algo asi:
Código:
#include <16f84A.h>

#fuses XT ,NOWDT
#use delay(clock=4000000)



void main()
{
//set_tris_a(0x00); cuando utilizas funciones que tienen "input" o "output" no es necesario declarar el tris //ya que el programa lo hace solo

while (1)
{
if(input_state(PIN_A1))
output_toggle(PIN_B1)

if(input_state(PIN_A2))
output_toggle(PIN_B2))

delay_ms(500); // Esperar medio segundo
}
}
06/09/2010 #3


Respuesta: aprendiendo a programar pics
Gracias Pablet, me sirvio para darme una idea y realice el siguiente codigo, pero como no tengo el ccs (pcw) en su estado con licencia pues no me reconoce el pic16f84a para la simulacion de proteus y pues no conozco otro programa para lograr la simulacion con proteus. Si alguien me puede hacer el favor de compilarlo y decirme si funciona, muchas gracias.

Codigo:

#include <16f84A.h>

#fuses XT ,NOWDT
#use delay(clock=4000000)

#define LED0 pin_B0
#define LED1 pin_B1

void main()
{

set_tris_b(0x00);

Inicio;
int i=1;
int c=1;

SENTENCIA1
if (RA1==0){

for(i=1; i<3; i++){

output_high (LED0) ; // Encender LED, estado ALTO de la salida B0.
delay_ms(200) ; // Esperar 200msegundos.
output_low(LED0) ; // Apagar LED, estado BAJO de la salida B0.
delay_ms(200) ; // Esperar 200msegundos.
}
delay_ms(300) ; // Esperar 300msegundos que sumado al anterior
;//me da medio segundo de retardo.

for(c=1; c<3; c++){
output_high (LED1) ; // Encender LED, estado ALTO de la salida B1.
delay_ms(200) ; // Esperar 200msegundos.
output_low(LED1) ; // Apagar LED, estado BAJO de la salida B1.
delay_ms(200) ; // Esperar 200msegundos.

};//fin de for.
};//fin de if

else{ GOTO SENTENCIA2

}

SENTENCIA2

if (RA1==1){

for(i=1; i<3; i++){

output_high (LED0) ; // Encender LED, estado ALTO de la salida B0.
delay_ms(500) ; // Esperar 500msegundos.
output_low(LED0) ; // Apagar LED, estado BAJO de la salida B0.
delay_ms(500) ; // Esperar 500msegundos.
}


for(c=1; c<3; c++){
output_high (LED1) ; // Encender LED, estado ALTO de la salida B1.
delay_ms(500) ; // Esperar 200msegundos.
output_low(LED1) ; // Apagar LED, estado BAJO de la salida B1.
delay_ms(500) ; // Esperar 200msegundos.

};//fin de for.
};//fin de if

else{ GOTO inicio

}


};//fin de void main.


END
07/09/2010 #4


Respuesta: aprendiendo a programar pics
Necesito ayuda para compilar el anterior codigo y ver si este funciona gracias...
08/09/2010 #5


Respuesta: aprendiendo a programar pics
hola carlos, el codigo tal como lo habias puesto no funcionaba, faltaban unas cositas, te pongo un codigo que si que compila, es tu código pero con las modificaciones:
Código:
#include <16f84A.h>

#fuses XT ,NOWDT
#use delay(clock=4000000) 

#define LED0 pin_B0 
#define LED1 pin_B1

int i=1; //las declaras globalmente para todas las subrrutinas
int c=1;

void main()
{   

set_tris_b(0x00); 

Inicio:  //faltan :



SENTENCIA1:  //faltan :

if (input_state(PIN_A1)==0){

for(i=1; i<3; i++){

output_high (LED0)   ; // Encender LED, estado ALTO de la salida B0. 
delay_ms(200)    ; // Esperar 200msegundos. 
output_low(LED0)   ; // Apagar LED, estado BAJO de la salida B0. 
delay_ms(200)    ; // Esperar 200msegundos.
}
delay_ms(300)    ; // Esperar 300msegundos que sumado al anterior
//me da medio segundo de retardo.

for(c=1; c<3; c++){
output_high (LED1)   ; // Encender LED, estado ALTO de la salida B1.
delay_ms(200)    ; // Esperar 200msegundos.
output_low(LED1)   ; // Apagar LED, estado BAJO de la salida B1.
delay_ms(200)    ; // Esperar 200msegundos.

}//fin de for.
}//fin de if

else{
GOTO SENTENCIA2;  //faltan ;

}

SENTENCIA2:  //faltan :

if (input_state(PIN_A1)){
// debes hacerlo con un input_state(*pin);
for(i=1; i<3; i++){

output_high (LED0)   ; // Encender LED, estado ALTO de la salida B0. 
delay_ms(500)    ; // Esperar 500msegundos. 
output_low(LED0)   ; // Apagar LED, estado BAJO de la salida B0.
delay_ms(500)    ; // Esperar 500msegundos.
}   


for(c=1; c<3; c++){
output_high (LED1)   ; // Encender LED, estado ALTO de la salida B1.
delay_ms(500)    ; // Esperar 200msegundos.
output_low(LED1)   ; // Apagar LED, estado BAJO de la salida B1.
delay_ms(500)    ; // Esperar 200msegundos.

}//fin de for.
}//fin de if

else
GOTO inicio;  //faltan ;



}// aqui no va ;    fin de void main.
te adjunto el archivo de proteus con tu programa. hace cosas raras pero no se si e slo que quieres que haga. . . dime algo.
un saludo
10/09/2010 #6


Respuesta: aprendiendo a programar pics
ok. Con esto que me acabas de ayudar acabo de tener avances significativos, es mas con decir que casi doy por terminada la teoria. Ya hice puebas con proteus y da buenos resultados agregue un poco mas de codigo al programa. Si puedes revisar el codigo hasta la pestaña de SECUENCIA4, ahi en los comentarios puse el problema que me da al simular en PROTEUS, GRACIAS. Ahora una pregunta que me ronda por la cabeza, que PIC me sugieres que programe, anduve revisando el 16f628a y es muy parecido al 16f84a, como ves.

#include <16f84A.h>

#fuses XT ,NOWDT
#use delay(clock=4000000)

#define LED0 pin_B0
#define LED1 pin_B1



void main()
{



Inicio: //inicio de programa
set_tris_b(0x00);//pin de Rb se declaran como salidas
set_tris_a(0xff);//pin de Ra se declaran como entradas
int i=1; //las declaras globalmente para todas las subrrutinas
int c=1;

SECUENCIA1: //inicio secuencia 1

if (input_state(PIN_A0)==1){

for(i=0; i<1; i++){

output_high (LED0) ; // Encender LED en salida B0.
delay_ms(200) ; // Esperar 200msegundos.
output_low(LED0) ; // Apagar LED en salida B0.
delay_ms(100) ; // Esperar 100msegundos.
}

delay_ms(1) ; // Esperar 1msegundos de retraso.

for(c=0; c<1; c++){
output_high (LED1) ; // Encender LED en salida B1.
delay_ms(200) ; // Esperar 100msegundos.
output_low(LED1) ; // Apagar LED en salida B1.
delay_ms(100) ; // Esperar 100msegundos.


}//fin de for.
if (input_state(PIN_A0)==1){ GOTO SECUENCIA1; }
}//fin de if

else{
GOTO SECUENCIA2; //pasa a la siguiente secencia

}

SECUENCIA2: //inicio de secuencia 2

if (input_state(PIN_A1)==1){
// debes hacerlo con un input_state(*pin);
for(i=0; i<5; i++){
output_high (LED0) ; // Encender LED en salida B0.
delay_ms(50) ; // Esperar 50msegundos.
output_low(LED0) ; // Apagar LED en salida B0.
delay_ms(50) ; // Esperar 50msegundos.
}


for(c=0; c<5; c++){
output_high (LED1) ; // EEncender LED en salida B1.
delay_ms(50) ; // Esperar 50msegundos.
output_low(LED1) ; // Apagar LED en salida B1.
delay_ms(50) ; // Esperar 50msegundos.

}//fin de for.
if (input_state(PIN_A1)==1){ GOTO SECUENCIA2; }
}//fin de if


else{
GOTO SECUENCIA3; //pasa a la secuencia 3

}

SECUENCIA3: //inicio de secuencia 3
if (input_state(PIN_A0)==0){
if (input_state(PIN_A2)==1){


for(c=0; c<5; c++){
output_high (LED0) ; // Encender LED en salida B0.
output_high (LED1) ; // Encender LED en salida B1.
delay_ms(50) ; // Esperar 50msegundos.
output_low(LED0) ; // Apagar LED en salida B0.
output_low (LED1) ; // Apagar LED en salida B1.
delay_ms(50) ; // Esperar 50msegundos.

}//fin de for.

delay_ms(100) ; // Esperar 100msegundos de retraso.

for(i=0; i<3; i++){

output_high (LED0) ; // Encender LED en salida B0.
output_high (LED1) ; // Encender LED en salida B1.
delay_ms(150) ; // Esperar 150msegundos.
output_low(LED0) ; // Apagar LED en salida B0.
output_low (LED1) ; // Apagar LED en salida B1.
delay_ms(150) ; // Esperar 150msegundos.
}//fin de for
if (input_state(PIN_A2)==1){ GOTO SECUENCIA3;}
}//fin de segundo if

}//fin de primer if y termina la sentencia 3

delay_ms(350) ; // Esperar 350msegundos que sumados al
// anterior me da medio segundo de retraso

GOTO SECUENCIA4; //pasa a la secuencia 4



SECUENCIA4: //inicio de secuencia 4
if (input_state(PIN_A0)==0){
if (input_state(PIN_A3)==1){

for(c=0; c<5; c++){
output_high (LED0) ; // Encender LED en salida B0.
output_high (LED1) ; // Encender LED en salida B1. AQUI TENGO PROBLEMAS
// YA QUE UNA DE ESTAS DOS SALIDAS NO SE ENCIENDEN AL
//SIMULARLA EN PROTEUS, QUIERO QUE SE ENCIENDAN LAS DOS AL MISMO TIEMPO
delay_ms(100) ; // Esperar 100msegundos.
output_low(LED0) ; // Apagar LED en salida B0.
output_low (LED1) ; // Apagar LED en salida B1.
delay_ms(100) ; // Esperar 100msegundos.

}//fin de for.
if (input_state(PIN_A3)==1){ GOTO SECUENCIA4; }

delay_ms(400) ; // Esperar 450msegundos que sumados al
// anterior me da medio segundo de retraso


}//fin de segundo if
}//fin de primer if y fin de secuencia 4

GOTO Inicio; //pasa a Inicio



}// fin de void main.
10/09/2010 #7


Respuesta: aprendiendo a programar pics
HOla!!! pues lo he compilado y me daba errores de variables, lo he solucionado como te puse anteriormente declarandolas fuera del main globalmente, prueba a ver si asi te compila bien.
nuinca he utilizado el pic que me dices, yo como sustituto del 16f84a utilizo el 16f88, lleva practicamente lo mismo que el tuyo asi que puedes utilizar el que quieras, aunque si te lo has de comprar me decantaria mas por un 16f876a, ya que se programa igual y dispones de mas pines y mas modulos que aprenderas rapido a utilizar, o incluso un 16f877 de 40 pines.

un saludo
11/09/2010 #8


Respuesta: aprendiendo a programar pics
Ok probe poniendolas fuera del main y si tiene razon, ya hice las pruebas en proteus y anda bien, voy a comprar el 16f88 para hacer las practicas. Haciendolas le informo resultados. Muchas graciasy saludos
12/09/2010 #9


Respuesta: aprendiendo a programar pics
porque no te atreves con un 876a? te animo por lo que te he dicho, o incluso si no tienes demasiada prisa pidelos como sample a microchip, pero en caso de comprarlo te recomiendo uno de gama media, yo aprendi a programar pics en ccs con un 16f876a . el mismo codigo que has diseñado te valdra para este pic ademas de tener mas opciones como el modulo ccp que es facil de utilizar.

un saludo
12/09/2010 #10

Avatar de javierdavid2006

Respuesta: aprendiendo a programar pics
Hola a todos, tengo un libro nuevo de ccs, y he copiado un programa tal como esta escrito y aunque me produjo algunos errores, no se como solucionar 3 errores que no me permiten ensamblar el programa.

Es simplemente para el manejo de un lcd de 2x16 y unos pulsadores, aqui lo pongo:

#include <16F876.h>
#fuses xt,nowdt
#use delay(clock = 4000000)
#include <lcd.c>
#use standard_io(C)
#use standard_io(A)


enum funciones {med,cal,ini}; //Asigna un valor a cada elemento
//med = 0, cal = 1 e ini = 2

void medir(void){ //Funcion medir
//Algoritmo correspondiente
output_toggle(pin_C0);
}

void calibrar(void){ //Funcion calibrar
//Algoritmo correspondiente
output_toggle(pin_C1);
}

void inicializar(void){ //Funcion inicializar
//Algoritmo correspondiente
output_toggle(pin_C2);
}

void run_func(int numfunc){ //Asignacion de la funcion a realizar
//viene dada por la variable "item"

switch(numfunc){
case med:
medir();
break;
case cal:
calibrar();
break;
case ini:
inicializar();
break;
}
}

void main(){
char item; //Variables de las funciones
char n_menus = 3; //Numero de Funciones

//bit_set(trisa,0);
lcd_init();

while (1){
if (input(pin_A0) == 1){ //detecta boton de seleccion
item++; //Si pulsa aumenta la variable
delay_ms(300); //Para evitar rebotes
lcd_putc('\f');}

if (item > (n_menus-1)){ //Si la variable supera el numero de...
item = 0;} //funciones la inicializa

switch (item) {

case 0:
lcd_gotoxy(1,1);
printf(lcd_putc,"Medir");
lcd_gotoxy(1,1);
break;

case 1:
printf(lcd_putc,"Calibrar");
lcd_gotoxy(1,1);
break;

case 2:
printf(lcd_putc,"Inicializar");
lcd_gotoxy(1,1);
break;
}
if (input(pin_a1) == 1) //Si pulsa boton de seleccion...
{delay_ms(200);
run_func(item);} //Se llama a la funcion correspondiente
}
}

y los errores que me salen son:

Error12"C:/David PCS CCS/PICC/Drivers/lcd.c"Line 91{29,30}: Undefined identifier ''set_tris_d
Error12"C:/David PCS CCS/PICC/Drivers/lcd.c"Line 103{30,31}: Undefined identifier ''set_tris_d
Error12"C:/David PCS CCS/PICC/Drivers/lcd.c"Line 133{28,29}: Undefined identifier ''set_tris_d

El programa que estoy usando es PCW
12/09/2010 #11


Respuesta: aprendiendo a programar pics
Hola tengo el siguiente codigo que me facilitaron para tener una señal alta con un 1 y una baja con un 2
Código:
#include <16F877a.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)

///////////////////////Principio del programa//////////////////////////////////

void main(void)
{
 int dato=0;//declaracion de variables
 set_tris_b(0b11111111);//puerto b como salida
 set_tris_c(0b10111111); //RC7/Rx entrada, RC6/Tx salida
 output_b(0b00000000); //pone en ceros todo el puerto b
while(TRUE)//Ciclo
{   
   if(kbhit())//si ha llegado un dato
   {
      dato=getc(); //Lee el dato recibido      
      if (dato==1)//si el dato es 1
      {          
          output_high(PIN_B0);          
      }
      if (dato==2)//si el dato es 2
      {
         output_low(PIN_B0); 
      }
   }   
}
}
pero no se como crear el archivo que debe ir en el pic
he leido pero no me consigo generar el .hex que creo que es el que se "graba" en el pic
estaba siguiendo esta guia para usar el mplab http://micropic.wordpress.com/2007/01/22/mplab/ pero no logre compilar porque me falta el archivo .asm solo tengo el codigo del comienzo.

Saludos
12/09/2010 #12


Respuesta: aprendiendo a programar pics
javier añade esto debajo del include del pic
Código:
#define use_portb_lcd TRUE
y el lcd lo conectas al puerto B y los fuses ponlos debajo de la frecuencia del reloj y me cunetas.
Un saludo
12/09/2010 #13

Avatar de javierdavid2006

Respuesta: aprendiendo a programar pics
Puse la directiva que me pediste Pablet, pero igual me sale los mismos errores y cuando clikeo para visualizar la linea fallida, esta me lleva a la libreria del lcd (lcd.c) y me senala las siguientes lineas de esa libreria:

set_tris_lcd(LCD_READ);
set_tris_lcd(LCD_WRITE);
set_tris_lcd(LCD_WRITE);

Gracias por tu ayuda.

Cuando yo programaba en MpLab, en lenguaje ensamblador, las extenciones de archivo en el que guardaba mi programacion lo escribia con extencion .asm, por ejemplo, Proyecto1.asm por lo que nunca tuve problemas en que se me genere el archivo .hex cada vez que copilaba la programacion,

No se si esto se aplique en este caso, per esperro responder la duda de dn413l4 y me ayuden con mi duda.
12/09/2010 #14


Respuesta: aprendiendo a programar pics
tengo el mplab pero mi programa esta en c, me sirve igual?
lo intente y me sale un error de pcm no instalado pero cuando se instala eso?
14/09/2010 #15


Respuesta: aprendiendo a programar pics
tengo el .hex el problema ahora es el programa para programar el pic, probe con el icprog pero lei que no funciona para 16f877a que es el pic q quiero programar. intente tambien con el picprog pero me dice hardware no encontrado por lo que tampoco me serviria
tengo un programador pg2c
alguien que haya ocupado este pic sabra cual programa me sirve?
14/09/2010 #16

Avatar de javierdavid2006

Respuesta: aprendiendo a programar pics
Yo he usado el 16f877a con el icprog, y no he tenido ningun problema, hasta este programa grabador detecta automaticamente el pic que tengo conectada a la base del grabador y este me vino en el pickit2

Ahora que alguien me diga como presentar un mensaje en el lcd en lenguaje ccs, por que mi programa no me ensambla, no se por que, o si es un problema de libreria, ayudenme diciemndo donde descargar el software en correcto estado.

Gracias.
15/09/2010 #17


Respuesta: aprendiendo a programar pics
Hola Pablet fijate que programe el pic pero no me da ningun resultado, lo estoy prgramando con winpic800, con la siguiente conficguracion, Ra1, Ra2, Ra3 y Ra4 se conecto a un switch directamente (sin ninguna resistencia de por medio) quien aplica 5 volt al pin que se seleccione, Rb0 y Rb1 a un led cada uno sin resitencia entre la salida del pic y los led, led conectado a gnd, patilla 4 a 5volt sin resistencia, patilla 6 a tierra, patilla 14 a corriente 5 volt sin resistencia, patilla 15 y 16 a un occilador de cuarzo y cada patilla de éste con capacitor ceramica de 22pF conectados a tierra. PIC 16f84a que podra ser? gracias
15/09/2010 #18

Avatar de sammaael

Respuesta: aprendiendo a programar pics
carlos al parecer no conectas el pin mclra positivo sin el el pic no trabaja....
de todas formas debes adjuntar un diagrama para que sea mas facil la interpretacion...
y por ultimo cuando pongas n codigo en respuesta rapida tienes un signo como de gato o cardinal no se como lo conozcas es la ultima opcion llamada code entre ambas etiquetas code pon el codigo fuente de tu programa asi se utiliza mejor el espacio del mensaje y es mas comodo mirarlo
son solo consejos..
saludo
15/09/2010 #19


Respuesta: aprendiendo a programar pics
gracias por los consejos va el codigo que estoy tratando de grabar en el pic

Código:
#include <16f84a.h>

#fuses   XT ,NOWDT
#use   delay(clock=4000000) 

#define   LED0   pin_B0 
#define   LED1   pin_B1
   int i=1; //las declaras globalmente para todas las subrrutinas
   int c=1;

   
void main()
{   
set_tris_b(0x00);//pin de Rb se declaran como salidas.
   set_tris_a(0xff);//pin de Ra se declaran como entradas


Inicio:  //inicio de programa

 
SECUENCIA1:  //inicio secuencia 1

      if (input_state(PIN_A0)==1){

      for(i=0; i<1; i++){

         output_high(LED0)   ; // Encender LED en salida B0. 
         delay_ms(300)      ; // Esperar 300msegundos. 
         output_low(LED0)   ; // Apagar LED en salida B0. 
         delay_ms(10)      ; // Esperar 10msegundos.
      }
      
         delay_ms(1)      ; // Esperar 1msegundos de retraso.

      for(c=0; c<1; c++){
         output_high (LED1)   ; // Encender LED en salida B1.
         delay_ms(300)      ; // Esperar 300msegundos.
         output_low(LED1)   ; // Apagar LED en salida B1.
         delay_ms(10)      ; // Esperar 10msegundos.


      }//fin de for.
if (input_state(PIN_A0)==1){ GOTO SECUENCIA1; }
      }//fin de if

      else{
         GOTO SECUENCIA2;  //pasa a la siguiente secencia

      }

SECUENCIA2:  //inicio de secuencia 2

      if (input_state(PIN_A1)==1){
      // debes hacerlo con un input_state(*pin);
      for(i=0; i<5; i++){
         output_high (LED0)   ; // Encender LED en salida B0. 
         delay_ms(50)      ; // Esperar 50msegundos. 
         output_low(LED0)   ; // Apagar LED en salida B0.
         delay_ms(50)      ; // Esperar 50msegundos.
      }   


      for(c=0; c<5; c++){
         output_high (LED1)   ; // EEncender LED en salida B1.
         delay_ms(50)      ; // Esperar 50msegundos.
         output_low(LED1)   ; // Apagar LED en salida B1.
         delay_ms(50)      ; // Esperar 50msegundos.

      }//fin de for.
if (input_state(PIN_A1)==1){ GOTO SECUENCIA2; }
      }//fin de if

      
      else{
         GOTO SECUENCIA3;  //pasa a la secuencia 3

      }

SECUENCIA3:  //inicio de secuencia 3
      if (input_state(PIN_A0)==0){
       if (input_state(PIN_A2)==1){
   

      for(c=0; c<5; c++){
         output_high (LED0)   ; // Encender LED en salida B0.
         output_high (LED1)   ; // Encender LED en salida B1. 
         delay_ms(50)      ; // Esperar 50msegundos. 
         output_low(LED0)   ; // Apagar LED en salida B0.
         output_low (LED1)   ; // Apagar LED en salida B1. 
         delay_ms(50)      ; // Esperar 50msegundos.

      }//fin de for.

         delay_ms(100)      ; // Esperar 100msegundos de retraso.

      for(i=0; i<3; i++){

         output_high (LED0)   ; // Encender LED en salida B0.
         output_high (LED1)   ; // Encender LED en salida B1. 
         delay_ms(100)      ; // Esperar 150msegundos. 
         output_low(LED0)   ; // Apagar LED en salida B0.
         output_low (LED1)   ; // Apagar LED en salida B1. 
         delay_ms(100)      ; // Esperar 150msegundos.
      }//fin de for
if (input_state(PIN_A2)==1){ GOTO SECUENCIA3;}
      }//fin de segundo if
 
}//fin de primer if y termina la sentencia 3
      
      delay_ms(10)      ; // Esperar 350msegundos que sumados al
                    // anterior me da medio segundo de retraso
      
               GOTO SECUENCIA4;  //pasa a la secuencia 4

         

SECUENCIA4:  //inicio de secuencia 4
     if (input_state(PIN_A0)==0){
      if (input_state(PIN_A3)==1){
      
      for(c=0; c<5; c++){
         output_high (LED0)   ; // Encender LED en salida B0.
        
      output_high (LED1)   ; // Encender LED en salida B1. AQUI TENGO PROBLEMAS
                        // YA QUE UNA DE ESTAS DOS SALIDAS NO SE ENCIENDEN AL
                        //SIMULARLA EN PROTEUS, QUIERO QUE SE ENCIENDAN LAS DOS AL MISMO TIEMPO 
      delay_ms(100)      ; // Esperar 100msegundos. 
         output_low(LED0)   ; // Apagar LED en salida B0.
         output_low (LED1)   ; // Apagar LED en salida B1. 
         delay_ms(100)      ; // Esperar 100msegundos.

      }//fin de for.
        if (input_state(PIN_A3)==1){ GOTO SECUENCIA4; }

       delay_ms(400)      ; // Esperar 450msegundos que sumados al
                    // anterior me da medio segundo de retraso

     
      }//fin de segundo if
      }//fin de primer if y fin de secuencia 4
       
         GOTO Inicio;  //pasa a Inicio

     
      
}// fin de void main.
17/09/2010 #20


Respuesta: aprendiendo a programar pics
A se me olvido comentar que el pin de mclra lo tengo conectadoa 5 volts, directamente sin resistencia, eso esta bien??
¿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.