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

Thiết kế và chế tạo máy tính chuyên dụng trên cơ sở vi điều khiển atmega16

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 (1.92 MB, 67 trang )

MỤC LỤC
LỜI CẢM ƠN...........................................................Error! Bookmark not defined.

LỜI CAM ĐOAN ............................................. Error! Bookmark not defined.
MỞ ĐẦU............................................................................................................3
CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI.................................................................4
1.1 TÊN ĐỀ TÀI.....................................................................................................4
1.2 ĐẶC ĐIỂM CỦA CÔNG TY NATSTEELVINA .......................................4
1.3 DÂY CHUYỀN CÔNG NGHỆ CÁN THÉP CỦA NATSTEELVINA ...5
1.4 YÊU CẦU THỰC TẾ......................................................................................5
1.5 GIẢI QUYẾT VẤN ĐỀ ..................................................................................6
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT ................................................................7
2.1 GIỚI THIỆU VI ĐIỀU KHIỂN AVR ..........................................................7
2.2 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR .................................................8
2.2.1 Đặc điểm cơ bản của AVR ................................................................8
2.2.2 Kiến trúc của họ vi điều khiển AVR .................................................9
2.2.3 Tệp thanh ghi...................................................................................11
2.2.4 Khối số học logic ..............................................................................12
2.2.5 Truy nhập bộ nhớ và việc thực thi lệnh..........................................12
2..2.6 Bộ nhớ vào/ra..................................................................................13
2.2.7 Bộ nhớ EEPROM ............................................................................16
2.2.8 Cổng vào/ra......................................................................................19
2.2.9 Bộ nhớ SRAM..................................................................................19
2.2.10 Bộ định thời....................................................................................20
2.2.11 Bộ truyền nhận UART ..................................................................20
2.2.12 Cấu trúc ngắt .................................................................................22
2.2.13 Bộ so sánh analog...........................................................................24
2.2.14 Bộ định thời watchdog bên trong..................................................27
2.3 TẬP LỆNH DÙNG CHO AVR..........................................................28
2.4 CÁC CHẾ ĐỘ TRUY NHẬP ĐỊA CHỈ CỦA AVR .................................32
2.4.1 Địa chỉ thanh ghi đơn trực tiếp .......................................................32




2.4.2 Địa chỉ hai thanh ghi trực tiếp ........................................................32
2.4.3 Địa chỉ trực tiếp cổng vào ra ...........................................................32
2..4.4 Địa chỉ trực tiếp dữ liệu..................................................................32
2.4.5 Địa chỉ dữ liệu dán tiếp cùng với dịch chuyển: ..............................32
2.4.6 Địa chỉ gián tiếp dữ liệu: .................................................................32
2.4.7 Địa chỉ dữ liệu dán tiếp cùng với tăng hoặc giảm con trỏ..............33
2.4.8 Địa chỉ của hằng số trong bộ nhớ chương trình. ............................33
2.4.9 Địa chỉ bộ nhớ chương trình gián tiếp............................................33
2.5 GIAO DIỆN NỐI TIẾP THIẾT BỊ NGOẠI VI ........................................33
CHƯƠNG 3 THIẾT KẾ MÁY TÍNH CHUYÊN DỤNG ..............................39
3.1 MỤC ĐÍCH .....................................................................................................39
3.2 YÊU CẦU........................................................................................................39
3.3 THIẾT KẾ ......................................................................................................39
3.3.1 Thiết kế phần cứng ..........................................................................39
3.3.1.1 Khối trung tâm..........................................................................40
3.3.1.2 Khối hiển thị..............................................................................48
3.3.1.3 Khối bàn phím...........................................................................52
3.3.1.4 Khối giao tiếp máy tính.............................................................55
3.3.2 Thuật toán và chương trình ............................................................59
3.4 TẠO MẠCH SẢN PHẨM ............................................................................63
3.4.1 Vẽ mạch bằng phần mềm Orcad ....................................................63
3.4.2 Hàn linh kiện....................................................................................64
3.4.4 Sản phẩm .........................................................................................65
KẾT LUẬN................................................................................................66
TÀI LIỆU THAM KHẢO...............................................................................67

2



MỞ ĐẦU
Vi điều khiển ngày càng được ứng dụng rộng rãi trong nhiều lĩnh vực của
đời sống con người. Theo một nhận xét của công ty Sun Microsystems công bố
gần đây với một gia đình có mức sống trung bình ở cuối thập niên này sẽ chứa
khoảng 50 đến 100 vi điều khiển thực hiện các công việc như: điều khiển điện
thoại số và các lò vi sóng, máy video cassete, máy thu hình và điều khiển từ xa
cho máy thu hình, máy rửa bát đĩa, các hệ thống bảo vệ dùng cho gia
đình…Thậm chí có thể xem như con số này dùng để phản ánh thu nhập của một
gia đình trong các nước phát triển. Ta không thể phủ nhận là đã có một số lượng
khổng lồ các vi điều khiển và vi xử lý được sử dụng trong các đồ điện tử gia
dụng. Chính vì vây mà em đã chọn đề tài : “Thiết kế và chế tạo máy tính chuyên
dụng trên cơ sở vi điều khiển ATMEGA16” để làm đồ án tốt nghiệp. Em mong
rằng sau khi hoàn thành đồ án này em sẽ có được một số kiến thức cơ bản về vi
điều khiển cũng như thiết kế các mạch ứng dụng dùng vi điều khiển. Điều này sẽ
giúp ích rất nhiều cho công việc và sự học tập, nghiên cứu tiếp theo sau khi em ra
trường.
Được sự hướng dẫn tận tình của thầy Phạm Đức Long cộng với sự cố
gắng nghiên cứu của em đã thu được những kết quả khả quan, đáp ứng được
phần nào nhiệm vụ đặt ra. Mặc dù đã rất cố gắng, song do thời gian có hạn và
kiến thức còn non yếu nên đề tài này chắc chắn em còn nhiều thiếu sót. Chính vì
vậy em rất mong sự góp ý của các thầy cô và các bạn trong khoa để đề tài này có
thể mở rộng và phát triển thành một ứng dụng trong thực tế.
Em xin chân thành cảm ơn!

Thái nguyên tháng 05 năm 2008

3



CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI
1.1 TÊN ĐỀ TÀI
“THIẾT KẾ VÀ CHẾ TẠO MÁY TÍNH CHUYÊN DỤNG TRÊN CƠ SỞ VI ĐIỀU
KHIỂN ATMEGA16”

1.2 ĐẶC ĐIỂM CỦA CÔNG TY NATSTEELVINA
+ Công ty NatSteelVina là Công ty Liên doanh giữa tập đoàn NatSteel một trong các tập đoàn hàng đầu của Singapore và Tổng công ty Thép Việt Nam
(VSC).
+ Công ty được thành lập trên cơ sở giấy phép đầu tư số 711/GP ngày
2/11/1993. Nhà máy được đặt tại Thành phố Thái Nguyên - Tỉnh Thái Nguyên
Với công nghệ cán nóng liên tục hàng dọc có công suất cán 150.000tấn/năm,
cung cấp các sản phẩm thép xây dựng bao gồm thép thanh kích thước từ 9 - 32
mm, thép dây có kích thước từ 5 - 8mm. Sản phẩm của công ty đạt các tiêu
chuẩn thép cán nóng của Việt Nam và quốc tế. Chất lượng sản phẩm của công ty
được quản lý chặt chẽ theo tiêu chuẩn ISO 9001-2000.
+ Công ty NatSteelVina thừa kế thế mạnh cạnh tranh về sản lượng, kinh
nghiệm và công nghệ từ cả hai bên đối tác Liên doanh, là tâm điểm tập trung của
các chức năng hỗ trợ như nghiên cứu ứng dụng và phát triển các hệ thống thông
tin, khâu mua nguyên vật liệu, các khâu phục vụ và tiếp thị.
+ Lãnh đạo NatSteelVina là một đội ngũ giàu kinh nghiệm, có chuyên môn
được bổ nhiệm từ phía tập đoàn NatSteel cùng cán bộ công nhân viên nhiệt tình,
tận tụy được chuyển sang từ VSC. Đã đưa công ty phát triển và được đánh giá là
công ty có mức lợi nhuận trên vốn đầu tư cao nhất của VSC.
+ Với mối quan tâm hàng đầu là tiêu chuẩn và chất lượng sản phẩm công ty
không ngừng nâng cấp cải tiến nâng cao năng suất, chất lượng sản phẩm, tăng
cường chất lượng phục vụ tạo thế cạnh tranh trên thị trường.

4



1.3 DÂY CHUYỀN CÔNG NGHỆ CÁN THÉP CỦA NATSTEELVINA
+ Phôi được nhập khẩu với các tiêu chuẩn tương đương với tiêu chuẩn về
thép xây dựng cán nóng từ nước ngoài như : Malaysia, Brazin, Thổ Nhĩ Kỳ,
Trung Quốc, Nga… Qua quá trình kiểm tra theo tiêu chuẩn kỹ thuật về mặt chất
lượng và kích thước hình học mới đưa vào dây chuyền cán. Phôi đưa vào cán
phải đạt kích thước từ 100 X 100 mm đến 125 X 125mm (thường là 120
X120mm) có chiều dài từ 3000 đến 3750mm.
+ Phôi được cầu trục 15Tấn/3 No3 tập hợp lên sàn nạp phôi (Billet
Charging pusher ). Máy nạp phôi dùng hệ thống thuỷ lực được điều khiển bằng
tay chuyển phôi đến dàn con lăn chuyển phôi. Phôi được chuyển trên dàn con lăn
đến vị trí máy đẩy sau ( Back Pusher). Máy đẩy sau dùng 2 xi lanh thuỷ lực 
250mm áp lực đẩy trung bình 50tấn. Phôi sau khi được so đầu và có tín hiệu yêu
cầu đẩy phôi, vận hành thao tác điều khiển việc đẩy phôi vào lò. Phôi đạt yêu cầu
cho quá trình cán được đẩy ra khỏi lò bằng máy đẩy hông (Side pusher) qua cửa
hông lò. Máy đẩy hông dùng động cơ điện không đồng bộ kết hợp với hệ truyền
lực điều khiển cần tống qua bánh răng xích kéo. Tốc độ đẩy phôi ra được người
vận hành thao tác phù hợp với tốc độ cán. Đồng thời với việc đẩy phôi ra người
vận hành cho tín hiệu yêu cầu đẩy vào. Cứ tiếp tục như vậy mỗi khi phôi nung đủ
nhiệt độ và đẩy ra cán thì lại có phôi khác được đẩy vào lò nung thay thế.

1.4 YÊU CẦU THỰC TẾ
Để đáp ứng một nhu cầu của kho xuất nhập thép của nhà máy Nasteel Vina
tại Lưu xá – Thái Nguyên. Khi nhà máy cân thép để đưa vào lò cán, các công
nhân phải cân từng thanh thép một đến khi nào đạt được trọng lượng yêu cầu.
Việc này tốn rất nhiều thời gian và công sức. Với một máy tính có thể gộp các
phép tính lại và làm giảm bớt các công việc không cần thiết để cho ra kết quả là
độ dài tương đương của khối lượng thép cần cân.

5



1.5 GIẢI QUYẾT VẤN ĐỀ
Ta gọi trọng lượng và độ dài của một thanh thép được chọn làm phôi là
PPhôi(Kg) và LPhôi(m) thì ta có đại lượng µ:

µ

Pphôi
( Kg / m)
Lphôi



Đại lượng µ là tỉ số Kg/m của thanh sắt được chọn làm phôi. Khi nhà máy
cần một khối lượng thép là P1(Kg) thì khi đó thay vào việc công nhân phải cân
từng thanh thép một thì ta có thể tính ra độ dài xấp xỉ của khối thép có trọng
lượng P1 là L1.
P1: Khối lượng thép cần cân.
L1: Độ dài tương đương của khối thép.

L1 

P1
( m)
µ



Khi đó các công nhân có thể đo tổng độ dài của các thanh thép. Việc này sẽ
làm giảm bớt rất nhiều thời gian và công sức của các công nhân. Từ đó sẽ làm

tăng phần nào năng suất của nhà máy.
Công nhân chỉ phải nhập Pphôi và Lphôi một lần duy nhất mỗi lần bật máy
tính. Các công đoạn  tính µ, công đoạn  tính L1 máy sẽ tự động tính. Sau khi
nhập trọng lượng yêu cầu (P1) thì máy sẽ tự tính ra độ dài tương đương (L1) .

6


CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1 GIỚI THIỆU VI ĐIỀU KHIỂN AVR
+ Vi điều khiển AVR là sản phẩm của công ty Atmel( Hoa kỳ), đây là một
bộ xử lý có kiến trúc kiểu Harvard, nghĩa là đơn vị xử lý trung tâm có bộ nhớ
chương trình và một bộ nhớ dữ liệu tách biệt. Bộ vi điều khiển AVR có nhiều
khả năng để giảm năng lượng tiêu thụ. Đây là một trong những ưư điểm lớn của
họ vi điều khiển này.
+ Họ vi điều khiển AVR gồm nhiều bộ điều khiển với các tài nguyên khác
nhau về bộ phận ngoại vi, bộ nhớ chương trình và kiểu đóng vỏ. Sau đây là một
số vi điều khiển họ AVR và đặc điểm của chúng:

Bộ xử lý

Bộ

Bộ

Bộ

Số

Us


Fmax

nhớ

nhớ dữ nhớ dữ Cổng A/D

chân

(V)

(MHz)

CT

liệu

liệu

(Kbyte

flash

EE

I/O

AT90S1200

20


4-6

12

1

64

32

15

AT90S2313

20

4-6

10

2

128

128

15

AT90S2323


8

4-6

10

2

128

128

3

AT90S2343

10

4-6

10

2

128

128

5


AT90S4433

8

8

8

4

256

128

20

AT90S8515

40

4-6

8

8

512

512


32

AT90S8535

40

4-6

8

8

512

512

32

ATTINY15L

8

2.7-5.5

1.6

1

64


….

6

ATMega16L

40

4-5.5

8

16

512

ATMega163

40

4-5.5

8

16

512

1Kbyt

e
1Kbyt
e

Bảng 1. Một số vi điều khiển họ AVR

7

32

32

10 bit

6kênh

6kênh


2.2 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR
2.2.1 Đặc điểm cơ bản của AVR
+ Bộ nhớ flash được tích hợp ngay trên chíp có khả năng lập trình ngay
trên hệ thống được sử dụng làm bộ nhớ chương trình. Điều này có nghĩa là ta
không cần phải dùng đến các bộ nhớ EPROM hoặc ROM bên ngoài để chứa mã
chương trình. Hơn nữa bộ nhớ chương trình có thể nạp được chương trình trong
khi bộ vi xử lý vẫn ở nguyên trên bản mạch, không cần nhấc ra ngoài để nạp.
+ Các thanh ghi làm việc đa năng 32-X-8 . Một tập hợp bao gồm rất nhiều
thanh ghi có nghĩa là các biến có thể được lưư trữ bên trong CPU chứ không phải
lưu trữ các biến trong bộ nhớ, vì việc truy nhập lên bộ nhớ thường tốn nhiều thời
gian hơn. Như vậy chương trình sẽ chạy nhanh hơn.

+ Bộ nhớ dữ liệu ngay trên chip loại EEPROM và RAM có trong hầu hết
các thành viên của họ AVR. Đơn vị CPU có kiến trúc Harvard, còn các bộ nhớ
EEPROM và RAM được nhìn nhận như là bộ nhớ dữ liệu và được dùng để cất
giữ các hằng và biến.
+ Hoạt động với xung giữ nhịp có tần số từ 0 đến 10MHz. Hầu hết các
lệnh được thực hiện trong một chu kì đồng hồ làm cho tốc độ xử lý lớn hơn
khoảng 10 lần so với 8051 ở cùng tần số của đồng hồ giữ nhịp.
+ Có mạch đặt lại trạng thái mỗi khi cấp lại điện nguồn cho hệ thống.
+ Có bộ định thời ngay trên chíp và lập trình được với mạch chia tần số
tách biệt. Bộ định thời này được sử dụng cho các ứng dụng cần có sự phân định
thời gian của các sự kiện.
+ Có các nguồn ngắt bên trong và bên ngoài.
+ Có bộ định thời watchdog ngay trên chip và lập trình được với bộ dao
động độc lập. Bộ phận này được sử dụng để khôi phục lại trạng thái hoạt động
của hệ thống trong trường hợp xảy ra lỗi treo khi chạy phần mềm, ngoài ra còn
được sử dụng cho một vài ứng dụng khác.
+ Có các chế độ hoạt động như: SLEEP và POWER DOWN( nghỉ hay
giảm dòng tiêu thụ khi khồn cần thiết). Đặc điểm này cho phép tiết kiệm năng
lượng khi bộ xử lý nhàn rỗi.

8


+ Nhiều chíp có mạch dao động đồng hồ RC ngay trên chíp. Khi sử dụng
bộ dao động RC trên chíp số lượng các linh kiện phụ trợ sẽ giảm đi.
+ Hệ thống chíp đa dạng từ cỡ nhỏ đến lớn thuận tiện cho từn ứng dụng
riêng biệt
2.2.2 Kiến trúc của họ vi điều khiển AVR
+ Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ liệu và
bộ nhớ chương trình tách biệt nhau.

- Bộ nhớ chương trình là loại bộ nhớ flash. Dung lượng của bộ nhớ này
thay đổi khác nhau giữa các bộ xử lý trong cùng họ. Bộ nhớ này được truy nhập
theo từng chu kì đồng hồ, và một lệnh được nạp vào thanh ghi lệnh. Thanh ghi
lệnh nối với tệp thanh ghi bằng cách lựa chọn xem thanh ghi nào được ALU sử
dụng để thực thi lệnh.

Bộ nhớ chương trình

0000

16 bit

Bộ nhớ dữ liêụ
Tệp
thanh
ghi

0000

Các
Thanh
ghi I/O

$20

EPROM dữ liệu
0000

$1F
8 bit


$5F
SRAM
trong

$60

Địa chỉ cuối

8 bit

Địa chỉ cuối

Địa chỉ cuối

Hình 1. Bản đồ bộ nhớ của vi điều khiển AVR

9


- Lối ra của thanh ghi lệnh được giải mã bằng bộ giải mã lệnh để quyết
định chọn tín hiệu điều khiển nào sẽ đựơc kích hoạt để hoàn thành lệnh hiện tại.
Bộ nhớ chương trình, bên cạnh các lệnh lưu trữ cũng chứa các vectơ ngắt bắt đầu
ở địa chỉ $0000.
- Bộ nhớ dữ liệu có tất cả 5 thành phần khác nhau:
1. Một tệp thanh ghi(register file) với 32 thanh ghi có độ rộng 8 bit.
2. 64 thanh ghi vào/ra mỗi thanh 8 bit. Các thanh ghi này thực chất là một
phần của bộ nhớ SRAM trên chip và có thể được truy nhập hoặc như bộ nhớ
SRAM với các địa chỉ giữa $20 và $5F hoặc như các thanh ghi I/O với các địa
chỉ giữa $00 và $3F. Số lượng 64 thanh ghi này có thể thay đổi tuỳ theo từng loại

chip trong họ AVR.
3. Bộ nhớ SRAM bên trong: bộ nhớ này được sử dụng cho ngăn xếp cũng
như để lưu trữ các biến. Trong thời gian có ngắt và gọi đoạn chương trình, giá trị
hiện tại của bộ đếm chương trình được lưu trữ trong ngăn xếp. Kích thước của
ngăn xếp bị giới hạn bởi bộ nhớ SRAM trên chip. Vị trí của ngăn xếp được chỉ
thị bởi con trỏ ngăn xếp.
4. Bộ nhớ SRAM bên ngoài: Đặc tính này chỉ có ở các bộ xử lý cỡ lớn
trong họ vi điều khiển AVR.
5. EEPROM: bộ nhớ EEPROM có sẵn trên hầu hết các bộ vi điều khiển
AVR và được truy nhập theo một bản đồ bộ nhớ tách biệt. Địa chỉ bắt đầu của bộ
nhớ EEPROM luôn là $0000. Các bộ xử lý khác nhau có từ 64 byte đến 4 Kbyte
bộ nhớ EEPROM. Bộ nhớ EEPROM có thể ghi vào được khoảg 100000 lần.

10


2.2.3 Tệp thanh ghi

Hình 2. Tệp thanh ghi của vi điều khiển AVR
+ Tất cả các bộ điều khiển AVR đều có 32 thanh ghi đa năng. Một số
trong các thanh ghi này còn có các chức năng riêng, bổ sung. Các thanh ghi được
đặt tên từ R0 đến R31. Tệp thanh ghi được tách thành 2 phần, mỗi phần có 16
thanh ghi, đánh số từ R0 đến R15 và R16 đến R31. Tất cả các lệnh thao tác trên
các thanh ghi đều có thể truy nhập trực tiếp và truy nhập trong chu trình đơn đến
tất cả các thanh ghi. Nhưng có một ngoại lệ là các lệnh SBCI, SUBI, CPI, ANDI
và ORI cũng như lệnh WI, các lệnh này chỉ tác động đến các thanh ghi R16 đến
R31.

11



+ Các thanh ghi R0 và R26 đến R31 có các chức năng bổ sung. Thanh ghi
R0 được sử dụng trong các lệnh nạp bộ nhớ chương trình LPM (Load Program
Memory) , trong khi các thanh ghi R26 đến R31 được sử dụng làm các thanh ghi
con trỏ như được minh hoạ trên hình 2. Các thanh ghi con trỏ nay được sử dụng
trong nhiều lệnh gián tiếp dùng cho thanh ghi (register indirect instruction).

2.2.4 Khối số học logic
+ Khối số học lôgic (ALU) thực hiện các thao tác như thao tác bit; phép
tính số học và lôgic trên nội dung của các thanh ghi đã được chỉ định. Các thao
tác này được thực hiện trong một chu kỳ đông f hồ đơn lẻ. Mỗi một thao tác
ALU đều làm ảnh hưởng đến các cờ trong thanh ghi trạng thái (STATUS), tuỳ
thuộc vào lệnh.
2.2.5 Truy nhập bộ nhớ và việc thực thi lệnh
+ Bộ xử lý AVR được điều khiển bởi đồng hồ hệ thống, đồng hồ này có
thể ở bên ngoài hoặc, nếu có tồn tại và được phép, một đồng hồ RC bên trong có
thể được sử dụng. Đồng hồ hệ thống này không qua bất kỳ bộ chia nào và được
sử dụng trực tiếp cho tất cả các thao tác truy nhập bên trong bộ xử lý. Bộ xử lý có
một đường ống hai tầng, và lệnh tìm này/giải mã (fetch/ decode) được thực hiện
đồng thời với việc thực thi lệnh.
+ Cứ mỗi lần lệnh được tìm nạp (fetch), nếu đây là một lệnh liên quan đến
ALU, nó có thể được tực thi bởi khối ALU như được minh hoạ trên hình 3-5 cho
một chu trình đơn lẻ.
+ Mặt khác, việc truy nhập bộ nhớ SRAM chiếm mất 2 chu kỳ, như được
minh hoạ trên hình 3-6. Nguyên nhân là việc truy nhập bộ nhớ SRAM sử dụng
một thanh ghi con trỏ dùng cho địa chỉ bộ nhớ SRAM. Thanh ghi con trỏ này chỉ
là một trong các thanh ghi con trỏ (các cặp thanh ghi X, Y , hoặc Z) có trên chip.
Chu trình đồng hồ thứ nhất được cần đến để truy nhập tệp thanh ghi và để thao
tác trên thanh ghi con trỏ. Ở thời điểm kết thúc của chu kỳ đồng hồ thứ nhất, khối
ALU thực hiện phép tính này, và sau đó địa chỉ này (hoặc đọc ra từ đó vào thanh

ghi đích).

12


2..2.6 Bộ nhớ vào/ra
+ Bộ nhớ vào ra là “xa lộ” đến với tất cả cá bộ phận ngoại vi của bộ xử lý
AVR, Nó được thiết kế giống như SRAM hoặc như các thanh ghi I/O. Nếu giống
như SRAM các địa chỉ ở bên kia $20 cho đến $5F, còn nếu giống như các thanh
ghi I/O thì các địa chỉ bắt đầu từ $00 đến $3F.
+ Thanh ghi trạng thái(SREG): chứa 8 bit cờ, đóng vai trò báo hiệu trạng
thái hiện tại của bộ vi xử lý. Tất cả các bit của nó được xoá(ở mức 0) khi reset và
có thể được đọc,ghi bởi chương trình. Địa chỉ I/O của thanh ghi trạng thái là $3F,
địa chỉ bộ nhớ là $5F.
Bit

Chức năng

7(I)

Cho phép ngắt toàn cục nếu được thiết lập.

6(T)

Lưu trữ các bit từ 1 thanh ghi vào 1 thanh ghi khác.

5(H)

Chỉ báo cho thấy sự mang sang(nhớ) một nửa trong một số
lệnh


4(S)

Cờ dấu: là kết quả phép EX-OR giữa cờ phủ định và cờ tràn.

3(V)

Cờ tràn lấy bù nhị phân

2(N)

Cờ phủ định

1(Z)

Cờ zero chỉ báo một kết quả bằng 0 sau khi thực hiện phép tính

0(C)

Cờ mang sang, báo hiệu sự mang sang trong phép tính .

Bảng 2 Các bit của thanh ghi SREG
Thanh ghi trạng thái không được lưu trữ bằng máy trong thời gian diễn ra
một thao tác ngắt. Lệnh trong một đoạn chương trình ngắt có thể sửa đổi bit cờ
trạng thái, và vì thế chương trình của người dùng phải lưu trữ và khôi phục thanh
ghi trạng thái trong thời gian có một ngắt.
+ Thanh ghi con trỏ ngăn xếp(SP): có độ rộng bằng 1 byte đối với các bộ
xử lý có đến 256 byte bộ nhớ SRAM và bằng 2 byte đối với các bộ xử lý có bộ
nhớ SRAM lớn hơn. Thanh ghi này được dùng để chỉ đến vùng trong bộ nhớ
SRAM ở đỉnh ngăn xếp, Ngăn xếp được sử để lưu trữ địa chỉ mà bộ xử lý trả lại

trong thời gian một ngắt và gọi thủ tục. Bởi vì SP được khởi tạo về $00(hoặc

13


$0000 với một SP 2 byte) khi reset nên chương trình người dùng cần phải khởi
tạo SP cho thích hợp, bởi địa chỉ bắt đầu của bộ nhớ SRAM không phải là $00
mà là $06. Ngăn xếp sắp xếp theo trình tự từ trễnuống dưới trong địa chỉ bộ nhớ,
nghĩa là việc đẩy một giá trị lên trên trong ngăn xếp sẽ làm cho SP giảm và
ngược lại.
+ Thanh ghi che ngắt chung(GISMK-General Interrupt Mask Register):
thanh ghi này được sử dụng để cho phép cấm các ngắt ngoài riêng biệt, cụ thể
bằng cách đặt và đặt lại bit tương ứng có liên quan. Tuy nhiên ngắt đang cần
được phục vụ, bit I trên thanh ghi trạng thái cũng phải đặt thành “1”.
+ Thanh ghi cờ ngắt chung GIFR(General Interrupt Flag Register): các bit
trong thanh ghi này chỉ báo cho thấy nếu một ngắt đã xuất hiện. Nếu một ngắt
ngoài xuất hiện thì cờ INT tương ứng trong GIFR được đặt thành “1”. Nếu như
ngắt đựơc phục vụ (bit I và bit INT tương ứng trong thanh ghi GIMSK là “1” )
thì cờ được đặt lại. Ngoài ra nó cũng có thể được đặt lại bằng cách ghi giá trị
lôgic “1” vào nó.
+ Thanh ghi điều khiển toàn bộ vi điều khiển MCUCR: các bit trong thanh
ghi này cho phép điều khiển toàn bộ vi điều khiển. chức năng của thanh ghi này
bao gồm việc điều khiển để cho phép/cấm truy nhập bộ nhớ SRAM ngoài, chế độ
ngủ và điều khiển độ nhạy cảm ngắt ngoài.
Bit

Chức năng

7-SRE


Cho phép RAM ngoài

6-SRW

Bit trạng thái chờ truy nhập SRAM ngoài

5-SE

Cho phép ngủ

4-SM

Chế độ ngủ

3,2-ISC11,

Bit điều khiển nhạy cảm ngắt dùng cho INT1

ISC10
1,0-ISC01,

Bit điều khiển nhạy cảm ngắt dùng cho INT0

ISC00

Bảng 3 Các bit của thanh ghi MCUCR

14



CS02

CS01

Mô tả

0

0

Mức LOW trên chân INT tạo ra ngắt

0

0

Dự trữ

1

1

Sườn dương trên chân INT1 tạo ra ngắt

1

1

Sườn âm trên chân INT1 tạo ra ngắt


Bảng 4 Điều khiển độ nhạy cảm ngắt 1

CS02

CS01 Mô tả

0

0

Mức LOW trên chân INT0 tạo ra ngắt

0

0

Dự trữ

1

1

Sườn dương trên chân INT0 tạo ra ngắt

1

1

Sườn âm trên chân INT0 tạo ra ngắt


Bảng 5 Điều khiển độ nhạy cảm ngắt INT0
+ Thanh ghi trạng thái bộ xử lý MCUSR: cung cấp thông tin về nguồn của
tín hiệu reset.
+ Thanh ghi điều khiển TIMER/COUNTER0(TCCR0): được sử dụng để
điều khiển các thao tác của bộ xử lý Timer/Coưnter. Đây là một bộ định thời đơn
giản dung để đếm tiến từ giá trị đếm đã được nạp vào. Bộ đếm được làm tăng
thêm một giá trị mỗi khi có thêm một tín hiệu đồng hồ ở lối vào của nó. Tín hiệu
đồng hồ có thể được lựa chọn từ một trong 7 nguồn tương ứng với 7 bit của
thanh ghi, bit thứ 8 cho phép bộ Timer/Counter đựơc ngừng hoạt động.
+ Thanh ghi TIMER/COUNTER0 (TCNT0): đây là thanh ghi
Timer/Counter hiện thời. Một giá trị đã nạp vào thanh ghi này được sử dụng làm
giá trị xuất phát, và bộ định thời làm tăng giá trị này theo từng tín hiệu xung nhịp
của nó nếu bộ Counter/Timer được cho phép qua thanh ghi TCCR0. Sau khi bộ
Timer/Counter0 bị tràn được đặt lại về $00 và tiếp tục đếm tiến theo từng tín hiệu
xung nhịp.

15


+ Các thanh ghi TIMER/COUNTER1 INPUT CAPTURE: là thanh ghi 16
bit chỉ để đọc. Khi sườn dương hoặc sườn âm của tín hiệu ở chân input capture,
ICP, được phát hiện giá trị hiện thời của bộ Timer/Counter1 được truyền đến
thanh ghi Input Capture, ICR1. Đồng thời cờ input capture ICF1, được đặt thành
“1”. Vì thanh ghi input capture là thanh ghi 16 bit nên một thanh ghi tạm thời
TEMP được sử dụng để khi ICR1 được đọc có thể đảm bảo rằng cả hai byte được
đọc đồng thời.
+ Thanh ghi điều khiển bộ định thời Watchdog.
+ Thanh ghi địachỉ bộ nhớ EEPROM(EEAR): có đọ rộng 2 byte dùng cho
các bộ xử lý có bộ nhớ EEPROM lớn hơn 256 byte và có độ rộng một byte đối
với các bộ xử lý còn lại.

+ Thanh ghi dữ liệu bộ nhớ EEPROM(EEDR): sử dụng để đọc/ghi dữ liệu
từ/vào bộ nhớ EEPROM. Bộ nhớ EEPROM có độ rộng 8 bit.
+ Thanh ghi điều khiển EEPROM(EECR): thanh ghi EECR được sử dụng
để điều khiển các thao tác đọc ghi dữ liệu vào bộ nhớ EEPROM.
- Bit 2-EEMWE: ở mức tích cực cho phép ghi dữ liệu trên thanh ghi
EEDR vào bộ nhớ EEPROM.
- Bit 1-EEWE: ở mức tích cực cho ghi dữ liệu từ EEDR vào bộ nhớ
EEPROM ở địa chỉ đựơc chỉ định bởi thanh ghi địa chỉ bộ nhớ EEPROM.
2.2.7 Bộ nhớ EEPROM
+ Tất cả các bộ vi điều khiển AVR đều có một bộ nhớ EEPROM trên
chip. Dung lượng bộ nhớ EEPROM thay đổi từ 64 byte trên bộ điều khiển
AT90S1200, Tiny10/12 đến 4 Kbyte trên Mega103. Các thanh ghi dùng để truy
nhập EEPROM gồm: thanh ghi địa chỉ EEPROM(EEAR), thanh ghi dữ liệu
EEPROM(EEDR), và thanh ghi điều khiển EEPROM(EECR).
+ Bộ nhớ EEPROM là một bộ nhớ không bị mất dữ liệu khi nguồn điện
cung cấp bị ngắt. Dữ liệu trong nó có thể được ghi và xóa bằng điện và vì vậy
việc ghi và đọc bộ nhớ này VĐK có thể làm trực tiếp. Bộ nhớ này được xem như
một bộ nhớ dữ liệu nhưng chúng không được truy nhập như một bộ nhớ SRAM
mà được truy nhập như một thiết bị ngoại vi. Thời gian truy cập để viết mất

16


khoảng 2.5 đến 4 ms, và phụ thuộc vào nguồn điện cung cấp cho vi điều khiển
(Vcc). Để điều khiển vào ra dữ liệu với EEPROM chúng ta có thể sử dụng 3
thanh ghi đó là:EEPROM address ,EEDR và EECR.
+ EEPROM address : đây là thanh ghi 16 bit lưu địa chỉ của các ô nhớ của
EEPROM (từ 0 đến 511). Nó được truy nhập như hai thanh ghi 8 bit độc lập
EEARH và EEARL.
+ EECR(EEPROM control register): đây là thanh ghi điều khiển

EEPROM, là thanh ghi 8 bit trong đó có 4 bit được định nghĩa để điều khiển hoạt
động ghi đọc dữ liệu ở bộ nhớ EEPROM.
- Bit EERIE(EEPROM ready interrupt enable): bit này cho phép ngắt hoạt
động (thông báo cho CPU biết khả năng chao đổi dữ liệu với CPU). Nếu bit này
được set 1 thì nó được phép hoạt động. Và ngược lại.
- Bit EEMWE(EEPROM master write enable): bit này khi được set 1 sẽ
ghi dữ liệu từ thanh ghi EEDR vào ô nhớ có địa chỉ lưu trong thanh ghi EEAR
của EEPROM. Bit này được set bằng phần mềm và được xóa bằng phần cứng
sau bốn chu khi máy.
- Bit EEWE(EEPROM write enable ): đây là bit cho phép ghi dữ liệu vào
EEPROM để tránh trường hợp ta ghi dữ liệu khi mà một dữ liệu trước đó chưa
được ghi xong. Nó được báo bằng phần cứng khi mà dữ liệu đã được ghi xong
vào EEPROM.
-Bit EERE ( EEPROM read enable ): bit này ra lệnh cho CPU đọc dữ liệu
từ bộ nhớ này ra thanh ghi dữ liệu với địa chỉ đã lưu bên trong thanh ghi địa chỉ.
Và nó được xóa bằng phần cứng khi mà dữ liệu đã được đọc ra thanh ghi dữ liệu.
+ Vậy để ghi dữ liệu vào EEPROM ta làm các bước sau:
- Bước 1: chờ đợi bit EEWE đã bị xóa chưa ?
- Bước 2: Ghi dữ liệu mới vào thanh ghi dữ liệu (EEDR)
- Bước 3: Set bit EEWE rồi đến bit EEMWE để bắt đầu ghi dữ liệu.
Chý ý: Nếu như dang ghi dữ liệu ở EEPROM mà xuất hiện ngắt thì dữ liệu đó sẽ
không được ghi một cách an toàn vào EEPOM.

17


+ Sau đây là một ví dụ: ghi 1 byte vào bộ nhớ EEPROM địa chỉ lưu trong
thanh ghi Y ,dữ liệu trong R17.
------------------------------------------------------------------------------------------Write:
Sbic EECR,1


;nhảy qua nếu EEWE bị xóa.

Rjmp Write
Write_start:
Out

EEAL,YL

Out

EEAH,YH

Out

EEDR,R17

Cli

;Nap dữ liệu vào thanh ghi dữ liệu.
;cam tat ca ca ngat.

Sbi

EECR,1

Sbi

EECR,2


Sei

;cho phép ngắt.

+ Để đọc dữ liệu vào EEPROM thì đơn giản hơn.
- Bước 1: kiểm tra bit EEWE nếu như có quá trình ghi EEPROM thì chờ
đợi.
- Bước 2: Đưa địa chỉ cần đọc vào thanh ghi địa chỉ EEAR
- Bước 3: Set bit EERE lên 1 bắt đầu quá trình đọc.
- Bước 4: Chờ đợi đoc xong bằng cách kiểm tra bit EERE nếu đã được
xóa thì có dữ liệu ở thanh ghi dữ liệu. Sau đó đọc dữ liệu.
+ Ví dụ: Đọc một byte dữ liệu từ trong EEPROM bắt từ địa chỉ lưu
trongthanh ghi Z và dữ liệu đọc ra thanh ghi R17 :
------------------------------------------------------------------------------------------READ:
Sbic EECR,1

;kiểm tra xem có ghi không?

Rjmp READ
READ_START:
Out

;Bắt đầu đọc.

EEAL,ZL

18


Out


EEAH,ZH

Sbi

EECR,0

Here:
Sbic EECR,0

;kiểm tra EERE đã bị xóa hay chưa?

Rjmp here
In

R17, EEDR

;Hết.
-------------------------------------------------------------------------------------------

+ EEDR(EEPROM data register): đây là thanh ghi 8 bit lưu dữ liệu lấy ra
từ EEPROM hoặc dữ liệu định ghi vào EEPROM.

2.2.8 Cổng vào/ra
+ Tất cả các bộ điều khiển AVR đều có một lượng lớn các cổng vào/ra
nằm trong khoảng từ 3 bit trên AT90S2323 đến 48 bit trên Mega103. Tất cả các
cổng lối ra của các bộ điều khiển AVR có thể chịu dòng điện đến 20 mA nên rất
thích hợp đối với việc điều khiển trực tiếp các LED vì không cần đến mạch bổ
sung.
+ Các cổng vào ra đều có 3 địa chỉ vào ra đi kèm với chúng. Ba địa chỉ

vào/ra được cần đến để đặt cấu hình cho các bit riêng biệt thành lối vào hoặc lối
ra, địa chỉ khác cần đến để xuất ra dữ liệu tới các bit đó được đặt cấu hình thành
lối ra, và địa chỉ thứ 3 được cần đến để đọc dữ liệu từ các chân đó được cấu hình
thành lối vào.
2.2.9 Bộ nhớ SRAM
+ Bộ nhớ SRAM có trên hầu hết các bộ xử lý có giá thành cao trong họ
AVR. Dung lượng của bộ nhớ SRAM thay đổi từ 128 byte đến 4 Kbyte. Bộ nhớ
SRAM được truy nhập bằng cách sử dụng nhiều lệnh truy nhập dữ liệu trực tiếp
hoặc gián tiếp. Bộ nhớ này cũng đựơc sử dụng cho ngăn xếp. thời gian truy nhập
bộ hớ SRAM bằng 2 chu kì đồng hồ.

19


+ Trên các bộ điều khiển AVR cỡ lớn đều có khả năng kết nối với bộ nhớ
SRAM ở bên ngoài. Để cho phép truy nhập bộ nhớ SRAM ngoài trên PORTA và
PORTC của các bộ điều khiển cũng như tín hiệu ALE dùng cho việc phân kênh
địa chỉ/dữ liệu, bit SRE(bit 7) trong thanh ghi MCUCR được đặt thành “1”.

D[7:0]

Port A
ALE

D

Q
A[7:0]

G


AVR
SRAM
Port C
A[15:8]
RD
RD
WR
WR

Hình 3 . Kết nối bộ nhớ SRAM ngoài với bộ điều khiển AVR

2.2.10 Bộ định thời
+ Bộ định thời trong vi điều khiển AVR có chức năng giống như một bộ
định thời hoặc một bộ đếm. Giống như một bộ định thời tín hiệu giữ nhịp bên
trong hoặc một dẫn xuất của tín hiệu giữ nhịp đó được sử dụng để giữ nhịp bộ
định thời, trong khi giống như một bộ đếm, một tín hiệu từ bên ngoài ở một chân
của một cổng được sử dụng để giữ nhịp bộ định thời/bộ đếm.
2.2.11 Bộ truyền nhận UART
+ Việc truyền dữ liệu được khởi tạo bằng cách ghi dữ liệu vào thanh ghi
dữ liệu I/O UART, ký hiệu là UDR. Dữ liệu được truyền từ UDR đến thanh ghi
dịch truyền khi:

20


- Một ký tự mới đã được ghi vào UDR sau khi bit stop từ ký tự trước đó
đã được chuyển ra. Thanh ghi dịch chuyển ra được nạp ngay lập tức.
- Một ký tự mới được ghi vào UDR trước khi bit stop từ ký tự trước đã
được dịch đi. Thanh ghi dịch được nạp khi bit stop của ký tự đang được truyền đã

được dịch chuyển ra.
+ Nếu thanh ghi dịch bộ truyền 10 bit đang trống thì dữ liệu được truyền
từ UDR đến thanh ghi dịch. Ở thời điểm này bit UDRE(UART Data Register
Empty) trong thanh ghi trạng thái UART, USR được đặt. Khi bit này được đặt
thành “1”, bộ UART đang sẵn sàng nhận ký tự tiếp theo. Vào cùng thời điểm khi
dữ liệu được truyền từ UDR đến thanh ghi dịch bộ truyền 10 bit, bit 0 của thanh
ghi dịch bị xoá(start bit) và bit 9 hoặc 10 được đặt(stop bit).
+ Nếu như một từ dữ liệu 9 bit được lựa chọn(bit CHR9 trong thanh ghi
điều khiển UART, UCR được đặt), bit TXB8 trong thanh ghi UCR được truyền
vào bit 9 trong thanh ghi bộ dịch truyền. Theo nhịp của đồng hồ tốc độ buad sẽ
diễn ra cuộc truyền đến thanh ghi dịch, bit start bị dịch chuyển ra chân TXD. Sau
đó kế tiếp là dữ liệu, LSB trước tiên. Khi bit stop đã được dịch chuyển ra, thanh
ghi dịch được nạp nếu bất kỳ dữ liệu nào đã được ghi vào thanh ghi UDR trong
khoảng thời gian truyền. Trong thời gian nạp, bit UDRE được đặt thành “1”. Nếu
như không có dữ liệu mới tronh thanh ghi UDR để truyền đi khi bit stop được
chuyển ra, cờ UDRE sẽ giữ nguyên trạng thái được đặt cho đến khi thanh ghi
UDR được ghi một lần nữa.
+ Khi không có dữ liệu mới cần được ghi, và bit stop đã có mặt ở trên
TXD đối với một chiều dài bit, cờ complete, TXC, trong thanh ghi USR được đặt
thành “1”. Bit TXEN trên thanh ghi VCR cho phép bộ truyền UART khi đặt
thành “1”. Khi bit này bị xoá thành “0” thì chân PDI có thể được sử dụng cho
thao tác I/O chung. Khi đặt thành “1” bộ truyền trong UART sẽ được nối với
PD1, chân này bị bắt buộc trở thành một chân lối ra không đếm xỉa gì đến việc
đặt của bit 1 trong DDRD.

21


2.2.12 Cấu trúc ngắt
+ Ngắt là một cơ cấu điều khiển dòng lệnh, cơ cấu này đựơc thiết kế trên

hầu hết các bộ điều khiển. Trong quá trình giao tiếp của hệ thống bộ xử lý với thế
giới bên ngoài, nhiều sự việc xảy ra theo cách không đồng bộ, chắng hạn người
dùng có thể nhấn một công tắc để thực hiện một công việc nào đó, trong khi một
byte dữ liệu đã đi đến cổng nối tiếp. Điều này gây khó khăn cho hoạt động của
bộ xử lý khi mà nó phải kiểm tra tất cả các thiết bị để giám sát sự di chuyển của
dữ liệu. Ngược lại mọi việc sẽ tốt hơn nếu các thiết bị này có thể loan báo sự đến
nơi của dữ liệu. Đây là tất cả những gì mà cơ chế ngắt phải thực hiện. Thiết bị
ngoại vi sẽ ngắt việc thực thi của chương trình chính, và bộ xử lý tạm ngưng việc
thực thi chương trình bình thường để thẩm tra nguồn ngát và để thực hiện những
thao tác đáp ứng cần thiết. Sau khi hoàn thành những thao tác đáp ứng cầm thiết
việc thực thi chương trình bị ngắt lại tiếp tục. Chương trình ngắt chỉ đơn giản
giống hệt một cương trình con bình thường ngoại trừ một đặc điểm là việc thực
thi của chương trình này không bị bộ xử lý chặn trước là sẽ xuất hiện ở một thời
điểm cụ thể nào.
+ Thứ tự các sự việc xuất hiện khi xảy ra ngắt:
1. Thiết bị ngoại vi ngắt bộ xử lý.
2. Thực hiện nốt lệnh hiện tại.
3. Địa chỉ lệnh tiếp theo được lưu trữ vào ngăn xếp.
4. Địa chỉ của chương trình con phục vụ ngắt được nạp vào bộ đếm
chương trình.
5. Bộ xử lý thực thi chương trình con phục vụ ngắt.
6. Trở lại chương trình bị ngắt bằng lệnh RETI.
7. Bộ xử lý nạp bộ đếm chương trình với giá trị được lưu trữ trên ngăn xếp
và việc thực thi chương trình bình thường lại tiếp tục.
+ Bởi vì ngắt có thể xuất hiện bất cứ lúc nào nên trạng thái bộ xử lý cần
phải được lưu trữ sao cho việc thực thi chương trình bình thường có thể tiếp tục
ngay sau khi đoạn chương trình ISR được hoàn tất. Trạng thái của bộ xử lý được
chứa trong thanh ghi SREG. Thanh ghi ISR cần phải lưu trữ SREG trước khi

22



thực thi bất kỳ một lệnh nào khác, và trước khi trở lại với việc điều khiển chương
trình chính cần phải khôi phục lại thanh ghi SREG. Yêu cầu này có thể được thực
hiện theo hai cách: hoặc là SREG được sao chép sang một thanh ghi khác ký hiệu
là RI, thanhghi này cần phải không được phục vụ cho bất kỳ một mục đích nào
khác và trước khi ISR thực thi lệnh RETI, RI được sao chép ngược trở lại SREG.
Một cách khác để lưu trữ SREG là lưu nó trên ngăn xếp(bằng cách dùng lệnh
PUSH SREG) và sau đó trước khi thực hiện lệnh RETI, giá trị SREG được sao
chép ngược trở lại từ ngăn xếp(lệnh POP SREG). Phương pháp này chỉ có thể áp
dụng cho những bộ xử lý có ngăn xếp tổ chức bằng phần mềm.
+ Cũng có khả năng ngắt một ISR néu một ngắt khác xuất hiện và cờ ngắt
toàn cục đã được đặt thành “1” bên trong ISR dùng cho ngắt 1(bằng cách sử
dụng lệnh SEI). Trong trường hợp này, ngắt ISR1 bị ngắt và ISR khác, ISR2
thực thi. Việc thực thi ISR1 lại tiếp tục sau khi ISR2 kết thúc, và sau khi thực thi
xong ISR1 chương trình chính lại tiếp tục.
+ Bình thường sau khi một ngắt xuất hiện và đang đựoc phục vụ bởi thanh
ghi ISR tương ứng, các ngắt toàn cục bị cấm(tương đương việc thực hiện lênh
CLI), tuy nhiên vẫn có khả năng cho phép các ngắt trong khi một ISR đang thực
thi bằng việc thực hiện lệnh SEI trong ISR.. Nếu như các ngắt khác xuất hiện
trong khoảng thời gian khi một ISR đang hoạt động thì nó sẽ được thực hiện
bằng việc ngắt đoạn chương trình ISR ban đầu.
+ Tính ưu tiên của ngắt: đựoc quy định bởi cách gán các vectơ ngắt. Một
vectơ ngắt ở địa chỉ thấp hơn trong bộ nhớ chương trình có mức ưu tiên cao hơn.
Mức độ ưu tiên của ngắt dùng để quyết định xem ngắt nào được phục vụ trước
nếu như có nhiều ngắt đang chờ xử lý ở cùng một thời điểm.
+ Một điều rất đáng quan tâm khi sử dụng các ngắt là bộ vi xử lý có thể
đáp ứng ngắt nhanh đến mức nào. Câu trả lời phụ thuộc rất nhiều vào kién trúc
của bộ vi xử lý. Đối với các bộ điều khiển AVR, việc thực thi ngắt đáp ứng đối
với tất cả các ngắt AVR đã được cho phép ít nhất là 4 chu kỳ đồng hồ. Bốn chu

kỳ đồng hồ sau khi cờ ngắt đã được đặt, chương trình vectơ địa chỉ dùng cho
đoạn chương trình xử lý ngắt hiện tại được thực thi. Trong khoảng thời gian 4

23


chu kỳ máy bộ đếm chương trình(2 byte) được đẩy lên ngăn xếp, và con trỏ ngăn
xếp thì giảm đi 2. Véctơ thường là một lệnh nhảy tương đối đến chương trình
ngắt, và thao tác nhảy này chiếm 2 chu kỳ đồng hồ. Nếu như một ngắt xuất hiện
trong khi đang thực thi một lệnh chiếm hiều chu kỳ, lệnh này được hoàn thành
trước khi ngắt được phục vụ. Việc quay trở lại từ một chương trình xử lý ngắt
chiếm 4 chu kỳ đồng hồ. Trong bốn chu kỳ đồng hồ này, bộ đếm chương trình (2
byte) được đẩy trở lại ngăn xếp, con trỏ ngăn xếp đựoc tăng thêm 2 và cờ I trong
SREG đựơc đặt. Khi vi điều khiển AVR thoát ra khỏi một ngắt nó sẽ luôn trở về
với chương trình chính và chấp hành lệnh kế tiếp trước khi có ngắt mới được xử
lý.

2.2.13 Bộ so sánh analog
+ Bộ so sánh analog so sánh các giá trị điện áp ở lối vào cụ thể là ở lối vào
AIN0(AC+) và AIN1(AC-) với nhau. Nếu như điện áp ở lối vào AIN0 lớn hơn
điện áp ở lối vào AIN1 thì lối ra của bộ so sánh analog ACO được đặt lên mức
“1”. Lối ra này có thể được sử dụng cho bộ Timer/Counter1 để trigơ hoặc xoá
ngắt bộ so sánh analog.
+ Bộ so sánh tương tự của AVR có đầu vào là hai chân PB2 và PB3.Với
chân PB2 được nối vào cực dương của bộ so sánh và PB3 được nối vào cực âm
của bộ so sánh.Nó tạo ra hai mức logic nếu V+>V- thì tín hiệu ra là 1 và ngược
lại là 0.
+ Để điều khiển và quan sát trạng thái của bộ so sánh tương tự ta có một
thanh ghi đó là thanh ghi ACSR. Thanh ghi ACSR là một thanh ghi 8 bit có địa
chỉ trong các thanh ghi I/O là 0x08 và có địa chỉ trong không gian bộ nhớ SRAM

là 0x28.Trong 8 bit thì có 7 bit được định nghĩa và bit 6 không được định nghĩa.
Nó chỉ có thể đọc và luôn có giá trị logic là 0.
- Bit 7-ACD(Analog comparator disable): đây là bit điều khiển.
Bit này trực tiếp điều khiển hoạt động của AC(bộ so sánh tương tự).Nếu như bit
này được set lên 1 thì nguồn cung cấp cho AC hoạt động bị tắt (turn off) và đồng
nghĩa với việc nó không hoạt động.Và nếu nó được xóa thì AC được cấp nguồn

24


và hoạt động bình thường.Chú ý :Ta có thể thay đổi giá trị logic của bit này lúc
nào cũng được để ngưng hoạt động của chúng hoặc cho chúng hoạt đông trở lại
nhưng khi thay đổi ghía trị logic của nó thì ngắt (ngắt của AC)cần bị cấm nếu
không nó sẽ sinh ra một ngắt (Cụ thể là bit ACIE cần bị xóa).
- Bit 5-ACO(Analog comparator output): đây là bit trạng thái. Bit này
được nối trức tiếp với đầu ra của bộ so sánh tương tự.
- Bit 4-ACI(Analog comparator interrupt flag): đây là bit trạng thái. Cờ
báo ngắt của bộ so sánh tương tự. Nếu như cờ này được set và các ngắt được
phép thì một chương trình phục vụ ngắt được gọi và chúng được xóa bằng phần
cứng khi chương trình báo ngắt được phục vụ. Các trường hợp làm thay đổi trạng
thái cờ này ngoài việc thay đổi bit ACD sẽ được nói tới trong các bít o và 1.
- Bit 3-ACIE(AC interrupt enable): đây là bit điều khiển. Nếu bit này
được set thì ngắt này được phép và ngược lại.
- Bit 2ACIC(Analog comparator input Capture Enable): đây là bit điều
khiển. Khi bit này được set lên 1 thì đầu ra của AC được nối trực tiếp vào đầu
vào của chức năng bắt sự kiện của Timer/counter 1.
- Bit ACIS1 và ACIS0 (Ac interrupt mode select): đây là hai bit điều
khiển.
Chế độ ngắt


ACIS1

ACIS0

0

0

Theo mức

0

1

Dự trữ

1

0

Sườn xuống

1

1

Sườn lên

Bảmg 6 Các bit chọn chế độ ngắt


Chú ý: các bit này cũng có thể được thay đổi bất cứ khi nào.Nhưng khi thay đổi
thì ngắt của nó phải bị cấm.Ta có thể sử dụng lệnh SBI hoặc CBIU để thay đổi
trạng thái các bit trên thanh ghi này trừ bit ACI. Bit này sau khi được đọc cũng sẽ
bị xóa (nếu nó được set).

25


×