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)
Jawaban:
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.
sumber
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.
sumber
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 suka
unsigned 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.
sumber
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.
sumber
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.
sumber
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.
sumber