это как вы себе представляете?
Код: Выделить всё
void digitWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin); // Вычисляется таймер пина - это необходимо для некоторых пинов, поддерживающих ШИМ
uint8_t bit = digitalPinToBitMask(pin); // Вычисляется битовая маска для соответствующего пина
uint8_t port = digitalPinToPort(pin); // Вычисляется порт, которому принадлежит пин
volatile uint8_t *out;
if (port == NOT_A_PIN) return; // Если задан некорректный пин - выходим
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer); // Если пин поддерживает ШИМ, то перед установкой значения нужно отключить таймер, генерирующий ШИМ
out = portOutputRegister(port); // Конвертируем полученный порт в адрес
uint8_t oldSREG = SREG; // SREG - регистр хранящий флаг прерываний, запоминаем его
cli(); // Запрещаем прерывания
if (val == LOW) { // Устанавливаем значения
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG; // Возвращаем регистру прерываний состояние до запрета прерываний
}
Код: Выделить всё
void digit__Write(uint8_t pin, uint8_t val)
{
//uint8_t timer = digitalPinToTimer(pin); // Вычисляется таймер пина - это необходимо для некоторых пинов, поддерживающих ШИМ
uint8_t bit = digitalPinToBitMask(pin); // Вычисляется битовая маска для соответствующего пина
uint8_t port = digitalPinToPort(pin); // Вычисляется порт, которому принадлежит пин
volatile uint8_t *out;
//if (port == NOT_A_PIN) return; // Если задан некорректный пин - выходим
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
//if (timer != NOT_ON_TIMER) turnOffPWM(timer); // Если пин поддерживает ШИМ, то перед установкой значения нужно отключить таймер, генерирующий ШИМ
out = portOutputRegister(port); // Конвертируем полученный порт в адрес
//uint8_t oldSREG = SREG; // SREG - регистр хранящий флаг прерываний, запоминаем его
//cli(); // Запрещаем прерывания
if (val == LOW) { // Устанавливаем значения
*out &= ~bit;
} else {
*out |= bit;
}
//SREG = oldSREG; // Возвращаем регистру прерываний состояние до запрета прерываний
}
Код: Выделить всё
digitalWrite (19, OUT_PLK_01);
digitalWrite (18, OUT_PLK_02);
digitalWrite (17, OUT_PLK_03);
digitalWrite (16, OUT_PLK_04);
digitalWrite (15, OUT_PLK_05);
Почти тремя
Код: Выделить всё
// для 9 пина
PORTB |= _BV(PB1); // HIGH
PORTB &= ~ _BV(PB1); // LOW
PORTB |= _BV(PB1); // HIGH
PORTB &= ~ _BV(PB1); // LOW
быстрее ни чего нет
Код: Выделить всё
// для 9 пина
PORTB |= _BV(PB1); // HIGH
PORTB &= ~ _BV(PB1); // LOW
PORTB |= _BV(PB1); // HIGH
PORTB &= ~ _BV(PB1); // LOW
D8_High;
D8_Low;
D8_High;
D8_Low;