En sistemes electrònics i ordinadors, el microprogramari (en anglès firmware) o programació en firm és un bloc d'instruccions de programa per a propòsits específics, gravats en una memòria de tipus no volàtil (ROM, EEPROM, flash, etc.), que estableix la lògica de més baix nivell que controla els circuits electrònics d'un dispositiu de qualsevol tipus. Com que està integrat[1] en l'electrònica del dispositiu és en part maquinari, però també és programari, ja que proporciona lògica i es disposa en algun tipus de llenguatge de programació. Canviar el firmware d'un dispositiu pot resultar en alguns casos estrany o be impossible; el firmware de certs dispositius de memòria són instal·lats permanentment i el seu canvi no és possible després de la seva fabricació. Entre les raons més comunes per a l'actualització del firmware s'inclouen errors de fixació o d'addició de característiques al dispositiu. Això pot requerir canviar físicament els circuits integrats de ROM, o reprogramar la memòria flash amb un procediment especial.
Funcionalment, el firmware és l'intermediari (interfície) entre les ordres externes que rep el dispositiu i la seva electrònica, ja que és l'encarregat de controlar a aquesta última per executar correctament aquestes ordres externes. Trobem el firmware en memòries ROM dels sistemes de diversos dispositius perifèrics, com monitor de vídeo, unitats de disc, impressores, etc. però també en els mateixos microprocessadors, xips de memòria principal i en general en qualsevol circuit integrat i també en els reproductors MP3 o MP4. Molts dels firmwares emmagatzemats en ROM estan protegits per drets d'autor.
El programa BIOS d'un ordinador és un firmware el propòsit del qual és activar una màquina des que aquesta s'encén i preparar l'entorn per a la instal·lació d'un Sistema Operatiu complex en la memòria RAM, així com respondre a altres esdeveniments externs (botons de pulsació humana) i a l'intercanvi d'ordres entre diferents components de l'ordinador. En un microprocessador el firmware és el qual rep les instruccions dels programes i les executa en la complexa circuiteria d'aquest, emetent ordres a altres dispositius del sistema.