man bräuchte ... hmmm ... trigger ... Monoflop für
jeden Eingang, der dann auf ne z.B. über dez zu bin-encoder
auf digitale IO des uC gibt, der dann den Port auslesen kann
und den Gedrücktstatus daraus erkennt. das geht sehr flott
vonstatten.
Ist der Status erkannt kann immernoch der Analogwert ausgelesen
werden, des entsprechenden Eingangs natürlich nur.
Das solle so Zeit sparen.

EDIT: gönn doch jedem Controller seinen Quarz

EDIT2: Naja, Du kannst natürlich auch 4 Mega8 nehmen und deren ADC
direkt aufschalten und messen. Die Kommunikation zum "Zentralrechner" muß aber schon flott vonstatten gehen und Kolissionen dürfen halt auch nicht sein. Die Datenmenge ist aber auch nicht zu verachten.
Du müsstest Dann (ADC=10Bit ergo 2 Datenbyte) 16 Byte je Mega 8
(16*4) 64 Byte ohne sonstiges Protokoll in 5 ms von den Slaves in den
Master rüberbeamen. Das wär ne Datenrate von 12800 Byte/Sekunde.
Das wär machbar. Beispiel I2C wären bis 50000 Byte/Sekunde drinn
(Rechenfehler könnten aber auch drinne sein) wobei man I2CStart,
I2CStop Aderssierung nicht vergessen darf, die brauchen auch n bissl was.
Wären aber ja nur je Zyclus und Slave nur einmal.
Du könntest aber die Datenrate etwas schonen, indem du nur 8 der 10
Bit verwendest, sind dann halt nur 256 Abstufungen je Kanal anstatt 1024.
wär keine große Sache, Shift ADwert right 2 , und schon sinds nur noch 8 Bit, nurnoch den lowbyte extrahieren und versenden.
Aber vom Timing her bista dann nicht viel besser, die Übertragungszeit
musste dann in die Samplingrate mit einkalkulieren.
Klar, du kannst dann mit 4-6 Mega8 gleichzeitig AD-wandeln, die können
das dann parallel machen, das spart wieder ne Menge Zeit.

Insgesamt ist die Geschichte schon gut machbar, du brauchst aber n bus.
du hast auch externe Interrupts, die du für die Fallsteuerung verwenden kannst und die dann nen quasi chipselect ausführen. Die Leiterplatte
routen wird n mords Spaß!

Ich würde so an die Sache ran gehen ...
Was soll das Ding können, wo kann ich Kompromisse machen,
Das SOftware Grundgerüst entwerfen (von wegen der benötigeten Ports),
Die Platine layouten und dann das Programm (die Programme)
verfeinern (Feinschliff).