A medição de tempo é feita por contagem de ciclos de instrução (TCI), cujo valor, em segundos depende da frequência do oscilador de clock. O tempo correspondente ao ciclo de instrução (TCI), é dado pela equação:
xc.h
A bliblioteca xc.h disponibiliza alguma funções que permitem gerar atrasos.
É necessário "chamar" a biblioteca xc.h
#include <xc.h>
Para o correto funcionamento, uma vez que as funções são baseadas em ciclos de instrução do microcontrolador é necessário indicar a frequência em Hz de trabalho do microcontrolador
#define _XTAL_FREQ 48000000
Obs.: Nas funções e macros descritas a seguir o argumento a ser passado ("cycles" ou "x") não pode ser um valor elevado, pois o compilador "entende" que desta forma o programa poderia estar "travado" ou em loop infinito, então para obter tempos maiores, é necessário chamar várias vezes as funções ou realizar inteirações (laços de repetição como "for", "while").
Fonte: Guia do Usuário do compilador XC8 - Microchip
_delay
Gera um atraso de um número de ciclos que é especificado como argumento "cycles"
Sintaxe: void _delay(unsigned long cycles);
Uso: _delay(10); // gera um atraso de 10 ciclos de instrução aproximadamente 833ns (10 x 83,3ns)
_delay3
Gera um atraso de 3 vezes o número de ciclos que é especificado como argumento "cycles"
Sintaxe: void _delay3(unsigned char cycles);
Uso: _delay3(10); // atraso de 30 ciclos de instrução
__delayus
É uma macro baseada na função _delay e gera um atraso em us que é especificado no argumento "x"
Sintase: void __delay_us(x);
Uso: __delay_us(1); // gera uma atraso de 1us
__delayms
É uma macro baseada na função _delay e gera um atraso em ms que é especificado no argumento "x"
Sintase: void __delay_ms(x);
Uso: __delay_ms(1); // gera uma atraso de 1ms
Professor, queria adiantar a materia dessa semana, mas minha pic grava o programa, mas quando faço a movimentação dos jumper, o programa não roda, e os leds, não piscam... somente o led3 fica ligado...os les 1 e 2 não. Preciso de auxilio.
ResponderExcluirQuando você carregou o arquivo hex no programa (load program) você clicou no botão "NÃO"? Se você clicar no botão "SIM" você perde o programa bootloader da flash.
ExcluirPara saber se isso aconteceu (perda do bootloader): Coloque os jumpers na posição 1-2 e chame o bootloader (pressione o botão "boot" e d~e um clique no botão "reset").
1) Se não entrar em modo de comunicação você perdeu o bottoloader e será necessário regravar a flash do PIC. Só eu o prof Antônio temos o gravador, só na próxima semana.
2) Se entrar em modo de comunicação (piscar os leds 1 e 2 da placa de forma alternada) significa que o bottloader está presente e não foi perdido.
Carregue um programa simples tipo (teste do lcd, que está no blog) e veja se funciona.
Outra possibilidade: as opções de bootloader não foram feitas de forma correta e assim o programa não foi transferido de forma correta. Quando carregar o arquivo HEX para o programa de comunicação, após clicar no botão "não" verifique se aparece o endereço 000800, se não aparecer este endereço as opções de bootloader não foram feitas de forma correta, repita o processo com atenção e recompile o projeto.