Programa en CCS para el pic 16F877A

Al presionar un botón en RB0 se enciende el led conectado en RB1.. el problema es que al simularlo en Proteus me da error, estoy culpando al error de warning que me da al compilar el firmware..

warning 203 "hola1.c" Line17(1,1): Condition always TRUE
Memory Usage: ROM=0% RAM=2%
0 Errors, 1 Warnings.

La línea 17 es la donde está: "{ antes del if
Me pueden echar una mano con ese mensaje de precaución??

Gracias desde el fin del mundo..

En while(1) pon while(TRUE), ya se que parece poca cosa pero así es como lo pide el compilador del ccs...

saludos
 
ByAxel..¡¡¡

Gracias.. ha funcionado de maravilla la compilación.. luego lo pruebo en Proteus y de allí a la placa de prueba de microchip..

Estoy ansioso que llegue el libro C CCS desde el país del norte.. para continuar practicando..

Nuevamente gracias desde las tierras de sol y cobre..
 
Buenas tardes, yo estoy en las mismas usando el if de la siguiente manera (las funciones y variables definidas aparte son para usarlas posteriormente):
#include "C:\Users\valery\Documents\UCV\Tesis\Microcontrolador e interfaces\Simulaciones\batería a cargar.h"

long cbat(); long cpanel(); long bat(); long vpanel(); long ccorto();
void main()
{
long corpanel, vpanel, vbat;
set_tris_B(0xfe);
//setup_adc_ports(sAN2|sAN3|sAN4|VSS_VDD);
//setup_adc_ports(ALL_ANALOG);
//setup_adc(ADC_CLOCK_DIV_2);
//set_tris_A(0b11111100);

//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!

//Si el voltaje de los paneles es mayor al de la batería,
//deja pasar corriente a la batería.
if (PIN_B0>0)
output_b(0x00);
//bat();
else
output_b(0xff);
}
//***********************Declaración de rutinas*******************************

long vpanel()
{
set_adc_channel(0);
output_b(read_adc());
}
long ccorto()
{
set_adc_channel(1);
delay_us(20);
output_b(read_adc());
}
long bat()
{
set_adc_channel(2);
delay_us(20);
output_b(read_adc());
}
long cpanel()
{
set_adc_channel(3);
delay_us(20);
output_b(read_adc());
}
long cbat()
{
set_adc_channel(4);
delay_us(20);
output_b(read_adc());
}
 
hola ByAlex, yo nesecito el driver lcd flex y fui a tu dirección para buscar el archivo pero me apareció un código,la verdad no se muy bien pero yo pensé que encontraría un archivo para poder guardarlo la crapeta de los drivers de mi programa o no se si seras tan amable de decirme como usarlo
 
nesecito el driver lcd flex y fui a tu dirección para buscar el archivo pero me apareció un código,la verdad no se muy bien pero yo pensé que encontraría un archivo para poder guardarlo la crapeta de los drivers de mi programa o no se si seras tan amable de decirme como usarlo
Hola, lo explican por aquí. Hace tiempo que no uso el CCS pero diria que este no va a funcionar (creo) con copiar a la carpeta de "Driver" como una libreria más... igual prueba. Generalmente hacia una copia de la libreria y lo agregaba en la misma carpeta donde está el resto de código... main y demás.
 
Última edición:
mmmmm ByAxel me temo que te entendí muy poco, pero por lo que te entendí lo que hice fue copiar el codigo en el compilador PCW de ccs,y realice un nuevo archivo en con en source file con extencion .c pero al compilarlo me mando un error eso producirá un problema con mi otro codigo que estoy realizando o no afecta, gracias de antemano por tu respuesta
 
lo que hice fue copiar el codigo en el compilador PCW de ccs,y realice un nuevo archivo en con en source file con extencion .c pero al compilarlo me mando un error eso producirá un problema con mi otro codigo que estoy realizando o no afecta, gracias de antemano por tu respuesta
Que dice el error.
Es mejor hacer una copia de la libreria flex_lcd.c por cada proyecto donde involucre un LCD ya que es suceptible a cambios.
Saludos
 
Debes de declarar el tipo de dispositivo arriba de todo #DEVICE PICxxxx. que generalmente está en un archivo *.h y luego ya el resto como #DEFINE, #INCLUDE, etc...
 
Hola alguno de ustedes sabe como reflejar un corazón en un lcd utilizando el puerto d que es por defaul?
eh intentado con varias formas pero no me ah salido :S
 
Hola. ¿Alguno de ustedes sabe como reflejar un corazón en un lcd utilizando el puerto d que es por default?
He intentado con varias formas pero no me ha salido.
Mira el ejemplo adjunto, realicé dos tipos de caracteres personalizados que se almacenan en la CGRAM de la pantalla.

Espero que sea lo que estás intentado hacer.

Suerte.
 

Adjuntos

  • 16F877A Corazones en LCD.rar
    44.9 KB · Visitas: 42
yo tengo un programa que se llama "generador cgram", te permite hacer el carácter que quieras en la matriz de 5*7 y luego te genera el código para el pic en lenguaje ensamblador o en C para css.
 
Quiero testear siempre unos estados pero que me corra un switch de un menú.
La idea es que el menú siempre esté corriendo y cuando yo cambie el estado se vean los cambios.
¿Cómo se podría hacer eso?



PHP:
#include<16f88.H> 
#FUSES INTRC_IO,nowdt,PUT,noprotect 
#use delay(clock = 8000000) 
#use rs232 (baud =9600,XMIT =PIN_b5,RCV =PIN_b2,BITS=8,PARITY =N,FORCE_SW,INVERT)


const char pass[]={'i','c','e','1'}; //constante con la clave
int ban=0;
char PRENDER_LED; 
void MENU()
{
   puts("\f                OPRIMA BARRA PARA REGRESAR A MENU\n\n");
   puts("\r OPRIMA 0 ESTADOS\r\n");
   puts("oprima 1 PARA ABRIR LA PUERTA\r\n");
   puts("oprima 2 PARA CERRAR LA PUERTA\r\n");
   puts("oprima 3 PARA ACTIVAR ALARMA\r\n");
   puts("oprima 4 LUZ DEL CUARTO\r\n");
}
VOID ALARMA(){
char key;      //variable para pulsación del teclado
char dato[4];  //variable vector para ir guardando cada uno de las pulsaciones de caracteres
int i=0;
   while(true){
   output_bit(52,0);
              if(input(PIN_B4)==1)
      {
            PRINTF("\fTeclee el pasword para desactivar la alarma\r\r");
            output_bit(53,1);
      while(i<=3)       //Este ciclo permite ingresar
      {                 //cuatro digitos
      key=getc();
      if(key!=0){
      dato[i]=key;
      i++;
      delay_ms(100);
      }}
      i=0;
      if((dato[0]==pass[0])&&(dato[1]==pass[1])&&(dato[2]==pass[2])&&(dato[3]==pass[3]&&input(PIN_b4)==0))
      {
      
      output_bit(52,0);output_bit(53,0);
      printf("\f CORRECTO BIENVENIDO A CASA");
      break;
      }
            
      else
      {
      printf("\f Incorrecto int");
      delay_ms(1000);
      }
      }
   }
}
 
   VOID main ()
   {
      output_bit(48,0);
      output_bit(42,0);
      output_bit(43,0);
      printf("                     PULSE BARRA\r");
      printf("\f ENTRADA1 : %u\r\n",INPUT(PIN_A0));
      printf(" ENTRADA2 : %u",INPUT(PIN_A1));
      OUTPUT_BIT(41,0);
      IF(INPUT(PIN_A0)==1){OUTPUT_BIT(41,1);
      while(INPUT(PIN_A0)==1){}
      ban=1;}
      if(ban==1){OUTPUT_BIT(41,0);
      BAN=0;}
      FOR (;;){
           PRENDER_LED=getch();
      SWITCH (PRENDER_LED){ 
      CASE ' ': MENU();
      BREAK;
      CASE '0': output_toggle(PIN_A4);
      BREAK;
      CASE '1':  output_toggle(PIN_A2),output_bit(54,1);
      BREAK;
      CASE '2':  output_toggle(PIN_A3),output_bit(55,1);
      BREAK;
      CASE '3': ALARMA(); 
      break;
      }}}
Este es mi código pero testea y entra al menú, y cuando hago los cambios en las entradas, no me los lee.
¿Habrá alguna forma que sea sin interrupción? Que sean sólo las banderas.
Porque me han comentado que eso se logra con unas banderas booleanas.
En realidad ya intenté varias veces, pero me corre o el Switch o los IF y ni siquiera se ven los cambios de los estados.
 
Última edición por un moderador:
Atrás
Arriba