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

đồ an mạch đếm sản phẩm

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.8 MB, 83 trang )

Trường ĐHCN Hà Nội

Khoa Điện tử
MỤC LỤC
TRANG

DANH MỤC CÁC KÍ HIỆU CÁC CHỮ VIẾT TẮT………………………………………4
Lời nói đầu…………………………………………………………………………………..6
CHƢƠNG I: CƠ SỞ LÝ THUYẾT ………………………….…………………………..6
ĐẶT VẤN ĐỀ………………………………………...………...….....................6

I.

1.1 Lý do chọn đề tài…………………………...…………………………….......6
1.2 Mục đích yêu cầu của đề tài……………...……………………………..……6
1.3 Vấn đề cần giải quyết……………...……………………………………..….6
1.3.1 Phương án thiết kế………………………………………………...6
1.3.2 Giới hạn của đề tài………………………………………………...8
II.

LÝ THUYẾT THIẾT KẾ ……...……….…………………………………...…9
2.1. Các linh kiên dùng trong mạch………….…….……………….…..….9
2.1.1. Tổng quan về vi điều khiển ATMEGA8………………….……...9
2.1.2 Cấu trúc chung của AVR…………………………..….…………10
2.1.2.1. Cấu trúc tổng quát...…………………….……………..10
2.1.2.2. ALU…………………………………………………...10
2.1.2.3. Thanh ghi trạng thái …………………………………..10
2.1.2.4. Các thanh ghi chức năng chung…………………….....11
2.1.2.5. Con trỏ ngăn xếp(sp)…..……………………………...12

2.1.3. Cấu trúc ngắt của ATMEGA8…………………...……………………………13


2.1.3.1. Khái niệm ngắt…………………………………………………………..13
2.1.3.2. Trình phục vụ ngắt…………………………………………….………....13
2.1.3.3. Bảng vector ngắt………………………………………………………....13
2.1.3.4. Thứ tự ưu tiên ngắt…………………………………………………...….14
2.1.3.5. Ngắt trong ngắt…………………………………………………………..14
2.1.4 Cấu trúc bộ nhớ………………………………….………...............................17
2.1.4.1. Bộ nhớ chương trình( bộ nhớ flash)……………………………………..18
2.1.4.2. Bộ nhớ dữ liệu SRAM…………………………………………………...18
2.1.4.3. Bộ nhớ dữ liệu EEPROM……………………………………….……….18

1
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

2.1.5 Các cổng vào ra( I/O)………………………………………………………...21
2.1.5.1. Các chức năng của Port B…………….…………….…………………....22
2.1.5.2. Các chức năng cảu Port C…………………….……….............................23
2.1.5.3. Các chức năng của Port D……………………………………………….24
2.1.5.4. Mô tả thanh ghi của Port I/O…………………………………………….25
2.1.6 Bộ định thời 8 bit timer/counter 0…………………………………….……...26
2.1.6.1. Hoạt động của bộ timer/ counter……………..……..…………………...27
2.1.6.2. Đơn vị đếm………………………………………………………………29
2.1.6.3. Đơn vị so sánh ngõ ra………………………..……….……………...…..30
2.1.6.4. Mô tả các thanh ghi……………………….……………………………..30
2.1.7 Bộ so sánh tương tự( Alalog Comparator)……………..............………….....32
2.1.8 USART…………………………………………………….............................34

2.1.8.1. Đặc điểm………………………………………………..………………..34
2.1.8.2. Tạo xung clock……………………………………..……………………35
2.1.8.3. Định dạng khung truyền…………………………..……………………..35
2.1.8.4. Khởi tạo USART………………………………………………………...36
2.1.8.5. Truyền thông dữ liệu-bộ truyền USART………………………………...37
2.1.9 Hệ thống xung clock………………………………………............................37
2.1.9.1. Bộ dao động thạch anh……………………….……..…….......................38
2.1.9.2. Bộ dao động thạch anh có tần số thấp…………………………………...39
2.1.9.3. Bộ dao động R-C bên ngoài………………..……..………......................40
2.1.10 Bộ biến đổi A/D ( Alalog/digital)……………..……………………………..40
2.1.10.1

ADMUX……………………………………..………………………40

2.1.10.2

ADCSR………………………………………………………………41

2.1.10.3

Nguyên tắc hoạt động và lập trình điều khiển…….…………………41

2.2. Một số linh kiện khác trong mạch……………….…………………….42
2.2.1

Tổng quan về vi mạch LM358…………………………...………………42

2.2.2 Khối hiển thị-led 7 thanh……………………………………….…………45
2.2.3 IC LM7805………………………………………………………………..47
2.2.4 Cấu tạo và nguyên lý làm việc của LED hồng ngoại……………………..49


2
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

2.2.5 LED phát ra ánh sáng nhìn thấy…………………………………………..50
2.2.6 Điện trở……………………………………………………………...........51
2.2.7 Biến trở……………………………………………..……………………..51
2.2.8

Tụ điện………………………………………………………………...…52

2.3 Xây dựng sơ đồ khối tổng quát………………………………………………..54
CHƢƠNG II: THIẾT KẾ, THI CÔNG VÀ CHƢƠNG TRÌNH…………………......55
I Thiết kế thi công phần cứng……………………………………………...............55
1.1 Sơ đồ mạch nguyên lý……………………………………………………...55
1.1.1

Sơ đồ nguyên lý của mạch chính………….……………….…………...55

1.1.1.1. Mạch nguyên lý……………………………………..............................55
1.1.1.2. Mạch in………………………………………….…………..................59
1.2 Sơ đồ nguyên lý mạch LED………………………..………………………59
1.2.1 Mạch nguyên lý………………………………………………................59
1.2.2 Mạch in…………………………………………………..……………...60
II Chƣơng trình điều khiển………………………………………………..............61

2.1.

Lưu đồ thuật toán của chương trình……………………..……………….……..61

2.2.

Chương trình của hệ thống……………………………………………………..63

2.3.

Cách nạp code cho vi đều khiển Atmega8……………………………………...75

CHƢƠNG III: KẾT LUẬN……………………………………………………………..79
3.1.

Ưu nhược điểm của sản phẩm…………………………………….…………….79

3.2.

Ứng dụng của sản phẩm vào đời sống thực tế…………………..……………...80

3.3.

Hình ảnh của sản phẩm………………………………………….……………...80

3.4.

Kết quả…..……………………………………………………………………...82

3.5.


Lời cảm ơn……………………………………………………………………...82

Tài liệu tham khảo……………………..……………………………………………..82

3
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

DANH MỤC CÁC KÍ HIỆU, CÁC CHỮ VIẾT TẮT

Tên viết tắt
ADC
ALU
CMOS
CPU
DIP
EPROM

Tên đầy đủ

Nghĩa của tên

Analog-to digital Converter

Bộ biến đổi thông tin

tương tự - thông tin số
Đơn vị số học-lôgic
Chất bán dẫn kim loại

Arithmetic logic unit
Complementary metal-oxide
semiconductor
Central Processing Unit
Dual-in-line package
Erasable programmable readonly memory

IC
I/O
ISP
OTP

Intergrated circuit
Input/output
Instruction set processor
One time programmable

PSW
PROM
RAM

Program status word
Prommable read-only memory

ROM
UART


Random access memory
Read-only memory
Universal Ansynchronous
Receiver and Tranmistter

Đơn vị xử lý trung tâm
Vỏ hai hàng chân
Là kiểu bộ nhớ ROM có
thể được ghi lại chương
trình bằng cách chiếu nó
bằng tia cực tím sau khi đã
tháo vỏ bảo vệ
Vi mạch tích hợp
Đầu vào/đầu ra
Bộ xử lý tập lệnh
Bộ nhớ chỉ lập trình được
một lần
Từ trạng thái chương trình
ROM lập trình được
Bộ nhớ truy cập ngẫu
nhiên
Bộ nhớ đọc
Bộ truyền nhận dữ liệu
không đồng bộ

4
SVTH: Nguyễn Huy Đạt



Trường ĐHCN Hà Nội

Khoa Điện tử

Lời nói đầu

Ngày nay, sự phát triển mạnh mẽ của khoa học công nghệ, cuộc sống của con người
đã có những sự thay đổi ngày càng tốt hơn, mang lại sự tiện lợi tối ưu với những trang
thiết bị hiện đại phục vụ công cuộc công nghiệp hóa, hiện đại hóa đất nước . Góp
phần vào sự phát triển đó thì ngành kỹ thuật điện tử đã góp phần không nhỏ trong sự
nghiệp xây dựng và phát triển đất nước. Trong đó tích hợp các mạch điện – điện tử
ngày càng trở lên thiết yếu khi mà công nghệ ngày càng phát triển hơn tiến tới thời đại
của vi xử lý vi mạch những mạch cồng kềnh chiếm nhiều diện tích đã bị loại bỏ dần
và thay vào đó là các mạch siêu nhỏ, gọn gàng hơn và đang được ưa chuộng. Những
thành tựu của nó đã có thể biến được những cái tưởng trừng như không thể thành
những cái có thể, góp phần nâng cao đời sống vật chất và tinh thần cho con người.
Trong quá trình học tập ở trường chúng em nhận thấy việc quản lý sinh viên của mỗi
giáo viên là rất vất vả . Vì số lượng sinh viên trong lớp quá đông, nên để đảm bảo
được sự chính xác về số lượng sinh viên trong suốt buổi học là rất khó. Và về vấn đề
điện trong lớp, khi tan học các bạn đều muốn về nên không ai tắt điện trong phòng,
làm rất lãng phí điện.
Từ những điều đó và khả năng của chúng em, trong suốt thời gian thực tập chúng em
đã muốn làm một điều gì đó mặc dù nhỏ, nhưng giúp giáo viên quản lý sinh viên và
quản lý điện trong lớp học được tốt hơn, chính xác hơn. Nên chúng em đã thiết kế ra
một mạch đếm số học sinh ra vào lớp và quản lý điện trong lớp, nó rất gần gũi với
thực tế và nó thật sự rất có ý nghĩa đối với chúng em vì đã làm được một phần nhỏ
đóng góp cho ngành giáo dục cũng như cho xã hội. Chúng em đã nghiên cứu đề tài
dưới sự hướng dẫn nhiệt tình của thầy Vũ Việt Hưng, giảng viên khoa điện tử. Vì kiến
thức, kinh nghiệm của chúng em còn hạn hẹp nên đồ án không tránh được sai sót.
Chúng em rất mong sự đánh giá của quý thầy cô để đồ án được hoàn thiện hơn.


Em xin chân thành cảm ơn!

5
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

CHƢƠNG I: CƠ SỞ LÝ THUYẾT
I.
Đặt vấn đề
1.1 Lý do chọn đề tài
- Ngày nay việc nghiên cứu ứng dụng vi điều khiển vào các ứng dụng cuộc sống
khá phổ biến,điển hình là chip vi điều khiển Atmega8. Ở trong công nghiệp cũng
như các lĩnh vực liên quan đến sản phẩm thì đã phát huy được lợi thế khi sử dụng
vi điều khiển việc đếm các sản phẩm đã trở nên đơn giản hơn giảm bớt được nhiều
sức lao động và thời gian. Cũng như ở trên giảng đường,việc ra vào lớp tự do của
các sinh viên khiến cho giáo viên không thể kiểm soát được.Để hạn chế được điều
này,dưới sự gợi ý của thầy VŨ VIỆT HƯNG và qua tìm hiểu chúng em đã quyết
định chọn đề tài mạch đếm người ra vào trong lớp học sử dụng cảm biến hồng
ngoại ứng với vi điều khiển Atmega8.
1.2 Mục đích yêu cầu của đề tài:
Trong đồ án này, chúng em thực hiện mạch đếm số sinh viên trong lớp và
quản lý năng lượng điện. Như vậy, mỗi học sinh đi qua cảm biến nó sẽ đếm, khi
học sinh đi vào lớp nó sẽ đếm tiến và khi học sinh đi ra nó sẽ trừ đi. Còn về quản
lý năng lượng điện, khi học sinh vào lớp thì các thiết bị trong lớp như đèn và quạt
sẽ tự động bật, khi học về học sinh về hết điện và quạt sẽ tư động tắt. Từ đây suy

ra mục đích yêu cầu của đề tài:
Số đếm phải chính xác, cả đếm tiến và đếm lùi đảm bảo quản lý tốt số học sinh
trong lớp.
- Quản lí điện trong lớp chính xác khi có học sinh vào và khi học sinh về hết.
- Bộ phận hiển thị rõ ràng
- Mạch điện không quá phức tạp, đảm bảo được sự an toàn, dễ sử dụng.
- Giá thành không quá đắt.
1.3 Vấn đề cần giải quyết:
1.3.1 Chọn phương án thiết kế:
-

1.3.1.1Với mạch đếm số người dùng IC rời có các ưu điểm sau:
 Cho phép tăng hiệu suất lao động .

6
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

 Đảm bảo độ chính xác cao.
 Tần số đáp ứng của mạch nhanh, cho phép đếm với tần số cao.
 Tổn hao công suất bé, mạch có thể sử dụng pin.
 Khả năng đếm rộng .
 Giá thành hạ.
 Mạch đơn giản dễ thực hiện.Với việc sử dụng kỹ thuật số khó có thể đáp
ứng được việc thay đổi số đếm. Muốn thay đổi một yêu cầu nào đó của
mạch thì buộc lòng phải thay đổi phần cứng. Do đó mỗi lần phải lắp lại

mạch dẫn đến tốn kém về kinh tế mà nhiều khi yêu cầu đó không thực hiện
được bằng phương pháp này. Với sự phát triển mạnh của nghành kỹ thuật
số đặc biệt là cho ra đời các họ vi xử lí và vi điều khiển rất đa chức năng do
đó việc dùng kỹ thuật vi xử lí, kỹ thuật vi điều khiển đã giải quyết những bế
tắc và kinh tế hơn mà phương pháp dùng IC rời kết nối lại không thực hiện
được.
1.3.1.2 Với mạch đếm số người ra vào lớp dùng kỹ thuật vi xử lí: Ngoài những
ưu điểm như đã liệt kê trong phương pháp dùng IC rời thì mạch đếm số
người ra vào lớp dùng kỹ thuật vi xử lí còn có những ưu điểm sau:
 Mạch có thể thay đổi số đếm một cách linh hoạt bằng việc thay đổi phần
mềm, trong khi đó phần cứng không cần thay đổi mà mạch dùng IC rời
không thể thực hiện được mà nếu có thể thực hiện được thì cũng cứng nhắc
,cũng khó tiếp cận, dễ nhầm.
 Số linh kiện sử dụng trong mạch ít hơn.
 Mạch đơn giản hơn so với mạch đếm ssos người dùng IC rời và có phần cài đặt
số đếm ban đầu.
 Mạch có thể điều khiển đếm được người ra vào bằng phần mềm.
 Mạch cũng có thể kết nối giao tiếp được với máy tính thích hợp cho những
người quản lí nắm bắt được tình hình các lớp học qua màn hình của máy vi tính.
Nhưng trong thiết kế người ta thường chọn phương pháp tối ưu nhưng kinh tế do
đó chúng em chọn phương pháp đếm sản phẩm dùng kỹ thuật vi điều khiển.

7
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử


1.3.1.3 Phương pháp đếm số người dùng vi điều khiển:
Ngoài những ưu điểm có được của hai phương pháp trên, phương pháp này còn
có những ưu điểm :
 Trong mạch có thể sử dụng ngay bộ nhớ trong đối với những chương
trình có quy mô nhỏ, rất tiện lợi mà vi xử lí không thực hiện được.
 Nó có thể giao tiếp nối tiếp trực tiếp với máy tính mà vi xử lí cũng giao
tiếp được với máy tính nhưng là giao tiếp song song nên cần có linh kiện
chuyển đổi dữ liệu từ song song sang nối tiếp để giao tiếp với máy tính.
- Tìm hiểu các tài liệu liên quan đến đến đề tài nghiên cứu,đưa ra các giải
pháp tối ưu cho việc thiết kế chế tạo sản phẩm thực tế.
- Thiết kế và chế tạo mạch gồm các khối: khối xử lý trung tâm dùng
atmega8, khối nguồn, khối cảm biến và khối hiển thị.
- Tiến hành viết chương trình phần mềm phối hợp hoạt động các khối dưới
sự điều khiển của khối mạch chính.

1.3.2 Giới hạn của đề tài:
- Các sản phẩm đa dạng với nhiều chủng loại: đặc, rỗng, kích cỡ khác nhau.
Nhưng đối với khả năng của thiết bị lắp thì mạch có kích thước từ 10cm3 đến
30cm3.
- Đếm số học sinh ra vào lớp học. Khi học sinh vào lớp sẽ đếm tiến, khi học sinh
ra khỏi lớp sẽ trừ đi số học sinh trong lớp đang hiển thị.
- Quản lí năng lượng điện, khi học sinh vào lớp thì đèn và quạt sẽ tự động hoạt
động, khi học sinh đi ra khỏi lớp thì các thiết bị tự động ngừng hoạt động.

8
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội


Khoa Điện tử

II.
LÝ THUYẾT THIẾT KẾ
2.1 Các linh kiện dùng trong mạch
2.1.1 Tổng quan về vi điều khiển ATMEGA8

- 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).
- Những tính năng chính của Atmega8 được tóm tắt như sau:
+ Có 8Kbyte bộ nhớ flash
+ Có thể xóa lập trình được và có thể chịu được 10000 lần ghi xóa.
+ Có 32 thanh ghi đa năng 8 bit,
+ Có 512 byte bộ nhớ EEPROM tích hợp trên chíp,
+ Có 1 kbyte SRAM nội.
+ 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.
+ 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.
+ Atmega8 có 28 chân, trong đó có 23 cổng vào ra.
+ 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.

9
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử


+ Làm việc tiêu thụ dòng 3.6mA.
+ 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.
+ 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
- Sơ đồ khối
của Atmega8:

Hình 2.1 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.1.2 Cấu trúc chung của AVR
2.1.2.1 Cấu trúc tổng quát

10
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện 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.1.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.1.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.1.2.4 Các thanh ghi chức năng chung

11
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

Hình 2.2 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.

Hình 2.3 Chức năng con trỏ của các thanh ghi R26 –R31

12
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

2.1.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. Có nhiệm vụ
trỏ tới vùng nhớ trong RAM chứa ngăn xếp.

Hình 2.4 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.
2.1.3 Cấu trúc ngắt của Atmega8
2.1.3.1 Khái niệm 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
sàng cho đổi dữ liệu của mình.

2.1.3.2 Trình phục vụ 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

13
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

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ỉ đó.
2.1.3.3 Bảng vector ngắt
Bảng 2.1 Bảng vector ngắt

2.1.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ề khiển AVR thứ tự ưu tiên các ngắt là không

14
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

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 ”.
2.1.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.

Hình 2.5 Hình ảnh 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 ).


15
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

- 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 định nghĩa trong bảng sau:
Bảng 2.2 Các mức độ và cạnh trong chân INT1

+ 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:


16
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

Bảng 2.3 Các mức độ và cạnh trong chân INT0

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 :
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ẽ

17
SVTH: Nguyễn Huy Đạt



Trường ĐHCN Hà Nội

Khoa Điện tử

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ó.
2.1.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.
2.1.4.1 Bộ nhớ chương trình (Bộ nhớ Flash)
- Bộ nhớ Flash 16KB của Atmega8 dùng để lưu trữ chương trình. Do các lệnh của
AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16. Bộ
nhớ Flash được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho
chương trình ứng dụng.
2.1.4.2 Bộ nhớ dữ liệu SRAM
- 1120 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ
dữ liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ
nhớ I/O, và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội.

Hình 2.6 Bản đồ bộ nhớ dữ liệu SRAM
2.1.4.3 Bộ nhớ dữ liệu EEPROM:

18
SVTH: Nguyễn Huy Đạt



Trường ĐHCN Hà Nội

Khoa Điện tử

- 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 :
 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.
 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.

 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.

19
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội


Khoa Điện tử

+ 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.


20
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

+ 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.

21
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

2.1.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).
2.1.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.

22
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

- MOSI/OC2 – Port B, Bit 3
MOSI: SPI Master Data output, Slave Data input 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ừ
DDB3. Khi SPI được kích hoạt là Master, dữ liệu trực tiếp của chân này được điều

khiển bởi DDB3.
- SS/OC1B – Port B, Bit 2
SS: Slave Select ngõ vào. 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ừ DDB2.
- OC1A – Port B, Bit 1
OC1A, Output Compare Match output:Chân PB1 có thể xử lý như 1 ngõ ra bên ngoài
Timer/Counter1 Compare Match A.
- ICP1 – Port B, Bit 0
ICP1 –chân giữ(chốt) ngõ vào : Chân PB0 có thể tác động làm 1 chân giữ cho
Timer/Counter1.
2.1.5.2 Các chức năng của Port C
- RESET – Port C, Bit 6
RESET, Reset pin: Khi cầu chì RSTDISBL đã lập trình, chức năng của chân này là
vào ra binh thường,và 1 phần sẽ phải dựa vào Power-on Reset và Brown-out Reset
như là nguồn reset của nó. Nếu chân PC6 dùng là chân reset , DDC6, PORTC6 và
PINC6 sẽ hiều là mức 0.
- SCL/ADC5 – Port C, Bit 5
SCL, giao diện nối tiếp hai dây Xung nhịp: Khi bit TWEN trong TWCR set (one) để
bật giao diện nối tiếp hai dây, pin PC5 bị ngắt từ port và trở thành chân Serial Clock
I/O cho Two-wire Serial Interface.
- SDA/ADC4 – Port C, Bit 4
SDA, Two-wire Serial Interface Data: When the TWEN bit in TWCR is set (one) to
enable the Two-wire Serial Interface, pin PC4 is disconnected from the port and
becomes the Serial Data I/O pin for the Two-wire Serial Interface.
- ADC3 – Port C, Bit 3

23
SVTH: Nguyễn Huy Đạt



Trường ĐHCN Hà Nội

Khoa Điện tử

PC3 cũng có thể dùng là ADC input Channel 3. Chú ý là ADC input channel 3 dùng
nguồn xoay chiều.
- ADC2 – Port C, Bit 2
PC2 cũng có thể dùng là ADC input Channel 2. Chú ý là ADC input channel 2 dùng
nguồn xoay chiều.
- ADC1 – Port C, Bit 1
PC1 cũng có thể dùng là ADC input Channel 1. Chú ý là ADC input channel 1 dùng
nguồn xoay chiều.
- ADC0 – Port C, Bit 0
PC0 cũng có thể dùng là ADC input Channel 0. Chú ý là ADC input channel 0 dùng
nguồn xoay chiều
2.1.5.3 Các chức năng của Port D
- AIN1 – Port D, Bit 7
AIN1,bộ so sánh tương tự thụ động ngõ vào. Cấu hình chân của port là nhập vào với
ngắt pull-up bên trong để tránh nhiễu từ port số với chức năng của bộ so sánh tương
tự.
- AIN0 – Port D, Bit 6
AIN0,Bộ so sánh tương tự ngõ vao tích cực. Cấu hình chân của port là nhập vào với
ngắt pull-up bên trong để tránh nhiễu từ port số với chức năng của bộ so sánh tương
tự.
- T1 – Port D, Bit 5
T1, số lượng mã nguồn Timer/Counter1.
- XCK/T0 – Port D, Bit 4
XCK, USART xung nhịp ngoài. T0, số lượng mã nguồn Timer/Counter0.
- INT1 – Port D, Bit 3
INT1, Ngắt nguồn bên ngoài 1: Chân PD3 có thể làm chức năng như 1 nguồn ngắt

ngoài.
- INT0 – Port D, Bit 2
INT0, Ngắt nguồn bên ngoài 0: Chân PD2 có thể làm chức năng như 1 nguồn ngắt
ngoài.

24
SVTH: Nguyễn Huy Đạt


Trường ĐHCN Hà Nội

Khoa Điện tử

- TXD – Port D, Bit 1
TXD, Truyền tải dữ liệu (chân dữ liệu ra của USART). Khi bộ truyền USART được
kích hoạt ,chân này được cấu hình như là một ngõ ra bất kể giá trị của DDD1.
- RXD – Port D, Bit 0
RXD, Nhận dữ liệu (chân dữ liệu vào của USART). Khi bộ nhận USART được kích
hoạt ,chân này được cấu hình như là một ngõ vào bất kể giá trị của DDD0
2.1.5.4 Mô tả thanh ghi của port I/O
- The Port B Data Register – PORTB

- The Port B Data Direction Register – DDRB

- The Port B Input Pins Address – PINB

- The Port C Data Register – PORTC

- The Port C Data Direction Register – DDRC


- The Port C Input Pins Address – PINC

25
SVTH: Nguyễn Huy Đạt


×