Ir ao conteúdo
  • Cadastre-se

Função DELAY com o PIC 16F877A


valecovo

Posts recomendados

Olá a todos

Estou dando os primeiros passos na programação de PICs. Escolhi a linguagem C porque já tinha alguns conhecimentos da mesma.

Estou a usar o MPLAB v8.80 com o compilador CCS.

Dos muitos problemas com que me estou a deparar, este não consigo resolver e por isso venho aqui pedir ajuda.

É o seguinte com este programa: ele compila bem, mas ao simular o programa no MPLAB com a ferramenta MPLAB SIM, quando chega ao primeiro delay, vem para "#use delay" e não sai daí. Já alterei clock=20000000 mas acontece o mesmo. Presumo que falte incluir algum ficheiro no inicio do programa, mas não sei qual.

Por favor, peço ajuda.

// Pisca – Pisca 
#include <16f877A.h>
#fuses xt,wdt,noprotect,put,brownout,nolvp,nocpd,nowrt
#use delay(clock=4000000, RESTART_WDT)

#use fast_io(a)
#use fast_io(
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte porte = 0x09

void main ()
{
setup_counters(RTCC_INTERNAL, WDT_2304MS);
set_tris_a(0b11111111);
set_tris_b(0b11111000);
set_tris_c(0b11111111);
set_tris_d(0b11111111);
set_tris_e(0b00000111);

porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa portc
portd=0x00; // limpa portd
porte=0x00; // limpa porte

while(TRUE)
{
RESTART_WDT();
output_high(PIN_B0);
delay_ms(1000);
output_low(PIN_B0);
delay_ms(1000);
output_high(PIN_B1);
delay_ms(1000);
output_low(PIN_B1);
delay_ms(1000);
}
}

Link para o comentário
Compartilhar em outros sites

FASTIO é quando for preciso mudar o estados dos Bits de um port rapidamente,pois o CCS inclui uma instrução NOP quando muda o estado do pino e altera o TRIS todas vez que se muda de saida para entrada,deixando o codigo menos eficiente quando se precisa de velocidade nos PORTS.

Faça um teste gerando uma onda quadrada sem FASTIO e com FASTIO.

Link para o comentário
Compartilhar em outros sites

FASTIO é quando for preciso mudar o estados dos Bits de um port rapidamente..........deixando o codigo menos eficiente quando se precisa de velocidade nos PORTS.

OK. Concordo. Mas veja o exemplo que o solicitante colocou. Não consigo perceber velocidade nas manipulações dos pinos.

Corrigindo o que eu disse lá em cima:

"Você não precisa usar o comando TRIS."

Fica,

Você não precisa usar o comando TRIS, nesse código de aprendizado. Apenas em aplicações de tempo crítico.

Faça um teste gerando uma onda quadrada sem FASTIO e com FASTIO.

Posso gerar uma onda quadrada de 2Hz e não verei diferença. Mas se eu gerar uma de 5 ou mais Khz, poderei sim ver diferença. Como você mesmo disse, em casos críticos.

Falou

Link para o comentário
Compartilhar em outros sites

Ja estamos num nivel de 'ousar' mais nos códigos,mesmo os principiantes, e no caso do CCS,o FASTIO pode ser a diferença entre funcionar ou não.

Um exemplo que postei para ajudar um colega do forum com um DIMMER,é um exemplo,o codigo só sincroniza se usar FASTIO no PORT;

Link DIMMER CCS

Link para o comentário
Compartilhar em outros sites

Acho que tem outro erro, depois do primeiro RESTART_WDT(); tem 4 segundos de delay, dentro desse tempo a contagem do watch dog vai estourar, resetando o PIC.

dentro do main você configurou para WDT_2304MS. então mais ou menos no meio do While vai resetar.

Já aconteceu comigo isso... Quebrei a cabeça para descobrir o erro. Acho bom você colocar o RESTART_WDT depois ou antes de cada delay.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...