Ir para conteúdo

GuilhermeArp

Membros
  • Postagens

    2
  • Registro em

  • Última visita

Posts postados por GuilhermeArp

  1. Em 11/05/2021 em 10:37, fredericopissarra disse:

    Qual é exatamente o problema? Ainda, qual compilador? Para qual PIC (assumo que seja PIC)?

    Uma melhoria pequenininha no seu código, em anexo porque esse forum não mantém o formato de códigos fonte com fontes monoespaçadas!

    Note que, embora tenha extensões, alguns detalhes que não seguem a spec ISO 9899 eu mudei.

    É um contador de fluxo de pessoas. um sensor numa porta de entrada e outro sensor na porta de saída.

    compilador XC8  PIC16877A.   Preciso colocar no código o sensor da porta da saída( TRISBbits.TRISB1) para fazer a contagem e diminuir o valor no display.

     

    Contador fluxo pessoas.png

  2. //INICIO
    #include <xc.h>
    // CONFIG
    #pragma config FOSC = HS
    #pragma config WDTE = OFF
    #pragma config PWRTE = OFF
    #pragma config BOREN = OFF
    #pragma config LVP = OFF
    #pragma config CPD = OFF
    #pragma config WRT = OFF
    #pragma config CP = OFF
    #define _XTAL_FREQ 4000000
    int display(int numero);
    int C1 = 0, C2 = 0;
    void __interrupt() tratamento_interrupcao(void)
    {
    static int contador = 0;
    static int led = 1, sel_display = 1;
    if (INTCONbits.TMR0IF == 1)
    {
    // Reset flag after overflow
    INTCONbits.TMR0IF = 0;
    TMR0 = 131;
    contador++;
    if (contador == 125)
    {
    contador = 0;
    led = !led;
    PORTDbits.RD0 = led;
    }
    //Atualização dos Displays
    sel_display = !sel_display;
    if (sel_display == 1)
    {
    PORTDbits.RD1 = 1;
    PORTDbits.RD2 = 0;
    PORTC = display(C2);
    }
    else
    {
    PORTDbits.RD1 = 0;
    PORTDbits.RD2 = 1;
    PORTC = display(C1);
    }
    }
    if (INTCONbits.INTF == 1)
    {
    INTCONbits.INTF = 0;
    C1++;
    if (C1 == 10) {
    C1 = 0;
    C2++;
    }
    if (C2 == 10) {
    C1 = 0;
    C2 = 0;
    }
    __delay_ms(50);
    }
    }
    void main(void) 
    {
    //Inicialização e configuração
    TRISC = 0x00; //Saídas
    TRISD = 0X00; //Saídas
    TRISBbits.TRISB0 = 1; //Entrada
    TRISBbits.TRISB1 = 1; //Entrada
    // Configuração do Timer0
    // Select timer mode
    OPTION_REGbits.T0CS = 0;
    OPTION_REGbits.PSA = 0;
    // Set Prescaler to 64
    OPTION_REGbits.PS = 0b101;
    // Configura o valor inicial
    TMR0 = 131;
    // Habilita Timer0 interrupt
    INTCONbits.TMR0IE = 1;
    // Habilita External interrupt
    INTCONbits.INTF = 1;
    INTCONbits.INTF = 0;
    // Habilita global interrupt
    INTCONbits.GIE = 1;
    while(1){
    }
    }
    int display(int numero)
    {
    switch (numero)
    {
    case 0:
    return 0x3F;
    break;
    case 1:
    return 0x06;
    break;
    case 2:
    return 0x5B;
    break;
    case 3:
    return 0x4F;
    break;
    case 4:
    return 0x66;
    break;
    case 5:
    return 0x6D;
    break;
    case 6:
    return 0x7D;
    break;
    case 7:
    return 0x07;
    break;
    case 8:
    return 0x7F;
    break;
    case 9:
    return 0x6F;
    break;
    defaut:
    return 0x00;
    break;
    }
    }

    Se alguém souber como ajudar a implementar o decrescimo, agradeço.

×
×
  • Criar Novo...