Доброго времени суток, решил начать потихоньку осваивать МК, т.к схемы собранные на рассыпухи не отличаются высокой точностью и стабильностью. Начал ставить задачи по этапно - моргание светодиодом -> моргание светодиодом после нажатия на кнопку - > моргание светодиодом при нажатии на кнопку в течении 40 секунд-> всё остальное что может делать МК в течении этих 40 сек.
На данном моменте застрял на 3-ем этапе, никак не могу разобраться как прикрутить работу таймера к своему коду, листинг прилагаю (1- программа моргания светодиодом 3 раза, после нажатия на кнопку, 2 - изыскания на тему таймера):
#include <mega8.h>
#include <delay.h>
#include <interrupt.h>
#include <io.h>
#define PD2 2 // Переобозначение 2 пина порта D на его имя.
void main(void)
{
PORTD = 0b10000000; // Подключаем подтягивающий PULL-UP резистор к 2 пину порта D.
DDRD = 0b00000000; // Настроим порт D на ввод информации.
DDRB = 0b11111111; //Настроим порт D на вывод информации.
while(1) // Бесконечный цикл опроса кнопок.
{
if (PIND &= 1<<PD2) // Считываем 2 пин порта D.
{
PORTB =0b00000000; // Если 1 (кнопка не нажата), то гасим светодиод.
}
else
{
PORTB = 0b00000001; // Если 0 (т. е. кнопка нажата), то зажигаем светодиод.
delay_ms(500);
PORTB = 0x00000000;
delay_ms(500);
PORTB = 0x00000001;
delay_ms(500);
PORTB = 0x00000000;
delay_ms(500);
PORTB = 0x00000001;
}
а теперь таймер:
#include <mega8.h>
#define s;
int s; // переменная для хранения секунд
// Обработка прерывания по совпадению
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
s++; // увеличиваем переменную каждую секунду
if(s>59) // обнуляем секунды после 59
{
s=0;
}
TCNT1=0; //обнуляем таймер
}
void main(void)
{
TCCR1A=0x00; //настройка таймера
TCCR1B=0x05;
TCNT1=0x00; //здесь увеличиваются тики
OCR1A=0x1E85; //записываем число в регистр сравнения
TIMSK=0x10; //запускаем таймер
}