TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: yamilongiano en 25 de Julio de 2014, 02:33:20
-
hola a todos estoy aprendiendo de un libro que me compre pero al seguir los ejemplos me sale "unable to resolve identifier ANSEL"
creo que al parecer no estan declaradas o falta definirlas. no quiero dar el nombre del libro para no generar problemas. y obvio tratar de entender por que pone un codigo el autor y le funciona correctamente y a mi no. asi quizas evitar futuros problemas mas adelante en ejemplos practicos.
a continuacion les dejo el codigo.
estoy usando el
pic16f887
#include <xc.h>
#define _XTAL_FREQ 4000000__CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & WDTE_OFF & PWRTE_ON & LPV_OFF & CP_OFF & CPD_OFF & BOREN_ON);
int main(void){
ANSEL=0;
ANSELH=0;
PORTB=0;
TRISB=0X00;
while(1)
{
RB0=!RB0;
__delay_ms(500);
}
return 0;
}
errores:
CLEAN SUCCESSFUL (total time: 175ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
make -f nbproject/Makefile-default.mk dist/default/production/projecto1.X.production.hex
make[2]: Entering directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
"C:\Program Files\Microchip\xc8\v1.32\bin\xc8.exe" --pass1 --chip=16F877 -Q -G --double=24 --float=24 --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s" -obuild/default/production/main.p1 main.c
(908) exit status = 1
make[2]: *** [build/default/production/main.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
main.c:16: error: (192) undefined identifier "ANSEL"
main.c:17: error: (192) undefined identifier "ANSELH"
main.c:25: error: (195) expression syntax
main.c:25: error: (187) too few function arguments
main.c:25: error: (194) ")" expected
main.c:25: error: (195) expression syntax
main.c:25: error: (195) expression syntax
nbproject/Makefile-default.mk:91: recipe for target 'build/default/production/main.p1' failed
make[2]: Leaving directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
nbproject/Makefile-default.mk:75: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
BUILD FAILED (exit value 2, total time: 9s)
no se la relacion de ansel y anselh y tampoco comprendo por que el delay esta con problemas. seguro algo me falta definir o alguna otra biblioteca.
que en el libro quizas no se menciona.
como dato extra tengo el pickit 3.
-
Saludos amigo,
He compilado tu fuente y han aparecido algunos errores como dices, yo tambien estoy aprendiendo el xc8. Encontré que los registros que mencionas con respecto a ANSEL dependen de si el chip que utilizas tiene esos registros en XC8, no se si el PIC que tu tienes los emplea. Revisa que PIC utiliza el libro.
El otro error que sale es en cuanto al __config, no entiendo porque no hay manera de colocarlo bien me sale errores, además de como lo pusiste en el texto luego del define en la misma línea.
El otro error es el que aparece en __delay, según leí es un bug del IDE, no lo se , pero si arreglas lo del config y comentas los registros ANSEL compila bien
Seguire viendo y profundisando en eso de ANSEL y que chip los tiene
Un tip muy bueno para emplear los fuses de la palabra de configuración, el mplab tiene una herramienta de autogeneracion de ese código según el chip, para ello ve a la pestaña windows - Pic Memory views - configuration bits. Selecciona tus opciones y en el boton Generate Souce Code to output tendrás lo que necesitas, según tu configuración sacó lo siguiente:
// PIC16F877A Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
Espero haberte ayudado
-
hola muchas gracias por tu ayuda....mira he copiado directamente del libro tal cual sale. por eso quizas los errores.
el microcontrolador es el pic16f887 y tambien he estado leyendo algo de ansel y anselh es para declararlas digitales.
(http://fotos.subefotos.com/fb23f88d512115e1f36e05913c237b26o.jpg)
al parecer xc8 aun tiene problemas... mejor dicho yo tengo el problema jaja.
vere si lo puedo solucionar muchas gracias.
-
Saludos,
Viendo los registros ANSEL y ANSELH con clip derecho y en navigate declaration me encuentro que la libreria que tiene el ANSEL es el pic16f88a.h pero no tiene al ANSELH
el chip que encontré que tiene los dos registros es el pic16f887.h
de hecho selecciona ese PIC, en project properties y listo tu código funciona perfectamente.
Tu codigo no funciona para el pic16f877 sino para el pic16f887
-
hey there
there is not such a problem, I mean, the code is right
no hay tal problema, quiero decir, el código es correcto
(http://lh6.googleusercontent.com/4pILxphKRsCzOS9lSusiHpc_MxOoZlDlMS24Atc1o4E=w1026-h577-no)
check u select the right PIC... (16F887)
CONTROL u seleccione el PIC derecho ... (16F887)
(http://lh6.googleusercontent.com/-ezXVGn_oP80/U9KXVtQYBKI/AAAAAAAAAZs/a6PnIYssV74/w1026-h577-no/001a.jpg)
hope this helps
Espero que esto ayude
-
Ojo tienes dos errores en la transcripción
Tu colocaste
#define _XTAL_FREQ 4000000__CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & WDTE_OFF & PWRTE_ON & LPV_OFF & CP_OFF & CPD_OFF & BOREN_ON);
y la manera correcta es
#define _XTAL_FREQ 4000000
__CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & WDTE_OFF & PWRTE_ON & LPV_OFF & CP_OFF & CPD_OFF & BOREN_ON);
Nota la nueva linea en __CONFIG tal como sale en el libro
y el otro error fue que colocaste LPV_OFF y la manera correcta es LVP_OFF
Aunque prefiero la manera moderna que hace el mismo MPLABX con los #PRAGMA
Creo que el libro no se equivocó, sólo selecciona el PIC16F887A.
Gracias por la oportunidad aprendí muchísimo de xC8
:mrgreen:
-
Hola yamilongiano, por favor me informas cual es libro que estas siguiendo
Gracias
-
Hola yamilongiano, por favor me informas cual es libro que estas siguiendo
Gracias
hola muchas gracias por sus respuestas.....debo usar lentes pues mire muchas veces y veia el pic16f877 un error muy humano.
claro que te digo el libro. se llama"DISEÑO E IMPLEMENTACION DE SISTEMAS EMBEBIDOS CON PIC (TOMO I INTRODUCCION Y APLICACIONES BASICAS)" muy buen libro muy grafico. orientado para trabajar con MPLAB X y xc8. de verdad lo encuentro bueno. por eso he decidido llevar el lbro al pie de la letra y tratar de hacer todo lo que esta en el. aunque yo logre hacerlo de otras maneras. quiero entender la forma de programar de este profesional, ya que la encuentro sumamente buena.
volviendo al tema me sale otro error.
#include <xc.h>
#define _XTAL_FREQ 4000000__CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & WDTE_OFF & PWRTE_ON & LPV_OFF & CP_OFF & CPD_OFF & BOREN_ON);
int main(void){
ANSEL=0;
ANSELH=0;
PORTB=0;
TRISB=0X00;
while(1)
{
RB0=!RB0;
__delay_ms(500); //error aqui
}
return 0;
}
compilando:
CLEAN SUCCESSFUL (total time: 303ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
make -f nbproject/Makefile-default.mk dist/default/production/projecto1.X.production.hex
make[2]: Entering directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
"C:\Program Files\Microchip\xc8\v1.32\bin\xc8.exe" --pass1 --chip=16F887 -Q -G --double=24 --float=24 --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s" -obuild/default/production/main.p1 main.c
main.c:23: error: (195) expression syntax
main.c:23: error: (187) too few function arguments
main.c:23: error: (194) ")" expected
main.c:23: error: (195) expression syntax
main.c:23: error: (195) expression syntax
(908) exit status = 1
make[2]: *** [build/default/production/main.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
nbproject/Makefile-default.mk:91: recipe for target 'build/default/production/main.p1' failed
make[2]: Leaving directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
nbproject/Makefile-default.mk:75: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/yamil/Desktop/proyectosMPLABX/projecto1.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
BUILD FAILED (exit value 2, total time: 5s)
no entiendo el error desde ya muchas gracias.
-
el error (si no hay otro mas) es este: #define _XTAL_FREQ 4000000__CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & WDTE_OFF & PWRTE_ON & LPV_OFF & CP_OFF & CPD_OFF & BOREN_ON);
has puesto las lineas una encima de otra, seria:
#define _XTAL_FREQ 4000000
__CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & WDTE_OFF & PWRTE_ON & LPV_OFF & CP_OFF & CPD_OFF & BOREN_ON);
-
no comprendo por que el error.-
miren pongo caputas.
(http://fotos.subefotos.com/4176167af18e10a058b2124980c71f10o.png)
output:
(http://fotos.subefotos.com/b0eac0b216f56289b1cec0af555b1286o.png)
ya no se que puede ser... :O
-
no comprendo por que el error.-
miren pongo caputas.
(http://fotos.subefotos.com/4176167af18e10a058b2124980c71f10o.png)
output:
(http://fotos.subefotos.com/b0eac0b216f56289b1cec0af555b1286o.png)
ya no se que puede ser... :O
Saludos Amigo pero si ya te lo respondi arriba date cuente del LPV que tienes es LVP_OFF y listo.
-
he cambiado y sigue el problema... no se si el codigo esta bien yo lo veo bien.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 4000000__CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & WDTE_OFF & PWRTE_ON & LVP_OFF & CP_OFF & CPD_OFF & BOREN_ON);
int main(void){
ANSEL=0;
ANSELH=0;
PORTB=0;
TRISB=0X00;
while(1)
{
RB0=!RB0;
__delay_ms(500);
}
return 0;
}
(http://fotos.subefotos.com/5527715c93877bc10d729349709548e7o.png)
con los otros fuses...
#pragma
codigo:
#include <xc.h>
// CONFIG
#pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
int main(void){
ANSEL=0;
ANSELH=0;
PORTB=0;
TRISB=0X00;
while(1)
{
RB0=!RB0;
__delay_ms(500);
}
return 0;
}
(http://fotos.subefotos.com/3b17614396cfe055125b5e09abddfcbeo.png)
no sera problema del MPLAB ???
-
Que cosa, yo tome el mismo código tuyo, lo compile y me dio los errores arriba mencionados, le cambie el chip al 16f887 y luego me dio el ultimo error que tu tienes,
le cambie el LVP_OFF y guala me compilo correctamente.
-
Viendo las screenshoot que tomaste y veo que mantienes el error de dejar el __config pegado al define xtal_freq 400000
ahora en el segundo asi mismo lo tengo yo sin problema
-
Viendo las screenshoot que tomaste y veo que mantienes el error de dejar el __config pegado al define xtal_freq 400000
ahora en el segundo asi mismo lo tengo yo sin problema
hola muchas gracias por tu tiem po me desconcerta un poco todo esto. al parecer se loghra crear el hex. pero aun se mantienen los errores. y eso me deja algo confuso.
(http://fotos.subefotos.com/92eab6b02664ca834fa75d56e4898b9eo.png)
podria decirse que el hex. se puede crear a pesar de tener estos errores de delay... antes usaba el ide simulator y no tenia ningun problema. kajajajaaj
que me dices, alguna idea por que sucede esto o es normal en mplab x y xc8..... :shock:
bueno lo he simulado en el proteus y funciona sin ningun problema... pero no se por que esos errores. que loco. :S
-
Esto es un bug del mplabx, si cierras el proyecto y lo abres de nuevo los errores se quitan. El del delayms ocurria por no incluir (#include) la libreria correcta, no te esta detectando la funcion, pero por defecto el linker lo tiene en la libreria y no hay problema.
-
Para configurar el PIC, aquí Jukinch nos muestra una forma muy cómoda. http://www.todopic.com.ar/foros/index.php?topic=40649.60