TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Hyarmenya en 12 de Marzo de 2016, 17:30:54
-
Hola a todos.
Me acabo de inscribir al foro :oops: aun que llevo bicheandolo ya mucho tiempo asi que MUCHISIMAS GRACIAS por todos los aportes, a este paso me saco la carrera por el foro :D :D :D
Bueno el caso es que no encuentro la respuesta a mis dudas asi que dejo un resumen......todo esto lo hago con rs232 y switch y demas pero la duda es mas simple :oops:
Para encender uno u otro led de uno u otro puerto, es correcto esto:
#byte PORTA=0xF80 //////esto es mejor que getenv(SFR) o da lo mismo???
#byte PORTB=0xF81
int8 pines;
#bit led1=pines.0
#bit led2=pines.1
if(buffer[0]=0x00) pines=PORTA;
else pines=PORTB;
if(buffer[1]=0x00) led1=0; led2=0;
if(buffer[1]=0x01) led1=1; led2=0;
if(buffer[1]=0x02) led1=0; led2=1;
Pues lo dicho, muchas gracias ya antes de contestarme y por todo.
un saludo
-
lo recomendable es utilizar las funciones del compilador,
e.j.
#byte porta =GETENV("SFR:PORTA")
y para los pines, usar declaraciones,
e.j.
#define led1 PIN_A0
-
Claro PalitroqueZ, si no uso funciones del compilador me marca errores :D :D.......ademas no se usar otro lenguaje que no sea C. :shock: :oops: :?
Es que esa pregunta la he formulado mal.....
que consume menos recursos del PIC; definir el byte directamente con la direccion del datasheet[#byte porta=0xf80] o sin embargo es mas rapido y consume menos recursos[#byte porta = getenv("SFR:PORTA")] o da exactamente lo mismo?????
Y respecto a lo del led: Si pero no :shock: :mrgreen: lee atentamente que no pregunto como definir un led eso es lo primero que se aprende........
son muchas variables, muchos pics para andar escribiendo los 24 pines, la intencion es acortar rutinas, tiempos y peso a la RAM y a la ROM.......ademas esos defines me alargan el codigo escrito y el .hex:
output_low(led1);
vs
led1=0; :D :D
mi duda es si la rutina que he escrito es correcta:
como yo a int8 pines no le he dado valor, puedo luego en el main declararlo como pines=porta; ???
y si es que si: entonces tengo disponibles los 8 bits del puerto que le declare con pines.0; pines.1;etc o no ???
-
ahh!! jeje ahora si entiendo un poco mejor tu duda,
no es fácil de responder lo que preguntas, cuando se habla de programar para microcontroladores PIC, existe una larga lista de pros y contras sobre los diferentes lenguajes de programación a utilizar, y eso dependerá de tus requerimientos tales como velocidad, portabilidad, flexibilidad y legibilidad; en la medida que subes en la escala de lenguajes de alto nivel, sacrificas velocidad pero ganas portabilidad, y en eso, los compiladores de cada fabricante compiten para ver quién es más eficiente.
respecto a lo segundo, puedes hacerlo de ambas formas, pero si quieres saber cuál de los 2 es más rápido tendrás que ver el código asm que genera el compilador, y eso ya escapa de las normativas o razones por las que utilizar lenguaje C.
-
Pues hare eso que me dices.......
me abro dos archivos nuevos escribo en cada uno y voy comparando.......
No lo voy a hacer con todo el codigo, esta claro que para eso mejor aprendo asm y acabaria antes :mrgreen:; es sobretodo para la rutina que resumo en el comentario porque voy a estar todo el rato "dalequetepego", recibiendo, mandando, volver a recibir y pretendia al menos en esto ahorrarle algo de carga.
Uso CCS, la verdad es que es "muy simple" y no come tantos recursos como el basic......y porque soy autodidacta, el asm me intriga pero me surgen mil dudas que son tediosas de resolver.....vamos que total pa lo que hago me basta CCS y como bien dices luego cambio dos includes y tres fuses y puedo usar otro pic......
Muchas gracias PalitroqueZ
-
Pues por si a alguien le interesa:
Al menos en CCS da exactamente lo mismo, al compilar NO genera mas lineas ASM en uno que en otro y ademas son super austeras mas que la merkel :D :D :D
.................... pines=PORTA;
0024: MOVFF F80,04
.................... pin1=0;
0028: BCF 04.0
.....................pin1=1;
002A: BSF 04.0
.................... pines=PORTC;
002C: MOVFF F82,04
.................... pin1=0;
0030: BCF 04.0
.................... pin1=1;
0032: BSF 04.0
-
Bien!!! Hyarmenya
yo cuando quiero probar la velocidad en un segmento del código, lo que hago es colocar un delay_cycles(1) (nop en asm) y luego en la simulación coloco un breakpoint en ambos nop, y luego mido el tiempo.