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

thiết kế điều khiển và giám sát động cơ DC

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 (350.31 KB, 86 trang )

MỤC LỤC

DANH MỤC HÌNH VẼ
Hình 2.1 Sơ đồ chân ATmega16, và hình dạng thực tế
Hình 2.2 Bộ nhớ của AVR
Hình 2.3 Sơ đồ cấu tạo Timer/counter0
Hình 2.4 Sơ đồ cấu tạo Timer/counter1
Hình 2.5 Sơ đồ cấu tạo Timer/counter2
Hình 2.6 Sơ đồ khối bộ USART
Hình 2.7 Sơ đồ khối bộ chuyển đổi ADC
Hình 2.8 hình ảnh động cơ DC Servo
Hình 2.9 các thành phần của động cơ DC servo
Hình 2.10 Hình dạng của LM35
Hình 2.11 Sơ đồ chân của RS232
Hình 2.12 sơ đồ chân của bộ chuyển đổi MAX232 và cổng COM
Hình 3.1: Hệ thống kết nối máy tính với động cơ.
Hình 3.2 Khối xử lý trung tâm và khối hiển thị
Himh 3.3: Khối động lực
Trang 1


Hinh 3.4 Kết nối AVR với PC thông qua Max232
Hình 3.5 Khối nguồn
Hình 3.6 sơ đồ nguyên lý toàn mạch
Hình 3.7 Giao diện của chương trình

DANH MỤC BẢNG BIỂU
Bảng 2.1 trạng thái của các bit Timer/ Counter control register
Bảng 2.2 vectơ ngắt của Atmega 16
Bảng 2.3 bảng trạng thái chọn số chia tần trong ADC
Bảng 2.4 chức năng các chân của RS232



LỜI NÓI ĐẦU
Trong những thập niên gần đây công nghiệp hoá hiện đại hoá trên thế giới ngày
càng phát triển mạnh mẽ. Ở nước ta hiện nay, việc lập trình ghép nối máy tính sử
dụng vi điều khiển đã và đang là công cụ được ứng dụng rộng rãi trong lĩnh vực tự
động hoá. Nó phát triển nhanh chóng, đã mang lại những thay đổi to lớn trong công
nghệ cũng như trong đời sống hàng ngày. Việc tạo ra công nghệ truyền thông không
dây đã tiết kiệm được rất nhiều về mặt kinh tế vì tốn rất ít dây dẫn, việc lắp đặt cũng
trở nên gọn nhẹ hơn, dễ dàng hơn…
Động cơ một chiều được sử dụng từ lâu trong các hệ truyền động có điều khiển tốc
độ yêu cầu dải điều chỉnh lớn, độ ổn định tốc độ cao và các hệ thường xuyên hoạt
động ở chế độ khởi động, hãm và đảo chiều. Một số ứng dụng quan trọng của động cơ
1 chiều như truyền động cho xe điện, máy công cụ, máy nâng vận chuyển, máy cán,
máy nghiền....Từ các vấn đề trên nhóm đồ án chúng em đã chọn đề tài “Điều khiển và
giám sát động cơ DC”.Với sự hướng dẫn nhiệt tình của thầy hướng dẫn đến nay
chúng em đã hoàn thành được đề tài này.
Tuy nhiên, để có được sản phẩm có tính ổn định cao, đảm bảo về chất lượng là
tương đối khó khăn. Vì tầm hiểu biết của nhóm thực hiện vẫn còn hạn chế nên đề tài
khó tránh khỏi những thiếu sót, những khuyết điểm không mong muốn. Nhóm đồ án
Trang 2


chúng em rất mong có được những ý kiến đóng góp quý báu, chân thành của quý thầy
cô cùng các bạn sinh viên để đề tài này được hoàn thiện hơn.

CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI
1.1. Lý do chọn đề tài.
1.1.1. Cơ sở khoa học.
Với sự phát triển mạnh mẽ của khoa học công nghệ ngày nay, đã đem lại nhiều ứng
dụng và thành quả to lớn phục vụ nhu cầu đời sống thiết thực của con người. Đặc biệt

đối với hai lĩnh vực Máy tính và điện tử đã trở nên quen thuộc và phục vụ phần lớn
cho mọi mặt đời sống của con người. Sự kết hợp giữa hai lĩnh vực này đã mang lại
nhiều ứng dụng thiết thực cho nền kinh tế cũng như đời sống của con người.
1.1.2. Cơ sở thực tiễn.
Động cơ một chiều được sử dụng từ lâu trong các hệ truyền động có điều khiển tốc độ
yêu cầu dải điều chỉnh lớn, độ ổn định tốc độ cao và các hệ thường xuyên hoạt động ở
chế độ khởi động, hãm và đảo chiều. Nhờ có đặc tính điều chỉnh tốc độ tốt nên được
sử dụng rất phổ biến trong công nghiệp. Một số ứng dụng quan trọng của động cơ 1
chiều như truyền động cho xe điện, máy công cụ, máy nâng vận chuyển, máy cán, máy
nghiền....
Sẽ rất đơn giản và tiện dụng khi ta có thể điều khiển và giám sát thiết bị điện của một
công ty hay một xí nghiệp.... Từ ý tưởng đó cùng với những nhu cầu từ thực tiễn,
nhóm đồ án chúng em đã quyết định chọn đề tài: “Điều khiển và giám sát động cơ
DC
Trang 3


-

-

1.1.3. Nội dung của đề tài
Điều khiển động cơ dựa vào giao diện viết trên máy tính sử dụng phần mềm Visual
Basic 6.0 để thiết kế giao diện Tín hiệu điều khiển do người sử dụng tác động từ máy
tính sẽ được chuyển đổi thành tín hiệu số nhị phân thông qua mạch giao tiếp với máy
tính.
Mạch điều khiển sẽ nhận lệnh từ máy tính và điều khiển tốc độ và đảo chiều động
cơ.Hiển thị tốc độ số vòng/s, điện áp , dòng điện của động cơ trên LCD
- Điều khiển bằng phím ấn kết hợp với điều khiển bằng máy tính
1.1.4. Mục tiêu nghiên cứu.

- Thiết kế, chế tạo modul điều khiển động cơ điện 1 chiều giao tiếp máy tính qua
cổng COM.
- Giao tiếp giữa modul VĐK với máy tính thông qua chuẩn RS232
- Tính được tốc độ số vòng/s , điện áp , dòng điện , nhiệt độ hiển thị trên LCD.
- Hoàn thành sản phẩm với độ chính xác cao, ứng dụng được trong thực tế.
1.1.5. Mục đích nghiên cứu.
Dựa vào những kiến thức đã học vể điện tử công suất, kỹ thuật giao tiếp máy tính, kết
hợp với các kiến thức về Kỹ thuật điện tử để nghiên cứu về một giải pháp điều khiển
và giám sát các thiết bị điện thông qua các mạch điện tử.
Nhằm ôn lại những kiến thức đã học cũng như nâng cao trình độ chuyên môn để phục
vụ cho công việc sau khi ra trường.
1.1.6. Phương pháp nghiên cứu.
Tham khảo các tài liệu hướng dẫn lập trrình visual basic, kỹ thuật đa xử lý của vi điều
khiển, giao tiếp máy tính với các thiết bị qua cổng COM
Tìm hiểu các hoạt động của các IC sử dụng trong đề tài qua datasheet do nhà sản xuất
cung cấp
1.1.7. Phương tiện nghiên cứu
- Giáo trình liên quan đến đề tài.
- Máy vi tính.
- Các linh kiện điện tử để thi công mạch điện: Bộ xử lý trung tâm (Vi điều khiển
AVR), động cơ 1 chiều, Cổng truyền thông giám sát thiết bị (chuẩn truyền thông nối
tiếp RS232 và IC Max 232) , cảm biến nhiệt độ LM35, LCD 16×4
- Các phần mềm hỗ trợ như : eagle 5.6, Visual Basic 6.0, Proteus 7.4, HM-TR, driver
USB to COM.

Trang 4


1.1.8. Ý nghĩa của đề tài.
Trong thực tế có rất nhiều các loại truyền thông không dây được sự dụng rộng rãi,

song nhóm đồ án chúng em thiết kế ra modul điều khiển giám sát động cơ này giúp
người sử dụng dễ dàng điều khiển quan sát được tốc độ, chiều quay của động cơ trực
tiếp trên máy vi tính với giao diện của Visua Basic, không cồng kềnh, không tốn dây,
nút bấm, công tắc mà lại an toàn cho người sử dụng khi làm việc trong các nhà máy xí
nghiệp.
 Kết luận: qua đây nhóm chúng em không chỉ biết được mục tiêu nghiên cứu mà
ta còn tìm được ý tưởng, phương hướng giải quyết của đề tài cũng như ứng dụng
của mạch điều khiển , giám sát động cơ DC trong thực tế

CHƯƠNG II: GIỚI THIỆU LINH KIỆN CHÍNH DÙNG
TRONG MẠCH
2.1. ATMEGA 16
2.1.1.

-

-

Giới thiệu
Vi điều khiển AVR do hãng Atmel (hoa kỳ) sản xuất được giới thiệu lần đầu tiên năm
1996. AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny (ATtiny13, ATtiny22…)
có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi , rồi đến dòng AVR (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
(ATmega16, ATmega32, ATmega128…..) với bộ nhớ có kích thước vài Kbyte đến
vài trăm Kb cùng với bộ ngoại vi đa dạng. 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.
ATmega16 là một lọai vi điều khiển có nhiều tính năng đặc biệt thích hợp cho việc
giải quyết những bài toán điều khiển trên nền vi xử lý.
Các lọai vi điều khiển AVR rất phổ biến trên thị trường Việt Nam nên không khó khăn
trong việc thay thế và sửa chữa hệ thống lúc cần.

Giá thành của dòng vi điều khiển này khá hợp lý.
Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.
ATmega16 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, ATmega16 có thể đạt được tốc độ 1MIPS trên
mỗi MHz (1triệu lệnh/s/MHz), các lệnh được xử lý nhanh hơn, tiêu thụ năng lượng
thấp.
Trang 5


2.1.2. Chức năng của Atmega 16

Hình 2.1 Sơ đồ chân ATmega16, và hình dạng thực tế
+
+
+
+

Atmega16 có cấu trúc RISC với:
131 lệnh, hầu hết được thực thi trong 1 chu kì xung nhịp.
32x8 thanh ghi đa dụng
Tốc độ làm việc 16MPIS, với thạch anh 16MHz
Trong chíp có 2 chức năng hỗ trợ gỡ rối và lập trình soạn thảo chương trình
Trang 6


+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Bộ nhớ:
16 KB ISP Flash với khả năng 10.000lần ghi/xóa
512Byte EEROM
1KB SRAM ngọai
Giao tiếp JTAG:
Khả năng quét toàn diện theo chuẩn JTAG
Hỗ trợ khả năng gỡ rối

Hỗ trợ lập trình Flash, EEROM, …
Khóa bit qua giao tiếp JTAG
Ngọai vi:
2 timer/counter 8 bit với các chế độ: so sánh và chia tần số
1 timer/counter 16 bit với các chế độ: so sánh, chia tần số, capture, PWM
1 timer thời gian thực (Real time clock) với bộ dao động riêng biệt
4 kênh PWM hoặc nhiều hơn trong các VĐK khác thuộc họ này
8 kênh biến đổi ADC 10bit
Hỗ trợ giao tiếp I2C
Bộ giao tiếp nối tiếp lập trình được USART
Giao tiếp SPI
Watch_dog timer với bộ dao động on-chip riêng biệt
Những thuộc tính đặc biệt:
Power On reset và Brown-out detection
Chế độ hiệu chỉnh bộ sai số cho bộ dao động RC On-chip
Các chế độ ngắt ngoài và trong đa dạng
6 mode sleep: Idle, ADC noise reduction, tiết kiệm năng lượng, power_down, standby,
extended standby
I/O port:
32 chân I/O(Atmega16) và 21 chân I/O (Atmega8) lập trình được
Vỏ 40 chân (Atmega16), 28 chân(Atmega8), 64 chân(AT90can128)
Nguồn cấp:
2,7->5.5 V với Atmega16L
4.5->5.5V với Atmega16H
Tiêu hao năng lượng:
Khi họat động tiêu thụ dòng 1,1mA
Ở mode Idle tiêu thụ dòng 0.35mA
Ở chế độ Power_down tiêu thụ dòng nhỏ hơn 1uA
Trang 7



Đây là những chức năng cơ bản thường thấy trong các vi điều khiển AVR, ngoài ra
trong các vi điều khiển khác thuộc dòng vi điều khiển này thì thường được hỗ trợ thêm
những chức năng đặc biệt. Ví dụ AT90can128 hỗ trợ thêm bộ giao tiếp mạng Can bus
on-chip.
- Các phần mềm lập trình cho AVR:
+ AVRStudio (free), Code Vision.
+ Ngoài ra có thể dùng chương trình nạp PonyProg2000, Winpic8
2.1.3. Một số modul của Atmega 16


-

Modul I/O
Vi điều khiển ATmega16 có 32 đuờng vào ra chia làm bốn nhóm 8bit một. Các cổng
vào ra của AVR là cổng vào ra 2 chiều có thể định hướng, tức là có thể chọn hướng
của cổng là hướng vào ( input ) hay hướng ra ( out put ). Tất cả các cổng vào ra của
AVR đều có tính năng Đọc - Chỉnh sửa - Ghi ( Read – Modify - Write ) khi sử dụng
chúng như là các cổng vào ra số thông thường. Điều này có nghĩa là khi tắt hay đổi
hướng của 1 chân nào đó thì nó không ảnh hưởng tới hướng của các chân khác. Tất cả
các chân của các các cổng ( Port ) đều có điện trở kéo lên (Pull-up ) riêng, ta có thể
cho phép hay không cho phép điện trở kéo lên này hoat động.
Điện trở kéo lên ( pull- up ): là 1 điện trở được dùng khi thiết kế các mạch điện tử
logic. Nó có một đầu được nối với nguồn điện áp dương (thường là Vcc hoặc Vdd) và
đầu còn lại được nối với tín hiệu lối vào/ra của một mạch logic chức năng. Điện trở
kéo lên có thể được lắp đặt tại các lối vào ra của các khối mạch logic để thiết lập mức
logic của khối mạch khi không có thiết bị ngoài nối với lối vào. Điện trở kéo lên cũng
có thể lắp đặt tại các giao diện giữa 2 khối mạch logic không cùng loại logic, đặc biệt
là khi 2 khối mạch này được cấp nguồn khác nhau.
Khi khảo sát các cổng như là các cổng vào ra số thông thường thì tính chất của các

cổng ( Port A, PortB, PortC ) là tương tự nhau, nên ta chỉ cần khảo sát 1 cổng nào đó
trong 3 cổng của vi điều khiển là đủ.
Mỗi 1 cổng vào ra của vi điều khiển được liên kết với 3 thanh ghi : PORTx, DDRx,
PINx (ở đây x là thay thế cho A, B, C ). Ba thanh ghi này sẽ được phối hợp với nhau
để điều khiển hoạt động của cổng, chẳng hạn thiết lập cổng thành lối vào có sử dụng
điện trở pull-up… Sau đây là vai trò của 3 thanh ghi trên.
Thanh ghi DDRx

Trang 8


Đây là thanh ghi 8bit( ta có thể đọc và ghi ở các thanh ghi này) có tác dụng điều khiển
hướng cổng PORTx( tức là cổng vào hay cổng ra). Nếu như một bit trong thanh ghi
này được set thì bit tương ứng đó trên PORTx được định nghĩa như một cổng ra.
Ngược lại nếu như bit đó không được set thì bit tương ứng trên PORTx được định
nghĩa là cổng vào.

7

6

5

DDA7
R/W
0
-

DDA6


R/W
0

3

DDA5

R/W
0

DDA4

R/W
0

2

1

0

DDA3

DDA2

DDA1

R/W
0


R/W
0

R/W
0

DDA0

R/W
0

Thanh ghi PORTx
Đây cũng là thanh ghi 8bit ( các bit có thể đọc và ghi) nó là thanh ghi dữ liệu của cổng
Px và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi ta ghi 1 lên một
bit của thanh ghi này thì chân tương ứng trên port đó cùng có mức logic 1. Trong
trường hợp đó mà cổng được định nghĩa là cổng vào thì thanh ghi này mang dữ liệu
điều khiển cổng. Cụ thể là nếu bit nào đó của thanh ghi này được set (đưa lên mức 1 )
thì điện trở kéo lên pull up của chân tương ứng của port đó sẽ được kích hoạt. Ngược
lại nó sẽ ở trạng thái treo (không có điện trở kéo lên). Thanh ghi này sau khi khởi động
Vi điều khiển sẽ mặc định giá trị là 0x00.
7
6
5
4
3
2
1
0
PORTA7
R/W

0

-

4

PORTA6

PORTA5

R/W
0

R/W
0

PORTA4
R/W
0

PORTA3
R/W
0

PORTA2

R/W
0

PORTA1


R/W
0

PORTA0

R/W
0

Thanh ghi PINx
Đây là thanh ghi 8bit chứa dữ liệu vào của PORTx ( trong trường hợp PORTx được
thiết lập là cổng vào) và nó chỉ có thể đọc mà không ghi vào được.
7
6
5
4
3
2
1
0
PINA7
R
N/A

R
N/A

PINA6
R
N/A


PINA5
R
N/A

PINA4
R
N/A

PINA3
R
N/A

PINA2
R
N/A

PINA1

PINA0

R
N/A
Trang 9




Bộ nhớ Atmega 16


Hình 2.2 Bộ nhớ của AVR
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, ATmega16 còn có thêm bộ nhớ EEPROM để lưu trữ dữ liệu.
Bộ nhớ chương trình( bộ nhớ Flash)
Bộ nhớ Flash 16Kb của ATmega16 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 chứa các instruction (mã lệnh cho hoạt động
của chip) và phần chứa các véc tơ ngắt. Các véc tơ ngắt nằm ở phần đầu của
application section. Phần chứa instruction nằm liền ngay sau đó. Chương trình viết cho
chíp phải được load vào phần này. Chúng ta không có nhiều cơ hội tác động vào bộ
nhớ này khi lập trình cho chíp.
• Bộ nhớ dữ liệu SRAM
Gồm 1120 ô 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.
Trang 10




-

Bộ nhớ dữ liệu EEPROM
Đây là bộ nhớ dữ liệu có thể ghi xoá ngay trong lúc vi điều khiển hoạt động và không
bị mất dữ liệu khi nguồn điện cung cấp bị mất. Có thể ví bộ nhớ dữ liệu EEPROM
giống như ổ cứng của máy tính. Với vi điều khiển ATmega16 chứa bộ nhớ dữ liệu
EEPROM dung lượng 512byte, 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. 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 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 )
15
14
13
12
11
10
9
8

7
R
R/W
0
X

-

_

_

_

_

EEAR11

EEAR10


EEAR9

EEAR8

EEAR7

EEAR6

EEAR5

EEAR4

EEAR3

EEAR2

EEAR1

EEAR0

6
R
R/W
0
X

5
R
R/W

0
X

3
R/W
R/W
X
X

2
R/W
R/W
X
X

1
R/W
R/W
X
X

0
R/W
R/W
X
X

EEAR là thanh ghi 16 bit lưu giữ địa chỉ các ô nhớ của EEPROM, thanh ghi EERA
được kết hợp từ 2 thanh ghi 8 bit là EEARH và thanh ghi EEARL.
Thanh ghi EECR

7
6
5
4
3
2
1
0
_

-

4
R
R/W
0
X

_

_

_
EERIE EEMWE EEWE EERE
R
R
R
R
R/W
R/W

R/W
R/W
0
0
0
0
0
0
X
0
Đâ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ữ. Sau đây là chức năng của từng bit.
Bit 3 - EERIE (EEPROM Ready Interrup 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 1 trong thanh ghi SREG lên 1) thì EEPROM sẽ
tạo ra 1 ngắt với CPU khi bit EEWE được xoá, điều này có nghĩa là khi các ngắt được
cho phép ( bit 1 trong thanh ghi SREG và bit EERIE tronh thanh ghi EECR được set
thành 1) với quá trình ghi vào ROM vừa xong thì sẽ tạo ra 1 ngắt với CPU, chương

Trang 11


-

-

-

trình sẽ nháy với vectơ ngắt có địa chỉ là 002C để thực hiện 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 dượ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 xoá bởi phần cứng sau 4 chu kỳ máy.
Bit1 - 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ì 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 xoá bit này về 0.
Trước khi dữ liệu vào EEPROM ta cần phải biết chắc là không có qúa 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. Sau
khi quá trình đọc dữ liệu từ 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:
Chờ cho bit EEWE về 0
Cấm tất cả các ngắt
Ghi địa chỉ vào thanh ghi EEAR
Ghi dữ liệu mà ta cần ghi vào EEPROM vào thanh ghi EEDR
Set bit EEMWE thành 1
Set bit EEWE thành 1
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.
Trang 12


Đọ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:
+ Chờ cho bit EEWE về 0.
+ Ghi địa chỉ vào thanh ghi EEAR .
+ Set bit EERE lên 1


Bộ định thời Timer / Counter
Vi điều khiển Atmega16 có tất cả ba timer/counter khác nhau gồm: hai bộ
timer/counter 8 bit và một bộ timer/counter 16 bit. Timer/counter2 có thể được chọn
nguồn clock không đồng bộ từ dao động bên ngoài. Dao động này được tối ưu hoá khi
sử dụng thạch anh đồng hồ 32.768 Khz, khi đó Timer/counter2 được sử dụng như một
đồng hồ thời gian thực (RTC : real timer clock). Timer/counter 0 và 1 có bộ chia tần số
riêng, nó có thể chia tần số gần như một bộ chia tần số 10bit. Timer/counter2 thì có
một bộ chia riêng của nó. Cả ba Timer/counter này có thể được sử dụng như một bộ
định thời (timer) với nền xung clock bên trong của hệ thống hoặc có thể sử dụng như
bộ đếm (counter) với nguồn xung kích (trigger) bên ngoài.
+ Hoạt động định thời
+ So sánh ngõ ra.
+ Điều chế độ rộng xung.
 Timer/counter0:

Trang 13



-

-

Hình 2.3 Sơ đồ cấu tạo Timer/counter0
Timer/counter 0 là Timer/counter 8 bit. Với dòng Atmega8 thì thanh ghi này chỉ có
chức năng là tạo ra một khoảng thời gian và đếm sự kiện. Nhưng với dòng Atmega16
thì chức năng của timer/ counter 0 được nâng lên như các timer khác.
Có 4 thanh ghi được thiết kế riêng cho hoạt động và điều khiển của T/C0 đó là:
TCNT0 (Timer/ Counter Register): là thanh ghi 8 bít chứa giá trị vận hành của T/C0.
Thanh ghi này cho phép đọc và ghi giá trị một cách trực tiếp.
Timer/Counter Register(TCNT0)
7
0
TCCR0 (Timer/ Counter control register): là thanh ghi điều khiển hoạt động của T/C0.
Tuy là thanh ghi 8 bit nhưng thực chất chỉ có 3 bít có tác dụng CS00, CS01, CS02.
Timer/Counter Control Register (TCCR0)
FOC0 WGM00 COM01 COM00 WGM01 CS02
CS01
CS00
7
0
Các bít CS01, CS00, CS02 gọi là các bít chọn nguồn xung nhịp cho T/C0. Chức năng
này được mô tả trong bảng:

Bảng 2.1 trạng thái của các bit Timer/ Counter control register
-

Thanh ghi mặt nạ ngắt (TIMSK_Timer/Counter interrupt mask register): là thanh ghi

mặt nạ ngắt của tất cả các Timer/Counter. Trong đó chỉ có bít TOIE0 tức là bít số 0 là
liên quan đến Timer/counter 0, bít này cho phép ngắt cờ tràn Timer/counter0.
Trang 14


-

Thanh ghi cờ nhớ (TIFR_Timer/counter interrupt flag register): là thanh ghi cờ nhớ
cho tất cả các bộ Timer/counter. Trong thanh ghi này bít số 0, TOV0 là cờ chỉ thị ngắt
tràn của Timer/counter0. Khi có ngắt tràn bít này tự động bằng 1.

 Timer/counter1 (Timer/counter 16 bit):

Hình 2.4 Sơ đồ cấu tạo Timer/counter1
Là bộ Timer/counter 16 bít có 5 chế độ hoạt động. Ngoài chức năng thông thường nó
còn được dung để tạo ra xung PWM dùng cho các mục đích điều khiển. Có thể tạo 2
tín hiệu PWM độc lập trên các chân OC1A (chân 15) và OC1B (chân 16) bằng
Timer/counter1. Đây là Timer/counter lí tưởng cho lập trình đo lường và điều khiển vì
nó có độ phân giải cao và có khả năng tạo xung điều rộng.
Trang 15


-

-

-

-


Vì là Timer/counter16 bít trong khi độ rộng của bộ nhớ dữ liệu là 8 bít nên cần dùng
những cặp thanh ghi 8 bít để tạo thành thanh ghi 16 bit.
TCNT1H và TCNT1L: là 2 thanh ghi 8 bít tạo thành thanh ghi 16 bit TCNT1 chứa giá
trị vận hành của Timer/counter1. Cả hai thanh ghi cho phép đọc và ghi giá trị một cách
trực tiếp. Hai thanh ghi được kết hợp như sau:

TCCR1A và TCCR1B: là hai thanh ghi điều khiển hoạt động của Timer/Counter1. Tất
cả các chế độ hoạt động của Timer/counter1 đều được xác định thông qua các bít trong
hai thanh ghi này. Tuy nhiên, hai thanh ghi này không phải là hai thanh ghi byte cao
và thấp mà là hai thanh ghi độc lập. Các bít trong hai thanh ghi bao gồm các bít chọn
mode - WGM hay chọn dạng sóng, các bít qui định ngõ ra - COM, các bít chọn giá trị
xung nhịp - CS.

Thanh ghi TCCR1B có 3 bít CS10, CS11, CS12 là bít chọn xung nhịp cho
Timer/counter1.
OCR1A và OCR1B: Trong lúc Timer/counter1 hoạt động giá trị thanh ghi TCNT1
tăng , giá trị đó liên tục được so sánh với các thanh ghi OCR1A và OCR1B (so sánh
độc lập với từng thanh ghi). Khi giá trị so sánh bằng nhau thì một ngắt hoặc một sự
thay đổi trên OC1A hoặc/và OC1B xảy ra. Chính vì điều này mà có thể tạo hai kênh
PWM bằng Timer/counter1.

ICR1: Khi có môt sự kiện trên chân ICP1 thanh ghi ICR1 sẽ bắt giữ giá trị của thanh
ghi đếm TCNT1, một ngắt có thể xảy ra vì thế đầu vào có thể được dùng để cập nhật
giá trị “top” (giá trị mà tại đó xảy ra thay đổi trạng thái) của Timer/counter1.
Trang 16


-

TIMSK: Các bộ Timer/counter trên AVR đều dùng chung thanh ghi mặt nạ ngắt. Vì

thế, TIMSK cũng được dùng để qui định ngắt cho Timer/counter1.

Bít 2 trong TIMSK là TOIE1 : Qui định ngắt tràn cho Timer/counter1.
Bít 3 – OCIE1B : Cho phép ngắt khi có 1 ‘match-bằng nhau’ xảy ra trong so sánh
TCNT1 với OCR1B.
Bít 4 – OCIE1A : Cho phép ngắt khi có 1 ‘match’ xảy ra trong so sánh OCR1A
Bít 5 – TICIE1: Cho phép ngắt trong trường hợp input capture được dùng.
 Timer/counter2 (Timer/counter 8bit):

Hình 2.5 Sơ đồ cấu tạo Timer/counter2

Trang 17


-

Timer/counter2 tuy là một module 8 bít nhưng có bốn chế độ hoạt động. Ngoài ra, nó
còn được sử dụng như một module canh chỉnh thời gian cho các ứng dụng thời gian
thực.
Thanh ghi TCNT2: là thanh ghi 8 bit chứa giá trị vận hành của Timer/Counter2. Cho
phép đọc và ghi giá trị một cách trực tiếp.
7
6
5
4
3
2
1
0
TCNT2[7:0]

R/W
R/W
R/W
R/W
R/W
R/W R/W R/W
0
0
0
0
0
0
0
0
- Thanh ghi TCCR2: là thanh ghi điều khiển hoạt động của Timer/Counter2. Tất cả các
chế độ hoạt động của Timer/Counter2 đều được xác định thông qua các bit chọn dạng
song – PWM, các bit qui định ngõ ra – COM, các bit chọn giá trị xung nhịp – CS.
7
6
5
4
3
2
1
0
FOC2

WGM20

COM21


COM20

WGM21

CS22

CS21

CS20

W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
- Thanh ghi OCR2: Trong khi Timer/Counter2 hoạt động thì giá trị thanh ghi TCNT2
tăng. Giá trị đó luôn được đem ra so sánh với thanh ghi OCR2 nếu xảy ra bằng nhau
thì một ngắt hay một sự thay đổi xuất hiện trên OC2.


-

Thanh ghi TIMSK: Chỉ có 2 bit có tác dụng với Timer/Counter2. Bit TOIE2 qui định
ngắt tràn cho Timer/Counter2; Bit OCIE2 cho phép ngắt khi có sự bằng nhau xảy ra ở
so sánh giữa TCNT2 với OCR2.

-

Thanh ghi TIFR: Bit thứ 6 và 7 là cờ trạng thái của Timer/Counter2.



Ngắt (Interrup)
Trang 18


-

-

+
+
+
+

-

Khái niệm về ngắt :
Ngắt là sự kiện bên trong hay bên ngoài làm ngắt bộ vi điều khiển để báo cho nó biết

rằng thiết bị cần dịch vụ của nó.
Một bộ vi điều khiển có thể phục vụ một vài thiết bị, có 2 cách để thực hiện điều này
đó là sử dụng các ngắt Interrup và thăm dò ( polling). Trong phương pháp sử dụng các
ngắt thì mỗi khi có thiết bị bất kỳ cần đến dịch vụ của nó thì nó báo cho bộ vi điều
khiển bằng cách gửi 1 tín hiệu ngắt. Khi nhận được tín hiệu ngắt thì bộ vi điều khiển
ngắt tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị. Chương trình
đi cùng ngắt được gọi là dịch vụ ngắt ISR hay còn gọi là chương trình quản lý ngắt.
Còn trong phương pháp thăm dò thì bộ vi điều khiển hiển thị liên tục tình trạng của 1
thiết bị đã cho và điều khiển thỏa mãn thì nó phục vụ thiết bị. Sau đó chuyển sang hiển
thị tình trạng của thiết bị kế tiếp cho đến khi tất cả đều được phục vụ.
Điểm mạnh của phương pháp ngắt là bộ vi điều khiển là phục vụ rất nhiều thiết bị tất
nhiên là không cùng tại một thời điểm.
Trình phục vụ ngắt:
Đối với mỗi ngắt thì phải có 1 trình phục vụ ngắt ISR hay trình ngắt. Khi 1 ngắt được
gọi thì bộ vi điều khiển sẽ phục vụ ngắt. Đối với mỗi ngắt thì có 1 vị trí cố định trong
bộ nhớ giữa đị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 vectơ ngắt.
Khi kích hoạt 1 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 trữ đia chỉ của lệnh kế tiếp (PC ) vào
ngăn xếp.
Nó nhảy đến 1 vị trí cố định trong bộ nhớ được gọi là bảng vectơ ngắt nơi lưu giữ địa
chỉ của 1 trình phục vụ ngắt.
Bộ vi điều khiển nhận địa chỉ ISR từ bảng vectơ 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 và 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 2 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ỉ đó.
Bảng vectơ ngắt của Atmega 16

Trang 19



Bảng 2.2 vectơ ngắt của Atmega 16

USART
USART : Bộ truyền nhận nối tiếp đồng bộ và bất đồng bộ phổ dụng . Đây là khối
chức năng dùng cho việc truyền thông giữa vi điều khiển với các thiết bị khác. Trong
vấn đề truyền dữ liệu số, có thể phân chia cách thức (method) truyền dữ liệu ra 2 chế
độ (mode) cơ bản là: chế độ nhận đồng bộ (shynchronous) và chế độ nhận bất đồng bộ
(Asynchronous). Ngoài ra, nếu có góc độ phần cứng thì có thể phân chia theo cách
khác đó là: Truyền nhận dữ liệu theo kiểu nối tiếp (serial) và song song (paralen)
• Truyền đồng bộ:
Là kiểu truyền dữ liệu trong đó bộ truyền (Transmitter) và bộ nhận (Receiver) sử
dụng chung một xung đồng hồ (clock). Do đó hoạt động truyền và nhận dữ liệu diễn ra
đồng thời. Xung clock có vai trò là tín hiệu đồng bộ cho hệ thống (gồm khối truyền và
khối nhận). Ưu điểm của kiểu truyền đồng bộ là tốc độ nhanh, thích hợp khi truyền dữ
liệu khối block.
• Truyền bất đồng bộ:
Là kiểu truyền dữ liệu trong đó mỗi bộ truyền (transmitter) và bộ nhận (receiver) có
tạo bộ xung (clock) riêng, tốc độ xung clock ở 2 khối này có thể khác nhau, nhưng
thường không quá 10%. Do không dùng chung xung clock, nên để đồng bộ quá trình
truyền và nhận dữ liệu, người ta phải truyền các bit đồng bộ (Start, stop,…) đi kèm với
các bit dữ liệu. Các bộ truyền và bộ nhận sẽ dựa vào các bit đồng bộ này quyết định


Trang 20


khi nào sẽ thực hiện hay kết thúc quá trình truyền hoặc nhận dữ liệu. Do đó, hệ thống
truyền không đồng bộ còn được gọi là hệ thống truyền “ tự đồng bộ “.

Từ 2 kiểu truyền dữ liệu cơ bản trên, người ta dưa ra nhiều giao thức truyền khác
nhau như : SPI (đồng bộ), USRT (đồng bộ), UART (bất đồng bộ)

Hình 2.6 Sơ đồ khối bộ USART

-

- Sơ đồ khói bộ USART được chia làm ba phần chính
khối tạo xung
Bộ truyền
Bộ nhận
- Bộ tạo xung clock :
Có chức năng thiết lập tốc độ Baud. Bộ truyền bao gồm một thanh ghi đệm và một
thanh ghi dịch, việc ghi dữ liệu vào bộ đếm cho phép quá trình truyền liên tục mà
không có độ trễ giữa các khung. Bộ nhận có cấu tạo phức tạp nó bao gồm việc kiểm

Trang 21


tra chẵn lẻ, điều khiển logic, thanh ghi dịch, đồng thới nó có 2 cấp độ trong bộ đếm
nhận.
Ngoài việc đinh dạng khung như bộ truyền thì bộ nhận có khả năng phát hiện lỗi
khung, lỗi chẵn lẻ, lỗi tràn dữ liệu.

+ Txclk : xung đồng hồ bộ truyền
+ Rxclk : xung đồng hồ bộ nhận
+ Xcki : tín hiệu vào từ chân
+ XCK: sử dụng cho truyền đồng bộ Master
+ XCKO : tín hiệu xung clock ngõ ra tới chân XCK, sử dụng cho hoạt động truyền đồng


bộ slave
+ Fose: tần số từ chân XTAL
- Định dạng khung:
Trong chế độ truyền không đồng bộ, khung dữ liệu truyền đi không có một tín
hiệu clock để đồng bộ hoá dữ liệu (vì thế mà gọi là không đồng bộ), quá trình đồng bộ
hoá giữa bộ thu và bộ phát được thực hiện nhờ các bit đồng bộ là start bit và stop bit .
Một khung nối tiếp bao giờ cũng được định dạng theo thứ tự 1 start bit, các bit giữ liệu
(data bit) 1 bit pairty tuỳ chọn phục vụ lỗi kiểm lỗi và kết thúc bằng 1 hoặc 2 stop bit.

Trang 22


+
+
+
+




-

St : bit start ( mức thấp )
(n) : bit dữ liệu ( 0 đến 8 )
P: bit chẵn lẻ
Sp: bit stop ( mức cao )
IDLE : không có dữ liệu truyền ( mức cao trong suốt thời gian idle )
USART chấp nhận các định dạng khung sau:
1 start bit (luôn có mức logic thấp, gọi là space) .
5, 6, 7, 8 hoặc 9 data bits.

Không có, hoặc 1 bit parity chẵn/lẻ.
1 hoặc 2 stop bit (luôn có mức logic cao, gọi là mark).
Quá trình truyền USART:
Việc truyền dữ liệu nối tiếp ra ngoài thông qua chân TxD. Một quá trình truyền dữ
liệu từ MCU đi được khởi tạo bằng việc viết dữ liệu vào thanh ghi đệm dữ liệu UDR,
sau đó dữ liệu được chuyển tới thanh ghi dịch bộ phát khi thanh ghi dịch đã sẵn sàng
truyền một byte mới. Các bit start và stop được bổ sung vào khung dữ liệu trong thanh
ghi này với thiết đặt từ thanh ghi điều khiển bộ phát. Cũng như vậy bit thứ 9 (nếu có)
có thể được thêm vào TXB8 trong thanh ghi UCSRB trước khi byte thấp của ký tự
được viết vào UDR. Khi thanh ghi dịch dịch hết dữ liệu (đã được điều chế) ra thế giới
bên ngoài thông qua chân TxD, nó sẽ sẵn sàng nhận dữ liệu mới nếu nó đang ở trạng
thái rỗi hoặc ngay lập tức sau khi bit stop cuối cùng của khung trước đó được truyền
đi. Lưu ý rằng dữ liệu được dịch ra ngoài với bit LSB trước, cuối cùng là MSB.
Quá trình nhận USART:
Phần mềm cho phép thanh ghi dịch nhận dữ liệu nối tiếp từ thế giới bên ngoài thông
qua chân RxD (PD0). Bộ thu bắt đầu tiếp nhận dữ liệu khi dò được một bit Start. Sau
khi dò được bit Stop đầu tiên (end of the frame), dữ liệu được chuyển đến thanh ghi
UDR (bộ đệm dữ liệu bộ thu) không có các Start và Stop bits theo dạng song song để
vào CPU.
USART có 5 thanh ghi:
Thanh ghi vào/ra dữ liệu (UDR).

Trang 23


-

Các thanh ghi đệm dữ liệu của bộ thu và bộ phát của USART cùng chia sẻ vùng địa
chỉ I/O được tham chiếu là thanh ghi dữ liệu UDR. Khi viết vào UDR thì nó thể hiện
như là một bộ đệm truyền, còn khi đọc dữ liệu từ UDR thì nó lại thể hiện như một bộ

đệm nhận. Đối với các bit 5,6 và 7 các bit không dùng sẽ bị bỏ qua bởi bộ đệm truyền
và được đọc là 0 bởi bộ đệm nhận.
Bộ đệm truyền chỉ có thể được viết khi cờ UDRE trong thanh ghi UCSRA được set.
Dữ liệu viết vào UDR khi cờ UDRE không được set sẽ bị bỏ qua. Khi dữ liệu được
viết vào bộ đệm truyền và bộ đệm truyền được enable thì nó sẽ tải dữ liệu vào thanh
ghi dịch truyền nếu nó rỗng.
Bộ đệm thu gồm hai mức FIFO. Hai thanh ghi đệm hoạt động như một bộ đệm vòng
FIFO. FIFO sẽ thay đổi trạng thái của nó bất cứ khi nào bộ đệm nhận được truy cập.
Quan trọng là các cờ lỗi (FE và DOR), và bit dữ liệu thứ 9 (RXB8) được đệm cùng với
dữ liệu trong bộ đệm nhận. Vì vậy các bit trạng thái luôn phải được đọc trước khi
thanh ghi UDR được đọc.
Thanh ghi điều khiển và trạng thái A (UCSRA).
Bit 7 – RXC: USART Receive Complete. Bit này được set khi có dữ liệu không đọc
được vào bộ đệm nhận, hay bộ đệm nhận đã đầy và nó bị xoá khi bộ đệm nhận là rỗng.
Cờ RXC có thể sử dụng để phát ra một ngắt báo Receive Complete.
Bit 6 – TXC: USART Transmit Complete: Bit này được set nếu quá trình truyền hoàn
thành,
đó

tại
lúc
kết
thúc
một
khung
gửi
đi.

Bit 5 – UDRE: USART Data Register Empty. Bit này được set nếu thanh ghi dữ liệu
phát (bộ đệm truyền) là rỗng và sẵn sàng nhận dữ liệu mới. Cờ này cũng có thể dùng

để phát ra một ngắt.
Bit 4 – FE: Bit này được thiết lập nếu kí tự tiếp theo trong bộ đệm nhận có một lỗi
khung khi nhận. Nghĩa là, khi stop bit của kí tự tiếp theo trong bộ đệm nhận bằng 0.
Bit 3 – DOR: Bit này được thiết lập nếu một dữ liệu tràn được phát hiện.
Bit 2 – PE: Bit này được set nếu kí tự tiếp theo trong bộ đệm nhận có một lỗi chẵn lẻ.
Bit 1 – U2X: Bit này chỉ có hiệu lực cho các hoạt động không đồng bộ. Nó bằng 0 khi
sử dụng hoạt động đồng bộ.
Bit 0 – MPCM: Bit điều khiển cho phép chế độ truyền thông đa xử lý.
Trang 24


-

Thanh ghi điều khiển và trạng thái B (UCSRB).

-

Bit 7 – RXCIE: Bit này bằng 1 cho phép ngắt trên cờ RXC.
Bit 6 – TXCIE: Bit này bằng 1 cho phép ngắt trên cờ TXC.
Bit 5 – UDRIE: Bit này bằng 1 cho phép ngắt UDRE.
Bit 4 – RXEN: Bit này bằng 1 cho phép nhận USART.
Bit 3 – TXEN: Cho phép phát USART.
Bit 2 – UCSZ2: Bit kết hợp với UCSZ[1;0] bit trong UCSRC đặt số bit dữ liệu trong
một khung sử dụng bộ thu và bộ phát.
Bit 1 – RXB8: là bit dữ liệu thứ 9 của kí tự nhận khi hoạt động với kiểu nối tiếp.
Bit 0 – TXB8: là bit thứ 9 để được truyền đi khi hoạt động với kiểu nối tiếp.
Thanh ghi điều khiển và trạng thái C (UCSRC).

-


Bit 7 – URSEL: Register Select. Bit này chọn việc truy nhập vào UCSRC hoặc
UBRRH. Nếu URSEL = 1 thì sẽ chọn làm việc với UCSRC
Bit 6 – UMSEL: USART Mode Select. Bít này dùng để chọn giữa chế độ hoạt
động đồng bộ (UMSEL = 1) hay không đồng bộ (UMSEL= 0).
Bit 5:4 là những bit cho phép và thiết lập kiểm tra chẵn lẻ. Khi được kích hoạt, bộ
truyền tự động tạo và truyền chẵn lẻ của các bit dữ liệu trong phạm vi của khung
truyền. Bộ thu sẽ tạo ra một giá trị chẵn lẻ cho các dữ liệu đến và so sánh. Nếu không
phù hợp, cờ PE trong USRA được set.
Bit 3 – USBS: lựa chọn số bit stop được chèn vào bộ phát. Bộ thu bỏ qua thiết lập này.
USBS=0 (1 bit); USBS=1 (2 bit).
Bit UCSZ[1;0]: Bit kết hợp với các bit UCSZ2 và UCSRB thiết lập số bit dữ liệu trong
một khung truyền.
Thanh ghi tốc độ Baud (UBRRL và UBLLH):

Trang 25


×