Bueno, luego de todo un dia de investigacion, diseño y prueba de mis librerias de retardos, quisiera compartirlas con ustedes, espero les sea util.
En el archivo a bajar encontraran 4 librerias.
delay_us.INC: libreria para retardos en microsegundos, con velocidades de reloj (4MHz, 8MHz, 16MHz y 20MHz)
delay_ms.INC: libreria para retardos en milisegundos, con velocidades de reloj (1MHz, 2MHz, 4MHz, 8MHz, 16MHz y 20MHz)
delay_s.INC: libreria para retardos en segundos, con velocidades de reloj (1MHz, 2MHz, 4MHz, 8MHz, 16MHz y 20MHz)
Macro_Delays: Con esta libreria podemos hacer llamada a los retardos como si lenguaje de alto nivel se tratara (con la ventaja de seguir siendo ensamblador)
Como usamos las librerias. Muy sencillo:
- Primero que nada, en el documento principal de nuestro proyecto, incluimos la libreria de macros (usando INCLUDE <C\...\Macro_Delays.INC>; los puntos suspensivos con la ruta completa del archivo, asumimos que esta en C).
- Especifiar el reloj usado, para ello definimos una constante: CLOCK equ "velocidad del reloj". En "velocidad del reloj especificamos, pues, eso exactamente, en Hertz. (Ejemplo: CLOCK equ 16000000)
- En cualquier punto donde queremos llamar un retardo, si es en 1 segundo por ejemplo, escribimos "Delay_s cantidadsegundos". La macro convierte esta "instruccion" en la correspondiente llamada para el retardo de 1 segundo.
- Al final del documento incluimos las demas librerias como se hizo en el punto 1.
Vemos que el diseño de las librerias permite la llamada a las subrutinas de retardo de una forma muy sencilla. En los retrasos en segundos, podemos ir de (1 a 255). Lo mismo en milisegundos. En microsegundos si se complica un poco a bajas velocidades, en la libreria se explica los cuidados a tener en cuenta, es recomendable que para retardos tan bajos, se use la velocidad de reloj mas recomendable (en este caso, para us, lo mas recomendable es 20 MHz).
Las librerias se diseñaron de forma que se puedan usar las 3 al mismo tiempo en un proyecto. Deben tener cuidado con la libreria de macros,
ya que si solo usan 1 de las librerias, delay_s.inc, tiene que comentar las demas macros no utilizadas porque si no le generan un error al compilar.En resumen podemos llamar a los retardos de la siguientes formas:
Delay_s "cantidad_de_segundos"
Delay_ms "cantidad_de_milisegundos"
Delay_us "cantidad_de_microsegundos"Sin comillas. La cantidad puede estar en decimal o hexadecimal mientras no sobrepase 255 decimal (1 Byte)
Incluyo ademas el programa en ensamblador que estuve usando para hacer las pruebas.
;***********************Prueba_libreria_retardos******************************
;
;
;====CONFIGURACION DEL MICROCONTROLADOR====
List P=16F877A ;Especificacion del PIC
INCLUDE <P16F877A.INC> ;Inclusion Archivos y Registros
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON ;Configuracion de los Fuses
INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\Macro_Delays.INC>
CLOCK equ 16000000 ;Seleccionamos la velocidad del reloj en Hz
;====VARIABLES Y CONSTANTES====
CBLOCK 0x20
ENDC
;====VECTOR RESET====
Reset
ORG 0x00
GOTO Inicio
ORG 0x04 ;Manejo de interrupciones en direccion 4
;====PROGRAMA PRINCIPAL====
ORG 5
Inicio
BCF STATUS,RP1 ;Seleccionamos Bank0 o Bank1
BSF STATUS,RP0 ;Seleccionamos Bank1
CLRF TRISB ;PORTB --> Out
MOVLW b'00111111' ;
MOVWF TRISA ;PORTA --> In
MOVLW 0x06 ;Hacemos todas las salidas analogicas
MOVWF ADCON1
BCF STATUS,RP0 ;Seleccionamos Bank0
CLRF PORTB
Loop
BSF PORTB,0 ;Encendemos el LED en PORTB.0
Delay_s .1 ;Esperamos 1 segundo
BCF PORTB,0 ;Apagamos el LED en PORTB.0
Delay_s .1 ;Esperamos 1 segundo
goto Loop ;repetimos el bucle
INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\delay_us.INC>
INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\delay_ms.INC>
INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\delay_s.INC>
END
Quisiera agradecerle a Andrew Bishop porque la mayor parte del trabajo la hizo el, yo solo tome sus librerias (en ms y us) y las edite para las mias (PIC Assembler Code). Los retardos en segundos los diseñe usando esta aplicacion Delay Code Generator)
Espero lo disfruten. Cualquier duda sobre el uso de las librerias, me avisan.
Agradecer no cuesta nada!!!
Descarga:
Libreria de retardos.zipNOTA DEL MODERADOR: Adjunto el archivo directamente al foro para evitar que se borre eventualmente.