Это действительно два вопроса в одном ...
Во-первых, в чем разница между микроконтроллером и микропроцессором?
Микропроцессор - это чисто центральный процессор, который следует набору инструкций, считанных с внешней шины памяти. Он управляет внешними периферийными устройствами (такими как экран, клавиатура, мышь, жесткий диск и т. Д.) Через внешнюю коммуникационную шину. Когда вы программируете микропроцессор, ваша программа является внешней по отношению к устройству. В компьютере эта память изначально представляет собой загрузочное ПЗУ BIOS, которое сначала считывает операционную систему с жесткого диска в оперативную память, а затем продолжает выполнять ее оттуда.
Микроконтроллер похож на моноблочный процессор + память с некоторыми внешними портами для связи с внешним миром. Он самодостаточен и не использует внешнюю память для хранения своей программы (хотя при необходимости он может читать и записывать рабочие данные во внешнюю память).
Во-вторых, программирование микроконтроллера и микропроцессора одинаково?
В некоторых отношениях да, а в некоторых нет.
Язык ассемблера - это широкий термин, который описывает набор инструкций, которые процессор может понять. Когда вы «компилируете» язык ассемблера, он на самом деле ничего не компилирует, все, что он делает, он конвертирует его в последовательность байтов, которые представляют команды и заглушки в некоторых относительных местах памяти. Это является общим для микропроцессоров и микроконтроллеров.
Однако разные типы процессоров понимают различный набор инструкций процессора. Например, если вы напишите программу на языке ассемблера, которая работает с микроконтроллером pic 16F877, это будет полной чепухой для микропроцессора или любого другого микроконтроллера, не входящего в семейство микроконтроллеров pic 16Fxxx.
Таким образом, хотя сборка работает одинаково для всех микропроцессоров и микроконтроллеров, фактический список написанных вами инструкций сильно отличается. Чтобы писать на ассемблере, вам необходимо глубоко знать архитектуру устройства, которую вы обычно можете получить из таблицы данных в случае микроконтроллера.