HOME      PROJETOS      PROGRAMAÇÃO     

Serviços de Delay



Este serviço fornece funções de retardo (delays) em microsegundos e milisegundos para programação assembler em microcontroladores das famílias 16F e 18F.

Duas funções estão disponíveis através de chamadas CALL:

  • A função delay_us para intervalos de tempo de 10 a 255 microsegundos
  • A função delay_ms para intervalos de tempo de 10 a 255 milisegundos

Para usar o serviço de delay, o arquivo delay_services.inc deve ser incluido no programa e também os registradores necessários devem ser definidos na RAM do microcontrolador:

UDATA 0x080 delay_temp RES 1 CLOCK equ Fosc

Onde Fosc deve ser a frequência de clock, em Hertz, usada no projeto. As frequências suportadas são: 1000000, 2000000, 4000000, 8000000, 16000000, 20000000, 24000000 e 48000000 Hertz. Frequências intermediárias não são suportadas.

Para produzir um retardo na execução do programa, primeiro carrega-se o registrador W com o valor desejado e depois chama-se a função de retardo desejado. O programa do exemplo abaixo pisca um LED conectado ao bit 0 de PORTB de um PIC16F628A.

A macro FAMILIAS deve ser incluida no programa porque ela vai decidir para qual família de microcontrolador o código das funções de delay será gerado. Clique no link para baixar a macro FAMILIAS e salve-a na pasta do programa antes de compilá-lo.

; --------------------------------------------------------------------------------------------- ; PISCA LED NO PORTB<0> ; --------------------------------------------------------------------------------------------- list p=16f628a #include <p16F628A.inc> #include "familias.inc" errorlevel -302 __CONFIG _CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT   ; ; UDATA 0x20 R1 RES 1 delay_temp RES 1 CLOCK equ 4000000 ; Fosc=4MHZ ; rstvec CODE 0x0000 goto inicio inth CODE 0x0008 retfie ; MAIN CODE #include "delay_services.inc" inicio movlw 0x07 ; mascara movwf CMCON ; desativa comparadores clrf LATB ; limpa PORTB bsf STATUS,RP0 ; BANK 1 clrf TRISB ; PORTB tudo saida bcf STATUS,RP0 ; BANK 0 clrf R1 ; R1 = b'00000000' pisca movf R1,w ; W = R1 xorlw 0x01 ; W = bit 0 = complemento movwf R1 ; salva o complemento movwf PORTB ; acende/apaga LED movlw .200 ; W = 200 call delay_ms ; espera 200ms goto pisca ; vai inverter o LED END









H P S P I N

Desde 04 de Março de 2010

Atualização: 19 de Apr de 2024