A mikrovezérlők általános célú ki- és bemenetei (GPIO) nem rendelkeznek előre meghatározott, kizárólagos funkcióval. A felhasználó döntheti el, hogy milyen szerepet töltsenek be az adott programban, akár digitális bemenet vagy kimenet, analóg bemenet vagy kimenet, vagy egy kommunikációs protokoll egyik ága.
Minden esetben meg kell adni, hogy az adott GPIO-t hogyan kezelje a program, ezt a beállítást futás közben általában nem módosítják. A megadás módja és a lehetséges opciók az IDE-től és az MCU-tól is függnek.
Egy digitális bemenet feladata a magas és alacsony jelek detektálása. Önmagában egy ilyen bemenetnek az állapota nem kiszámítható, a véletlenszerű zajok véletlenszerű viselkedést eredményeznek. A jelenség neve floating pin. A megbízható leolvasáshoz felhúzó vagy lehúzó ellenállásra van szükség, a különbség a bemenet aktiválásakor bekövetkező jelszintváltozás iránya. A pull-up alapból 1, aktív állapotban 0 értéket ad vissza, a pull-down ezzel ellentétes. Az MCU-k általában tartalmaznak kódban aktiválható belső pull-up ellenállást.
Mikrovezérlők használatakor egy bemenet értéke ciklikusan ellenőrizhető, mint ahogy valaki folyamatosan ellenőrizheti az üzeneteit, hogy érkezett-e új e-mail. Ez a polling, amely a kevésbé hatékony módszer. Sokkal hatékonyabb az, ha a telefon egy értesítést küld, amikor új levél érkezett. Ekkor rögtön megtekinthető annak tartalma, polling esetén egy 5 percenkénti ellenőrzéskor lehetséges, hogy a beérkezéstől számítva percekig nincs megnyitva a levél. Ehhez hasonlóan az Interrupt feladata egy bemenet megváltozásakor azonnal szólni a programnak, ami előtte bármi egyébbel foglalkozhatott. Időzítőre is lehet ISR-t konfigurálni.