Nói chung, đi từ 8 đến 16 đến 32 bit vi điều khiển có nghĩa là bạn sẽ có ít hạn chế hơn về tài nguyên, đặc biệt là bộ nhớ và độ rộng của các thanh ghi được sử dụng để thực hiện các phép toán số học và logic. Các đơn vị 8, 16 và 32 bit thường đề cập đến cả kích thước của các dữ liệu bên trong và bên ngoài cũng như kích thước của (các) thanh ghi bên trong được sử dụng cho các phép toán số học và logic (trước đây chỉ là một hoặc hai được gọi là bộ tích lũy , bây giờ thường có ngân hàng đăng ký 16 hoặc 32).
Kích thước cổng cổng I / O nói chung cũng sẽ tuân theo kích thước bus dữ liệu, do đó, micro 8 bit sẽ có cổng 8 bit, 16 bit sẽ có cổng 16 bit, v.v.
Mặc dù có bus dữ liệu 8 bit, nhiều bộ vi điều khiển 8 bit có bus địa chỉ 16 bit và có thể giải quyết 2 ^ 16 hoặc 64K byte bộ nhớ (điều đó không có nghĩa là chúng có bất kỳ nơi nào được triển khai gần đó). Nhưng một số micros 8 bit, như PIC cấp thấp, có thể chỉ có không gian RAM rất hạn chế (ví dụ 96 byte trên PIC16).
Để giải quyết sơ đồ địa chỉ giới hạn của họ, một số micros 8 bit sử dụng phân trang, trong đó nội dung của thanh ghi trang xác định một trong nhiều ngân hàng bộ nhớ sẽ sử dụng. Thông thường sẽ có sẵn một số RAM phổ biến cho dù đăng ký trang được đặt thành gì.
Vi điều khiển 16 bit thường bị giới hạn ở 64K bộ nhớ, nhưng cũng có thể sử dụng các kỹ thuật phân trang để khắc phục điều này. Tất nhiên, vi điều khiển 32 bit không có hạn chế như vậy và có thể giải quyết tới 4GB bộ nhớ.
Cùng với các kích thước bộ nhớ khác nhau là kích thước ngăn xếp. Trong micros micros end thấp hơn, điều này có thể được thực hiện trong một vùng bộ nhớ đặc biệt và rất nhỏ (nhiều PIC16 có ngăn xếp cuộc gọi sâu 8 cấp). Trong micros 16 bit và 32 bit, ngăn xếp thường sẽ ở mức RAM chung và chỉ bị giới hạn bởi kích thước của RAM.
Cũng có sự khác biệt lớn về dung lượng bộ nhớ - cả chương trình và RAM - được triển khai trên các thiết bị khác nhau. Micros 8 bit có thể chỉ có vài trăm byte RAM và vài nghìn byte bộ nhớ chương trình (hoặc ít hơn nhiều - ví dụ PIC10F320 chỉ có 256 từ flash 14 bit và 64 byte RAM). Micros 16 bit có thể có vài nghìn byte RAM và hàng chục nghìn byte bộ nhớ chương trình. Micros 32 bit thường có hơn 64K byte RAM và có thể bằng 1/2 MB bộ nhớ chương trình trở lên (PIC32MZ2048 có 2 MB flash và 512KB RAM, PIC32MZ2064DAH176 mới được phát hành, được tối ưu hóa cho đồ họa có 2 MB flash và một con số khổng lồ 32 MB RAM trên chip).
Nếu bạn đang lập trình bằng ngôn ngữ lắp ráp, các giới hạn kích thước thanh ghi sẽ rất rõ ràng, ví dụ: thêm hai số 32 bit là một việc vặt trên vi điều khiển 8 bit nhưng không quan trọng trên vi điều khiển 32 bit. Nếu bạn đang lập trình bằng C, điều này sẽ phần lớn trong suốt, nhưng tất nhiên mã được biên dịch cơ bản sẽ lớn hơn nhiều cho 8-đắng.
Tôi đã nói phần lớn minh bạch, bởi vì kích thước của các loại dữ liệu C khác nhau có thể khác nhau từ một kích thước vi mô khác; ví dụ, trình biên dịch nhắm vào micro 8 hoặc 16 bit có thể sử dụng "int" để có nghĩa là biến có chữ ký 16 bit và trên micro 32 bit, đây sẽ là biến 32 bit. Vì vậy, rất nhiều chương trình sử dụng #defines để nói rõ ràng kích thước mong muốn là gì, chẳng hạn như "UINT16" cho biến 16 bit không dấu.
Nếu bạn đang lập trình bằng C, tác động lớn nhất sẽ là kích thước của các biến bạn. Ví dụ: nếu bạn biết một biến sẽ luôn nhỏ hơn 256 (hoặc trong phạm vi -128 đến 127 nếu được ký), thì bạn nên sử dụng 8 bit (char hoặc char không dấu) trên micro 8 bit (ví dụ PIC16 ) vì sử dụng kích thước lớn hơn sẽ rất kém hiệu quả. Tương tự như vậy lại biến 16 bit trên micro 16 bit (ví dụ PIC24). Nếu bạn đang sử dụng micro 32 bit (PIC32), thì nó không thực sự tạo ra bất kỳ sự khác biệt nào vì tập lệnh MIPS có các lệnh byte, word và double-word. Tuy nhiên, trên một số máy vi tính 32 bit, nếu chúng thiếu các hướng dẫn như vậy, thao tác với biến 8 bit có thể kém hiệu quả hơn so với biến 32 bit do mặt nạ.
Như thành viên diễn đàn vsz đã chỉ ra, trên các hệ thống mà bạn có một biến lớn hơn kích thước thanh ghi mặc định (ví dụ: biến 16 bit trên micro 8 bit) và biến đó được chia sẻ giữa hai luồng hoặc giữa luồng cơ sở và một trình xử lý ngắt, người ta phải thực hiện bất kỳ thao tác nào (bao gồm chỉ đọc) trên nguyên tử biến , điều đó làm cho nó dường như được thực hiện như một lệnh. Đây được gọi là một phần quan trọng. Cách tiêu chuẩn để giảm thiểu điều này là bao quanh phần quan trọng bằng cặp ngắt / vô hiệu hóa.
Vì vậy, việc chuyển từ các hệ thống 32 bit sang 16 bit, hoặc 16 bit đến 8 bit, mọi hoạt động trên các biến thuộc loại này hiện lớn hơn kích thước thanh ghi mặc định (nhưng trước đây không cần phải được coi là quan trọng phần.
Một sự khác biệt chính khác, đi từ bộ xử lý PIC này sang bộ xử lý PIC khác, là việc xử lý các thiết bị ngoại vi. Điều này ít liên quan đến kích thước từ và nhiều thứ khác liên quan đến loại và số lượng tài nguyên được phân bổ trên mỗi chip. Nói chung, Microchip đã cố gắng làm cho việc lập trình cùng một thiết bị ngoại vi được sử dụng trên các chip khác nhau giống nhau nhất có thể (ví dụ: timer0), nhưng sẽ luôn có sự khác biệt. Sử dụng các thư viện ngoại vi của họ sẽ che giấu những khác biệt này ở một mức độ lớn. Một sự khác biệt cuối cùng là việc xử lý các ngắt. Một lần nữa có sự giúp đỡ ở đây từ các thư viện Microchip.