Secara umum, beralih dari 8 hingga 16 ke 32 bit mikrokontroler berarti Anda akan memiliki lebih sedikit pengekangan pada sumber daya, terutama memori, dan lebar register yang digunakan untuk melakukan operasi aritmatika dan logis. Monikers 8, 16, dan 32-bit umumnya mengacu pada ukuran bus data internal dan eksternal dan juga ukuran register internal yang digunakan untuk operasi aritmatika dan logis (dulu hanya satu atau dua yang disebut akumulator). , sekarang biasanya ada bank register 16 atau 32).
Ukuran port port I / O umumnya juga akan mengikuti ukuran bus data, sehingga mikro 8-bit akan memiliki port 8-bit, 16-bit akan memiliki port 16-bit dll.
Meskipun memiliki bus data 8-bit, banyak mikrokontroler 8-bit memiliki bus alamat 16-bit dan dapat mengatasi 2 ^ 16 atau 64K byte memori (itu tidak berarti mereka memiliki hampir mendekati yang diimplementasikan). Tetapi beberapa mikro 8-bit, seperti PIC low-end, mungkin hanya memiliki ruang RAM yang sangat terbatas (mis. 96 byte pada PIC16).
Untuk mengatasi skema pengalamatan terbatas mereka, beberapa mik 8-bit menggunakan paging, di mana isi dari register halaman menentukan salah satu dari beberapa bank memori untuk digunakan. Biasanya akan ada beberapa RAM umum yang tersedia tidak peduli apa halaman register diatur.
Mikrokontroler 16-bit umumnya terbatas pada memori 64K, tetapi juga dapat menggunakan teknik paging untuk menyiasatinya. Mikrokontroler 32-bit tentu saja tidak memiliki batasan seperti itu dan dapat menangani hingga 4GB memori.
Seiring dengan ukuran memori yang berbeda adalah ukuran tumpukan. Dalam mik ujung bawah, ini dapat diimplementasikan dalam area memori khusus dan sangat kecil (banyak PIC16's memiliki 8-tingkat panggilan tingkat stack). Dalam mikro 16-bit dan 32-bit, tumpukan biasanya akan menjadi RAM umum dan hanya dibatasi oleh ukuran RAM.
Ada juga perbedaan besar dalam jumlah memori - baik program dan RAM - yang diterapkan pada berbagai perangkat. 8-bit micros mungkin hanya memiliki beberapa ratus byte RAM, dan beberapa ribu byte memori program (atau lebih sedikit - misalnya PIC10F320 hanya memiliki 256 kata 14-bit flash dan 64 byte RAM). Mikro 16-bit mungkin memiliki beberapa ribu byte RAM, dan puluhan ribu byte memori program. 32-bit micros sering memiliki lebih dari 64K byte RAM, dan mungkin 1/2 MB atau lebih dari memori program (PIC32MZ2048 memiliki 2 MB flash dan RAM 512KB; PIC32MZ2064DAH176 yang baru dirilis, dioptimalkan untuk grafis memiliki 2 MB flash dan RAM sebesar 32MB pada chip)
Jika Anda memprogram dalam bahasa assembly, batasan ukuran register akan sangat jelas, misalnya menambahkan dua angka 32-bit adalah tugas pada mikrokontroler 8-bit tetapi sepele pada 32-bit. Jika Anda memprogram dalam C, ini sebagian besar akan transparan, tetapi tentu saja kode kompilasi yang mendasari akan jauh lebih besar untuk 8-pahit.
Saya mengatakan sebagian besar transparan, karena ukuran berbagai tipe data C mungkin berbeda dari satu ukuran mikro ke yang lain; misalnya, kompiler yang menargetkan mikro 8 atau 16-bit dapat menggunakan "int" untuk berarti variabel bertanda 16-bit, dan pada mikro 32-bit ini akan menjadi variabel 32-bit. Jadi banyak program menggunakan #defines untuk secara eksplisit mengatakan ukuran yang diinginkan, seperti "UINT16" untuk variabel 16-bit yang tidak ditandatangani.
Jika Anda memprogram dalam C, dampak terbesar adalah ukuran variabel Anda. Misalnya, jika Anda tahu variabel akan selalu kurang dari 256 (atau dalam rentang -128 hingga 127 jika ditandatangani), maka Anda harus menggunakan 8-bit (unsigned char atau char) pada mikro 8-bit (mis. PIC16 ) karena menggunakan ukuran yang lebih besar akan sangat tidak efisien. Demikian juga ulang variabel 16-bit pada mikro 16-bit (misalnya PIC24). Jika Anda menggunakan mikro 32-bit (PIC32), maka itu tidak benar-benar membuat perbedaan karena set instruksi MIPS memiliki instruksi byte, word, dan double-word. Namun pada beberapa mikro 32-bit, jika mereka tidak memiliki instruksi seperti itu, memanipulasi variabel 8-bit mungkin kurang efisien daripada 32-bit karena masking.
Seperti yang ditunjukkan anggota forum vsz, pada sistem di mana Anda memiliki variabel yang lebih besar dari ukuran register default (mis. Variabel 16-bit pada mikro 8-bit), dan variabel itu dibagi di antara dua utas atau di antara utas dasar dan penangan interupsi, seseorang harus melakukan operasi apa pun (termasuk hanya membaca) pada variabel atom , yang membuatnya tampak dilakukan sebagai satu instruksi. Ini disebut bagian kritis. Cara standar untuk memitigasi hal ini adalah dengan mengelilingi bagian kritis dengan pasangan interupsi nonaktif / aktifkan.
Jadi dari sistem 32-bit ke 16-bit, atau 16-bit ke 8-bit, setiap operasi pada variabel jenis ini yang sekarang lebih besar dari ukuran register default (tetapi tidak sebelumnya) perlu dianggap kritis bagian.
Perbedaan utama lainnya, pergi dari satu prosesor PIC ke yang lain, adalah penanganan periferal. Ini kurang berkaitan dengan ukuran kata dan lebih banyak hubungannya dengan jenis dan jumlah sumber daya yang dialokasikan pada setiap chip. Secara umum, Microchip telah mencoba membuat pemrograman perangkat yang sama yang digunakan di berbagai chip yang sama mungkin (misalnya timer0), tetapi akan selalu ada perbedaan. Menggunakan perpustakaan periferal mereka akan menyembunyikan perbedaan-perbedaan ini sebagian besar. Perbedaan terakhir adalah penanganan interupsi. Sekali lagi ada bantuan di sini dari perpustakaan Microchip.