Пт окт 21, 2022 08:41:16
Пт окт 21, 2022 09:21:49
#define _out(port,bit,...) (DDR##port |= 1<<bit)
#define out(x) _out(x)
#define _in(port,bit,...) (DDR##port &= ~(1<<bit))
#define in(x) _in(x)
// поправил
#define LED B,5,H
#define KEY D,2,L
out(LED);
in(KEY);
Пт окт 21, 2022 09:27:06
Пт окт 21, 2022 11:10:47
//бинарная математика
#define SB(b,n) b|= (1<<n) //установка бита
#define CB(b,n) b&=~(1<<n) //сброс бита
#define IB(b,n) b^= (1<<n) //инверсия бита
#define QB(b,n) (b&(1<<n)) //проверка бита
#define SF(x) SB(x) //установка флага
#define CF(x) CB(x) //сброс флага
#define IF(x) IB(x) //инверсия флага
#define QF(x) QB(x) //проверка флага
//описание флагов
register uint08_t Flag0 = 0;//переменная с флагами
#define div10_u Flag0,0 //напряжение > 9.99 вольт
#define div10_i Flag0,1 //ток > 9.99 ампер
#define mode_cv Flag0,2 //идет стабилизация по напряжению
#define OnBlnk Flag0,3 //мигание
#define Btn_s_p Flag0,4 //зафиксировано нажатие кнопки
#define Btn_l_p Flag0,5 //зафиксировано длинное нажатие кнопки
//описание периферии
#define BUZZER PORTB,0
#define BUTTON PINB,1
//.............
//работа с битами
CB(DDRB,1);
SB(PORTB,1);
SB(DDRB,0);
//так можно до любого бита добраться, а если ему дать своё имя, то можно будет работать как с флагом:
//работа с флагами
while(1){
if(!QF(BUTTON)) SF(Btn_s_p); //если нажата кнопка - взведем флаг нажатия
if(QF(Btn_s_p)) IF(BUZZER); //если есть флаг - пищим, постоянно перекидывая порт динамика
}
Пт окт 21, 2022 11:42:40
Пт окт 21, 2022 12:03:13
Пт окт 21, 2022 12:17:38
Пт окт 21, 2022 12:20:50
if(!QF(BUTTON)) SF(Btn_s_p); //если нажата кнопка - взведем флаг нажатия
Пт окт 21, 2022 12:32:48
Пт окт 21, 2022 12:42:57
Пт окт 21, 2022 13:59:05