Неккоректно работает время на 7-ом дисплее

Тема в разделе "Микроконтроллеры AVR", создана пользователем Svinopes, 18 янв 2018.

  1. Svinopes

    Svinopes Нуб

    Здравствуйте. Столкнулся с проблемой вывода времени на 7-ый дисплей, в частности с секундами. У меня секунда появляется каждые 8 миллисекунд, а должна каждые 1000 миллис. Если кто знает в чем может быть проблема, то напишите пожалуйста.
    Код (C++):


    #include <mega64.h>
    #include <delay.h>

    static flash unsigned char digit[] = {      
    (0b00111111),    //0      
    (0b00000110),    //1      
    (0b01011011),    //2      
    (0b01001111),    //3      
    (0b01100110),    //4      
    (0b01101101),    //5      
    (0b01111101),    //6      
    (0b00000111),    //7      
    (0b01111111),    //8      
    (0b01101111),    //9
    (0b01110111),    //10 A
    (0b01111000),    //11 t
    (0b01010000)     //12 r  
    };

    unsigned char sek, min;
    bit m;

    interrupt [TIM2_COMP] void timer2_comp_isr(void)
    {
      TCNT2=0x00;  
          sek++;
          if(sek==60){
            sek=0;
            min++;
            }
           
            if(min==60){
              min=0;
          }
         
         
    }


    void ind(unsigned char chislo) {

        unsigned char desjatki=0;
        while(chislo>=10) {
             chislo-=10;
             desjatki++;
        }              
       
        if(m==0) {
            PORTD.4=1;
            PORTC=digit[desjatki];
            delay_ms(5);
            PORTD.4=0;
            PORTD.5=1;
            PORTC=digit[chislo];
            PORTC.7=1;
            delay_ms(5);
            PORTD.5=0;
            PORTC.7=0;
            m=1;
        }
        else {
            PORTD.6=1;
            PORTC=digit[desjatki];
            delay_ms(5);
            PORTD.6=0;
            PORTD.7=1;
            PORTC=digit[chislo];
            delay_ms(5);
            PORTD.7=0;
            m=0;
        }                

            PORTE.0=1;
            PORTA=digit[10];
            delay_ms(5);
            PORTE.0=0;
                 
            PORTD.0=1;
            PORTB=digit[1];
            delay_ms(5);
            PORTD.0=0;
           
            PORTD.1=1;
            PORTB=digit[2];
            delay_ms(5);
            PORTD.1=0;
           
            PORTD.2=1;
            PORTB=digit[0];
            delay_ms(5);
            PORTD.2=0;

    }

    void main(void)
    {

    PORTA=0x00;
    DDRA=0b011111111;

    PORTB=0x00;
    DDRB=0b011111111;

    PORTC=0x00;
    DDRC=0b11111111;

    PORTD=0x00;
    DDRD=0b11001111;

    PORTE=0x00;
    DDRE=0b00000011;

    ASSR=0b00001000;
    TCCR2=0b00000100;
    OCR2=127;

    TIMSK=0b10000000;
    #asm("sei")

    while (1)
          {
         
          ind(min);
          ind(sek);
         
         
          };
    }
     


    Под время я использую последние 4 дисплея.