Easyelectronics.ru

Электроника для всех
Текущее время: 17 май 2021, 13:57

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 05 ноя 2019, 12:00 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7428
Напишите процедуру ввода и обработки кнопки КАК ФУНКЦИЮ delay и используйте ее.
Т.е. вместо delay(75) будет key(75), которая разворачивается в:
void key(uint8_t delay)
{
for (i=0; i<(delay<<3);i++)
{
delay(125ms);
прочитать и обработать состояние кнопки. При необходимости прервать ожидание - выдать break;
}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 05 ноя 2019, 12:01 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3182
Можно в общем-то и без прерывания. Если не больше 655 сек работы надо. Кнопка нажата должна быть 10-20мс, человек быстрее не нажмет всё-равно.
Код:
#include <tiny13.h>
#include <delay.h>
#include <stdint.h>



void delay_s(uint16_t s, uint8_t r_flag) {
  if (r_flag == 0)
    while(s--)
      delay_ms(1000);
  else if (r_flag == 1) {
    uint8_t b_flag;
    if (s <= 655)
      s *= 100;
    else return;
    while(s--) {
      if (!PINB.1)
        b_flag = 1;
      delay_ms(10);
      if (!PINB.1 && b_flag)
        return;
    }
  }
}

void main(void)
{
DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (1<<DDB0);
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);


ACSR=0x80;



while (1)
{
while (PINB.1);
delay_us(200);
if (PINB.0==1)
PORTB.0=0;
PORTB.2=1;
delay_s(75, 1);
PORTB.0=1;
PORTB.2=0;
delay_s(16, 0);
while (!PINB.1);
delay_us(200);
}
}


PS: Сейчас если кто захочет высказаться, что так неэффективно, так делать не стоит и т.д. - я в курсе )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 12 ноя 2019, 17:18 
Только пришел

Зарегистрирован: 23 окт 2019, 15:34
Сообщения: 7
Попытался запустить в протэусе ..... Ничего не происходит...
За эти дни пытался сам постичь великий и всемогущий Си. В голове полная билеберда... похоже на то что проще сделать на 555.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: wyfinger


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB