Đây là phần chứa các thanh ghi quan trọng nhất của chip, việc lập trình cho chip chủ yếu là truy cập bộ nhớ này. Bộ nhớ dữ liệu trên các chip AVR có độ lớn khác nhau tùy theo mỗi chip, tuy nhiên về cơ bản phần bộ nhớ này được chia thành năm phần như hình PLII.1:
2.1. Các thanh ghi file
Phần cốt lõi của VĐK AVR sự kết hợp giữa tập lệnh phong phú và 32 thanh ghi làm việc đa năng. Toàn bộ 32 thanh ghi đều được nối trực tiếp với khối ALU (Arithmetic Logic Unit), cho phép truy cập hai thanh ghi độc lập bằng một chu kì xung nhịp.
Phần này là phần đầu tiên trong bộ nhớ dữ liệu, như mô tả trong hình PLII.3, bao gồm 32 thanh ghi có tên gọi là register file, hoặc đơn giản là các
thanh ghi. Tất cả các thanh ghi này đều là các thanh ghi 8 bits như trong hình PLII.2.
Hình PLII.1: Bản đồ bộ nhớ dữ liệu
Hình PLII.2: Thanh ghi trong bộ nhớ dữ liệu
− Tất cả các chip trong họ AVR đều bao gồm 32 thanh ghi file có địa chỉ tuyệt đối từ 0x0000 đến 0x001F. Mỗi thanh ghi có thể chứa giá trị dương từ 0 đến 255 hoặc các giá trị có dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó…Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31.
Chúng được chia thành hai phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31.
− Hầu hết các lệnh đều có thể truy nhập trực tiếp tất cả các thanh ghi file, ngoại trừ các lệnh SBCI, SUBI, CPI, ANDI và LDI chỉ có thể truy nhập các thanh ghi từ R16 đến R31.
Thanh ghi R0 là thanh ghi duy nhất được sử dụng trong lệnh LPM (Load Program Memory). Các thanh ghi R26, R27, R28, R29, R30 và R31 ngoài chức năng thông thường còn được sử dụng như các con trỏ (Pointer register) trong một số lệnh truy xuất gián tiếp.
Ký hiệu Địa chỉ IO
Địa chỉ
SRam Chức năng
Rx (x=0->31) $00:5F Các thanh ghi thông thường
R26->R31 Sử dụng làm con trỏ
R25:R24 Sử dụng làm biến đếm 16 bít
R31:R30 và R0 Sử dụng làm biến đọc chương trình R16->R23 Truy cập từng bít của thanh ghi
R0->R15 Không nạp trực tiếp (Ldi) được hằng số
SP $3E $5E Con trỏ vào Stack
SPH $3E $5E Byte cao của SP
SPL $3D $5D Byte thấp của SP
SREG Thanh ghi trạng thái
X=R26:R27 Thanh ghi 16 bit
Y=R28:R29 Thanh ghi 16 bit
Z=R30:R31 Thanh ghi 16 bit
Bảng PLII.3: Mô tả các thanh ghi của VĐK AVR
Tóm lại, 32 thanh ghi file của AVR được xem là một phần của CPU, vì thế chúng được CPU truy cập trực tiếp, để gọi các thanh ghi này chỉ cần gọi trực tiếp tên của chúng. Thanh ghi file thường được sử dụng như các toán hạng của các phép toán trong khi lập trình
2.2. Các thanh ghi vào ra (IO)
Đây là phần nằm ngay sau thanh ghi file, phần này bao gồm 64 thanh ghi được gọi là các thanh ghi vào ra (I/O register) hay còn gọi là vùng nhớ vào ra (I/O Memory). Để thống nhất thuật ngữ từ đây về sau gọi chúng là “vùng nhớ IO”. Vùng nhớ IO là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Tất cả các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở đây. Vùng nhớ I/O có thể được truy cập như SRAM hay như các thanh ghi I/O. Nếu sử dụng lệnh truy xuất SRAM để truy xuất vùng nhớ này thì địa chỉ của chúng được tính
từ 0x0020 đến 0x005F. Nhưng nếu truy xuất như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0x0000 đến 0x003F.
2.3. Bộ nhớ trong (Internal Ram)
Đây là vùng nhớ có địa chỉ ngay sau vùng nhớ IO, vùng nhớ này không có tên, người lập trình muốn truy cập vào vùng nhớ này thì phải truy cập gián tiếp thông qua các thanh ghi địa chỉ.
2.4. Bộ nhớ mở rộng (External Ram)
Đây là bộ nhớ không nằm trong VĐK. Các chip AVR cho phép người sử dụng gắn thêm các bộ nhớ ngoài để chứa biến khi vùng nhớ trong không đủ, vùng này thực chất chỉ tồn tại khi nào ứng dụng gắn thêm bộ nhớ ngoài vào chip.
2.5. Bộ nhớ EEPROM
EEPROM (Electrically Ereasable Programmable ROM) là một phần quan trọng của các chip AVR mới, Bộ nhớ này không bị xóa khi mất điện thậm chí chúng còn không bị xóa ngay cả khi nạp trình lại và còn có thể ghi được bằng chính chương trình trong chip. Nó rất thích hợp cho các ứng dụng cần lưu trữ dữ liệu. Như trong hình PLII.1, phần bộ nhớ EEPROM được tách riêng và có địa chỉ tính từ 0x0000.