Memprogram Perbedaan antara Mikrokontroler dan Mikroprosesor?

9

Jadi saya sering melihat buku / tutorial dan referensi ketika pemrograman dalam perakitan ke mikroprosesor ..... maka saya melihat beberapa merujuknya sebagai mikrokontroler.

Misalnya Atmel ATtiny2313 .... saya melihat beberapa tutorial, beberapa menyebutnya mikroprosesor, ada yang menyebutnya mikrokontroler?

Yang mana itu? dan apakah pemrograman mereka (pada dasarnya) sama? (dalam perakitan)


sumber
1
@Kellenjb: Itu akan terjadi jika tidak menanyakan perbedaan pemrograman. Saya pikir ini cukup berbeda untuk tidak ditutup.
BG100
1
@ BG100 jawaban yang diterima hanya benar-benar menjelaskan perbedaannya, bukan perbedaan pemrograman.
Kortuk

Jawaban:

14

Ini benar-benar dua pertanyaan dalam satu ...

Pertama, apa perbedaan antara mikrokontroler dan mikroprosesor?

Mikroprosesor adalah murni CPU yang mengikuti serangkaian instruksi yang dibaca dari bus memori eksternal. Ini mengontrol perangkat eksternal (seperti layar, keyboard, mouse, hard drive, dll) melalui bus komunikasi eksternal. Ketika Anda memprogram mikroprosesor, program Anda eksternal untuk perangkat. Di komputer, memori ini awalnya adalah boot up BIOS ROM yang awalnya membaca sistem operasi dari hard drive ke dalam memori RAM, kemudian melanjutkan untuk mengeksekusi dari sana.

Mikrokontroler agak seperti CPU + Memori all-in-one, dengan beberapa port eksternal untuk berkomunikasi dengan dunia luar. Ini mandiri dan tidak menggunakan memori eksternal untuk memegang programnya (walaupun jika diperlukan dapat membaca dan menulis data yang berfungsi ke memori eksternal).

Kedua, apakah pemrograman mikrokontroler dan mikroprosesor sama?

Dalam beberapa hal, ya, dan dalam beberapa hal tidak.

Bahasa assembly adalah istilah luas yang menjelaskan sekumpulan instruksi yang dapat dipahami langsung oleh CPU. Ketika Anda 'mengkompilasi' bahasa assembly, itu tidak benar-benar mengkompilasi apa pun, semua itu tidak mengkonversikannya ke urutan byte yang mewakili perintah dan colokan di beberapa lokasi memori relatif. Ini umum untuk mikroprosesor dan mikrokontroler.

Namun, berbagai jenis CPU memahami serangkaian instruksi CPU yang berbeda. Misalnya, jika Anda menulis program bahasa rakitan yang bekerja dengan mikrokontroler pic 16F877, itu akan menjadi omong kosong bagi mikroprosesor atau mikrokontroler lain di luar keluarga mikrokontroler pic 16Fxxx.

Jadi, walaupun perakitan bekerja dengan cara yang sama di semua mikroprosesor dan mikrokontroler, daftar instruksi yang Anda tulis sebenarnya sangat berbeda. Untuk menulis dalam bahasa assembly, Anda harus memiliki pengetahuan mendalam tentang arsitektur perangkat, yang biasanya Anda dapatkan dari lembar data dalam kasus mikrokontroler.

BG100
sumber
Yah apa yang saya maksudkan adalah ya ASM akan berbeda untuk masing-masing ..... tetapi apakah perintah / dll umumnya sama (atau dilakukan dengan cara yang sama) antara MC dan MP ... Maksudku MC memiliki MP jadi saya akan berasumsi begitu .. (minus memori)
@Sauron: Tidak, tidak juga .. sementara beberapa perintah mungkin serupa antar perangkat, seperti add, mov, sub, dll, mereka mungkin diimplementasikan secara berbeda, dan tidak akan port antar perangkat.
BG100
1
Jawaban yang luar biasa, dan yang mungkin bisa membantu saya ketika saya memulai kelas mikroprosesor saya.
pfyon
baik apa yang saya maksudkan adalah ...... Seperti karena Microcontroller memiliki CPU di dalamnya ... Instruksi perakitan lebih ditujukan pada CPU yang sebenarnya daripada komponen di sekitarnya.
@Auron: Ya, itu benar.
BG100
10

Perbedaannya adalah bahwa mikrokontroler termasuk memori on-chip seperti Flash EEPROM dan RAM, dan periferal seperti I / O paralel dan serial. Dengan mikroprosesor pertama, itu semua adalah perangkat eksternal. Alih-alih mikroprosesor I / O memiliki alamat dan data bus dibawa ke pin mereka.
Cara Anda menulis kode untuk keduanya adalah sama.

Untuk menggambarkan hal itu: ada arsitektur (misalnya ARM) di mana CPU yang sama tersedia sebagai mikrokontroler (dengan semua kode dan memori data pada chip), sebagai mikroprosesor (semua kode dan memori data eksternal), atau sebagai hibrida (beberapa memori pada chip, tetapi untuk sebagian besar aplikasi Anda akan menambah memori eksternal). CPU-nya sama, jadi pemrogramannya (dalam arti instruksi CPU) adalah sama.

stevenvh
sumber
Oh ok itu lebih masuk akal, tetapi ASM untuk masing-masing pada dasarnya sama?
Maksud Anda jika saya belajar kode untuk seri Cortex M, saya dapat kode untuk seri Cortex A juga ??
0xakhil
Pada dasarnya ya untuk kedua pertanyaan, instruksi asm adalah sama (walaupun mungkin ada variasi kecil, sama seperti berbagai versi ARM dapat menambahkan instruksi spesifik). Tetapi setiap kali Anda menggunakan hal-hal di luar CPU (cache, interrupt controller, peripherals, dll) akan ada perbedaan besar.
Wouter van Ooijen
8

Meskipun ini cenderung menjadi daerah abu-abu, perbedaan umum lainnya antara mikrokontroler dan mikroprosesor adalah bahwa mikrokontroler sering menggunakan arsitektur Harvard (ruang alamat terpisah untuk kode dan data), sedangkan mikroprosesor hampir semua menggunakan arsitektur Von Neumann (ruang alamat gabungan untuk kode dan data) .

Contoh keluarga mikronroller menggunakan arsitektur Harvard meliputi: AVR, Intel 8051, PIC (kecuali PIC32, lihat di bawah), dan ARM Cortex-M3. Pengecualian penting adalah prosesor Freescale, seperti HCS08, yang menggunakan arsitektur Von Neumann, seperti halnya Propeller Parallax.

Ini memengaruhi pemrograman dalam beberapa cara (contoh yang ditunjukkan di bawah ini menggunakan C):

Mungkin ada beberapa jenis RAM, masing-masing dengan ruang alamat mereka sendiri. Sebagai contoh, 8051 memiliki data eksternal (xdata) yang dialamatkan terpisah dari 256 byte RAM pertama, meskipun keduanya diimplementasikan pada chip yang sama. Jadi kita harus menggunakan kualifikasi pada deklarasi variabel sukaunsigned int xdata foo;

Jika konstanta dideklarasikan dalam memori kode, mereka mungkin perlu disalin ke RAM sebelum dapat diakses. Atau, perlu ada cara untuk mengakses memori kode seolah-olah data - misalnya kualifikasi kode untuk 8051s, atau fitur Program Space Visiblity (PSV) PIC.

Cara-cara non-standar ini untuk mengakses kode dan RAM cenderung menjadi perbedaan utama (selain periferal) ketika porting kode C dari satu keluarga chip ke yang lain.

Anda tidak dapat mengeksekusi kode dari RAM dalam arsitektur Harvard yang ketat, jadi tidak mungkin ada kode modifikasi sendiri (kecuali Anda menghitung mem-flash ulang memori program dengan cepat). Namun PIC32 memiliki arsitektur Harvard yang dimodifikasi yang memungkinkan kode dieksekusi dalam RAM. Propeller Parallax sebenarnya menggunakan kemampuannya untuk memodifikasi kode untuk melakukan pengembalian subrutin, karena tidak memiliki tumpukan perangkat keras.

tcrosley
sumber
1

Mikrokontroler umumnya merupakan solusi chip tunggal untuk menyediakan fungsi komputasi dan periferal.

Mikroprosesor menyediakan fungsi komputasi tetapi tidak fungsi periferal.

Fungsi periferal dapat sesederhana memiliki beberapa bit I / O sederhana; atau mungkin termasuk penghitung dan penghitung waktu canggih, tampilan video, ethernet, kontrol motorik, codec audio dan video, dan lain-lain.

Untuk arsitektur yang diberikan (katakanlah CPU berbasis x86 dan MCU), pengkodean "komputasi" akan identik. Tetapi bagaimana Anda mengakses fungsi periferal akan bervariasi, dan karenanya Anda akan memiliki pengkodean khusus perangkat keras yang sangat berbeda untuk dilakukan, berdasarkan bagaimana fungsi periferal diimplementasikan pada perangkat keras target Anda.

Toybuilder
sumber
1

Mikroprosesor biasanya digunakan dalam komputer yang dikonstruksikan untuk menjalankan program dengan tujuan sewenang-wenang yang belum ditentukan. Komputer seperti itu umumnya akan memiliki beberapa kode yang disediakan vendor di dalamnya yang dengannya kode yang dipasok pengguna akan diharapkan untuk berinteraksi. Sebaliknya, mikrokontroler biasanya digunakan pada mesin yang dibangun untuk tujuan tunggal menjalankan satu program. Seringkali, seseorang yang menulis kode untuk mikrokontroler akan memasok setiap instruksi yang dijalankan mesin.

Beberapa mikrokontroler menggunakan set instruksi yang sama dengan mikroprosesor populer. Set instruksi 68000 yang digunakan dalam jajaran komputer pribadi Macintosh, Amiga, dan Atari ST juga telah digunakan di beberapa mikrokontroler. Meskipun set instruksi yang digunakan oleh Macintosh dan papan kontrol berbasis 68HC340 adalah sama, namun, pemrograman untuk kedua platform cenderung sangat berbeda. Di Macintosh, saat program yang disediakan pengguna mulai berjalan, sebagian besar sistem sudah "diatur". Kode yang menginginkan blok memori dapat memuat register dengan jumlah yang dibutuhkan dan menjalankan instruksi "A-trap". OS Macintosh kemudian akan mengembalikan pointer ke beberapa memori yang sebelumnya tidak dialokasikan untuk tujuan lain, dan tandai area memori itu sehingga ia menang ' t dialokasikan lagi sampai diperintahkan bahwa penerima asli tidak lagi membutuhkannya. Sebaliknya, di papan dengan 68HC340 dan 128K RAM, tidak ada kebutuhan atau kemampuan untuk "meminta" RAM. Ketika program dimulai, akan "mendapatkan" 128K yang dapat digunakan sesuai keinginan; tidak ada lagi yang akan menggunakannya, tetapi di sisi lain program pengguna harus melacak area apa yang digunakan untuk tujuan apa pun karena tidak ada lagi yang akan melacaknya.

Sementara perbedaan di sini adalah benar-benar antara mikrokomputer versus mikrokontroler, dan pertanyaannya adalah tentang mikroprosesor, sebagian besar diskusi pemrograman mikroprosesor membahasnya dalam konteks komputer tujuan umum.

supercat
sumber
0

Mikroprosesor: Modul perangkat keras digital yang menjalankan instruksi. Modul ini dapat menjadi sirkuit terpadu yang lengkap.

Mikrokontroler: Modul lengkap yang berisi mikroprosesor dengan memori internal selain modul lainnya.

Mike
sumber
Selamat datang di EE.SE, Mike. Gunakan <enter> x 2 untuk istirahat paragraf. Saya sudah memperbaikinya untuk Anda.
Transistor