реклама на сайте
подробности

 
 
> Вопрос новичка по C
Jagupop
сообщение May 17 2007, 18:10
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 15-05-07
Пользователь №: 27 727



Тренируюсь на ATTINY 2313. Повесил кнопку на PD0, другой конец - на землю. Как проверить ее нажатие? Я сделал так:

while(PIND == 0xFF)

перед этим, естественно, было в программе:

DDRD = 0x00;
PORTD = 0xFF;

но реакции на нажатие кнопки нет. Поставьте на путь истинный!!

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение May 17 2007, 18:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Зачем весь порт если надо тебе один бит?

Примерно так
if((PING & (1<<SYNH_START_BIT))!=0) TekTime=0; // Инициализация TekTime для SLAVE
if((PINE & (1<<SYNH_READY))==0){ // Инициализация кадра для SLAVE
Go to the top of the page
 
+Quote Post
wodya
сообщение May 17 2007, 18:50
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 27-03-07
Пользователь №: 26 549



Чего-то я про PINE и PING не понял

Я бы написал так

void PressKey(void)
{
// Нажатие кнопки
}

void main(void)
{
PORTD = 0x01;
DDRD = 0x00;
while(1)
{
if((PIND&0x01) == 0) PressKey();
}
}

Хотя, в реальном приложении это неправильно. Лучше использовать INT0 для детектирования нажатия. Но это если нужно однократное нажатие. Если нужно например инкрементировать величину, то лучше использовать алгоритм антидребезга.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 14:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016