PLI Tớnh năng của vi điều khiển ATmega8 và ATmega48
2. Bộ nhớ dữ liệu (Data memory)
Đõ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.