/*****************************************************
Project : Блок бесперебойного питания с индикацией тока и напряжения на светодиодных индикаторах 3 (символьных)
Version : 1
Date    : 11.06.2008
Author  : Alexandr Bratikov               
Company : HOME                            
Comments: 


Chip type           : ATmega8
Program type        : Application
Clock frequency     : 16,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega8.h>
#include <delay.h> 
#include <stdlib.h>
#define DIGIT1 PORTB.0 //Первое знакоместо
#define DIGIT2 PORTB.1 //Второе знакоместо
#define DIGIT3 PORTB.2 //Третье знакоместо
#define DIGIT4 PORTB.3 //Четвёртое знакоместо
#define DIGIT5 PORTB.4 //Пятое знакоместо
#define DIGIT6 PORTB.5 //Шестое знакоместо
 

// Declare your global variables here

char Dig[10]; // здесь храним то, что выводим на индикатор и перекодирываем
int cifra;
char seg; //Номер сегмента
char strcifra[2];
char num[5];
void initCPU(void) //ИНИЦИАЛИЗАЦИЯ

{
//Настройка портов

DDRC=0b11110011;

DDRB=0b11111111;

DDRD=0b11111111;

PORTB=0b11111111;
PORTD=0;

seg=0;
/*Настройка таймера 1 16-bit

TIMSK=0b00010000; //разрешение прерывания по переполнению ТС1
TCCR1A=0;
TCCR1B=0b00001100; //Предделитель 256 от тактовой частоты 65535*256/16000000=1секунда
//TCNT1=33333;
OCR1A=33333;
*/

//Настройка TC0 (8bit presk=1024 interrupt=overflov) 0.016 секунда 62Гц

TIMSK=1; //Разрешение прерывания по переполнению ТС0 
TCCR0=0b00000101; //Предделитель 1024
       
};

 
//*interrupt /*[TIM1_OVF]*/ [7] void TC1(void)

//{

//PORTC^=0b00000011;
//#asm("sei")
//     };


interrupt [TIM0_OVF] void TC0(void)

{
num[seg];
itoa(cifra, strcifra);
PORTD=Dig[((char)strcifra[1])];
seg++;
if (seg=6) seg=0;

num[0] = (PORTB.0=0);
num[1] = (PORTB.1=0); 
num[2] = (PORTB.2=0);
num[3] = (PORTB.3=0);
num[4] = (PORTB.4=0);
num[5] = (PORTB.5=0);

};


void main(void)
{
  initCPU();
  PORTC=0b000000010;
  #asm("sei")
  cifra=254;
  
Dig[0] = 0b01011111; 
Dig[1] = 0b01000001; 
Dig[2] = 0b10011101; 
Dig[3] = 0b11010101; 
Dig[4] = 0b11000011; 
Dig[5] = 0b11010110; 
Dig[6] = 0b11011110; 
Dig[7] = 0b01000101; 
Dig[8] = 0b11011111; 
Dig[9] = 0b11010111;


while (1)

{



};
     
};



//Перекодировка PORTD в цифры

//      1       01000001
//      2       10011101
//      3       11010101
//      4       11000011       
//      5       11010110       
//      6       11011110       
//      7       01000101       
//      8       11011111       
//      9       11010111
//      0       01011111       
//      .       00100000
