Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
unsigned int servo = takt / 2; // or takt >> 1
unsigned char angle = angles[servo];
unsigned char mask = 1 << servo;
if (takt & 1) {
PORTC &= ~mask;
OCR1A = cycle - angle;
} else {
PORTC |= mask;
OCR1A = angle;
}
takt = (takt + 1) & 7;
#define port_rele1 PORTA
#define ddr_rele1 DDRA
#define pin_rele1 PINA
#define port_rele2 PORTC
#define ddr_rele2 DDRC
#define pin_rele2 PINC
...
//pins define
//port_rele1
#define K1 5
#define K2 4
#define K3 3
#define K4 0
#define K5 1
#define K6 2
...
//инициализация
void hardware_init()
{
ddr_rele1 |=(1<<K1)|(1<<K2)|(1<<K3)|(1<<K4)|(1<<K5)|(1<<K6);
port_rele1 |=(1<<K1)|(1<<K2)|(1<<K3)|(1<<K4)|(1<<K5)|(1<<K6);
ddr_rele2 |=(1<<K7)|(1<<K8)|(1<<K9);
...
}
//для включения, выключения пользовался макросами
#define BIT_ON(port, bit) do {port |= (1<<bit);}while(0)
#define BIT_OFF(port, bit) do {port &=~(1<<bit);}while(0)
#define BIT_INVERCE(port, bit) do {port ^=(1<<bit);}while(0)
//пример управления:
BIT_OFF(port_rele1,K1);
Ну и всякая мелочевка типа рандомной расставки пробелов.это не мой косяк, а косяк интрепретации хабром моего кода. У меня всё ок.
К примеру, стандарт де-факто — написание дефайнов только капсомвпервые слышу, быть может это конечно и оправданно.
Или я так и не понял что за сумрачная конструкция do/while(0), её используют часто для того чтобы можно break юзать вместо goto, но в данном случае совсем мне непонятно.Это макросы Аскольда Волкова, на сколько я понимаю использование ду вайл делается для переносимости кода. Не разбирался.
BIT_ON(BASE_PORT + PORT_STATUS, 2 * i) очень удивит компилятор.Силился представить, когда мне понадобится такая конструкция, но не смог… В особенности конструкция BASE_PORT + PORT_STATUS — не будет работать со сто процентной вероятностью. Но про скобки возможно замечание и стоящее.
if (XXX)
SOME_MACRO();
Управление несколькими сервоприводами с высокой точностью на МК ATmega16