Tải bản đầy đủ (.pdf) (99 trang)

nghiên cứu sử dụng chip avr atmega8 đo nhiệt độ và điều khiển

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.79 MB, 99 trang )

Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
1
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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


Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
2
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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




Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
3
SVTH Dào Thanh Mai+Nguyễn Đức Đài


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
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
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
4
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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.
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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
5
SVTH Dào Thanh Mai+Nguyễn Đức Đài
- 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 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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
6
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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
Đồ Á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
8
SVTH Dào Thanh Mai+Nguyễn Đức Đài

. Đặ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

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,
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
9
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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.

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
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
10
SVTH Dào Thanh Mai+Nguyễn Đức Đài

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 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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
11
SVTH Dào Thanh Mai+Nguyễn Đức Đài

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…
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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
12
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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


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(*) .
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
13
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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

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
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
14
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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 đị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
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Ớ
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
15
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
16
SVTH Dào Thanh Mai+Nguyễn Đức Đài

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
NEG Rd

4.2.2 Địa chỉ hai thanh ghi trực tiếp
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
17
SVTH Dào Thanh Mai+Nguyễn Đức Đài
Đâ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

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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
18
SVTH Dào Thanh Mai+Nguyễn Đức Đài


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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
19
SVTH Dào Thanh Mai+Nguyễn Đức Đài



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
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
20
SVTH Dào Thanh Mai+Nguyễn Đức Đài


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.
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
21
SVTH Dào Thanh Mai+Nguyễn Đức Đài


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.

C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
22
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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
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.

Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
23
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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.




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
Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
24
SVTH Dào Thanh Mai+Nguyễn Đức Đài
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.
4. Ghi dữ liệu mà ta cần ghi vào EEPROM vào thanh ghi EEDR.
5. Set bit EEMWE thành 1.
6. Set bit EEWE thành 1 .
7. Cho phép các ngắt trở lại.
Nếu một ngắt xảy ra giữa bước 5 và 6 sẽ làm hỏng quá trình ghi vào EEPROM bởi
vì bit EEMWE sau khi set lên 1 chỉ được giữ trong 4 chu kì máy, chương trình ngắt sẽ làm hết thời gian (
time out ) duy trì bit này ở mức 1. Một ngắt xuất hiện ở cuối bước 4 cũng có thể làm cho địa chỉ và dữ liệu
cần ghi vào EEPROM trở nên không chính xác nếu trong chương trình phục vụ ngắt có chỉnh sửa lại các
thanh ghi EEAR và EEDR. Đó là lí do ta cần cấm các ngắt trước khi thực hiện tiếp các bước 3, 4, 5, 6.
Quá trình ghi dữ liệu vào EEPROM cũng có thể không an toàn nếu điện thế nguồn
nuôi ( Vcc ) quá thấp.
Đọc dữ liệu từ EEPROM:
Việc đọc dữ liệu từ EEPROM đơn giản hơn ghi dữ liệu vào EEPROM, để đọc dữ
liệu từ EEPROM ta thực hiện các bước sau:
1. Chờ cho bit EEWE về 0.
2. Ghi địa chỉ vào thanh ghi EEAR.

3. Set bit EERE lên 1.


Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
25
SVTH Dào Thanh Mai+Nguyễn Đức Đài
5 .Các cổng vào ra (I/O)
Vi điều khiểnATmega8 có 23 đường vào ra chia làm 2 nhóm 8 bit,một nhóm 7 bit . Các đường vào ra này
có rất nhiều tính năng và có thể lập trình được. Ở đây ta sẽ xét chúng là các cổng vào ra số. Nếu xét trên mặt
này thì các cổng vào ra này là cổng vào ra hai chiều có thể định hướng theo từng bit. Và chứa cả điện trở pull-
up (có thể lập trình được). Mặc dù mỗi port có các đặc điểm riêng nhưng khi xét chúng là các cổng vào ra số
thì dường như điều khiển vào ra dữ liệu thì hoàn toàn như nhau. Chúng ta có thanh ghi và một địa chỉ cổng
đối với mỗi cổng, đó là : thanh ghi dữ liệu cổng ( PORTB, PORTC, PORTD), thanh ghi dữ liệu điều khiển
cổng (DDRB, DDRC, DDRD) và cuối cùng là địa chỉ chân vào của cổng (PINB, PINC, PIND).
5.1 Các chức năng của Port B
• XTAL2/TOSC2 – Port B, Bit 7
XTAL2: Chân 2 dao động tạo clock. Sử dụng chân clock thạch anh,hoặc dao động thạch anh tần số
thấp. Khi dùng chân làm dao động thì không thể làm chân nhập xuất được nữa.
TOSC2: Chân 2 là dao dộng Timer. Nếu PB7 được dùng làm clock pin, DDB7, PORTB7 and PINB7
sẽ sẽ hiều là mức 0
• XTAL1/TOSC1 – Port B, Bit 6
XTAL1: Chip clock Oscillator pin 1.
TOSC1: Timer Oscillator pin 1.
Nếu PB6 dùng làm chân clock, DDB6, PORTB6 and PINB6 sẽ hiều là mức 0.


SCK – Port B, Bit 5
SCK: Master Clock output, Slave Clock input pin for SPI channel. Khi SPI được kích hoạt là Slave, chân
này được cấu hình là 1 chân ngõ vào bất chấp sự điều chỉnh từ DDB5.
• MISO – Port B, Bit 4

MISO: Master Data input, Slave Data output pin for SPI channel. Khi SPI được kích hoạt là Master, chân
này được cấu hình là 1 chân ngõ vào bất chấp sự điều chỉnh từ DDB4.
• MOSI/OC2 – Port B, Bit 3

×