Вот что - то написал - не работает(
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
static flash unsigned char display[]= // масив для индикатора
{
(0b11000000), // 0
(0b11111001), // 1
(0b10100100), // 2
(0b10110000), // 3
(0b10011001), // 4
(0b10010010), // 5
(0b10000010), // 6
(0b11111000), // 7
(0b10000000), // 8
(0b10010000), // 9
};
int f;
interrupt [EXT_INT0] void ext_int0_isr(void) // внешние прерывания
{
f++;
}
interrupt [TIM1_COMPA] void timer1_compa_isr(void) // прерывания по таймеру раз в секунду
{
f=0;
}
void disp(int Num) // функция для вывода на индикатор
{
char Num0,Num1, Num2, Num3;
Num1=Num2=Num0=0;
while (Num >= 1000)
{
Num -= 1000;
Num0++;
}
while (Num >= 100)
{
Num -= 100;
Num1++;
}
while (Num >= 10)
{
Num -= 10;
Num2++;
}
Num3 = Num;
PORTC.0=1;
PORTB=display[Num0];
delay_ms(1);
PORTC.0=0;
PORTC.1=1;
PORTB=display[Num1];
delay_ms(1);
PORTC.1=0;
PORTC.2=1;
PORTB=display[Num2];
delay_ms(1);
PORTC.2=0;
PORTC.3=1;
PORTB=display[Num3];
delay_ms(1);
PORTC.3=0;
}
void main(void)
{
PORTB=0x00;
DDRB=0x7F;
PORTC=0x00;
DDRC=0x0F;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x05;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1E;
OCR1AL=0x85;
OCR1BH=0x00;
OCR1BL=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// INT1: Off
GICR|=0x40;
MCUCR=0x01;
GIFR=0x40;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Global enable interrupts
#asm("sei")
while (1)
{
disp(f); // вызов функции
}
}

