Você está na página 1de 3

/*

* FileName: Lista 3 - Timer 0


* Dependencies: Veja a seção de Includes
* Processor: PIC18F4550
* Compiles: MPLAB X v3.65 + XC8 1.40
* Company: FATEC - Santo André
* Author:
* Date: 22/09/2021
* Software License Agreement: Somente para fins didáticos
* File Description: Configurar e utilizar um TIMER 0 para simular um alarme com
* duração de 2 segundos
* *******************************************************************************
* Change History:

* Created on 22 de Setembro de 2021, 20:29


********************************************************************
*/

// Includes do Compilador

#include <xc.h>
#include <stdio.h>
#include <p18f4550.h>

//includes do Projeto

#include "Config.h"
#include "config_4550.h"
#include "displayLCD.h"
#include "adc.h"

// Protótipos das Funções

void delay_ms(unsigned int tempodeAtraso);

// Definições dos Apelidos das Variáveis do PIC


#define alarme PORTBbits.RB0

#define botao_B1 PORTEbits.RE0


#define botao_B2 PORTEbits.RE1

/*****************************************************************************/

void main()
{
ADCON1 = 0x0F;
TRISB = 0b000000000;
TRISE = 0b00000011;
PORTB = 0xFF;
PORTE = 0xFF;

// Definição dos Textos de Apresentação


const unsigned char nome[] = "GABRIEL SANTOS";
const unsigned char Texto_0[] = "FATEC S.A 2021 ";
const unsigned char Texto_1[] = " LISTA 3 ";
const unsigned char Texto_2[] = "CONTAGEM: ";
// Variavel auxiliar
unsigned int tempo = 0;

//Configura o Timer 0

TMR0ON = 0;
T08BIT = 0;
T0CS = 0;
T0PS0 = 1;
T0PS1 = 1;
T0PS2 = 1;
PSA = 0;
TMR0 = 37322;
TMR0IF == 0;

//Tela de Saudação
ConfiguraLCD(); //Prepara e inicia o Display
delay_ms(1);
DesligaCursor();
PosicaoCursorLCD(1,1);
EscreveFraseLCD(Texto_0);
PosicaoCursorLCD(2,1);
EscreveFraseLCD(nome);
delay_ms(2000);
PosicaoCursorLCD(2,1);
EscreveFraseLCD(Texto_1);
delay_ms(3000);
PosicaoCursorLCD(2,1);
EscreveFraseLCD(Texto_2);

while(1){
//Pensei em criar uma variável auxiliar pra simular o tempo da contagem
// e me ajudar a criar um valor para poder acionar o TIMER 0 , com o
// acionamento do TIMER , controlo o tempo que o alarme fica ligado, que
// no caso será de 2 segundos.

if(botao_B1 == 0){//Aciona a Contagem

for (tempo=0; tempo<=5; tempo++){//Realiza uma contagem de 0 a 5.


PosicaoCursorLCD(2,10);
EscreveInteiroLCD(tempo);
delay_ms(1000);
if (botao_B2 == 0){// Reseta minha contagem para o valor 1.
tempo = 0;

}
while (tempo >= 5){// Quando a contagem chega no valor máximo, ela aciona
// o Alarme que dura 2 segundos.

TMR0ON = 1; // TIMER 0 ligado.


alarme = 1;// alarme desligado
while(TMR0IF == 0) // Tempo de funcionamento do alarme.
{
alarme = 0; // Alarme acionado.

// com o valor de while (1) , não é necessario usar a função Do - While


// Porque , o while (1) ja faz a função de repetição por si só.

//******************************************************************************
// Esta função é usada para gerar um delay programável, cuja base de tempo é de
// 1 ms. Assim, se você colocar delay_ms(500), ele esperará um tempo de 500 ms
// para seguir o programa.
//******************************************************************************
void delay_ms(unsigned int tempodeAtraso) // Gera delay para o novo compilador
{
while (--tempodeAtraso)
{
__delay_ms(1);
}
}

Você também pode gostar