Tải bản đầy đủ (.docx) (104 trang)

Đồ án môn học Vi xử lý

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.14 MB, 104 trang )

Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ
HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
ĐỀ TÀI:
NGHIÊN CỨU SỬ DỤNG CHÍP VI ĐIỀU
KHIỂN AVR ATMEGA8 VÀO ỨNG
DỤNG ĐO NHIỆT ĐỘ VÀ ĐIỀU KHIỂN
CÁC THIẾT BỊ ĐIỆN – ĐIỆN TỬ
GVHD: Thầy NGUYỄN NGÔ LÂM
SVTH: 1.ĐÀO THANH MAI MSSV:06119058
2.NGUYỄN ĐỨC ĐÀI MSSV:06119009
1
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
2009
Lời Cảm Ơn
Xin chân thành cảm ơn tất cả các Thầy Cô trong Trường ĐH Sư Phạm
Kỹ Thuật Thành Phố Hồ Chí Minh đã dạy dỗ cho đến ngày hôm nay,
các Thầy Cô của bộ môn Điện tử Viễn Thông.
Xin chân thành cảm ơn Thầy Nguyễn Ngô Lâm ,Giảng Viên Khoa điện
- điện tử người đã gợi ý và hướng dẫn thảo luận và giúp đỡ em thực
hiện đồ án môn học này.
Và xin cảm ơn tất cả những người đã gián tiếp tạo điều kiện thuận lợi
trong quá trình đồ án môn học 1.
Dù đã cố rất gắng nhưng vẫn không tránh khỏi sai sót, xin được học hỏi
những lời chỉ dẫn. Xin cảm ơn rất nhiều.
Người thực hiện
1.Đào Thanh Mai
2.Nguyễn Đức Đài


2
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Mục lục
Chương 1 Giới thiệu chung
3
1. Đặt vấn đề
3
2. Các vấn đề cần giải quyết 4
Chương 2 Tìm Hiểu Cấu Trúc Các Phần Cứng
5
I.Atmega8 5
1.Tổng Quan 5
2.Cấu trúc chung của AVR 9
3.Cấu trúc ngắt Atmega8
9
4.Cấu trúc bộ nhớ 11
4.1 Bộ nhớ chương trình (Bộ nhớ Flash) 11
4.2 Bộ nhớ dữ liệu SRAM 13
4.3 Bộ nhớ dữ liệu EEPROM 21
5 .Các cổng vào ra (I/O) 23
5.1 Các chức năng của Port B 23
5.2 Các chức năng của Port C 24
5.3 Các chức năng của Port D 24
5.4 Mô tả thanh ghi của port I/O 25
6. Bộ định thời 8bit timer/counter 0 27
6.1 Hoạt động 27
6.2 Đơn vị đếm 29
6.3 Đơn vị so sánh ngõ ra 29
6.4 Mô tả các thanh ghi 30

7. Bộ định thời/đếm timer/counter 1 16-bit 32
7.1 sơ đồ khối và một số đặc điểm 32
7.2 Một số định nghĩa 32
8.SPI(Serial peripheral interface) 37
9.TWI – Two Wire Interface 40
10.Bộ so sánh tương tự(Alalog Comparator) 41
11.USART ( Universal asynchronous receiver/transmitter ) 43
3
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
11.1 đặc điểm 43
11.2 Tạo xung clock 44
11.3 Định dạng khung truyền 45
11.4 Khởi tạo USART 45
11.5 Truyền thông dữ liệu-bộ truyền USART 45
12.Hệ thống xung Clock 46
12.1 Bộ dao động Thạch Anh
47
12.2. Bộ dao động Thạch Anh Tần số thấp
48
12.3 Bộ dao động R-C bên ngoài
49
12.4 Bộ dao động nội R-C tinh chỉnh được
50
12.5 Bộ tạo xung Clock bên ngoài 51
12.6 Bộ dao động định thời 51
13.Bộ Biến Đổi A/D( Analog/Digital) 53
II. Cấu trúc cổng nối tiếp 57
1.Khái Quát 57
2. Truy xuất trực tiếp thông qua cổng 62

III .LM35(Cảm biến nhiệt độ) 65
Chương III: Thiết Kế Phần Cứng 66
1.Mạch Nguồn Cung Cấp Cho Hệ Thống
66
Chương I:
Giới Thiệu Đề Tài
1- ĐẶT VẤN ĐỀ
Ngày nay cùng sự phát triển không ngừng của khoa học kỹ thuật, thì kỹ thuật số đã đem lại
cho con người những thành tựu to lớn, giúp cho con người dễ dàng đạt được mục đích của mình
trong mọi thiết kế. Hoà nhập cùng xu hướng đó, vi điều khiển đã khẳng định được vị thế vững chắc
của mình trong mọi ứng dụng. Điển hình trong công nghệ đo lường và điều khiển bằng máy tính
đặc biệt là việc đo nhiệt độ và điều khiển các hệ thống. vấn đề tự động ổn định nhiệt độ là yếu tố
quan trọng hàng đầu để nâng cao chất lượng cuộc sống , sản xuất. Vì vậy, việc ứng dụng vi điều
khiển trong tự động điều khiển nhiệt độ và hiển thị kết quả trên máy tính đã được nghiên cứu và
ứng dụng.
4
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Vi điều khiển Atmega8 AVR có công suất cao, tiêu thụ năng lượng thấp, cấu trúc RISC tiến
với 130 lệnh với chu kỳ thực hiện đơn xung lớn nhất, 32 thanh ghi đa mục đích 8 bít, 16 MIPS tại
tần số đặt 16 MHz, bộ nhân 2 chu kỳ On-chip, Power-on Reset và Brown-out Detection có thể lập
trình, bộ dao động RC bên trong có thể lập trình các mức, 5 Mode ngủ (Idle, ADC Noise Reduction,
Power-save, Power-down và Standby), có khả năng Reset khi bật nguồn, khả năng dò lỗi Brown out
lập trình được, có nguồn ngắt trong và ngắt ngoài.
Cốt lõi của AVR là sự kết hợp các câu lệnh phong phú với 32 thanh ghi đa mục đích. Tất cả
32 thanh ghi đều trực tiếp kết nối tới bộ xử lý logíc số học - Arithmetic Logic Unit (ALU), cho phép
truy nhập 2 thanh ghi độc lập trong một câu lệnh đơn được thực hiện trong một chu kỳ xung. Kết
quả của cấu trúc trở nên gọn nhẹ, hiệu quả hơn, trong khi vẫn đạt được thời gian xử lý nhanh hơn
gấp 10 lần các vi điều khiển CISC thông thường khác.
8K byte Flash trên chíp có thể lập trình với các khả năng đọc trong khi ghi (Read-While-

Write), 512 byte EEPROM, 1K byte SRAM, 23 đường vào ra đa mục đích, 32 thanh ghi đa mục
đích, 3 Timer/Counter rất linh hoạt với các compare mode, các ngắt trong và ngắt ngoài, một bộ
USART nối tiếp có thể lập trình được, ghép nối nối tiếp 2 dây định hướng byte, 6 kênh ADC (8
kênh với loại TQFP và MLF packages) trong đó 4 (hoặc 6) kênh có độ chính xác 10-bit và 2 kênh
có độ chính xác 8-bit, Watchdog Timer có thể lập trình được với bộ dao động bên trong, một cổng
nối tiếp SPI và 5 mode tiết kiệm năng lượng có thể lựa chọn mềm.
- Idle mode dừng CPU trong khi vẫn cho phép SRAM, Timer/Counters, cổng SPI, và hệ
thống ngắt tiếp tục chức năng của chúng.
- Power-down mode tiết kiệm nội dung thanh ghi, nhưng hạn định bộ dao động, không cho
phép tất cả các chức năng khác của chíp được hoạt động cho đến khi ngắt tiếp theo hoặc Reset phần
cứng xuất hiện.
- Trong Power-save mode, timer không đồng bộ tiếp tục chạy, cho phép sử dụng để duy trì
thời gian nền, trong khi các phần còn lại của thiết bị được ngủ.
- ADC Noise Reduction mode dừng CPU và tất các module I/O ngoại trừ timer không đồng
bộ và ADC để tối thiểu hóa nhiễu mạch trong suốt quá trình ADC trong chuyển đổi.
- Trong Standby mode, bộ dao động thạch anh/ resonator được phép chạy trong khi các phần
còn lại của thiết bị được ngủ. Điều này cho phép start-up rất nhanh cùng với hiệu quả tiêu thụ ít
năng lượng.
Thiết bị được sản suất áp dụng công nghệ tích hợp bộ nhớ non-volatile cao của Atmel. Bộ
nhớ chương trình Flash này có thể lập trình thông qua ghép nối tiếp SPI bằng chương trình lập
trình bộ nhớ non-volatile riêng, hoặc bằng một chương trình boot on – chip, chạy trong AVR core.
Chương trình boot có thể sử dụng bất kỳ một ghép nối nào để download chương trình ứng dụng
trong bộ nhớ Flash. Phần mềm trong Boot Flash sẽ tiếp tục chạy trong khi các phần sử dụng Flash
vẫn được update, hỗ trợ cho hoạt động đọc trong khi ghi (Read-While-Write).
Bằng việc kết hợp với một CPU 8-bit RISC với bộ nhớ Flash tự lập trình trong hệ thống trên
một chíp, Atmel ATmega8 là một vi điều khiển cực mạnh, thỏa mãn yêu cầu về một bộ vi điều
khiển với độ linh hoạt cao và đem lại lợi nhuận lớn với rất nhiều các ứng dụng điều khiển tác động
nhanh.
ATmega8 AVR cũng hỗ trợ đầy đủ về lập trình và phát triển các tool hệ thống, bao gồm bộ
dịch C, macro assemblers, bộ mô phỏng/gỡ rối chương trình, In-Circuit Emulators, và evaluation

kits.
2. Các vấn đề cần giải quyết
 Đo nhiệt đọ phòng
 Hiển thị trên máy tính
 Điều khiển bằng máy tính một số thiết bị như đèn,quạt động cơ….
Mạch gồm có Atmega8, cảm biết nhiệt độ LM35, cổng COM trong đó phần chính là
Atmega8. Tín hiệu được nhận bởi LM35 qua ADC(tích hợp sẵn trong Atmega8) biến đổi tín hiệu
5
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
tương tự thành số. tín hiệu này truyền với giao thức RS 232 đi vào COM và kết mối với máy tính,
Qua đó,chúng ta có thể điều khiển thiết bị như sau:
 Định nhiệt độ để bật tắt thiết bị, ví dụ khi nhiệt đọ phòng >30 độ C thì Quạt được
bật,>100 độ C thì đèn tắt….
 Điều khiển trên máy tính hoặc set nhiệt độ bằng biến trở trên board.
Chương II :
Tìm Hiểu Cấu Trúc Các Phần Cứng
I. ATMEGA8
1. TỔNG QUAN
Những Tính Năng Chính Của ATmega8:
o Có 8Kbyte bộ nhớ flash
o Có thể xóa lập trình được và có thể chịu được 10000 lần ghi xóa.
o Có 32 thanh ghi đa năng 8 bit,
o Có 512 byte bộ nhớ EEPROM tích hợp trên chíp,
o Ccó 1 kbyte SRAM nội.
o Có hai bộ Timer/counter 8 bit và một bộ timer/counter 16 bit với bộ chia tần lập trình được.
o Có ba kênh điều xung, 6 kênh lối vào chuyển đổi ADC với độ phân giải 10 bit.
o Atmega8 có 28 chân, trong đó có 23 cổng vào ra.
o Nguồn nuôi từ 2.7 đến 5.5 đối với Atmega8L và từ 4.5 đến 5.5 đối với Atmega8,
o Làm việc tiêu thụ dòng 3.6mA.

o Sử dụng mạch dao động ngoài từ 0 đến 8 Mhz với Atmega8L và từ 0 đến 16 Mhz với
Atmega8.
o Ngoài ra chíp Atmega8 còn có bộ xung nội bên trong có thể lập trình chế độ xung nhịp
Vi điều khiển AVR do hãng Atmel ( Hoa Kì ) sản xuất được gới thiệu lần đầu năm
1996. AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny AVR ( như AT tiny 13, AT
tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR ( chẳn hạn
AT90S8535, AT90S8515,…) có kích thước bộ nhớ vào loại trung bình và mạnh hơn là
dòng Mega ( như ATmega32, ATmega128,…) với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb
cùng với các bộ ngoại vi đa dạng được tích hợp trên chip, cũng có dòng tích hợp cả bộ LCD trên
chip ( dòng LCD AVR ). Tốc độ của dòng Mega cũng cao hơn so với các dòng khác. Sự khác nhau
cơ bản giữa các dòng chình là cấu trúc ngoại vi, còn nhân thì vẫn như nhau, Hình 1.1
Block Diagram
6
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
7
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
. Đặt biệt, năm 2008, Atmel lại tiếp tục cho ra đời dòng AVR mới là XmegaAVR, với những tính
năng mạnh mẽ chưa từng có ở các dòng AVR trước đó. Có thể nói XmegaAVR là dòng MCU 8 bit
mạnh mẽ nhất hiện nay.
1.1 Các dòng AVR khác nhau: Tiny, AVR và Mega
� Bộ Nhớ Dữ Liệu : Bộ nhớ dữ liệu của AVR chia làm 2 phần chính là bộ nhớ
SRAM và bộ nhớ EEPROM. Tuy cùng là bộ nhớ dữ liệu nhưng hai bộ nhớ này lại tách biệt
nhau và được đánh địa chỉ riêng.
� Bộ nhớ SRAM có dụng lượng 1 K bytes, Bộ nhớ SRAM có hai chế độ hoạt động
là chế độ thông thường và chế độ tương thích với ATmega103, muốn thiết lập bộ nhớ
SRAM hoạt động theo chế độ nào ta sử dụng bit cầu chì M103C ( M103C fuse bit (9) ).
Atmega8 là vi điều khiển 8 bit dựa trên kiến trúc RISC. Với khả năng thực hiện mỗi lệnh trong
vòng một chu kỳ xung clock, Atmega8 có thể đạt được tốc độ 1MIPS trên mỗi MHz (1 triệu

lệnh/s/MHz).
Dưới đây là sơ đồ khối của Atmega8
8
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm

Sơ đồ cấu trúc Atmega8
ATmega 8 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C,
macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm,
2. CẤU TRÚC CHUNG AVR
CPU của AVR có chức năng bảo đảm sự hoạt động chính xác của các chương trình.
Do đó nó phải có khả năng truy cập bộ nhớ, thực hiện các quá trình tính toán, điều khiển các
thiết bị ngoại vi và quản lý ngắt.
2.1.Cấu trúc tổng quát
AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình và dữ liệu. Các
lệnh được thực hiện chỉ trong một chu kỳ xung clock. Bộ nhớ chương trình được lưu trong bộ nhớ
Flash.
2.2. ALU
ALU làm việc trực tiếp với các thanh ghi chức năng chung. Các phép toán được thực hiện trong
một chu kỳ xung clock. Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit.
2.3. Thanh ghi trạng thái
Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic.
9
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Thanh ghi trạng thái SREG
C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)
Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)
N: Negative Flag (Nếu kết quả của phép toán là âm)
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)

V, For signed tests (S=N XOR V) S: N
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung gian trong các
lệnh BLD,BST).
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt. Nếu bit này ở trạng
thái logic 0 thì không có một ngắt nào được phục vụ.)
2.4. Các thanh ghi chức năng chung
Thanh ghi chức năng chung
Tiệp ghanh ghi ( register file ) : Tiệp 32 thanh ghi đa chức năng ( $0000 - $001F )
đã được nói ở trên, ngoài chức năng là các thanh ghi đa chức năng, thì các thanh ghi từ R26 tới R31
từng đôi một tạo thành các thanh ghi 16 bit X, Y, Z được dùng làm con trỏ trỏ tới bộ nhớ chương
trình và bộ nhớ dữ liệu .Thanh ghi con trò X, Y có thể dùng làm con trỏ trỏ tới bộ nhớ dữ liệu, còn
10
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
thanh ghi Z có thể dùng làm con trỏ trỏ tới bộ nhớ chương trình. Các trình biên dịch C thường dùng
các thanh ghi con trỏ này để quản lí Data stack của chương trình C.
Chức năng con trỏ của các thanh ghi R26 –R31
2.5. Con trỏ ngăn xếp (SP)
Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit.
Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là $5E). Có nhiệm vụ
trỏ tới vùng nhớ trong RAM chứa ngăn xếp.
Thanh ghi con trỏ ngăn xếp
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp
trong khi con trỏ ngăn xếp giảm hai vị trí. Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push.
Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc
RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá
trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục
vụ. Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hoặc bằng 60H (0x60) vì 5FH trỏ lại là vùng các
thanh ghi.

3.CẤU TRÚC NGẮT CỦA Atmega8
3.1. KHÁI NIỆM VỀ NGẮT
Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình trạng sẵn xàng cho đổi
dữ liệu của mình.Ví dụ:Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết
thông qua cờ RXC,hợc khi nó đã truyền được một byte thì cờ TX được thiết lập…
11
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và lưu vị trí đang thực
hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương
trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn
xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngăt nó đang thực hiện. Trong trường hợp
mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt
các ngắt theo mức ưu tiên .Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai
trường hợp. Trường hớp ngắt này có mức ưu tiên cao hơn thì nó sẽ được phục vụ. Còn nó mà có
mức ưu tiên thấp hơn thì nó sẽ bị bỏ qua.
Bộ nhớ ngăn xếp là vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên. Để truy nhập vào SRAM
thông thường thì ta dùng con trỏ X,Y,Z và để truy nhập vào SRAM theo kiểu ngăn xếp thì ta dùng
con trỏ SP. Con trỏ này là một thanh ghi 16 bit và được truy nhập như hai thanh ghi 8 bit chung có
địa chỉ :SPL :0x3D/0x5D(IO/SRAM) và SPH:0x3E/0x5E.
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp
trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push.
Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc
RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá
trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục
vụ. Và giá trị ngăn xếp ít nhất cũng phải lớn hơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi.
3.2. TRÌNH PHỤC VỤ NGẮT VÀ BẢNG VECTOR NGẮT
Đối với mỗi ngắt thì phải có một trình phục vụ ngắt ISR (Interrupt Service Routine)
hay trình quản lý ngắt (Interrupt handler). Khi một ngắt đựợc gọi thì bộ vi điều khiển phục vụ ngắt.
Khi một ngắt đựợc gọi thì bộ vi điều khiển chạy trình phục vụ ngắt. Đối với mỗi ngắt thì có một vị

trí cố định trong bộ nhớ để giữ địa chỉ ISR của nó. Nhóm các vị trí nhớ được dành riêng để gửi các
địa chỉ của các ISR được gọi là bảng véc tơ ngắt.
Khi kích hoạt một ngắt bộ vi điều khiển đi qua các bước sau:
● Vi điều khiển kết thúc lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp (PC)
vào ngăn xếp.
● Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là bảng véc tơ ngắt nơi lưu
giữ địa chỉ của một trình phục vụ ngắt.
● Bộ vi điều khiển nhận địa chỉ ISR từ bảng véc tơ ngắt và nhảy tới đó. Nó bắt đầu
thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR là RETI (trở về từ ngắt).
● Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nơi nó đã bị ngắt. Trước hết
nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo hai byte trên đỉnh của ngăn
xếp vào PC. Sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó.
3.3. BẢNG VECTOR NGẮT
12
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
3.4. THỨ TỰ ƯU TIÊN NGẮT
Không như vi điều khiển họ 8051, ở đó thứ tự ưu tiên của các ngắt có thể thay đổi
được ( bằng cách lập trình ). Với vi điều khiển AVR thứ tự ưu tiên các ngắt là không thể
thay đổi và theo qui tắc: “ Một vec tơ ngắt có địa chỉ thấp hơn trong bộ nhớ chương
trình có mức độ ưu tiên cao hơn ”. Chẳn hạn ngắt ngoài 0 ( INT0 ) có mức độ ưu tiên cao hơn ngắt
ngoài 1 ( INT1 ).
Để cho phép một ngắt người dùng cần cho phép ngắt toàn cục ( set bit I trong thanh ghi SREG ) và
các bit điều khiển ngắt tương ứng. Khi một ngắt xảy ra và đang được phục vụ thì bit I trong thanh
ghi SREG bị xóa,
như thế khi có một ngắt khác xảy ra nó sẽ không được phục vụ, do đó để cho phép các ngắt trong
khi một ISR ( interrupt service routine ) khác đang thực thi, thì trong chương trình ISR phải có lệnh
SEI để set lại bit I trong SREG.
3.5. NGẮT TRONG NGẮT.
Khi AVR đang thực hiện một trình phục vụ ngắt thuộc một ngắt nào đó thì lại có

một ngắt khác được kích hoạt. Trong những trường hợp như vậy thì một ngắt có mức ưu tiên cao
hơn có thể ngắt một ngắt có mức ưu tiên thấp hơn. Lúc này ISR của ngắt có mức ưu tiên cao hơn sẽ
được thực thi(*) . Khi thực hiện xong ISR của ngắt có mức ưu tiên cao hơn thì nó mới quay lại phục
vụ tiếp ISR của ngắt có mức ưu tiên thấp hơn trước khi trở về chương trình chính. Đây gọi là ngắt
trong ngắt
13
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Chú ý:
- Giả định là khi một ISR nào đó đang thực thi thì xảy ra một yêu cầu ngắt từ một
ISR khác có mức ưu tiên thấp hơn thì ISR có mức ưu tiên thấp hơn không được phục vụ,
nhưng nó sẽ không bị bỏ qua luôn mà ở trạng thái chờ. Nghĩa là ngay sau khi ISR có
mức ưu tiên cao hơn thực thi xong thì đến lượt ISR có mức ưu tiên thấp hơn sẽ được
phục vụ.
- (*) : Điều này chỉ xảy ra khi trong code của ISR của ngắt có mức ưu tiên thấp
hơn có lệnh set bit I trong thanh ghi SREG (đó là lệnh SEI ).
Các ngắt ngoài
Các ngắt ngoài được kích hoạt bởi 2 chân INT0, và INT1. Chú ý rằng nếu đã kích hoạt, các
ngắt sẽ kích bằng (trigger even)nếu các chân INT0,INT1 được cấu hình là các ngõ ra
. Cái đặc điểm này cung cấp 1 con đường chung cho ngắt mềm.Các ngắt ngoài có thể được kích bởi
cạnh xuống hoặc lên hoặc mức thấp. Sự cài đặt này được chỉ định đặc biệt trong thanh ghi điều
khiển MCU – MCUCR.
MCU Control Register– MCUCR
Thanh ghi MCU chứa các bit điều khiển ngắt có ý thức kiểm soát và chức năng MCU chung .
• Bit 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0
External Interrupt 1 được kích hoạt bởi chân ngoài INT1 nếu SREG I-bit và mặt nạ ngắt
tương ứng trong GICR là set(1). Các mức độ và cạnh trong chân INT1 ngoài kích hoạt ngắt được
14
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm

định nghĩa trong bảng sau:
• Bit 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0
External Interrupt 0 được kích hoạt bởi chân ngoài INT0 nếu SREG I-bit và mặt nạ ngắt tương ứng
trong GICR là set(1). Các mức độ và cạnh trong chân INT0 ngoài kích hoạt ngắt được định nghĩa
trong bảng sau:
General Interrupt Control Register –GICR
• Bit 7 – INT1: External Interrupt Request 1 Enable
Khi bit INT1 set lên 1 và I-bit trong thanh ghi trạng thái SRGE là 1,ngắt chân ngoài được kích hoạt.
Ngắt tương ứng của External Interrupt Request 1 được thực thi từ INT0 Interrupt Vector.
• Bit 6 – INT0: External Interrupt Request 0 Enable
Khi bit INT0 set lên 1 và I-bit trong thanh ghi trạng thái SRGE là 1,ngắt chân ngoài được kích hoạt.
Ngắt tương ứng của External Interrupt Request 0 được thực thi từ INT0 Interrupt Vector.
General Interrupt Flag Register – GIFR
• Bit 7 – INTF1: External Interrupt Flag 1
Khi 1 sự kiện tại chân INT1 kích hoạt 1 yêu cầu ngắt INTF1 sẽ lên 1. Nếu I-bit trong SREG và bit
INT1 trongGICR là 1,MCU sẽ nhảy đến vector ngắt tương ứng. Cờ sẽ xóa khi thực hiện ngắt
thường xuyên. Đôi khi, cờ có thể được xóa nếu ta ghi trực tiếp 1 giá trị vào nó
• Bit 6 – INTF0: External Interrupt Flag 0
15
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Khi 1 sự kiện tại chân INT0 kích hoạt 1 yêu cầu ngắt INTF0 sẽ lên 1. Nếu I-bit trong SREG và bit
INT1 trongGICR là 1,MCU sẽ nhảy đến vector ngắt tương ứng. Cờ sẽ xóa khi thực hiện ngắt
thường xuyên. Đôi khi, cờ có thể được xóa nếu ta ghi trực tiếp 1 giá trị vào nó
4.CẤU TRÚC BỘ NHỚ
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.
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.
Bản đồ bộ nhớ chương trình
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.
16
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Bản đồ bộ nhớ dữ liệu SRAM
Các chế độ truy nhập địa chỉ của AVR
4.2.1 Địa chỉ thanh ghi đơn trực tiếp
Ở chế dộ này địa chỉ của thanh ghi được lấy trực tiếp từ vùng các thanh ghi (từ 0 tới 31).
Ví dụ:
COM Rd
17
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
NEG Rd
4.2.2 Địa chỉ hai thanh ghi trực tiếp
Đây là chế độ mà trong một lênh ALU truy nhập trực tiếp vào hai thanh ghi. Chế độ này hoàn
toàn tương tự như chế độ trên.
Ví dụ:
ADD Rd,Rr
4.2.3 Địa chỉ trực tiếp cổng vào ra
Trong đó địa chỉ của toán hạng được chứa trong 6 bit của một từ lệnh .n là địa chỉ của thanh ghi
nguồn hoặc đích.
Ví dụ:
Out DDRB, R16
In R12, DDRB

18
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
4.2.4 Trực tiếp dữ liệu
Địa chỉ của dữ liệu trong RAM được đưa trực tiếp vào lệnh.
Ví dụ:
LDS R12,0x0fff
STS 0x0fff,R11
4.2.5 Địa chỉ dữ liệu gián tiếp cùng với dịch chuyển
Ví dụ:
LDD R11,Y+10
Địa chỉ của toán hạng nguồn hoặc đích được trỏ bởi thanh ghi Y hoặc Z cộng thêm một chỉ số
nào đó
4.2.6 Địa chỉ gián tiếp dữ liệu:
Đây là cách mà CPU truy nhập tới dữ liệu trong RAM thông qua thanh ghi X,Y,Z địa chỉ của dữ
liệu được lưu trong thanh ghi này.
19
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Ví dụ:
ST X,R11
LD R13,Y
4.2.7 Địa chỉ dữ liệu gián tiếp cùng với tăng hoặc giảm con trỏ
Ví dụ:
LD R17,X+
LD -Y,R14
4.2.8 Địa chỉ của hằng số trong bộ nhớ chương trình.
Cách này chỉ sử dụng cho lệnh LPM
Địa chỉ của hằng số được lưu trong thanh ghi Z
20

SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Ví dụ:
LDI R30,0x07;dia chi truc tiep du lieu 0x07
LDI R31,0xFF
LPM ; đưa nội dung của ô nhớ có địa chỉ trong Z (0x07FF )về thanh ghi R0.
4.2.9 Địa chỉ bộ nhớ chương trình gián tiếp:
Địa chỉ đoạn mã được trỏ bởi thanh ghi Z sử dụng trong các lệnh IJMP và ICALL.
Ví dụ:
Label:
LDI R29,High(Label)
LDI R28,Low(Lebel)
ICALL
4.2.10 Địa chỉ tương dối của bộ nhớ chương trình
Cách định địa chỉ này dùng cho các lệnh RJMPvà RCALL khi đó CPU sẽ có giá trị PC+k+1.
21
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Ví dụ:
Label:
LDI R29,High(Label)
LDI R28,Low(Lebel)
RCALL Label
4.2.11 Các thanh ghi chức năng đặc biệt
Bao gồm các thanh ghi dữ liệu và các thanh ghi điều khiển các cổng vào ra. Chúng có thể truy
nhập được bằng 2 cách:
 Bằng địa chỉ trực tiếp
Ví dụ:
STR $3F,R11
hoặc: STR SREG.R11

 Hoặc có thể truy nhập gián tiếp chúng thông qua thanh ghi X, Y, Z.
Ví dụ :
LDI R28,0x00
LDI R27,0x5F
STD X,R11
Hai ví dụ này hoàn toàn tương đương, đều ghi dữ liệu vào thanh ghi SREG.
4.2.12 Status Register (SREG)
Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic.
22
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)
Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)
N: Negative Flag (Nếu kết quả của phép toán là âm)
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)
V, For signed tests (S=N XOR V) S: N
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung gian trong các
lệnh BLD,BST).
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt.Nếu bit này ở trang
thái logic 0 thì không có một ngắt nào được phục vụ.)
Registers and Operands (kí hiệu các thanh ghi và các toán hạng)
Rd: Thanh ghi đích (một trong 32 các thanh ghi chức năng chung)
Rr: Thanh ghi nguồn (Một trong 32 thanh ghi chức năng chung)
R: Kết quả sau khi lệnh chạy.
K: Hằng số dữ liệu
k: Hằng số địa chỉ (Có thể là một nhãn hoặc một địa chỉ cụ thể)
b: Bit trong thanh ghi chức năng chung hoặc trong thanh ghi chức năng đặc biệt (0-7).
s: Bit trong thanh ghi trạng thái (0-7).
X,Y,Z: Thanh ghi địa chỉ (Để trỏ tới địa chỉ trong RAM,hoặc Z có thể trỏ tới địa chỉ trong

ROM). (X=R27:R26, Y=R29:R28 and Z=R31:R30)
A: I/O location address
q:Chỉ số cho các địa chỉ trực tiếp (0-63).
4.2.13 Stack Pointer
23
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit.
Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là $5E). Có nhiệm vụ
trỏ tới vùng nhớ trong RAM chứa ngăn xếp.
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp
trong khi con trỏ ngăn xếp giảm hai vị trí. Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push.
Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc
RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá
trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục
vụ. Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hợc bằng 60H (0x60) vì 5FH trỏ lại là vùng các
thanh ghi.
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 :
4.3.1 Thanh Ghi EEAR ( EEARH và EEARL )
EEAR là thanh ghi 16 bit lưu giữ địa chỉ của các ô nhớ của EEPROM, thanh ghi EEAR được
kết hợp từ 2 thanh ghi 8 bit là EEARH và thanh ghi EEARL.
4.3.2 Thanh Ghi EEDR
Đây là thanh ghi dữ liệu của EEPROM, là nơi chứa dữ liệu ta định ghi vào hay lấy

ra từ EEPROM.
24
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
4.3.3 Thanh Ghi EECR
Đây là thanh ghi điều khiển EEPROM, ta chỉ sử dụng 4 bit đầu của thanh ghi này, 4
bit cuối là dự trữ, ta nên ghi 0 vào các bit dự trữ. Sau đây ta xét chức năng của từng bit.
• Bit 3 – EERIE: EEPROM Ready Interrupt Enable : Đây là bit cho phép
EEPROM ngắt CPU, khi bit này được set thành 1 và ngắt toàn cục được cho phép ( bằng cách set
bit I trong thanh ghi SREG lên 1 ) thì EEPROM sẽ tạo ra một ngắt với CPU khi bit EEWE được
xóa, điều này có nghĩa là khi các ngắt được cho phép ( bit I trong thanh ghi SREG và bit EERIE
trong thanh ghi EECR được set thành 1 ) và quá trình ghi vào ROM vừa xong thì sẽ tạo ra một ngắt
với CPU, chương trình sẽ nhảy tới véc tơ ngắt có địa chỉ là $002C để thực thi chương trình phục vụ
ngắt ( ISR ). Khi bit EERIE là 0 thì ngắt không
được cho phép.
• Bit 2 – EEMWE: EEPROM Master Write Enable : Khi bit EEMWE và bit
EEWE là 1 sẽ ra lệnh cho CPU ghi dữ liệu từ thanh ghi EEDR vào EEPROM, địa chỉ của ô nhớ cần
ghi trong EEPROM được lưu trong thanh ghi EEAR . Khi bit này là 0 thì không cho phép ghi vào
EEPROM. Bit EEMWE sẽ được xóa bởi phần cứng sau 4 chu kì máy.
• Bit 1 – EEWE: EEPROM Write Enable : Bit này vừa đóng vai trò như một bit
cờ, vừa là bit điều khiển việc ghi dữ liệu vào EEPROM. Ở vai trò của một bit điều khiển nếu bit
EEMWE đã được set lên 1 thì khi ta set bit EEWE lên 1 sẽ bắt đầu quá trình ghi dữ liệu vào
EEPROM. Trong suốt quá trình ghi dữ liệu vào EEPROM bit EEWE luôn giữ là 1. Ở vai trò của
một bit cờ khi quá trình ghi dữ liệu vào EEPROM hoàn tất, phần cứng sẽ tự động xóa bit này về 0.
Trước khi ghi dữ liệu vào EEPROM ta cần phải biết chắc là không có quá trình ghi EEPROM nào
khác đang xảy ra, để biết được điều này ta cần kiểm tra bit EEWE. Nếu bit EEWE là 1 tức là
EEPROM đang được ghi, ta phải chờ cho cho quá trình ghi vào EEPROM hoàn tất thì mới ghi tiếp.
Nếu bit EEWE là 0 tức là không có quá trình ghi EEPROM nào đang diễn ra, lúc này ta có thể bắt
đầu ghi dữ liệu vào EEPROM. Khi bit EEWE được set lên 1 ( bắt đầu ghi vào EEPROM ) CPU sẽ
tạm nghỉ trong 2 chu kì máy trước khi thực hiện lệnh kế tiếp.

• Bit 0 – EERE: EEPROM Read Enable : Khi bit này là 1, sẽ cho phép đọc dữ
liệu từ EEPROM, dữ liệu từ EEPROM có địa chỉ lưu trong thanh ghi EEAR lập tức được chuyển
vào thanh ghi EEDR. Khi bit EERE là 0 thì không cho phép đọc EEPROM. Trước khi đọc dữ liệu
từ EEPROM ta cần biết chắc là không diễn ra quá trình ghi EEPROM bằng cách kiểm tra bit
EEWE. Để ý là sau khi quá trình đọc EEPROM hoàn tất, bit EERE sẽ được tự động xoá bởi phần
cứng. Nếu EEPROM đang được ghi thì ta không thể đọc được dữ liệu từ EEPROM. Khi bắt đầu
quá trình đọc dữ liệu từ EEPROM, CPU sẽ tạm nghỉ 4 chu kì máy trước khi thực hiện lệnh kế tiếp.
Tóm lại để ghi vào EEPROM ta cần thực hiện các bước sau:
1. Chờ cho bit EEWE về 0.
2. Cấm tất cả các ngắt.
3. Ghi địa chỉ vào thanh ghi EEAR.
25
SVTH Dào Thanh Mai+Nguyễn Đức Đài

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×