Имеются 2 атмеги, 1 мастер, 2 слэйв. На 1 в свою очередь задается таймер, визуализированный на lcd. Как передать инфу о времени на 2 Atmega те slave??!!!? Те самые abcdef?!?!?!
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 4,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <delay.h>
unsigned char a=0, b=0, c=0, d=0, e=0, f=0, help=0; // ab : cd : ef
char hours, minuts, seconds;
#define SIGNAL PORTD.3
#define ON 1
#define OFF 0
#define MPLUS PINB.2
#define MMINUS PINB.3
#define SPLUS PINB.4
#define SMINUS PINB.5
#define PUSK PINC.0
#define STOP PINC.2
// ФУНКЦИЯ ОТОБРАЖЕНИЯ ВРЕМЕНИ
void time(void) // Подготовка регистров для заполнения данными
{
a = 0;
b = 0;
c = 0;
d = 0;
e = 0;
f = 0;
//=============================================================================
help = hours; // Разложение значения ЧАСов по разрядам ab : __ : __
while (help > 9)
{
help -= 10;
a++;
};
b = help;
//=============================================================================
help = minuts; // Разложение значения МИНут по разрядам __ : cd : __
while (help > 9)
{
help -= 10;
c++;
};
d = help;
//=============================================================================
help = seconds; // Разложение значения СЕКунд по разрядам __ : __ : ef
while (help > 9)
{
help -= 10;
e++;
};
f = help;
//=============================================================================
// ОТОБРАЖЕНИЕ НА ДИСПЛЕЕ ВРЕМЕНИ В СООТВЕТСТВИИ с местрположением
// ab : cd : ef
// Alrm gh : ij
lcd_gotoxy(0,0);
lcd_putchar(a+0x30);
lcd_putchar(b+0x30);
lcd_putsf(":");
lcd_putchar(c+0x30);
lcd_putchar(d+0x30);
lcd_putsf(":");
lcd_putchar(e+0x30);
lcd_putchar(f+0x30);
lcd_gotoxy(0,1);
lcd_putsf("<<<<>>>>");
};
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xBDC >> 8;
TCNT1L=0xBDC & 0xff;
// Place your code here
seconds--; // Инкремент таймера +1СЕК
if (seconds > 59) // условия при которых таймер ведет себя как часы
{
seconds = 59;
minuts--;
if (minuts > 59)
{
minuts = 59;
hours--;
if (hours > 23)
{
hours = 23;
};
};
};
// В данные часы включена функция включения нагрузки с 8 до 23,
//поэтому проверяем условие и делаем вывод
time(); // обновление дисплея
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
PORTB=0b00111111;
DDRB=0b00000000; //
PORTC=0b11111111; // «WzAVR «Port C initialization
DDRC=0b00000000; //
PORTD=0b00000000; // «WzAVR «Port D initialization
DDRD=0b00001000;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x03;
TCNT1H=0x0B;
TCNT1L=0xDC;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x04;
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
// НАЧАЛЬНАЯ ИНИЦИАЛИЗАЦИЯ
timing:
while (PUSK == 1)
{
if (MPLUS == 0)
{
minuts++;
if (minuts > 59)
{
minuts = 0;
hours++;
if (hours > 23)
{
hours = 0;
};
};
}
if (MMINUS == 0)
{
minuts--;
if (minuts > 59)
{
minuts = 59;
hours--;
if (hours > 23)
{
hours = 23;
};
};
};
if (SPLUS == 0)
{
seconds++;
if (seconds > 59) seconds = 0;
};
if (SMINUS == 0)
{
seconds--;
if (seconds > 59) seconds = 59;
};
delay_ms(100);
time();
};
// Global enable interrupts
#asm("sei")
while (1)
{
// проводим сравнение для включения нагрузки
if (STOP == 0)
{
#asm("cli")
SIGNAL = OFF;
goto timing;
};
if (hours == 0)
{
if (minuts == 0)
{
if (seconds == 0)
{
#asm("cli")
SIGNAL = ON;
}
}
}
};
}