AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu vào bộ nhớ chƣơng trình. Ngoài ra Atmega8 còn có thêm bộ nhớ EEPROM để lƣu trữ dữ liệu.
2.1.4.1. Bộ nhớ chƣơng trình (Bộ nhớ Flash)
Bộ nhớ Flash 16KB của Atmega8 dùng để lƣu trữ chƣơng trình. Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash đƣợc sắp xếp theo kiểu 8KX16. Bộ nhớ Flash đƣợc chia làm 2 phần, phần dành cho chƣơng trình boot và phần dành cho chƣơng trình ứng dụng.
32
2.1.4.2. Bộ nhớ dữ liệu SRAM
1120 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O, và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội.
Hình 2.2: Bản đồ bộ nhớ dữ liệu SRAM 2.1.4.3. Bộ nhớ dữ liệu EEPROM
Atmega8 chứa bộ nhớ dữ liệu EEPROM dung lƣợng 512 byte, và đƣợc sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một. Đây là bộ nhớ dữ liệu có thể ghi xóa ngay trong lúc vi điều khiển đang hoạt động và không bị mất dữ liệu khi nguồn điện cung cấp bị cắt. Có thể ví bộ nhớ dữ liệu EEPROM giống nhƣ là ổ cứng ( Hard disk ) của máy vi tính. EEPROM đƣợc xem nhƣ là một bộ nhớ vào ra đƣợc đánh địa chỉ độc lập với SRAM, điều này có nghĩa là ta cần sử dụng các lệnh in, out … khi muốn truy xuất tới EEPROM. Để điều khiển vào ra dữ liệu với EEPROM ta sử dụng 3 thanh ghi sau :
33