desktop

Retardos y USART en PIC16F84A en lenguaje C

Yo tengo una dudota :eek:
necesito saber como hacer una función de retardo por software para cualquier microntrolador pic.
Ya sé que mikroc tiene una función llamada delay donde le pones cuantos ms.
Pero esto va por pura curiosidad, ademas de como hacer comunicación USART para el PIC16F84A todo en C.
Todo es sólo para conocer un poco mas acerca de estos microcontroladores :rolleyes:
 
Última edición por un moderador:
Si buscas precisión, lee y aplica un poco de assembler ya que cada instrucción se ejecuta en OSC/4 (por ejemplo 4Mhz hace que cada instrucción dure 1us -microsegundo-) de lo contrario ya te dijeron pero si "i" fuera integer, seria hasta 65535..., respeta los límites de los tipos en las variables.

Saludos.
 
ok, entiendo eso de i como integer, entonces tomando en cuenta las instrucciones que debe llevar para hacer el ciclo for y el manejo de una variable d 16 bits. ¿Cómo cuanto tiempo dura esa instrucción si el cristal es d 4MHz?
 
Última edición por un moderador:
Bueno me refiero a que el ciclo for debe tener su equivalente en instrucciones en asm que también requieren tiempo para ejecutarse, no solo influye el incremento de una variable sino también instrucciones de salto, de MOV o incluso lógicas y de comparación si no me equivoco.
Bueno hace un rato encontré esto:

Código:
For K=1 to 10 step 1
   …. Instrucciones
Next K

   movlw   .1
   movwf   K

BUCLEFOR:
   ;Instrucciones      
   
   incf   K, F
   movf   K, W
   xorlw   .10
   btfss   STATUS,Z
   goto   BUCLEFOR

   ;...

es un ciclo for en asm y ya esta indicado que "K" debe declararse previamente, pero el dato K está como si fuese un char y no int, ¿supongo que debe haber mas instrucciones en asm para manejar esta variable como integer no?
 
Última edición por un moderador:
Si, como indicas es un equivalente. En cuanto a precisión se debe de contar las mismas instrucciones que se utilizan y la cantidad de veces que se repiten las mismas.

es un ciclo for en asm y ya esta indicado que "K" debe declararse previamente, pero el dato K está como si fuese un char y no int, ¿supongo que debe haber mas instrucciones en asm para manejar esta variable como integer no?

Las instrucciones para un microcontrolador de 8 bits (sea cuál sea la marca) solo pueden manejar datos de 8 bits, por lo que manejar valores superiores a un byte no es posible hacerlo directamente; es decir que si un valor usa 16 bits (integer), primero se debe de declarar en dos bytes y luego se deben de tratar los 8 bits más bajos y los 8 más altos de forma independiente.

- Hay un programa, no recuerdo cuál pero generaba código asm para retardos (siempre que necesites precisión).
 
Muchas gracias, solo haría falta la comunicación :D.... me acabo de dar cuenta que la pagina tiene corrector de sintaxis, ahora sé porque en estos foros nadie escribe al estilo de facebook.
Supongo que me van a recomendar mejor usar un pic que ya tenga el hardware necesario para implementar comunicación USART en lugar de hacerlo puramente por software no? si es posible podrían recomendarme uno que sea igual de sencillo que el 16f84? de ante mano muchas gracias :)
 
Dicen que el PIC16F627A es como el sucesor del F84, la verdad no se de donde salió eso pero está bastante difundido... los 16F627A, 16F628A y 16F648A pertenecen a una familia que comparten sus características con ciertas diferencias en cuanto a memoria. Esos PIC tienen varios módulos internos agregados como 3 Timers, USART, Comparadores, oscilador interno...

Supongo que me van a recomendar mejor usar un pic que ya tenga el hardware necesario para implementar comunicación USART en lugar de hacerlo puramente por software no? si es posible podrían recomendarme uno que sea igual de sencillo que el 16f84? de ante mano muchas gracias :)

En muchos casos es mejor un control por hardware, de ese modo el PIC se dedica a otras cosas mientras se envía el dato por USART.

Saludos.
 
Atrás
Arriba