Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

13/02/2011 #1


duda sobre el funcionamiento de un pic
Hola,
tengo una duda que es rapida (porq no debeis solcionarme ningun problema, xD) pero que es por curiosidad.
en CCS al principio pongo #use delay(clock=1000000).
esto, en cuanto a los registros, que hace?? que registro es el que se ocupa de esta linea?

graicas
13/02/2011 #2

Avatar de Scooter

A saber. Usa un desensamblador para verlo.
Seguro que mas de uno porque no hay registros en los que quepa ese número.
13/02/2011 #3

Avatar de Ferny

Sirve para que el compilador pueda calcular todas las constantes temporales que se usan en el programa.

Ese número se usa para poder calcular las demoras de tiempo cuando usas las funciones delay_ms() y delay_us(), el compilador genera un bucle que se ejecuta X veces, donde X es dependiente de ese valor (a más frecuencia de reloj, más valor tendrá X porque más veces tendrá que repetir el bucle).

También afecta por ejemplo cuando configuras la UART, en este caso creo recordar que sí hay un registro que depende también de ese valor. Es para saber en qué instantes debe samplear la señal de la UART (ya sabréis que es una señal asíncrona), pues hay una relación directa entre la cantidad de baudios que configuras y la frecuencia de reloj (para un determinado valor de baudios, a más frecuencia de reloj tendrá que samplear cada mayor número de ciclos de reloj)
13/02/2011 #4


muchas gracias ferny

a mi lo que me fastidia un poco es ese misterio en esas funciones tipo "dalay_ms()", porq antes n sabia lo que hacian realamente output_high(); etc... y al final llegué a entender como funcionan,
pero las funciones d delay no sabia como funcionan
entocnes si he entendido bien , haces un bucle para retardar, no?
y esta funcion... donde está escrita? xD
13/02/2011 #5

Avatar de Ferny

Si utilizas MPLAB junto con CCS, tras compilar el proyecto vas a View -> Dissasembly listing, y verás el código ensamblador que corresponde a cada línea de código C, muy útil y sencillo de ver. Claro que yo, de ensamblador en PICs, ni idea
13/02/2011 #6

Avatar de rojjo

Hola:

actualmente no uso pics, pero a esas funciones se llaman macros.
son funciones predefinidas que al llamarlas en tu código lo que hace es insertar líneas las cuales solo podrás ver como bien se menciona, en la función desensamblador.

dichas macros fueron creadas para facilitar la programación ya que son funciones que se usan regularmente; de este forma ya no tienes que escribir un bucle de retardo (por ejemplo).

lo que ayudaría más es si alguien tiene la descripción de las macros para saber de que se dispone y como usarlas.

saludos
13/02/2011 #7

Avatar de Ferny

Si te refieres a todas las que hay para usar en CCS, te recomiendo que te bajes el manual de CCS: http://www.ccsinfo.com/downloads/ccs_c_manual.pdf
13/02/2011 #8


entendido
Muchas gracias a todos
he hecho eso queme has dicho Ferny, pero he mirado el .lst para poder situarme.
asi pues el delay hace:
Código:
.................... delay_ms(1000); 
001A:  MOVLW  04
001B:  MOVWF  11
001C:  MOVLW  FA
001D:  MOVWF  12
001E:  CALL   004
001F:  DECFSZ 11,F
0020:  GOTO   01C
Bueno, esta bien saberlo para la cultura general.... xD
me alegro de porgramar en C xDD

por cierto, pregunta tonta.... la gente que no usa ccs, y que por ende no tienen la funcion output_high() output_low() etc.... como lo hacen? como cambian el valor de un solo bit del puerto? porq claro... está preprogramada como delay_ms() para ccs....
13/02/2011 #9

Avatar de Ferny

Fácil, haciendo el equivalente de output_high, pero en ensamblador. Al final el valor de los bits del puerto están en un registro del micro, así que simplemente hay que escribir unos o ceros en ese registro y de este modo se traducen en el nivel que toman los pines.
13/02/2011 #10


a mano???? escriben un equivalente a output_high a mano??
el de output_high y el low aún sabria hacerlos (es cuestion de sumer en binario:
si estaba en port_a=0b00000000 y quiero encencer el 1 hago port_a=0b00000000+0b00000010
pero la funcion input esa si que ni idea de como se podria hacer....

dicen q ccs no es muy bueno, pero joer, si eso viene preprogramao, yo lo agradezco xDD
13/02/2011 #11

Avatar de Ferny

Si le das un vistazo al datasheet de algún PIC verás que hay registros tanto para "sacar" datos hacia fuera como para "leer" datos desde fuera, así como otro registro que sirve para configurar los pines como salida o entrada... Al final si trabajas en ensamblador, lo que haces es leer y escribir registros del micro.

¿Nunca programaste en ensamblador verdad? Yo en PICs nunca, pero en la universidad tuve una asignatura de programación en ensamblador del Motorola 68HC11, por eso algo conozco cómo funciona este tema...
13/02/2011 #12


si, los registros TRISX lo conozco para configurar pines, y los registros PORTX tb... pero de los demas, mas bien poco.. sé existe el W q es el que hace todo, y poco más

No, nunca programé en ensamblador nada... si te digo la verdad aprendia programa en C en 3 intensivas horas hace ahora un mes... sólamente para hacer un proyecto que ya funciona (un tres en en raya maquina vs hombre que siempre gana) simulado.. pero ahora me estaba preguntando como funcionan esas funciones preprogramadas que he usado. ahora ya he enendido mejor, muchas gracias
15/02/2011 #13

Avatar de dukex

C es muy fácil y rápido, ahorra el tiempo de programación optimizando así costos en desarrollo.

Ensamblador optimiza velocidad en procesamiento y puede muchas veces ahorrarnos utilizar mas hardware pero el programador gastará mas tiempo.

saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.