Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Alexander H
Встал на лапы
Сообщения: 83 Зарегистрирован: Вт фев 24, 2009 20:37:59
Сообщение
Alexander H » Сб май 05, 2012 22:26:26
Помогите разобраться с программой
Уже запарился
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
char time=0;
ISR (TIMER1_OVF_vect)
{
TCNT1=49911;
if (time) time--; else PORTC=0x00;
}
int main (void) {
DDRC=0xFF; PORTC=0x00;
DDRB=0x00; PORTB=0xFF;
TCCR1A=0;
TCCR1B=(1<<CS11)|(1<<CS10);
TCNT1=49911;
TIFR=0;
TIMSK=(1<<TOIE1);
sei();
while(1)
{
if ((~PINB)&(0b00000001))
if (!time)
{
time=5;
PORTC=0xFF;
TCNT1=49911;
}
}
}
При нажатии на кнопку на порт-С подается + на 5 сек.
Проблемма: при повторном нажатии ничего не происходит.
Вложения
1111.rar
(13 КБ) 211 скачиваний
1.jpg
(65.06 КБ) 1561 скачивание
Человек с умной головой ошибается.
С пустой - никогда.
Antifritz
Прорезались зубы
Сообщения: 222 Зарегистрирован: Чт июл 08, 2010 01:03:40
Откуда: Украина, Киев
Сообщение
Antifritz » Вс май 06, 2012 00:04:20
Уберите строку
и будет Вам счастье. Или в чем суть вопроса?
SubDia
Держит паяльник хвостом
Сообщения: 995 Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь
Сообщение
SubDia » Вс май 06, 2012 00:43:35
Подтянуть вывод PB0 к питанию через резистор. А еще лучше - кнопку к питанию через резистор, а вывод PB0 подтянуть к земле. Точнее, точку соединения PB0 и кнопки.
Тогда на PB0 при отжатой кнопке будет постоянно 0, а при нажатии будет появляться 1.
И условие примет вид
pavel_cydenov : Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran : Самые ортодоксальные — это PICудеи )
Katz : Не, 51-ники. )
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2183 Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:
Сообщение
watchmaker » Вс май 06, 2012 00:52:18
Подтянуть вывод PB0 к питанию через резистор. А еще лучше - кнопку к питанию через резистор
Первый вариант проще, он реализуется внутренними средствами МК. Поставить DDRB0=0, PORTB0=1 и всё.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
SubDia
Держит паяльник хвостом
Сообщения: 995 Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь
Сообщение
SubDia » Вс май 06, 2012 01:02:24
Верно. Я даже не обратил внимания, что у ТС это и реализовано. Пардоньте, мсье. =)))
pavel_cydenov : Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran : Самые ортодоксальные — это PICудеи )
Katz : Не, 51-ники. )
Alexander H
Встал на лапы
Сообщения: 83 Зарегистрирован: Вт фев 24, 2009 20:37:59
Сообщение
Alexander H » Вс май 06, 2012 07:57:46
Antifritz писал(а): Уберите строку
и будет Вам счастье. Или в чем суть вопроса?
Эта программа только часть кода от другой.
Я ее упростил только из-за этой проблеммы.
Так что это условие мне необходимо.
Проблемма как раз в этом условии.
Почему?
Человек с умной головой ошибается.
С пустой - никогда.
andries5
Родился
Сообщения: 5 Зарегистрирован: Пт фев 20, 2009 10:01:56
Откуда: Moldova
Сообщение
andries5 » Вс май 06, 2012 11:30:31
Обьявите переменную "char time=0;" как "volatile char time=0;" и радуйтесь.
Alexander H
Встал на лапы
Сообщения: 83 Зарегистрирован: Вт фев 24, 2009 20:37:59
Сообщение
Alexander H » Вс май 06, 2012 14:55:02
andries5 писал(а): Обьявите переменную "char time=0;" как "volatile char time=0;" и радуйтесь.
Большое спасибо, все заработало.
Человек с умной головой ошибается.
С пустой - никогда.