TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RobertoVilchez en 15 de Febrero de 2023, 23:54:49
-
Estoy escribiendo un codigo en c para el funcionamiento de un microcontrolador, tengo todo lo necesario pero al compilar me indica el siguietne error: *** Error 12 "CODIGO.c" Line 60(9,18): Undefined identifier PORTBbits
Comparto parte de mi codigo por si alguien pudiera decirme como oslucionarlo
#include <18f4550.h>
#include <delays.h>
#include <stdio.h>
#include <string.h>
#define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_C0
#define LCD_RW_PIN PIN_C1
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7
#include <LCD.C>
#include <xc.h>
#pragma config FOSC = HS, CPUDIV = OSC1_PLL2, PLLDIV = 4, WDT = OFF, BOR = OFF, PBADEN = OFF, MCLRE = ON, LVP = OFF
#define _XTAL_FREQ 20000000
#define DELAY 500
// Variables globales
int temperature = 0, humidity = 0;
unsigned char buf[5];
// Prototipos de funciones
void init();
void proceso1();
void proceso2();
void readTemperature();
void readHumidity();
void main() {
init();
while (1) {
proceso1();
proceso2();
}
}
void init() {
// Configuración de puertos
// Configuramos los puertos RD2 y RD3 como salidas lógicas
SET_TRIS_D(0xFC);
// Configuramos el puerto RB2 y RB3 como entradas
SET_TRIS_B(0x0C);
// Configuramos los puertos RD4, RD5, RD6 y RD7 como salidas lógicas
SET_TRIS_D(0xF0);
// Configuramos el puerto RB5 y RB6 como entradas
SET_TRIS_B(0x60);
// Configuramos los puertos del bus C para el LCD
SET_TRIS_C(0x80);
// Inicializar el LCD
lcd_init();
// Mostrar mensaje de inicialización
lcd_putc("Inicializando...");
}
void proceso1() {
if (PORTBbits.RB6 == 1) {
if (PORTBbits.RB3 == 1) {
//Activar RD4 y mostrar mensaje de vaciado de tanque
PORTDbits.RD4 = 1;
Lcd_Clear();
lcd_gotoxy(1, 1);
lcd_putc("Vaciando tanque...");
while (PORTBbits.RB3 == 1) {
// Esperar hasta que el nivel mínimo sea 0
}
PORTDbits.RD4 = 0; // Deshabilitar salida
} else {
Lcd_Clear();
lcd_gotoxy(1, 2);
lcd_putc("Imposible vaciar");
lcd_gotoxy(2, 1);
lcd_putc("tanque");
while (PORTBbits.RB6 == 1) {
// Esperar hasta que el switch DESAGÜE se deshabilite
}
}
} else {
// Verificar si el switch CORTE está activo
if (PORTBbits.RB5 == 1) {
// Verificar si el sensor de nivel mínimo está deshabilitado
if (PORTBbits.RB3 == 0) {
Lcd_Clear();
lcd_gotoxy(1, 2);
lcd_putc("Tanque vacio,");
lcd_gotoxy(2, 1);
lcd_putc("imposible continuar");
mostrar_mensaje("Reiniciar sistema al terminar corte", 0);
} else {
// Continuar al proceso 2
}
} else {
if (PORTBbits.RB2 == 1) {
// Continuar al proceso 2
} else {
Lcd_Clear();
lcd_gotoxy(1, 2);
lcd_putc("Llenando tanque");
PORTDbits.RD5 = 1; // Habilitar salida
while (PORTBbits.RB2 == 1) {
// Esperar hasta que el tanque se llene
}
}
}
}
}
-
... Undefined identifier PORTBbits
Si no me estoy confundiendo con otra cosa, el nombre de la estructura es PORTBbits_t
-
No no, investigando más encontré que se debe usar INPUT(PIN_x) para leer la señal de entrada al microcontrolador en vez de lo que estaba usando.
-
No no, investigando más encontré que se debe usar INPUT(PIN_x) para leer la señal de entrada al microcontrolador en vez de lo que estaba usando.
Son cosas distintas, el error que te daba era por el nombre incorrecto.
Otro tema es que el puerto se escribe en PORTB pero se lee en LATB , que son direcciones distintas
-
#include <xc.h>
Que compilador estas usando? porque ese codigo es para XC8. y esa estructura PORTBbits es de XC8.