Чт фев 04, 2021 08:21:07
Чт фев 04, 2021 08:42:58
AonMaster писал(а):в определении начала опроса сегментов
Ещё бы знать, что сие означает, дабы определить сложность.AonMaster писал(а):сигнал "стробирования" находится внутри МК, и на индикатор не выведен
Чт фев 04, 2021 08:55:45
Чт фев 04, 2021 09:03:12
Чт фев 04, 2021 09:18:05
Чт фев 04, 2021 09:26:27
Чт фев 04, 2021 09:39:31
Чт фев 04, 2021 09:42:29
а на моей 328P их только два
Чт фев 04, 2021 09:59:56
Чт фев 04, 2021 10:17:22
Чт фев 04, 2021 10:17:52
Чт фев 04, 2021 10:21:06
Чт фев 04, 2021 10:21:45
Чт фев 04, 2021 10:25:48
Чт фев 04, 2021 10:28:20
Чт фев 04, 2021 10:37:46
Так это не настоящие аппаратные прерывания
Чт фев 04, 2021 11:15:43
Чт фев 04, 2021 12:05:11
Чт фев 04, 2021 12:27:30
Чт фев 04, 2021 12:38:40
PCICR = 1 << PCIE1;
PCMSK1 = (1 << PCINT11) | (1 << PCINT10) | (1 << PCINT9) | (1 << PCINT8);
sei();
uint8_t portbuf, dig, flag, fullflag;
uint16_t result;
ISR (PCINT1_vect) {
if (!flag) {
dig = PINC & ((1 << PC3) | (1 << PC2) | (1 << PC1) | (1 << PC0)); // Читаем в буфер порт C и только с маской нужных нам ног. Т.е. это будет текущий разряд
if(dig && !(dig & (dig-1))) { // чуть хитрости - это провирят что в dig установлен только один бит, т.е. у нас активен только 1 разряд
portbuf = PIND; // читаем сегменты
flag = 1; // поднимает флаг, что очередной разряд считан
}
}
}
void main() {
...
if (flag && !fullflag) {
switch (dig) {
case 1 << PC0:
result = 7seg_to_int(portbuf); // считали младшую цифру
flag = 0; // очищаем флаг цифры
break;
}
case 1 << PC1:
result += 7seg_to_int(portbuf)*10; // считали 2ую цифру (десятки)
flag = 0; // очищаем флаг цифры
break;
}
case 1 << PC2:
result += 7seg_to_int(portbuf)*100; // считали 3ую цифру
flag = 0; // очищаем флаг цифры
break;
}
case 1 << PC3:
result += 7seg_to_int(portbuf)*1000; // считали 4ую цифру
flag = 0; // очищаем флаг цифры
fullflag = 1; // возвозим флаг что последняя цифра считана
break;
}
}
if (fullflag) {
// у нас тут значит целиком число считано, можно его куда-нибудь передавать или что-то делать на его основе, потом fullflag сбрасываем после обработки, чтобы продолжить читать следующее значение
}
}