Autor Tema: Consulta de programacion en C con PIC 12F675  (Leído 2754 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Pedro2007

  • PIC10
  • *
  • Mensajes: 2
Consulta de programacion en C con PIC 12F675
« en: 07 de Diciembre de 2023, 13:09:03 »
buenas tardes, soy nuevo en el foro y estoy retomando la programación de PIC después de varios años.
Espero haber colocado mi consulta en el foro correcto si no es asi disculpas agradeceré me avisen cual seria el foro correcto.
La consulta es la siguiente: estoy programando un PIC 12f675 quiero usar los 6 pines como digitales pero no me esta funcionando.
Puse en el Main que se enciendan y apaguen unos leds en el PIN_A2 y PIN_A4 pero ni eso funciona
el código es el siguiente no entiendo que estaría faltando
Uso el compilador CCS con un programador genérico (no es de marca)


#include <12F675.h>
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
#use standard_io(a)
int8 ppulsa,lnoche,pulsa1,pulsa2;

 /*   **********PROGRAMA  PRINCIPAL********  */
void main(){
    Setup_adc_ports(no_analogs);
    set_tris_A(0b101011); // GP2, GP4 salidas

    output_bit( PIN_A2,1 );
    output_bit( PIN_A4,1 );
    delay_ms( 1000 );
    output_bit( PIN_A2,0 );
    output_bit( PIN_A4,0 );

    lnoche=1;
    ppulsa=2;
    pulsa1=1;
    pulsa2=1;
    delay_ms( 100 );

while ( TRUE ) {

 delay_ms( 300 );
 pulsa2=pulsa1;
 pulsa1=input(PIN_A5);

 if (pulsa1==0 && pulsa2==1) {ppulsa=1;}
 if (input(PIN_A3)==1 && ppulsa==1) {lnoche=0; output_bit( PIN_A4,0 );}

 if (input(PIN_A3)==0) {
    if (ppulsa==2) {output_bit( PIN_A4,1 ); ppulsa=0;}
    if (ppulsa==1 && input(PIN_A4)==1) {output_bit( PIN_A4,0 ); output_bit( PIN_A2,1 ); ppulsa=0;}
    if (ppulsa==1 && input(PIN_A2)==1) {output_bit( PIN_A2,0 ); output_bit( PIN_A4,0 ); ppulsa=0;}
    if (ppulsa==1 && input(PIN_A2)==0 && input(PIN_A4)==0) {output_bit( PIN_A4,1 ); ppulsa=0;}
    }

if (input(PIN_A3)==1 && lnoche==1) {
    if (input(PIN_A1)==1 && input(PIN_A0)==1) {output_bit( PIN_A4,1 );}
    if (input(PIN_A0)==0) {output_bit( PIN_A4,0 );}
    }

 }
  // Ciclo infinito

}

Agradezco los comentarios

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Consulta de programacion en C con PIC 12F675
« Respuesta #1 en: 07 de Diciembre de 2023, 13:17:59 »
Tal vez te falta configurar el registro  CMCON o ANSEL:

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Consulta de programacion en C con PIC 12F675
« Respuesta #2 en: 07 de Diciembre de 2023, 22:29:06 »
Al declarar  #use standard_io(a)  ,  cada vez que leas el pin antes lo programará como entrada y como salida antes que lo escribas.

Por lo tanto  en estas líneas:
Código: [Seleccionar]
    if (ppulsa==2) {output_bit( PIN_A4,1 ); ppulsa=0;}
    if (ppulsa==1 && input(PIN_A4)==1) {output_bit( PIN_A4,0 ); output_bit( PIN_A2,1 ); ppulsa=0;}
    if (ppulsa==1 && input(PIN_A2)==1) {output_bit( PIN_A2,0 ); output_bit( PIN_A4,0 ); ppulsa=0;}
    if (ppulsa==1 && input(PIN_A2)==0 && input(PIN_A4)==0) {output_bit( PIN_A4,1 ); ppulsa=0;}
Si por ejemplo PIN_A2=PIN_A4=0    te quedará PIN_A2 como entrada y PIN_A4  momentáneamente como entrada y luego salida.

Solución: Usar #use fast_io(a) en lugar de #use standard_io(a)

Desconectado Pedro2007

  • PIC10
  • *
  • Mensajes: 2
Re:Consulta de programacion en C con PIC 12F675
« Respuesta #3 en: 11 de Diciembre de 2023, 16:40:48 »
Gracias a ambos por las respuestas. Quedo solucionado con sus recomendaciones ahora el Pic hace lo que se esperaba.

Saludos,