Você está na página 1de 5

P

UNIVERSIDADE ESTÁCIO DE SÁ
FACULDADE ESTÁCIO DE SÁ CAMPUS VILA VELHA

RELATÓRIO DE SISTEMAS A MICROPROCESSADORES

LABORATÓRO 01

SAMUEL MOURA GONDIM

Samuel Moura Gondim - DF


2021/01
5

1 OBETIVO
O objetivo deste experimento é desenvolver um contador digital de tempo. O
contador irá operar baseado no TIMER0 do microcontrolador. Será realizado uma
contagem de 0 a 30s que será mostrado em 4 displays de 7 segmentos.
Introdução Teorica: O microcontrolador PIC18F4520 possuo três timers ou
temporizadores que controlam o tempo do sistema, sendo estes Timer 0 (8bits),
Timer1(16bits) e Timer2(8 obirs ou um modulo PWM de 10 bits). Eles serão
importantes para este experimento.
2 MATERIAIS UTILIZADOS

01 - Computador com sistema operacional Windows 01 - Software MPLABX 01 -


Software PICSimLab (Breadboard com PIC18F4520)

3 PROCEDIMENTOS

- O PICSIMSLAB FOI CONFIGURADO DE ACORDO COM O ROTEIRO.


- REALIZOU-SE A BUILD DO SEGUINTE CODIGO NO MPLAB X

#include <xc.h>
#include <stdlib.h>
#include "../include/proc/pic18f4520.h"

#define _XTAL_FREQ 8000000UL

#pragma config MCLRE=ON


#pragma config OSC=HS
#pragma config WDT=OFF
#pragma config LVP=OFF
#pragma config DEBUG = OFF
#pragma config WDTPS = 1

int contagem_decimal = 0;
int estouros = 0;

unsigned short mask(unsigned short num) {


switch (num) {
case 0: return 0x3F;
case 1: return 0x06;
case 2: return 0x5B;
case 3: return 0x4F;
case 4: return 0x66;
6

case 5: return 0x6D;


case 6: return 0x7D;
case 7: return 0x07;
case 8: return 0x7F;
case 9: return 0x6F;
}
}

void configuraTimer(void) {
INTCONbits.GIE = 1; // Habilita interrupção global
INTCONbits.TMR0IE = 1; // Habilita interrupção pelo TIMER0
T0CONbits.TMR0ON = 1; // Habilita o TIMER0
T0CONbits.T08BIT = 1; // Seta operação em 8 bits
T0CONbits.T0CS = 0; // Clock interno (Fosc/4)
T0CONbits.T0SE = 0; // Incremento na borda de subida
T0CONbits.PSA = 0; // Habilita o prescaler
// Prescaler 1:256
T0CONbits.T0PS2 = 1;
T0CONbits.T0PS1 = 1;
T0CONbits.T0PS0 = 1;
}

void __interrupt(low_priority) int_TMR0(void) {


if (INTCONbits.TMR0IF) {
estouros++;
// Baseado no tempo gasto para o estouro do timer (256x256x0.5us=32ms)
// 31 x 32ms = 992ms (quase 1 segundo)
if (estouros > 31) {
contagem_decimal++;
estouros = 0;
TMR0L = 0;
INTCONbits.TMR0IF = 0;
}
}
}

void main(void) {
configuraTimer();
TRISD = 0; // Configura portD como saída.
PORTD = 0; // Seta todos os pinos do PortD em 0

// Configura os pinos para controle do display de 7 segmentos


TRISAbits.TRISA2 = 0; // Configura o Pino 2 como saída
TRISAbits.TRISA3 = 0; // Configura o Pino 3 como saída
TRISAbits.TRISA4 = 0; // Configura o Pino 4 como saída
TRISAbits.TRISA5 = 0; // Configura o Pino 5 como saída

while (1) { // Laço principal

// Exibição da contagem no display de 7 segmentos


char c = ((contagem_decimal / 1000) % 10);
PORTD = mask(c);
PORTAbits.RA2 = 1;
7

__delay_ms(3);
PORTAbits.RA2 = 0;

c = ((contagem_decimal / 100) % 10);


PORTD = mask(c);
PORTAbits.RA3 = 1;
__delay_ms(3);
PORTAbits.RA3 = 0;

c = ((contagem_decimal / 10) % 10);


PORTD = mask(c);
PORTAbits.RA4 = 1;
__delay_ms(3);
PORTAbits.RA4 = 0;

c = (contagem_decimal % 10);
PORTD = mask(c);
PORTAbits.RA5 = 1;
__delay_ms(3);
PORTAbits.RA5 = 0;
}
}

O codigo foi importado para o PCSimslab, gerando o resultado mosteado a seguir.

4 RESULTADOS
8

5 CONCLUSÕES
Conclui-se que os objetivos do experimento foram alcançados.

Você também pode gostar