You are on page 1of 115

BÙI HÓNG HUẾ - BÙI XUÂN HÒA

HlróUG DẪNTHỊỊỊC HÀNH


VI ĐIỀU KHIỂN AVR

NHÀ XUẤT BẢN XÂY DựNG


HÀ N Ộ I-2 0 1 2
LỜI NÓI ĐẦU

H iện nay, các bộ vi điều khiển đ ã và đang được ứng dụng vào lĩnh vực diêu khiển
động các quá trình công nghệ như: T ự động hoú quá trình sản xuất, điều khiển hệ thối
tr ạ m b ơ m , đ iề u khiển c á c th iế t b ị Ih tiỷ lự c v à k lii n é n , đ iề u k h iể n n lìiệ t đ ộ , đ o lư ờ n g đù
tử... D o giá thành hạ, chi p h í thấp nên ngay cả các thiết bị văn phòng, các thiết bị troi
g ia đ ìn li c ũ n g đ ề u c ó d ù n g đ ế n c á c b ộ v i đ iề u k liiể n . Nhưng v ấ n đ ề đ ặ t r a là là m th ê IU
đ ể m a u chóng tiế p c ậ n , nghiên c ứ u ứ n g d ụ n g c á c b ộ v i đ iể u khiển v à o tr o n g lĩn h Vi
điều khiển, tự động lioá pluic vụ cho sản xuất vù nlui cầu sinh h oạt của cluing ta. I
ràng kliông p hải là chỉ nghiên cứu thuần tuỷ v ề m ặt lí tlutyêt m à cẩn có những klu
nghiệm cụ thẻ.

Xiíấl p h ú t từ thực t ế đỏ, cliúng tôi m ạnh dạn biên soạn cuốn tài liệu H ư ớng d ẫ n thi
h à n h Vi điều k h iể n A V R cùng với Bộ thực tập Vi điều A VR khiển kèm theo nhằm gii
cho các em học sinh, sinli viên tiếp cận với các ứng dụng của Vi điều khiển Iilìanh nil
m ột cách nlianli nhất. T ài liệu tập trung giới thiệu những kiến thức cơ hán nhất vế Ct
trúc và lập trình hệ vi diều kliiển cùng với các bài tập thực hành. Đ ể tìm hiểu sáu tlié
các liọc viên p h ả i đọc các tài liệu li thuyết vê vi điều kliiển.

T ài liệu cũng có th ể dìm làm sácli tham khảo cho các giáo viên dạy ngliê điện, c
sinlì viên không chuyên điện nhưng có liên quan đến chuyên ngànli tự dộng hoá.

D o bộ lài liệu đê' cập đến nhiều vấn đ ề mới, viết cho nhiều đối tượng ở các trình
khác nhau nên kliông tránh khỏi những thiêìi sót. Kính m ong các bạn đọc gần xa, c
chuyên ẹia tham gia đóng góp ỷ kiến đ ể lần tái bản sau dược hoàn thiện liơn.

C ác tác giá
Phần I

TỔNG QUAN VỂ ATEMEGA 16 VÀ HƯỚNG DAN c à i đặt


VÀ SỬ DỤNG PHẦN MỂM CODE VISION AVR

I. T Ổ N G Q U A N V Ể A T E M E G A 1 6

Các tính năng của A tm egaló:

- H iệu xuất cao (high perform ance), là loại vi điều khiển A V R 8 bit công suất thấp

- Cấu trúc lệnh đơn giản, thời gian thực thi lệnh như nhau,

o 130 lệnh thực thi trong vòng 1 chu kì chip.

o 32 thanh ghi công dụng chung 8 bit.

o Đ ẩy dù các xử lí tĩnh.

o H ỗ trợ 16 M IPS khi hoạt động ở tẩn số 16 MHz.

o T ích hợp bộ nhân 2 thực hiện trong 2 chu kì chip.

- Bộ nhớ chương trình và dữ liệu không bay hơi (nonvolatile).

o 16k byte trong hệ thống flash khả trình có thể nạp và xóa 1,000 lần.

o T ùy chọn khới động phần mã với các bit nhìn độc lập trong hệ thống bằng cá
vào chương trình khới động chip.

o 512 byte E EPR O M có thể ghi và xóa 100,000 lần.


o Ik byte ram nhỡ tinh trong (internal SRAM),
o Lập trình khóa cho phần mềm bảo mật.
- Tính năng ngoại vi
o 2 bộ đinh thòi/bộ đếm (timers/counters) 8 bit với các c h í độ đếm riêng rẽ và
kiểu so sánh.
o 1 bộ định thời/bộ đếm (timer/counter) 16 bit với các chế độ đếm riêng rẽ, kiểu
so sánh và kiểu bắt sự kiện.
o Bộ đếm thời gian thực với máy giao động riêng rẽ.
o 4 kênh băm xung PWM.
o 8 kênh ADC 10 bit.
o Byte định hướng 2 đường giao tiếp nối tiếp,
o Giao tiếp USART nối tiếp khả trình,
o Giao tiếp SPI nối tiếp chủ/tớ (master/slave).
o Bộ định thời khả trình giám sát xung nhịp của chip 1 cách riêng rẽ.
o Tích hợp bộ so sánh tín hiệu tương tự.
- Giao tiếp JTAG
- Các tính năng đặc biệt của vi điểu khiển
o Chế độ bật nguồn reset và phát hiện Brown-out khả trình,
o Tích hợp mạch dao động RC bên trong,
o Các ngắt trong và ngoài.
o 6 chế độ nghỉ: rảnh rỗi, giảm nhiễu ADC, tiết kiệm năng lượng, nguồn thấp.
Standby và Extended Standby.
- Vào/ra và các gói dữ liệu
o 32 chân vào ra khả trình,
o 40-pin PDIP and 44-lead TQFP.
- Điện áp sừ dụng
o 2.7 - 5.5V dùng với atm egalóL.
o 4.5 - 5.5V dùng với atm egaló.
- Tốc độ xung nhịp dùng cho chip
o 0 - 8 MHz cho atm egalóL.
o 0 - 16 MHz cho atm egalỗ.

6
1. Sơ dồ ch ân

P D IP

(XCK/TO) PBO c 1 40 □ PAO (ADCO)


(T1) PB1 c 2 39 J PA1 (ADC1)
(INT2/AIN0) PB2 r 3 38 ~ì PA2 (ADC2)
(OCO/AIN1) PB3 c 4 37 3 PA3 (ADC3)
(55) PB4 :: 5 36 3 PA4 (ADC4)
(MOSI) PB5 c 6 35 □ PA5 (ADC5)
(MISO) PB6 z 7 34 J PA6 (ADC6)
(SCK) PB7 Z 8 33 □ PA7 (ADC7)
RESET r 9 32 □ AREF
v c c z 10 31 ~ì GND
GND !Z 11 30 3 AVCC
XTAL2 L 12 29 J P C 7 (TOSC2)
XTAL1 c 13 28 1 PC6 (TOSC1)
(RXD) PDO 14 27 3 PC5 (TDI)
(TXD) PD1 L 15 26 □ PC4 (TDO)
(INTO) PD2 z 16 25 □ PC3 (TMS)
(INT1) PD3 r 17 24 J PC2 (TCK)
(OC1B) PD4 r 18 23 3 PC1 (SOA)
(OC1A) PD5 C 19 22 □ PCO (SCL)
(ICP1) PD6 L 20 21 □ PD7 (OC2)

A tm eg a ló gồm có 40 chân:

- Chân 1 đến 8 : c ổ n g nhập xuất dữ liệu song song B (PORTB) nó có thể được í
dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu.

- Chân 9 : RESET để đưa chip về trạng thái ban đẩu.

- Chân 10 : v c c cấp nguồn nuôi cho vi điều khiển.

- C hân 11,31 : G N D 2 chân này nối với nhau và nối đất.

- Chân 12,13 : 2 chân XTAL2 và XTAL1 dùng để đưa xung nhịp từ bên ngc
vào chip.

- Chân 14 đến 21: c ổ n g nhập xuất dữ liệu song song D (PO RTD ) nó có thể được
dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu.

- Chân 22 đến 29: c ổ n g nhập xuất dữ liệu song song c (PO RTC) nó có thể được
dụng các chức nãng đặc biệt thay vì nhập xuất dữ liệu.

- Chân 30: A V CC cấp điện áp so sánh cho bộ ADC.

- Chân 32: A R E F điện áp so sánh tín hiệu vào ADC.

- C hãn 33 đến 40: c ổ n g vào ra dữ liệu song song A (PO RTA ) ngoài ra nó còn đu
tích hợp bộ chuyển đổi tín hiệu [ương tự sang tín hiệu số A D C (analog to digì
converter.
L. Lac chan tnanli gni cua VI dieu Khien Atmegal6

a. N hóm các thanh ghi truy xuất E FP R O M


Bít 15 14 13 12 11 10 9 8

- * ■ EEA RỈl EEAR10 EEAR9 EEAR8

EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEARO

7 6 5 4 3 2 1 0

Read/write R R R R R/W R/W R/W R/W

R/W R/W R!W R/W R/W R/W R/W RW

initial Value 0 0 0 0 X X X X

X X X X X X X X

1. Thanh Ghi EEAR (EEARH và EEARL)

EEAR là thanh ghi 16 bit lưu giữ địa chỉ của các ô nhớ của EEPROM, thanh ghi
EEAR được kết hợp từ 2 thanh ghi 8 bit là EEARH và thanh ghi EEARL. Vì bộ nhớ
EEPROM cùa A Tm egal28 có dung lượng 4 Kbyte = 4096 byte = 212 byte nên ta chỉ
cẩn 12 bit của thanh ghi EEAR , 4 bit từ 15 -12 được dự trữ, ta nên ghi 0 vào các bit dự
trữ này.

2. Thanh Ghi EEDR

Bit 7 6 s 4 3 2 1 0

MSB

Read/write R/W R/W R/W

Initial
0 0 0
Value

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

3. Thanh Ghi EECR

Bít 7 6 5 4 3 2 Ị 0

I - I - I EERIE I EEMWE I EEWE I E E fiẼ ~ ~ | EECR

Read/write R R R R RIW R /w Rl tv RIW

Initial Value

Đây là thanh ghi điều khiển EEPROM, ta chỉ sử dụng 4 bit đầu của thanh ghi này,
4 bit cuối là dự trữ, ta nên ghi 0 vào các bit dự trữ. Sau đây ta xét chức nãng của từng bit.
Bit 3 - EERIE: EEPR O M Ready Interrupt Enable: Đây là bit cho phép EEPRO M
ngắt CPU, khi bit này được set thành 1 và ngắt toàn cục được cho thì E EPR O M sẽ tạo ra
m ột ngắt với CPU khi bit EEW E được xóa, điều này có nghĩa là khi các ngắt được cho
phép 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).
K hi bit E ER IE là 0 thì ngắt không được cho phép.

Bit 2 - EEM W E: EEPRO M M aster W rite Enable: Khi bit EEMWE và bit EEWE
là 1 sẽ ra lệnh cho CPU ghi dữ liệu từ thanh ghi EED R vào EEPRO M , địa chỉ của ô nhớ
cần ghi trong EEPRO M được lưu trong thanh ghi EEA R. Khi bit này là 0 thì không cho
phép ghi vào E EPR O M . Bit EEM W E sẽ được xóa bởi phần cứng sau 4 chu kì máy.

Bit 1 - EEW E: EEPR O M W rite 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 EEPRO M . Ở vai trò của m ột bit điều khiển nếu
bit EEM W E đã được set lên 1 thì khi ta set bit EEW E lên 1 sẽ bắt đẩu quá trình ghi dữ
liệu vào E EPR O M . T rong suốt quá trình ghi dữ liệu vào EEPRO M bit EEW E luôn giữ
là 1. Ớ vai trò của m ột bit cờ khi quá trình ghi dữ liệu vào EEPRO M hoàn tất, phần cứng
sẽ tự động xóa bit này về 0. Lúc này ta có thể bắt đầu ghi dữ liệu vào EEPROM .

Bit 0 - EERE: EEPR O M Read Enable : Khi bit này là 1, sẽ cho phép đọc dữ liệu từ
E EPR O M , dữ liệu từ EEPRO M có địa chỉ lưu trong thanh ghi E EA R lập tức được
chuyển vào thanh ghi EED R. Khi bit EERE là 0 thì không cho phép đọc EEPRO M .

b. N h ó m các th a n h g h i vào ra

1. T hanh G hi D D Rx

Đ ây là thanh ghi 8 bit (có thể đọc ghi) có chức năng điều khiển hướng của cổng (là
lối ra hay lối vào). K hi m ột bit của thanh ghi này được set lên 1 thì chân tương ứng với
nó được cấu hình thành ngõ ra. Ngược lại, nếu bit của thanh ghi DD Rx là 0 thì chán
tương ứng với nó được thiết lập thành ngõ vào. Lấy ví dụ: K hi ta set tất cả 8 bit cùa
thanh ghi D D R A đều là 1, thì 8 chân tương ứng của portA là PA1 tới PA7 (tưcmg ứng
với các chân sô 50 tới 44 của vi điểu khiển) được thiết lập thành ngõ ra.

1 DDA7 DDA6 VD A5 DDA4 DDA3 DDA2 DDA1 LSB

R/W R/W

initial
0 0
Value

Thanh ghi DDRA

9
/ . / nanh u m r u KI X

PORTx là thanh ghi 8 bit có thể đọc ghi. Đây là thanh ghi dữ liệu cùa PORTx, nếu thanh
ghi DDRx thiết lập cổng là lối ra, khi đó giá trị của thanh ghi PORTx cũng là giá trị cùa các
chân tương ứng của PORTx, nói cách khác, khi ta ghi một giá trị logic lên 1 bít của thanh
ghi này thì chân tưcmg ứng vói bit đó cũng có cùng mức logic. Khi thanh ghi DDRx thiết lập
cổng thành lối vào thì thanh ghi PORTx đóng vai trò như một thanh ghi điều khiển cổng. Cụ
thể, nếu một bit của thanh ghi này được ghi thành 1 thì điện trở treo (pull-up resistor) ờ chân
tương ứng vói nó sẽ được kích hoạt, ngược lại nếu bit được ghi thành 0 thì điện trờ treo ờ
chân tương ứng sẽ không được kích hoạt, cổng ờ trạng thái cao trở (Hi-Z).
Bít 7 6 s 4 3 2 1 0

PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTAỈ PORTAO PORTA

Read/
R/W R/W R/W R/W R/W R/W R/W R/W
write
initial
Value

Thanh ghi PORTA

3 .Thanh Ghi PINx

PINx không phải là một thanh ghi thực sự, đày là địa chỉ trong bộ nhớ I/O kết nối
trực tiếp tới các chân của cổng. Khi ta đọc PORTx tức ta dọc dữ liệu được chốt trong
PORTx, còn khi đọc PINx thì giá trị logic hiện thời ở chân của cổng tương ứng được
đọc. Vì thế đối với thanh ghi PINx ta chỉ có thể đọc mà không thể ghi.

BU 7 6 5 4 3 2 1 0

PỈNA7 PINA6 PINAS PINA4 PINA3 PỈNA2 PINAI PỈNAO PỈNA

Read/ write
R R R R R R R R

initial
NIA NIA NIA NIA NIA NIA NIA NIA
Value

Thanh ghi PINA

c. Các thanh ghi của bộ định thời

1. Thanh ghiTC C R ỈA (Timer/Counterl Control Register)


Bít 7 6 5 4 3 2 1 0

COMIAI COM1AO COM1B1 COMỈBO COM1C1 COMICO WGMI1 WGM10 TCCR1A

R/W R/W RÍW R/W R/W RIW R/W RIW

10
Bit 7:6 - C O M nA lĩO : C om pare O utput M ode for C hannel A

Bit 5:4 - COMnBIrO: Com pare Output M ode for Channel B

Bit 3:2 - C O M nC liO : Com pare O utput M ode for C hannel c


Bit 1:0 - W G M n l:0: W aveform G eneration M ode

Bit 7:2 - C O M n X l:0 (X=A, B, C): Com pare O utput M ode for C hannel X :

Đ ể tìm hiểu cách thức sử dụng ta theo dõi các bảng dưới đây:

COMnAl/COM COMnAO/COMn Description


nBl/COMnCl BO/COMnCO
0 0 Hoạt động ở chế độ thông thường các cổng
OCnA/OCnB/OCnC không kết nối
0 1 Chuyển OCnA/OCnB/OCnC ở chế độ so sánh khớp
1 0 Xóa OCnA/OCnB/OCnC khỏi chế độ so sánh khớp
(đầu ra mức thấp)
1 1 Đặt OCnA/OCnB/OCnC ở chế độ so sánh khớp (đầu
ra mức cao)

Bảng 58. Hành vi cùa các cliỡn OCnX(X=A, B, C; 11=1, 3) phụ thuộc vào các thiết lập cùa
các bit COMnAl :0, COMnBÌ :0, COMnCl.O trong c h ế độ non-PWM

COMnAl/COM COMnAO/COMn Description


nBl/COMnCl BO/COMnCO
0 0 Hoạt động ờ chế độ thông thường các cổng
OCnA/OCnB/OCnC không kết nối
0 1 WGMn3:0=15; chuyển OCnAỜ chế độ so sánh khớp
OCnB/OCnC không kết nối (cổng hoạt động ở chế
độ bình thường)
0 các chế độ cài đặt WGMn khác, các cổng hoạt
động bình thường OCnA/OCnB/OCnC không kết nối
1 0 Xóa OCnA/OCnB/OCnC khỏi chế độ so sánh khớp,
đặt OCnA/OCnB/OCnC ờ TOP
1 1 Đặt OCnA/OCnB/OCnC khỏi chế độ so sánh khớp,
xóa OCnA/OCnB/OCnC khỏi TOP

Being 59. Hành vi của các chăn OC.nXfX = A, B, C; II = 1, 3) pliụ thuộc vào các tliiết lập
cùa các bit COMiiAl :0, COMiìBl :0, COM nCl :0 tromg chế độ Fast-PWM
COMnAl/COM COMnAO/COMn Description
nBl/COMnCl BO/COMnCO
0 0 Hoạt động ờ chế độ thông thường các cổng
OCnA/OCnB/OCnC không kết nối
0 1 Chuyển OCnA/OCnB/OCnC ở chế độ so sánh khớp
1 0 Xóa OCnA/OCnB/OCnC khòi chế dô so sánh khớp
(đầu ra mức thấp)
1 1 Đặt OCnA/OCnB/OCnC ở chế độ so sánh khớp
(đẩu ra mức cao)

Bảng 60. Hành vi của các chân OCnX(X=A, B, C; /2=7, 3) phụ thuộc vào các thiết lập của
các bit COMnAl :0, COMnBl :0, COMnCl :0 íromg chế độ PWM hiệu chỉnh pha và tán số

Table 61. W aveform Generation M ode Bit Description

WGMn2 WGMn1 WGMnO Timer/Counter Mode of Update of TOVn Flag


Mode WGMn3 (CTCn) (PWMn1) (PWMnO) Operation TOP OCRnx at Set on

0 0 0 0 0 Normal OxFFFF Immediate MAX


1 0 0 0 1 PWM, Phase Correct. 8-oit 0>:00FF TOP BOTTOM

2 0 0 1 0 PWM, Phase Correct. 9-bit 0*01FF TOP BOTTOM


3 0 0 1 1 P'A'M, Phase Correct. 10-bit 0x03FF TOP BOTTOM
4 0 1 0 CTC OCRnA Imn-ediate MAX

5 0 1 1 Fast PWM. 8-bit OxOOFF TOP TOP


6 0 1 1 0 Fast PWM. 9-bit 0x01FF TOP TOP
7 0 1 1 1 Fast PWM 10-bi; 0X03FF TOP TOP
8 1 0 0 0 PWM. Pn3se and frequency
!CRn BOTTOM BOTTOM
Correct
9 1 0 0 p-AM. P^ase and Frequency
OCRnA BOTTOM BOTTOM
Correct
1C 1 ũ 1 0 PWM. Pr,ase Correct !CRn TOP BOTTOM
11 1 0 1 1 P'A'M Pnase Correct OCRnA TOP BOTTOM
12 1 1 0 CTC (CRn Immediate MAX
13 1 1 0 1 (Reserved} - - -

14 1 1 1 0 -Fast P'.vw iCRn TOP TOP


15 1 1 1 t Fast PWM OCRnA TOP TOP

Bảng 61. Lựa chọn các chê độ thục tlii cùa bộ địnli tlìời 1(3)

2. Thanh ghi TCCRIB


7 6 5

ICNC1 ICES1 WGM13 WGM12 CS12 c su CS10 TCCR1B

R/W R/W R/W R/W R/W R/W R/W

12
Bit 7 - IC NCn: Input Capture N oise Canceler

Bit 6 - IC ESn: Input Capture Edge Select

Bit s - Reserved Bit

Bit 4:3 - W G M n3:2: W aveform G eneration M ode

Bit 2:0 - CSn2:0: Clock Select

Bit 7 - IC NCn: Input C apture Noise C anceler (viết tát: ICNC): Việc set bit này
tới 1 sẽ kích hoạt chức nãng chống nhiễu của bộ chống nhiễu lối vào (ICNC). K hi chức
nãng ICNC được kích hoạt thì ngõ vào từ chân ICPn sẽ được lọc. Chức năng lọc đòi hỏi
4 m ẫu có giá trị bằng nhau liên tiếp ở chân ICPn cho sự thay đổi ngõ ra của nó (xem chi
tiết vể khối Input Capture).
Bit 6 - ICESn: I n p u t Capture Edge Select: Bit này lựa chọn cạnh ở chân Input Capture
Pin (ICPn) đùng để bắt “sự kiện trigger” (Trigger event (10)). Khi bit ICESn được thiết lập
thành 0 thì m ột canh dương xuống (falling(3)) được dùng như một trigger (tín hiệu nảy).
Ngược lại, khi bit này được set thành 1 thì một cạnh âm lên (rising(4)) được dùng như một
trigger. Khi xảy ra sự kiện Input capture(2) (theo thiết lập của bit ICESn là 1 hay 0) thì giá
trị của bộ đếm được ghi vào thanh ghi Input Capture Register ICRn (n = 1, 3), và khi đó cờ
ICFn (Input Capture Flag) được set. Điều này sẽ tạo ra một ngắt Input capture nếu ngắt này
được cho phép. Khi thanh ghi ICRn được sử dụng như một giá trị TOP thì chân ICPn không
được kết nối và vì thế chức năng Input capture không được cho phép.

Table 62. Clock S elect Bit Description


CSn2 CSn1 CSnO D escription

0 0 0 No clock source. (Tinier,Counter stopped)

0 0 1 clk|,0/1 (No prescaling

0 ì 0 clk|/0/8 (From prescaler)

0 1 1 clk|/0/64 (From prescaler)

1 0 0 clkl/0;256 (From prescaler)

1 0 I clk„o/1024 (From prescaler)

1 1 0 External clock source on Tn pin Clock on falling edge

I 1 I External clock source on Tn pin Clock on rising edge

Bảng 62. Lựa chọn tốc độ xung clock

Bit 5 : Dự trữ.

Bit 4:3 - W G M n3:2: W aveform G eneration M ode: Đã nói ở phần thanh ghi
TCCR1A .
Bit 2:0 - C Sn2:0: Clock Select: Dùng dể lựa chọn tốc độ xung clock (xem bảng 62).
Để cấm bộ định thời hoạt động ta chỉ cần cho |CSn2, CSnl CSnO) = (0 0 0).

3. Thanh glti TCCR1C

FOC1A FOC1B TCCR1C

w w w R

Bit 7 - FOCnA: Force Output Compare for Channel A


Bit 6 - FOCnB: Force Output Compare for Channel B
Bit 5 - FOCnC: Force Output Compare for Channel c
Bit 4:0 - Reserved Bits
Các bit FOCnA/FOCnB/FOCnC chỉ hoạt động khi các bit WGMn3:0 chỉ định chế độ
Non-PWM. Khi các bit FOCnA/FFOCnB/FOCnC được set thành 1 thì ngay lập tức một
sự kiện “So sánh khớp cưỡng chế” (Forced Compare M atch(l)) xảy ra trong bộ tạo sóng.
Ngõ ra OCnA/OCnB/OCnC được thay đổi theo thiết lập của các bit COMnX 1:0 (n= 1,3;
X=A, B, C), nghĩa là bình thường sự kiện “so sánh khớp” chỉ xảy ra khi khi giá trị bộ
định thời (thanh ghi TCNTn (n= l, 3)) bằng với giá trị thanh ghi OCRnX(n=l,3;
X=A,B,C), nhưng khi các bit FOCnX(n=l, 3; X=A, B, C) được set thành 1 thì sự kiện
“so sánh khớp” sẽ xảy ra mặc dù giá trị của bộ định thời không bằng với giá trị của
thanh ghi OCRnX(n=l,3; X=A,B,C). Chú ý là các bit FOCnA/FOCnB/FOCnC cũng
hoạt động như là những que dò (strobe), vì thế nó là giá trị hiện thời cùa các bit
COMnXliO xác định tác động của “so sánh cưỡng chế” (forced compare). Các que dò
FOCnA/FOCnB/FOCnC không tạo ra bất kì ngắt nào và cũng không xóa bộ định thời
irong chế độ CTC sử dụng thanh ghi OCRnA như là giá trị TOP. Các bit
FOCnA/FOCnB/FOCnC chi có thể ghi, khi đọc các bit này ta luôn nhận được giá trị 0.
Bit 4:0 dự trữ, phái ghi thành 0 khi ghi vào ihanh ghi TCCRnC.

4. Tlìanli G hiTim erlC ounterl- TCN T1H u iư lT C N T lL

TCNTI115.-8I T C S T 1 II

TCNT1[7:0J TC N T1L
R/W R/W RIM' R/W R/W R/W R/W R/W

14
Thanh ghi bộ định thời TCNT1 là thanh ghi 16 bit được kết hợp từ hai thanh ghi
TCNT1H và thanh ghi TCNT1L. Thanh ghi TCNT1 có thế đọc hay ghi. Để cả 2 byte của
TCNT 1 được đọc hay ghi đồng thời người ta dùng m ột thanh ghi tạm 8 bit byte cao 8-
bit Tem porary High Byte Register (TEM P). Thanh ghi TEM P được chia sẽ cho tất ca các
thanh ghi 16 bit khác. Không nên chỉnh sửa thanh ghi TCNTn (n =1,3) khi nó đang đếm
dế tránh bị hỏng Com pare M atch giữa TCNTn và m ột trong những thanh ghi
O C R nX (n=i,3. X=A,B,C).

5. Thanh Ghi O utput C om pare Register 1 A -O C R IA H and O C R ỈA L

7 6 5 4 3 2 1 0

0C R IA [Ỉ5:8Ị OCR1AH

OCR1A[7:0] O C RIAL

Read/Write R/W R /W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

6. Thanh G hi O utput C om pare Register ỉ B -O C R IB H and OCR1BL

Bit 7 6 5 4 3 2 1 0

OCR1B115:8!

OCR1BỊ7.-OI

Read/Write R/W R/W R /W R/W R/W R/W R /W R/W

Initial Value 0 0 0 0 0 0 0 0

7. Thanh Ghi O utput C om pare Register 1 C -O C R IC H and O C R IC L

Bit 7 6 5 4 3 2 1 0

OCR1CỊ15.-8I OCR1C1Ỉ

OCR1C[7:OJ OCR I d .

ReadlWrite R/W R/W R/W R/\V R/\V R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0
Thanh ghi output compare register
(OCR 1A/OCR IB/OCR 1C) là thanh ghi 16 bit,
giá trị cùa nó được liên tục so sánh với bộ đếm
(TCNT1). Khi có sự bằng nhau của hai thanh
ghi này sẽ tạo ra một ngắt so sánh hay một
TEMP (8-bit)
T
dạng sóng ở chân ngõ ra so sánh OcnX
(X=A,B,C). Giống như thanh ghi TCNT1, ♦
TC N T n H (8-bit) T C N T n L (8-bit)
thanh ghi OCRnX (X=A,B,C) cũng là thanh
ghi 16 bit nên để cả hai byte cao và thấp của T C N T n (16-bit Counter) ^

thanh ghi được ghi hay đọc đồng thời khi CPU
cần truy xuất thanh ghi này, người ta dùng H ình 3.1. Thanh glii TEMP
thanh ghi tạm byte cao (TEMP), thanh ghi
TEMP luôn lưu giữ byte cao cùa các thanh ghi 16 bit khi các thanh ghi này cần dùng tới
nó (xem hình 3.1). Chú ý là khi ghi một giá trị vào thanh ghi OCRnX trong lúc bộ dếm
đang chạy, thì giá trị cùa thanh ghi OCRnX có thể cập nhật tức thời, n h ư n g cũng có thể
chỉ được cập nhật khi bộ đếm đạt tới một giá trị nào đó (bảng 61), chẳng hạn, giá trị
TOP, BOTTOM.’.

8. Thanh Ghi Input Captufe Register 1-lC R lH and ICR1L

1CRIỊ7.0I

Read/Write R/W R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0

Thanh ghi Input capture (ICRIn) sẽ cập nhật giá trị cùa bộ đếm TCNTn mỗi khi xảy
ra sự kiện ờ chân ICPn. Ngoài ra thanh ghi này còn được sử dụng để định nghĩa giá trị
TOP cùa bộ đếm. Người ta òũng sử dụng thanh ghi TEMP khi cần truy xuất thanh ghi
ICRn (n= l, 3).

9. Thanh Ghi T imer!Counter Interrupt Mask Register-TIMSK (Interrupt fo r


Timerlcounter ỉ )
Bit 7 6 5 4 3 2 1 0

OCIE2 TOIE2 TICIE1 OCIEIA OCIE1B T01E1 OCIEO TOIEO TIMSK

Read/Write R/W R /w R/W R/W R/W R/W R/W R /w

Initial Value 0 0 0 0 0 0 0 0

16
Bit 5 - TIC IE1: T im er/C ou n terl, Input Capture Interrupt Enable

B it 4 - O CIE1A: T im er/C ou n terl, O utput Com pare A M atch Interrupt Enable

Bit 3 - O CIE1B: T im er/C ou n terl, O utput C om pare B M atch Interrupt Enable

Bit 2 - TO IE1: T im er/C ou n terl, O verflow Interrupt Enable

Bit 5 - TIC IE1: T im er/C ou n terl, Input Capture Interrupt Enable: Khi bit này
được set thành 1 và ngất toàn cục (global interrupt) được cho phép thì ngắt bắt m ẫu ngõ
vào bộ T im er/couterl (T im er/C ounterl Input Capture interrupt) được cho phép. V ector
ngắt tương ứng sẽ được thực thi khi cò ICF1 trong thanh ghi TIFR được set.

Bit 4 - O CIE1A : T im er/C ou n terl, Output Com pare A M atch Interrupt Enable:
Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt
so sánh ngõ ra 1A (T im er/C ounterl Output Com pare A M atch Interrupt) được cho phép.
V ector ngắt tương ứng sẽ được thực thi khi cờ OCF1A trong thanh ghi TIFR được set.

Bit 3 - O C IE1B: T im er/C ou n terl, O utput Com pare B M atch Interrupt Enable:
Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt
so sánh ngõ ra IB (T im er/C ounterl Output Com pare B M atch Interrupt) được cho phép.
V ector ngắt tương ứng sẽ được thực thi khi cờ O C F 1B trong thanh ghi TIFR được set.

B it 2 - T O IE 1 : T im e r /C o u n te rl, O verflow I n te r r u p t E n ab le: Khi bit này được set


thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt cờ tràn bộ định thời 1
(T im er/C ounterl overflow interrupt) được cho phép. V ector ngắt tương ứng sẽ được thực
thi khi CỜTOV1 trong thanh ghi TIFR được set.

10. Tlianh G hi E xtended Tim er/C ounter Interrupt M ask Register-ETIM SK (Interrupt
f o r T im e r ! c o u n te r 3 )

7 6 5 4 3 2 I 0

TICJE3 OCIE3A OC1E3B T01E3 OCIE3C TOIE1C

Read/Write R R RHY R l\y R/W R/W RI IV Rnv

Initial Value 0 0 0 0 0 0 0 0

Bit 7:6 - Reserved Bits

Bit 5 - TIC IE3: T im ei7C ounter3, Input Capture Interrupt Enable

Bit 4 - O C IE3A : Tim er/C ounter3, O utput Com pare A M atch Interrupt Enable

Bit 3 - O C IE 3B : Tim er/C ounter3, O utput Com pare B M atch Interrupt Enable

i r\ ; T>r ..... __ 7 I
Bit 2 - TOIEU: 1 ĩmer/Counterj , Uvertlow Interrupt Enable

Bit 1 - OCIE3C: Timer/Counter3, Output Compare c Match Interrupt Enable

Bit 0 - OCIE1C: Tim er/Counterl, Output Compare c Match Interrupt Enable

Thanh ghi ETIMSK liên quan đến cả hai bộ định thời 1 và 3.

Bit 7:6 - Reserved Bits: Dự trữ, phải ghi các bit này thành 0 khi ghi vào thanh ghi
ETIMSK

Bit 5 - T IC IE 3: Timer/Counter3, Input Capture Interrupt Enable: Khi bit này được
set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt bắt mẫu ngõ vào
bộ Timer/couter 3 (Timer/Counter3 Input Capture interrupt) đuợc cho phép. Vector ngắt
tương úng sẽ được thực thi khi cờ ICF3 trong thanh ghi ETIFR được set.

Bit 4 - OCIE3A: Timer/Counter3, Output Compare A Match Interrupt Enable:


Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt
so sánh ngõ ra 3A (Timer/Counter 1 Output Compare A Match Interrupt) được cho phép.
Vector ngắt tương ứng sẽ được thực thi khi cờ OCF3A trong thanh ghi ETIFR được set.

Bit 3 - OCIE3B: Tim er/Counter3, Output Compare B Match Interrupt


E nable: Khi bit này được set thành 1 và ngát toàn cục (global interrupt) được cho
phép thì ngắt so sánh ngõ ra 3B (Timer/Counter3 Output Compare B Match Interrupt)
được cho phép. Vector ngắt tương ứng sẽ được thực thi khi cờ OCF3B trong thanh
ghi ETIFR được set.

Bit 2 - TOIE3: Timer/Counter3, Overflow Interrupt Enable: Khi bit này được set
thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt cờ tràn bộ định thời 3
(Timer/Counter3 overflow interrupt) được cho phép. Vector ngắt tương ứng sẽ được thực
thi khi cờ TOV4 trong thanh ghi ETIFR được set.

Bit 1 - OCIE3C: Timer/Counter3, Output Compare c Match Interrupt


E nable: Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép
thì ngắt so sánh ngõ ra 3C (Timer/Counter3 Output Compare c Match Interrupt) được
cho phép. Vector ngắt tương ứng sẽ được thực thi khi cờ OCF3C trong thanh ghi
ETIFR được set.

Bit 0 - OCIE1C: T im er/C ounterl, Output Com pare c Match Interrupt


E nable: Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép
thì ngắt so sánh ngõ ra 1C (Timer/Counterl Output Compare c Match Interrupt) được
cho phép. Vector ngắt tương ứng sẽ được thực thi khi cờ OCF1C trong thanh ghi
ETIFR được set.

18
11. Thanh Ghi Tim er/C ounter Interrupt F lag Register- TIFR
Bit 7 6 5 4 3 2 1 0

0C F2
OCF2 T 0V2
TOV2 ICF1 O
OCFIA
CFIA O C FIB
OCF1B TOV1 OCFO TOFO TIFR

Read/Write RIW
R/W RIW
R/W RIW
R/W RIW
R/W R/W
R/W RIW
R/W RIW
R/W R/W
R/W

Initial Value 0 0 0 0 0 0 0 0

Bit 5 - ICF1: T im er/C ou n terl, Input Capture Flag

B it 4 - O CF1A: T im er/C o u n terl, O utput Com pare A M atch Flag

Bit 3 - O CF1B: T im er/C o u n terl, O utput Com pare B M atch Flag

Bit 2 - TO V 1: T im er/C o u n terl, O verflow Flag

T hanh ghi T IFR liên quan tới bộ định thời 1 và 2.

Bit 5 - IC F1: T im e r /C o u n te r l, Input C apture Flag: Cờ này được set khi xảy ra
sự kiện bắt m ẫu ngõ vào (Input C apture) của chân ICP1. K hi thanh ghi ICR1 (Input
C apture R egister) được thiết lập bởi các bit W G M n3:0 để sử dụng như m ột giá trị
T O P thì c ờ ICF1 sẽ được set khi bộ đếm đạt tới giá trị TOP. Cờ ICF1 sẽ tự động xóa
khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set bằng cách ghi m ột giá trị
logic vào vị trí của nó.

Bit 4 - O C F 1A : T im er/C o u n terl, O utput Com pare A M atch Flag: Cờ này được
set ngay sau khi giá trị bộ đếm (TCNT1) bằng với giá trị thanh ghi O CR1A (Output
Com pare R egister A). Chú ý là m ột so sánh cưỡng bức (FO C1A) sẽ không set cờ này.
Cờ O CF1A sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set
bằng cách ghi m ột giá trị logic vào vị trí của nó.

Bit 3 - O C F1B: T im er/C o u n terl, O utput C om pare B M atch Flag: Cờ này được
set ngay sau khi giá trị bộ đếm (TCNT1) bằng với giá trị thanh ghi O CR1B (Output
Com pare R egister B). Chú ý là m ột so sánh cưỡng bức (FOC1B) sẽ không set cờ này. Cờ
OCF1B sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set bằng
cách ghi m ột giá trị logic vào vị trí của nó.

B it 2 - T O V 1 : T im e r/C o u n te rl, O v erflo w F lag : Việc thiết lập cờ này phụ thuộc
vào thiết lập của các bit W G M n3:0, trong chê độ bình thường và c r c cờ T O V 1 được set
khi bộ định thời tràn. Xem lại bảng 61 và m ục “Các c h ế độ thực thi” để biết các trường
hợp khác.
12. Tlianli Glii Extended Timer/Counter Interrupt Flag Register-EJiFR
Bit 7 6 5 4 3 2 1 0

ICF3 OCF3A OCF3B TOV3 OCF3C OCF1C

R/\V R/W R/W R/VV R/W R/W R/\V R/W

0 0 0 0 0 0 0 0

Bit 7:6 - Reserved Bits


Bit 5 - ICF3: T im er/C ounter3, In p u t C a p tu re Flag
Bit 4 - OCF3A: Timer/Counter3, Output Compare A Match Flag
Bit 3 - OCF3B: Timer/Counter3, Output Compare B Match Flag
Bit 2 - TOV3: Timcr/Counter3, Overflow Flag
Bit 1 - OCF3C: Timer/Counter3, Output Compare c Match Flag
Bit 0 - OCF1C: Tim er/Counterl, Output Compare c Match Flag

Bit 7:6 - Reserved Bits: Dự trữ, phải ghi 0 khi ghi vào thanh ghi ETIFR.

Bit 5 - ICF3: T im er/C ounter3, In p u t C a p tu re Flag: Cờ này được set khi xảy ra sự
kiện bắt ngõ vào (Input Capture) của chân ICP3. Khi thanh ghi ICR3 (Input Capture
Register) được thiết lập bới các bit WGMn3:0 để sử dụng như một giá trị TOP thì cờ
ICF3 sẽ được set khi bộ đếm đạt tới giá trị TOP. Cờ ICF3 sẽ tự động xóa khi ngắt
tương ứng được thực thi, hoặc có thể xóa hay set bằng cách ghi một giá trị logic vào vị trí
của nó.

Bit 4 - OCF3A: Timer/Counter3, Output Compare A Match Flag: Cờ này được


set ngay sau khi giá trị bộ đếm (TCNT3) bằng với giá trị thanh ghi OCR3A (Output
Compare Register A). Chú ý là một so sánh cưỡng bức (FOC3A) sẽ không set cờ này.
Cờ OCF3A sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thế xóa hay set
bằng cách ghi một giá trị logic vào vị trí của nó.

Bit 3 - OCF3B: Timer/Counter3, Output Compare B Match Flag: Cờ này được


set ngay sau khi giá trị bộ đếm (TCNT3) bằng với giá trị thanh ghi OCR3B (Output
Compare Register B). Chú ý là một so sánh cưỡng bức (FOC3B) sẽ không set cờ này. Cờ
OCF3B sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set bàng
cách ghi một giá trị logic vào vị trí của nó.

Bit 2 - TOV3: T im er/C ounter3, Overflow Flag: Việc thiết lập cờ này phụ thuộc
vào thiết lập của các bit WGMn3:0. trong chê độ bình thường và CTC cờ TOV3 được set

20
khi bộ định thòi tràn. Xem lại bảng 52 và mục “Các c h ế độ thực thi” để biết các trường
hợp khác.

Bit 1 - O CF3C: T im ei7C ounter3, O utput C om pare c M atch Flag: Cờ này được
set ngay sau khi giá trị bộ đếm (TCNT3) bằng với giá trị thanh ghi O CR3C (Output
Com pare R egister C). Chú ý là m ột so sánh cưỡng bức (FOC3C) sẽ không set cờ này. Cờ
O CF3C sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set bằng
cách ghi m ột giá trị logic vào vị trí của nó.

Bit 0 - O CF1C: T im er/C ou n terl, O utput C om pare c M atch Flag: Cờ này được
set ngay sau khi giá trị bộ đếm (TCNT1) bằng với giá trị thanh ghi OCR 1C (Output
Com pare R egister C). Chú ý là m ột so sánh cưỡng bức (FOC1C) sẽ không set cờ này. Cờ
DCF1C sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set bằng
:ách ghi m ột giá trị logic vào vị trí của nó.

13. Thanh Ghi Special F unction 10 Register-SFIOR


7 6 5 4 3 2 1 0

TSM ACM E PUD PSRO PSR321

Read/W rite RIW R R R Rnv RIW RIW RIW

Initial Value 0 0 0 0 0 0 0 0

Bit 7 - TSM : T im er/C oun ter Synchronization M ode

Bit 0 - PSR 321: P rescaler Reset T im er/C ounter3, Tim er/C ounter2, and
r im er/C ou n terl

Bit 7 - TSM : T im er/C oun ter Synchronization Mode: Ghi bit này thành 1 sẽ kích
loạt c h ế độ “Đ ồng bộ bộ định thời” . Trong ch ế độ này giá trị ghi vào hai bit PSRO và
5SR321 được giữ, vì th ế nó giữ cho tín hiệu reset của bộ chia trước (prescaler(8)) tương
rng được xác nhận (do đó bộ chia trước prescaler vẫn ở trạng thái Reset). Đ iều này để
:hắc chắn là các bộ T im er/couter tương ứng được tạm dừng để có thể được cấu hình với
;iá trị như nhau m à không làm hỏng các cấu hình sẵn có khác. Khi TM S là 0 thì các bit
>SR0 và PSR321 được xóa bời phẩn cúng và các bộ dịnh thời (1,2,3) bắt đầu đếm đồng
hời. (Xem thêm mục : C hế Độ Đ ồng Bộ Bộ Đ ịnh Thời).

Bit 0 - P SR 321: P rescaler R eset Tim er/C ounter3, Tim ei7C ounter2, and
rim er/C ou nterl: K hi bit này là 1 thì bộ chia trước (prescaler) của ba bộ định thời 1 2 3
lược reset. Bit PSR321 được xóa bởi phần cứng ngoại trừ trường hợp bit TSM được set
?hú ý là ba bộ định thời 1, 2, 3 cùng chia sẽ m ột bộ chia trước (prescaler) nên viêc reset
lộ chia trước (prescaler) sẽ tác động lên cả ba bộ định thời này.
d. Các thanh ghi điểu khiển ngắt

1. Thanh ghi External Interrupt Control Register A-EICRA

Bit 7 6 5 4 3 2 1 0

ISC31 ISC30 ISC21 ISC20 ISCU


ISC1I ĨSC10
ISC10 ISC01 ISC00
ISCOO EICRA

Read/Write RIW
R/W R/W
R/W RIW
R/W RIW
R/W R/W
R/W RIÌV
R/W RR/W
/IV R/W
R/H'

Initial Value 0 0 0 0 0 0 0 0

Bits 7.0 - ISC31, ISC30-ISCOO, ISC00: External Interrupt 3 - 0 Sense


Control Bits
Tám bit cùa thanh ghi EICRA sẽ điều khiển kiểu bắt mẫu cho 4 ngắt INT3, INT2,
INTI, INTO. Quy định cụ thể được thể hiện trong Bảng 48.

ISCnl ISCnO Kiểu bắt mẫu

0 0 Mức thấp sẽ tạo yêu cầu ngắt

0 1 Dự trữ
1 0 Cạnh xuống (Falling) sẽ tạo yêu cầu ngắt
1 1 Cạnh lên (Rising) sẽ tạo yêu cầu ngắt
n = 3, 2, 1,0
Bàng 48. Điếu khiển kiểu bắì mẫu ngắt

2. Thanh Ghi External Interrupt Control Register B-EICRB


7 6 5 4 3 2 1 0

ISC71 ISC70 ISC61 ISC60 ISC5I ISC50 ISC41 ISC40

Read/Write Rl»' R / IV R/ II' R/ÌV Rnr R/W R/W RIW

Initial Value 0 0 0 0 0 0 0 0

Bits 7.0 - ISC71, ISC70 - ISC41, ISC40: External Interrupt 7 - 4 Sense


Control Bits.

Tám bit của thanh ghi EICRA sẽ điều khiển kiểu bắt m ỉu cho 4 ngắt INT7, INT6.
INT5, INT4. Quy định cụ thế được thế hiện trong Bảng 50.

22
ISCnl ISCnO Kiểu bắt mẫu
0 0 Mức thấp sẽ tạo yêu cầu ngắt
0 1 Bất cứ sự thay đổi mức logic nào ở chân
INTn sẽ tao ra một yêu cầu ngắt
1 0 Cạnh xuống (Falling) sẽ tạo yêu cầu ngắt
1 1 Cạnh lên (Rising) sẽ tạo yêu cầu ngắt

n = 7,6, 5, 4
Bảng 50. Điểu khiển kiểu bắt mẩu Iigắt

3. T hanh Ghi E xternal Interrupt M ask Regisler-EIM SK

7 6 5 4 3 2 ỉ 0

IN T7 INT6 INTS ỈNT4 INT3 ỈNT2 INT1 INTO

Read/Write R/W R/W R /W Rnv R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

B its 7.0 - IN T 7 - INTO: E xternal In terru pt R equ est 7 - 0 E nable : K hi cho


'hép ngắt toàn cục (set bit I trong thanh ghi SREG thành 1) thì các ngắt vẫn chưa thể
bực thi, để ngắt có thể thực thi ta cần phải cho phép nó, 8 bit trong thanh ghi EIM SK
ẽ quyết đ ịnh 8 ngắt ngoài tương ứng (từ INT7 ...INTO) có được cho phép hay không.
Lhi m ột trong số 8 bit (từ INT7 ...INTO) được set thành 1 và ngắt toàn cục được cho
hép thì ngắt ngoài tương ứng được cho phép. Còn tín hiệu ngắt là mức hay cạnh sẽ
o các thanh ghi E IC R A và EICRB (nêu ở trên) qui định. K ích hoạt bất cứ chân (Pin)
ào trong 8 chân của ngắt ngoài cũng tạo ra yêu cẩu ngắt ngay cả khi chân được thiết
ip th àn h ngõ ra.

4. Tlm nli Ghi E xternaI Interrupt Flag Register-EIFR

7 6 5 4 3 2 1 0

INTF7 1NTF6 1NTF5 INTF4 INTF3 INTF2 INTF1 INTF0

Read/Write Rm R ỉ II ' R /H ' RIW pnr RUV RIW R/W

n ilial Value 0 0 0 0 0 0 0 0

B its 7.0 - IN T F 7 - INTFO: External Interrupt F lag s 7...0 : Đây là tám cờ ngắt
rcrng ứng với tám ngắt ngoài INT7..INT0. Khi có tín hiệu yêu cầu ngắt ngoài thì cờ ngắt
tương ứng sẽ được set thành 1, nếu ngắt tương ứng được cho phép thì MCU sẽ nhảy tới
báng véc tơ ngắt, cờ ngắt sẽ được xóa khi chương trình phục vụ ngắt (ISR) được thực thi.
Ngoài ra ta cũng có set hay xóa cờ ngắt bằng cách ghi trực tiếp một giá trị logic vào nó.

5. Thanh Ghi MCU Control Register- MCUCR

Bit 7 6 5 4 3 2 1 0

SRE SRW10 SE SM I SMO SM2 IVSEL IVCE

Read/Write R/W RfW R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Trong phẩn này ta chỉ quan tâm tới hai bit là: IVCE (Interrupt Vector Select) và bit
IVSEL (Interrupt Vector Change Enable) của thanh ghi MCUCR. Bit này liên quan đến
việc thiết lập vị trí bảng véc tơ ngắt.
Bit 1 - IVSEL: Interrupt Vector Select: Khi bit này là 0 vị trí của bảng véc tơ ngắt
được đặt ở phần đầu bộ nhớ chương trình. Khi bit này là 1 bảng véc tơ ngắt được di
chuyển tới phẩn đầu của vùng nhớ Boot Loader.
Bit 0 - IVCE: Interrupt Vector Change Enable : Bit này phải được ghi thành 1 để
cho phép thay đổi bit IVSEL. Bit IVCE được xóa sau 4 chu kì máy sau khi nó được set
hay bit IVSEL được ghi. Trong lúc bit ICVE đang set các ngắt sẽ bị cấm cho tới khi bit
IVSEL được ghi, nếu bit IVSEL không được ghi thì các ngắt vẵn bị cấm trong 4 cho kì
máy liên tiếp (sau 4 chu kì máy thì bit IVCE sẽ tự động bị xóa nên các ngắt được cho
phép trở lại).

e. Các thanh ghi của bộ ADC

1. Thanh ghi ADC Multiplexer Selection- ADMUX

Bit 7 6 5 4 3 2 1 0

REFS1 REFSO ADLAR MUX4 MUX3 MUX2 MƯX1 MUXO

Read/Write R/\V R/W R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Bit 7:6 - REFS1:0: Reference Selection Bits

Bit 5 - ADLAR: ADC Left Adjust Result

Bits 4:0 - MUX4:0: Analog Channel and Gain Selection Bits

24
B it 7:6 - R E F S 1 :0 : R eferen ce Selection B its: hai bit này đùng để lựa chọn điện thế
tham chiếu là m ột trong 3 nguồn: AVCC, Điện thế tham chiếu nội 2.56v và V R E F như
bảng 97. Nếu chọn điện th ế V R E F thì các tùy chọn còn lại không được sử dụng để tránh
bị ngắn m ạch, điều này có nghĩa là nếu ta chọn điện thế tham chiếu là V R E F rồi, thì
trong suốt quá trình hoạt động của bộ ADC ta không được lựa chọn điện thế tham chiếu
khác, vì nếu không, nguồn điện thế V R E F bên ngoài do chưa được tháo đi sẽ làm hỏng
=hip do ngắn m ạch.

Table 97. Voltage R eference Selections for ADC


REFS1 REFS0 Voltage Reference Selection

0 0 AREF Internal Vref turned off

0 1 AVCC with external capacitor at AREF pin

I 0 Reserved

I I Internal 2.56V Voltage Reference with external capacitor at AREF pin

Bàng 97. Lựa chọn điện thê tham chiếu

Table 98. Input Channel and Gain Selections

Single Ended Positive Differential Negative Differential


MUX4..0 Input Input Input Gain

0ŨŨŨ0 ADC0

00001 ADC 1

00010 ADC2

0 00II ADC3 N/A

00100 ADC4

00101 ADC5

00110 ADC 6

0 0 111 ADC7

01000('; ADC0 ADC0 I Ox


01001 ADC1 ADC0 I Ox

Bang 98. Lựa chọn kiểu ngõ vào và độ lợi


010 IOi?J ADCO ADCO 200x
01011 ADC1 ADCO 200x
01100 ADC2 ADC2 lOx
01101 ADC3 ADC2 lOx
01110 ADC2 ADC2 200x

01111 ADC3 ADC2 200x


10000 ADCO ADC1 1x
10001 ADC1 ADC1 1X
10010 N/A ADC2 ADC1 1X
I0ŨI1 ADC3 ADC1 1X
10100 ADC4 ADC1 1x
10101 ADC5 ADC1 1x
10110 ADC6 ADC1 IX
10111 ADC7 ADC1 Ix
I I 000 ADCO ADC2 IX
11001 ADC1 ADC2 Ix
11010 ADC2 ADC2 1x
11011 ADC3 ADC2 IX
I1100 ADC4 ADC2 1x
11101 ADC5 ADC2 lx
11110 1.237 (VBG) N/A
11111 OV(GND)

Bảng 98. Lựa chọn kiểu ngõ vào và độ lợi (tiếp theo)

Bit 5 - ADLAR: ADC Left Adjust Result: Bit này lựa chọn cách bô trí dữ liệu trong
hai thanh ghi dữ liệu ADCH và ADCL. Xem phần mỏ tả hai thanh ghi dữ liệu ADCH và
ADCL để biết chi tiết.

Bits 4:0 - MUX4:0: Analog Channel and Gain Selection Bits: Các bit này lựa chọn
kiểu ngõ vào (đơn hay vi sai) và độ lợi, xem báng 98.

2. Thanh glii ADC Control and Status Register A- ADCSRA


7 6 5 4 3 2 Ị 0

ADEN A DSC ADFR AD1F ADIE ADPS2 ADPS1 ADPSO

Read/Write RIII’ RỉI I ’ R /ll' Rny any RIW R/\Y R/IV

Initial Value 0 0 0 0 0 0 0 0

26
Bit 7 - ADEN: ADC Enable

Bit 6 - ADSC: ADC Start C onversion

Bit 5 - ADFR: ADC Free R unning Select

Bit 4 - ADIF: ADC Interrupt Flag

Bit 3 - ADIE: AD C Interrupt Enable

B its 2:0 - AD PS2:0: AD C Prescaler Select Bits

B it 7 - A D E N : A D C E n a b le : Bit này là 1 sẽ cho phép bộ AD C hoạt động, ngược lại,


sẽ ngùng bộ AD C ngay cả khi nó đang trong quá trình biến đổi.

B it 6 - A D SC : A D C S ta r t C o n v ersio n : Ghi bit này thành 1 để bắt đầu quá trình


chuyển đổi. T rong c h ế độ chuyển đổi từng bước, sau m ỗi lần chuyển đổi hoàn thành bit
này bị xóa về 0, ta phải set lại bit này để bắt đầu m ột biến đổi tiếp theo. T rong ch ế độ
chuyển đổi liên tục, ta chỉ cần set bit này m ột lần.

Bit 5 - A D FR : AD C Free R unning Select: Set bit này lên 1 để lựa chọn ch ế độ hoạt
động biến đổi liên tục. Bit này là 0 sẽ cho phép c h ế độ biến đổi từng bước.

Bit 4 - ADIF: ADC Interrupt Flag: Bit này sẽ được set thành 1 khi một chu trình biến
đổi ADC hoàn thành, bit này được xóa bởi phần cứng khi trinh phục vụ ngắt tương ứng
được thực thi. Chú ý là khi ta chỉnh sửa thanh ghi ADCSRA (như dùng các lệnh CBI, SBI)
thì bit này sẽ bị xóa. V ì vậy, để xóa bit này bời phần mềm, ta chỉ cần ghi giá trị 1 vào nó.

Bit 3 - ADIE: A D C Interrupt Enable: Bit nàycho phépngắt ADC, khi bit ADIE
(cho phép ngắt A D C) và bit I (cho phép ngắt toàn cục) trong thanh ghi SREG được set
lên 1 sẽ cho phép ngắt A D C hoạt động.

A D E N — I- x : Reset
7-B IT A D C PRESCALER
CK ►>

ADPSD
ADPS1
A D PS2

ADC C -O C < SOURCE

H ình 109. Nguồn clock ADC

27
Bits 2:0 - ADPS2:0: ADC Prescaler Select Bits: Vì tẩn sô' clock ADC được lấy từ
xung clock hệ thống (hình 109), nên các bit ADPS2:0 sẽ cho phép chia xung clock hệ
thống với các hệ sô' xác định (bảng 99) trước khi đưa vào nguồn clock ADC. Với độ
phân giải 10 bit, tẩn số clock ADC khoảng từ 50 - 200 KHz, nên tùy theo tần số clock
hệ thống mà ta lựa chọn hệ số chia thích hợp.

T a b le 99. A D C P re s c a le r S e le ctio n s

ADPS2 ADPS1 ADPSO D ivisio n Factor

0 0 0 2

0 0 1 2

0 I 0 4

0 1 1 8

1 0 0 16

1 0 1 32
1 I 0 64

1 1 1 128

Bảng 99. Lựa chọn các hệ sô'chia clio nguồn clock ADC

c. Thanh ghi ADC Data Register-ADCL and A D C H

Đây là hai thanh ghi chứa kết quả ADC, tùy theo thiết lập của bit ADLAR (trong
thanh ghi ADMUX) mà 10 bit dữ liệu ADC có thể được bố trí về phía phải hay trái của
hai thanh ghi ADCH và ADCL, cụ thể như sau:
ADLAR = 0
BU 15 14 13 12 11 10 9 8

ADC9 ADCS ÁDCI1

ADC7 ADC6 ADCS ADC-4 ADC3 ADC2 ADCl ADC0 ADCL

7 6 5 4 3 2 1 0

ASDLAR = 1

Bi: 15 14 13 12 11 10 9 8

ADC9 ADCS ADC7 ADC6 ADCS ADC4 ADC3 ADC2 ADCII

ADCI ADC0 ADCL

1 6 5 - 1 3 2 1 0

28
II. H ƯỚNG DẨN CÀ I ĐẶ T VÀ s ử D ỤNG PHẦN M ỂM code V ISIO N AVR

1. Hướng dẫn cài đặt Code Vision AVR

M ớ đĩa Code Vision A V R . N háy đúp vào file


Select the language to use during the installation:
setup.exe, W indow sẽ có thông báo sau:

Ị ŨK I Ị Cancel

N hấn O K để chọn ngôn ngữ. W indow sẽ thông


báo tiếp như sau:

đ tỊ Ị ^ I '
Welcome to the CodeVisionAVR c
Compiler Setup Wizard
This will install CodeVisicMVR V1.25.6 on your computer

It is recommended that you close all olhei applications before


continuing.

Click Next to continue, or Cancel to exit Setup.

I Next > I Ị Cancel I

N hấn n e x t để tiếp tục.

l ể Setup^ CodeVisionAVR c Compiler


E @ B

License Agreement
Please lead the following important infoimation before continuing
0
Please lead (he following License Agieement You must accept the teims of this
agreement befoie continuing with (he installation

[software licence -

'The use of CodeVisionAVR indicates your understanding and acceptance of the


jfotowing terms and conditions This license shall supersede any verbal or
'prior verbal or written, statement or agreement to the contrary
1» you do not understand or accept these terms, or your local regulations
•prohibit "after sale" license agreements or limited disclaimers, you must
•cease and desist using this product immediately

■This product is (C) Copyright 1998-2007 Pavel Haiơuc and HP IntoTech s.rJ., V

( * } I accept the agreement


o I do not accept the agreement

I < Back II Next > I I Cancel 1


1------------------------------ --------------------------------------------------------------------------------------------------------------

29
Chọn I accept the agreem ent, sau đó nhấn next để tiếp tục. Window có thông báo
tiếp như sau:

Passwofd
This installation is password protected.

Please provide the password, then click Next to continue. Passwords are case-sensitive.

Password:

< Back ~ ] [ Next > ] [ Cancei~

Điền Password bạn được cấp vào đây. Nhấn next để tiếp tục.

Setup - CodeVisionAVR c C om piler


Select Destination Location
Where should CodeVisionAVR c Compiler be installed?

Setup will install CodeVisioiVWR c Compiler into the following folder.

T 0 continue, click Next If you would like to select a different folder, click Browse.

At least 7.0 MB OÍ free disk space is required.

I < Back II Next > I Ị Cancel I

30
N hấn n e x t để tiếp tục.

lể ' S e tu p - C o d e V is io n A V R c C o m p ile r Ọ H )
S e le c t S ta ll M e n u Folder
W h ere should Selup place Ihe program's shortcuts?

JTTTj Setup will create the program's shortcuts in the following Start M enu folder.

T 0 continue, click N e x t If you would like to select a different folder, click Browse.

Browse...

I < B ack || Next > j Ị Cancel I

Nhấn n e x t để tiếp tục.

lỂ % e tu p - CodeVisionAVR c C om piler

R e a d y to In s ta ll ^ _
S etup is now ready to begin installing CodeVisionAVR c Compiler on your
computer.

Click Install to continue with the installation, or click B ack if you w ant lo review or
c h an g e any settings.

Destination location:
c :\c v a v r

Start M en u folder:
C odeVisionAVR

I < B ack II Install Ị I Cancel I

31
Nhấn Install để tiếp tục.

r - --------- ■----------- — --------------------- -----------


l ể Setup - CodeVisionAVR c Com piler 0 ẼS
Information
Please read the following important information before continuing.

W hen you are ready to continue with Setup, click Next.

Welcome to the CodeVisionAVR c Compiler and the A


IcodeWlzardAVR Automatic Program Generator

The compiler is designed to be used along with


Ịthe Atmel AVR studio debugger V4.07 or later.
•In case you doiYt have AVR studio, then you
•must download it from the ATMEL w eb site:
iwww.atmel.com

■If you will use the Compiler under Windows NT4, 2000 or XP,
'you must first run it with Administrator privileges.
jOn subsequent runs you may also have Power User privileges.

|The Compiler is supplied with the following example


-

1 Next > Ị

Nhấn next đế tiếp tục.

l ể Setup - CodeVisionAVR c C om piler

C o m ple ting th e CodeVisionAVR c


C o m piler S etu p W iza rd

Setup has finished installing CodeVisionAVR c Compiler on your


computer. The application may be launched by selecting the
installed icons.

Click Finish to exit Setup.

0 Launch CodeVisionAVR c Compiler

I < Back II Finish I

32
Nhấn F inish để kết thúc.

Sau khi cài đặt xong ta tiến hành Crack như sau:
Vào thanh công cụ Start!'Programs/Code Vision AVR. Window sẽ có thông báo như sau:

M l Qjg l S J J j J J
Navigator I < I ► CodeVisionAVR License

ịỵ , CodeVisio
You* Serial Number is:
I NoPr-
I Other 1 6 7 C -1 C C E -B 9 1 B - 9 C 9 3

and k has been copied to the clipboard.


Ĩ 0 purchase a license, please send this
Serial Number to HP InfoTech s.r.L at:
office@hpinfotech. ro

IÍ you already purchased the piogiam.


then you must Import the license from
a vald CodeVisiorWVR instalaiton

Quay trở lại với giao diện của Code Vision AVR, click chuột vào Im port chọn đường
dẫn đến file License, nhấn OK để hoàn tất việc cài đặt.

Sau khi cài đặt xong thì giao diện chính của Code Vision AVR như sau:

CodeVisionAVR
File Edit View Project Tools Settings Windows Help

fel C t N B l _ L
Navigatot ! < I > I

- CodeVisio
0 NoPf.
3 Olher
1 ụu II1ỤI r I u jc ti 11u n g V/UUC TI8IUII n » ẵ \

Ta cần chú ý khi tạo một Project mới thì ta nén tạo một thư mục mới có tên liên
quan đến dự án định làm, rồi lưu tất cả các file liên quan vào trong thư mục đó. Khi biên
dịch, Code Vision AVR sẽ tạo ra rất nhiều file liên quan khác nhau các file này sẽ lự
động lưu trong thư mục chung đó. Đây cũng là quy tắc chung khi làm việc cho tất cả các
phấn mềm lập trình.
'■ " C r e a te New File
Từ giao diện chương trình chọn
File Type
New, có thòng báo sau:
c Source ✓ OK

c Project! X Cancel J

Chọn Project, nhấn OK (file tạo ra


mà một dự án mới).

Nhấn Yes để tiếp tục, cửa sổ


CodeWizardAVR hiện ra.

CodeWizardAVR - untitled.cw p
File Help

USART Ị Analog Comparator ị ADC I SPI Ị


I2C Ị 1 Wire I 2 Wife (I2C) i
LCD Ị Bit-Banged Ị Project Information I
Chip I Ports I External IRQ I Timers j

Chip: [ E S jE S S E S B ]* ]

Clock: j 8.000000 ■ g l MHz

r Check Reset Source

Program Type:

ị Application ▼]

34
Ta phải khai báo các cấu hình, các thu viện sử dụng co dự án, như loại chip, tần sô
:hạch anh, các cổng vào ra, giao tiếp I2C, giao tiếp LCD, giao tiếp máy tính, tim e... Sau
khi khai báo xong cấu hình cho dự án ta lưu lại như sau:

Chọn file!G enerate, Save a n d E xit

’£ t CodeWfzardAVR - untitled.cw p [5c|


n Htíp

D Ntv. SPI 1
& Open ie«2CI 1
M Save 1 1
Save As... fomwlion 1

j Program Preview

PORT Bi» 0 • RS (LCDP*i4)


PORT B« 1 -R0 (LCD Pin 5)
PORT Bit 2 • EH |LCD Pr> 6]
PORT Bit 3 -Free
PORT Bit 4 • DB4 (LCD Pin 11)
PORT B< 5 • DB5 (LCD 12)
PORT Bit 6 -DB6ILCD Pin 13)
PORT 8* 7 -DB7 (LCD Pin 14)

1------------------------------------------------------------------- 1

Tạo một forder mới và lưu cả 3 định dạng file vào trong đó, lest.c, test.prj, test.cwp.

c Compiler Source File ■ 3 0


Save m 1_> lesl zi ♦ ■ È đ S -

3
My Recent
Documents

Desktop

s*
My Computer

My Netwcxk File name: ;isn Save 1


Places “ 3 [
s ave as lype: j c Compiler files (■c) ,rJ Cancel
Sau khi save xong thi trong f i l e te s t .c cõ sãn các hãm mà ta đã đặt cáu hình trước,
công việc của người lập trình là viết các đoạn code vào vòng while {).

3. Cài đặt và sử dụng AVR 910 USB Programmer.

AVR 910 USB Programmer dùng để nạp chương trình sau khi đã dịch ra file hex
xuống AVR, sử dụng kết nối USB 2.0 và Code Vision AVR.

3.1. Cài đặt


Kết nối mạch nạp với máy tính thông qua cổng USB máy sẽ có thông báo sau:

F o u n d N ew H a rd w a re W iz ard

Nhấn N ext
F o u n d New H a rd w are W izard
Tim đường dẫn trong file cài đặt trên đĩa CD.

Nhấn Next.

H a r d w a r e U p d a te W iz a r d

P lease choose your search and installation options.

0 Search for the besi driver in these locations.

Use the check boxes below to limit or expand the default search, which includes local
paths and removable media. T he best driver found will be installed.

[•/1 Search removable media (floppy, CD-ROM ...)

0 Include this location in the search:

I F :\A V R 9 1 0 USB Programmer V ị Brow se


I

o Don't search. I will choose the driver to install.

Choose this option (o select the device driver from a list W indows does not guarantee ihal
the driver you choose will be the best match for your hardware.

I < Back II Next > Ị Ị Cancel I

Chờ cho W indow tìm kiếm và cài đặt-

Chọn F inish để kết thúc cài đặt.

Để kiểm tra lại quá trình cài đặt ta làm như sau: Quay trở về Desktop nhấn phải chuột
vào biểu tượng My Computer chọn Magane, chọn Device Magane.

m
\r .t ---------- ---- --------- ■...........................■■.................
;IE 1 File Action View Window Help - jg i

Computer Management (Local) A + S i p Network adapters A


Ể à System Tools
- Ports (COM & LPT)
+ j j ] Event Viewer
+ g l Shared Folders ATMEL AVR910 USB Programmer (COM3)
+ s jy Local Users and Groups
Communications Port (COM1)
+ |$ ] Performance Logs and All v
. S / ECP Printer Port (LPT 1)
< " ..»
P hần II

CÁC BÀI THỰC HÀNH c ơ BẢN

BÀ I TH Ự C H À N H SỐ 1
N H Á Y L ED

I. MỤC ĐÍCH

Học xong bài này học sinh cần phải nắm rõ các nội dung sau:
- Cách tạo một Project mới trong Code Vision AVR.
- Hiểu được các khai báo các thư viện dùng trong chương trình.
VD: include <megal6.h> hay include<delay.h>...
- Hiểu được cách đặt cấu hình vào ra cho các PORT.
- Hiểu được cách xuất dữ liệu ra các PORT.
- Dịch và nạp chương trình cho chip.

II. TÓM TẮT LÍ THUYẾT

- Nháy Led là một bài thực hành đem giản và dể thực hiện nhất vì vậy nó thường là sự
lựa chọn đẩu tiên cho tất cả những ai mới làm quen với lập trình vi điều khiển.
- Các bước cùa chương trình nháy Led như sau:
B I: Chuyển chân PORTC.O lên mức 1
B2: Gọi hàm delay.

B3: Chuyển chân PORTC.O xuống mức 0.


B3: Gọi hàm delay.
Lạp lại quá trình.

Sơ đổ kết nối:

38
Sơ đồ nguyên lý như sau:

DSI
4Ọ _
■ PCO/SCL PAO
*39_
J d 4 1 P C l/SD A PAI
'38_
* PC2(TCK) PA2
PA3
'37_
i PC3(TM S) 36_
1 PC4(TD0) PA4
PA5
'35_
* PC5(TDI) 3£_
J PC6(TOSC1) PA6
'33
* PC7(TOSC2) PA7

• PDO/RX (X CK /T0)PB0
• PD1/TX (T l)P B l
• PD2/SQW (INT2/AIN0)PB2
* PD3/IR (OCO/AIN1)PB3
• PD4/SPEAKER (SS)PB 4
i PD5/PULSE (M OSI)PB5
> PD6/DIR (M iS0)PB 6
1 PD7 (SCK )PB7

- AREF AVCC
- RESET Vcc
- XTAL1 GND
- XTAL2 GND

A TM EG A16

Hình 1.1

III. CÁC BƯỚC T IẾ N H ÀNH

Khởi động phần m ềm lập trình Code V ision AV R USART AnalogCornparatcrt ADC SPI
I2C 1Wire 2WireU2Cj
LCD Bit-Banged Pioiecl Information
- Tạo m ột Project đặt tên là nháy led lưu vào
Chip Ports External IRQ Timeis
trong thư m ục nhayled.
Port A Port B Port c I Port D
- Trong phần khai báo ta chọn các chân của PortC DataDứection Puflup/Qutpul Value
Bit 0 Oui 1 Bit 0
là các chân O U T có trở kéo lên 5V. Lần lượt lưu các BiM Out 1 B in
file vào trong Forder chứa Project. Brt 2 Out 1 Bit 2
Bit 3 Out 1 Bit 3
- M ở file nhayled.c ta thấy rất nhiều các khai báo, Bit 4 Out 1 Bit 4
Bit 5 Out 1 Bit 5
các hàm, ta chỉ viết code vào đoạn code vào vòng
Bite Out 1 Bit 6
while như hình dưới. Bit 7 Out 1 B it?

<
/ / P la c e your code h e re

>;

39
Soạn thảo chương trình.
Phẩn khai báo thư viện cho project
ttinclude <megal6.li>
#include <clelay.h>
II Declare your global variables here

while (1) {
PO FTC.0=1;
delay_ms(500);
POKTC.0=0;
delay_ms(500);
II Place your code here

};

Biên dịch và nạp chương trình.


- Nối mạch nạp AVR 910 USB Programmer với Main chính AVR qua đường ISP.
- Trên thanh công cụ

T 0 gag* 78 TC C M A =0xũ0;
. F'.i f J5 S 5 T 79 TCCRlB«0x00,
0 flier Files 80 TCMT1H=O x OO;
81 TCNT1L=QxQQ;
82 I C P lH = 0 x ũ 0 ;
S3 IC R lL = O x O O ;
84 OCR1ẢH»OxOO,
85 0CRlAL=0x00;
88 O C R lB H = O x O O ;
87 O CSlBL=O xO O ;

Một cửa sổ mới hiện ra, ta chọn vào Tab A fter M ake, đánh dấu chọn vào ô Program
the chip, nhân OK đế chấp nhận.

40
1 '1' ... ....— •—-
5 ; C sn fig u m p t p ^ c t (lh a y le d .p rj . ■J * J

Files I c Compiler I Before M ake After M ake I

w Program the Chip V £xecute User’s Program

r* Merge data from a .ROM File for FLASH Programming

Chip Programming Options

Program Fuse Bil(s):

FLASH Lock Bits


£• N o Protection
r CKS£L0=0

r
r CKSEL1=0
CKSEL2=0
Programming disabled
r CKSEL3=0
C' Programming and Verification disabled r SUTO-C
r SU T1=0
r BODEN=0
Boot Lock Bit 0 Bool Lock Bit 1 r B0D LEVEL=0
<* B01=1 B02=1 <• B11=1 B12=1 r B DO TR ST=0
r b o o t s z o =o

r B01 =0 B02=1 r B11=0 B12=1 r B00TSZ1=0


r EESAVE- 0
r B01 =0 B02=0 r B11=0 B12=0 r CKOPT =0
r JTAGEN=0
r B01=1 B02=0 r B11=1 B12=0 r DCD EN=0

f C h e c k Signature r Check Erasure Í Preserve EEPROM r*/ Verify

✓ OK

Quay trở lại với giao diện làm việc, ta tiến hành dịch và nạp chương trình.

CT
D
M e»ỉ& IBi ỄỂ - M i Ỉ I B a| jsy ^ i * M a ] m i a i _ u
Navigator I Code Templates I Clipboard History ị
71 / / OC1B output: Discon.
72 / / Noise Cancfeler: Off
CodeVisionAVR 73 / / Input Capture on Falling Kdge
- 0 Project: nhạyled 74 / / Timer 1 Overflow Interrupt: Off
Notes 75 / / Input Capture Interrupt: Off
nhayled.c 76 / / Compare A Hatch XIterrupt: Off
® Included Files 77 / / Compare B Hatch Interrupt: Off
Global Variables 78 TCCRlA-OxOO;
+ tF()
{ ) Functions
rur 79 TCCRlB=OxOO;
0 Other Files 80 TCNTlH=OxOO;
81 TCNTlL=OxOO; Click vào đây để dịch
82 ICRlH=0x00; và nạp chương trình
83 ICRlL=OxOO; xuống chip
84 OCRlAH=OxOO;
85 OCRlAL=OxOO;
86 OCRlBH=OxOO;
87 OCRlBL=OxOO;

41
- Window sẽ có thông báo sau:

Compiet ỊAssembler I Progíammer ị


Chip: ATmega16L
Program type: Application
Memory model: Small
Optimize for: Size
(s)printf featues: int, width
(s)scanf features: ini, width
Promote char to int: No
chai is unsigned: Yes
8 bit eruxns: Yes
Enhanced core instructions: On
Automatic registef allocation,/

265 Sne(s) compiled


No etrofs
No warnings

Bit variables size: 0 byte(s)

Daia Stack area: BOh to 15Fh


Data Stack size: 256 byte(s)
EstimatedData Stack usage: 0 byte(s)

Global variables size: 0 byte(s)

Hardware Stack atea: 1G0h to 45Fh


Hardware Slack size: 768 bytejs)

Heap size: 0 byle{s)

EEPROM usage: 0 byte(s) [0.0*4 of EEPROM)


Program size: 150 words (1.8% of FLASH)

Program the chip X Cancel

- Nếu chương trình có lỗi thì sẽ được thông báo ờ đây.


- Click vào Program the chip để nạp chương trình.
- Nếu quá trình dịch thành công thì window sẽ có thõng báo như sau.

V e rify in g the FLASH program m ing

Hoạt động thừ.

- Ghép môđun Led đơn với Main chính qua PORTC, (chú ý địa chì các chân vào ra).
- Theo dõi sự hoạt động cùa mạch.
IV. BÁO CÁ O TH Í NG H IỆM

Số thứ tự và tên bài.

M ục đích thí nghiệm .

Chương trình đã soạn thảo để thí nghiệm .

K ết quả thí nghiệm .

N hận xét và kết luận.

V. CÂ U H Ở I K IỂM TRA

Vẽ lưu đổ thuật toán của chương trình và giải thích.

Nếu m uốn thay đổi tốc độ nháy của Led thì ta phải làm như thế nào?

43
BÀI THỰC HÀNH SỐ 2
ĐIỂU KHIỂN VÀO RA

Bài tập ứng dụng:

Lập trình kiểm tra một tín hiệu vào và bật rắt m ột con Led. Ví dụ PORTA.O nối với
nút Start, PORTA.1 nối với nút Stop, điều khiển bật tắt một con LED ở POKTC.O.

I. MỤC ĐÍCH

Học xong bài này học sinh cần nắm được cấc nội dung sau:
- Hiểu được cách đặt cấu hình vào ra cho các PORT.
- Hiểu cách kiểm tra tín hiệu vào tại một chân.
- Hiểu được cấu trúc và hoạt động của lệnh “i f ’.

n . TÓM TẮT LÍ THUYẾT

- Sơ đồ nguyên lý.

V
R2
P C 0 /S C L
P C I/S D A
PA 0
PA 1
38____
I
P C 2 (T C K ) PA 2
LEDO 37____
P C 3 (T M S ) PA 3
3 6____ >R? >R
P C 4 (T D 0 ) PA 4
27' ■
P C 5 (T D I ) PA 5
28' '
____2 9 ' '
P C 6 ( T O S C l) PA 6 i33____
= > >
>R3 P C 7 (T O S C 2 ) PA 7
>10K 14
P D 0 /R X ( X C K /T 0 )P B 0
15' ■
P D 1 /T X (T l)P B l
16' '
P D 2 /S Q W ( IN T 2 /A I N 0 ) P B 2
17' '
P D 3 /IR (O C O /A IN D P B 3
1 18
SW 3 + _ C I5 _ ]_9 ]
P D 4 /S P E A K E R
P D 5 /P U L S E
(S S )P B 4
(M O SÓ PB 5
1s w ^ ''v T u h o a 20’ “
P D 6 /D IR ( M IS 0 ) P B 6
____2 \ ' ■ +5v
PD 7 (S C K )P B 7
1 32
9
AREF
RESET
X TAL1
AVCC
V cc
GND
j
1
X TAL2 GND
8000000 X2
A TM EG A 16
—H Ũ ^ _
d=C 13 z ^ C I6
1 04 104

44
M ô tả: Bình thường các chân PORTB.O, PO R T B .l ở mức cao, khi nhấn nút thì điện
p tại các chân này chuyển xuống mức thấp và nhiệm vụ của chương trình là kiểm tra
em lúc nào thì điện áp tại hai chân này xuống mức 0.

II. CÁ C BƯỚC TIẾ N HÀNH

Khởi động phần m ềm lập trình Code Vision AVR.

Tạo m ột dự án mới và đặt tên cho dự án.

- Khai báo PO RTB là PO R T nhận dữ liệu, PORTC là PO RT xuất dữ liệu.

- Soạn thảo chưcmg trình theo nội dung sau:

w h ile ( 1 ) {

if(P IN A .0 = = 0 ) II Đ ể kiểm tra tín hiệu vào thì la dùng PIN.

ịPOKTC.O=();

delay_us(5); HChở 5 us chống nẩy phím .

if(P IN A .l= = 0 )

{ PORTC. 0=1;

delay_us(5);

}}}

Hoạt động thử.

- Tắt công tắc nguồn.

- G hép m ôđun bàn phím với M ain chính qua PORTB, m ôđun Led đơn qua
PO RTC, (chú ý địa chỉ các chân vào ra).

- Bật công tắc nguồn cho M ain.

- Nhấn đồng thời SHIFT+F9 để dịch và nạp chương trình xuống Main.
- N hấn nút Start nối với PORTA.O.

- N hấn nút Stop nối với PO R T A .l.

- Theo dõi sự hoạt động của Led.

IV . BÁO C Á O TH Í NG H IỆM

Số ihứ tự và tên bài.

M ụ c đ íc h th í n g h iệ m
Chương trình đã soạn thảo để thí nghiệm

Kết quả thí nghiệm:


Nhận xét và kết luận.

V. CÂU H Ỏ I K IỂM TRA

1. Giải thích hoạt động cùa chương trình. Viết lưu đồ thuật toán cùa chương trình.

46
BÀI THỰC HÀNH SỐ 3
ĐIỂU KHIỂN ĐỌNG c ơ MỘT CHIỂU

Bài tập úng dụng:

Lập trình điêu khiển động cơ hoại động như sau: N hấn nút PAO, động cơ chạy thuận,
nhấn nút PA1 thì động cơ chạy ngược, nhấn nút PA2 thì động cơ chạy nhanh, nhấn nút
PA3 thì động cơ chạy chậm, nhấn nút PA4 thì động cơ dìm g.

I. M ỤC ĐÍCH

Học xong bài này học sinh cần nắm được các nội dung sau:

- Hiểu được cách điều khiển động cơ trên m ôđun động cơ DC.

- Hiểu cách điều khiển động cơ bằng tín hiệu PW M (độ rộng xung).

- Hiểu được cấu trúc và cách hoạt động của lệnh “ SW ITCH” .

- Hiếu được cách dùng các lệnh toán học trong chương trình.

II. TÓ M T Ắ T LÍ T H U Y Ế T

- Sơ đồ nguyên lý (hình 2-1).

H ình 2-1
III. CÁC BƯỚC T IẾN HÀNH

Khởi động phẩn mềm lập trình Code Vision AVR.


Tạo một dự án mới và đặt tên cho dự án dkdcdc.
- Soạn thảo chương trình theo nội dung sau:
#include <megal6.h>
ttinclude <delay.h>
unsigned char i=0,j=3,k=3;
void rightf);
void lefl( );
void main(void) {

PORTA=OxFF;
DDRA=0x00;
PORTB=OxOO;
DDRB=OxOO;
PORTC=OxOO;
DDRC=0x00;
PORTD=OxFF;
DDRD=0xFF;
TCCRO=OxOO;
TCNTO=OxOO;
OCRO=OxOO;

TCCRlA=0x00;
TCCRlB=0x00;
TCN T 1H=0 x00;

TCNTlL=0x00;
ICR1H=OxOO;
ICRlL=OxOO;

OCRlAH=OxOO;

OCRlAL=OxOO;

48
OCRlBH=OxOO;

OCRlBL=OxOO;

ASSR=OxOO;

TCCR2=OxOO;

TC N T2= 0x00;

OCR2=OxOO;

MCUCR=OxOO;

MCUCSR=OxOO;

TlMSK=OxOO;

A CSR=0x80;

SFIOR=OxOO;

w hile (1){

i f (P IN A .0= = 0) i= l;

if( P I N A .l ==0) i=2;

s w it c h ( i) {

case 1: l ight(); break;

case 2: leftO; break;}

if(P IN A .2 = = 0 )

(j= 5 ;

k = l;

}
if(P IN A .3 = = 0 )

0=1;
k= 5;

Ì
if(P IN A .4 = = 0 ){

POKTD.O=1;

i= 0 ;

}
}
}
v o id r ig h t(){

POKTD.1=0;
POKTD.0=0;
delay_ms(j);
POFTD.O=1;
delaym s(k);

}
voidlefl(){
P0RTD.1=1;
POKTD.0=0;
d e la y _ m s(j);

POKTD.O=J;
d e la y _ m s (k );

}
Hoạt động thử.
- Tắt cõng tắc nguồn.
- Ghép môđun bàn phím với Main chính qua PORTA, môđun động cơ DC với
PORTD, (chú ý địa chỉ các chân vào ra).
- Bật công tắc nguồn cho Main.
- Nhấn đổng thời SHIFT + F9 để dịch và nạp chương trình xuống Main.
- Nhấn nút nối với PORTA.O để chạy thuận.
- Nhấn nút nối với PORTA. 1 đế chạy ngược.
- Nhấn nút nối với PORTA.2 để chạy nhanh.
- Nhấn nút nối với PORTA.3 để chạy chậm.

- Nhấn nút nối với PORTA.4 để dừng động cơ.

- Theo dõi sự hoạt động của Led.

50
IV . BÁO C Á O TH Í N G H IỆM

Số thứ tự và tên bài.


M ục đích thí nghiệm

Chương trình đã soạn thảo để thí nghiệm

Kết quả thí nghiệm :

N hận xét và kết luận.

V. C Â U H Ỏ I K IỂM TRA

1. G iải thích hoạt động của chương trình. Viết lưu đồ thuật toán của chương trình.

51
BÀI THỰC HÀNH SỐ 4
ĐIỂU KHIỂN ĐỘNG c ơ BƯỚC

Bài tập ứng dụng:

Lập trình đáo chiều quay và thay đổi tốc độ động cơ bước.

I. MỤC ĐÍCH

Học xong bài này học sinh cần nắm được các nội dung sau:
- Hiểu dược cấu tạo, nguyên lí hoạt động cùa động cơ bước.
- Hiểu được cách khai báo và sử dụng các biến, cách khai báo và cách gọi các chương
trình con.
- Hiểu được cấu trúc và cách dùng lệnh “Switch”.
- Hiểu được phương pháp tạo xung điều khiển động cơ bước bằng phần mềm.
- Xây dựng được chương trình đảo chiều quay và thay đổi tốc độ động cơ bước.

II. TÓM TẮT LÍ THUYẾT

Hiện nay trong một số hệ thống điểu khiển tự


động có sử dụng một loại động cơ đặc biệt chạy bàng
xung điện. Khác với động cơ thông thường là động
cơ này không quay liên tục mà nó chỉ dịch chuyển
từng “bước” vì vậy còn gọi là động cơ bước. Ưu
điểm nổi bật của nó là có thể điều khiển, khống chế
để trục động cơ bước quay một góc OCnào đó.

Sơ lược cấu tạo:

Đ ộng cơ bước rất có cấu tạo giõng động cơ điện


một chiều nhưng có điểm khác biệt là không có cổ
góp và chổi than, ró to không có cuộn kích từ. Thông
thường, động cơ bước gồm một rô to sắt mềm trên đó
xẻ nhiều rãnh tạo thành các răng. Stato cũng được xẻ
rãnh tạo thành các cực từ. Trên các cực từ có quấn
dãy (Xem hình 4-1). H ình 4-1

52
N guyên lí làm v iệc c ủ a động c ơ b ư ớ c:

Xét một động cơ bưởc 2 pha đơn


giản stato có 2 cực, rô to kiểu nam
châm vĩnh cửu gồm 6 cực đặt xen
kẽ lẫn nhau. Góc hợp bởi 2 cực từ
kể nhau trên rô to là 60°. Dòng điện
2 pha được tạo ra bằng cách đóng
mở không đồng thời các công tắc
K, và K2 xung dòng điện chạy
trong 2 cuộn dây (2 pha) được
minh hoạ trên hình 4-2.

Xét tại thời điểm t|, khoá K| __


đóng , K2 mở; dòng điện pha A đặt
giá trị cực đại còn dòng điện pha B
bằng không. Từ trường stato là từ Hình 4-2
trường của pha A (có phương thẳng
đứng. Từ trường này sẽ hút các cực trái dấu vể vị trí trùng phương với nó. H ình 4-3a

Xét tại thời điểm tị, khoá K, mở, K2 đóng; dòng điện pha A đặt giá trị không còn dòng
điện pha B đạt giá trị cực đại. Từ trường stato là từ truòng của pha B (có phương nằm
ngang). Từ trường này sẽ hút các cực trái dấu về vị trí trùng phương với nó. H ình 4-3b.

I a = Im ax —

II'

a) b)

H ình 4-3

53
Nhận xét:
Sau một xung điện, rô to đã quay đựơc một góc là 3Ơ\ Góc này bằng một nừa góc
hợp bởi 2 cực từ trái dấu kẻ nhau trên rô to.
Xét ở các thời điểm trên các xung điện tiếp theo ta cũng có kết quả tương tự.
Nếu gọi sô' cập cực trên stato là a, số cực trên rô to là n thì để quay hết một vòng rô to
cần dịch chuyển k bước. Với k = n X a (bước) - k còn được gọi là độ phân giải cùa động
cơ bước.
360^
Góc quay của một bước chuyển là: = ——-

Ví dụ. Trong động cơ trên ta có:


Độ phân giải k = 6 X 2 = 12.

360° „
Góc quay cùa một bước chuyến là: ------ =30

Đặc điểm của động cơ bước:

- Sử dụng nguồn điện áp xung, tốc độ quay phụ thuộc vào tần số xung điện nên việc
thay đổi và kiểm soát tốc độ đơn giản.
- Động cơ này hoạt động ổn định, sau mỗi bước động cơ tự “hãm” và dừng lại để dịch
chuyển bước tiếp theo vì vậy điểm dừng có độ chính xác cao, thích hợp với hệ thống tự
động điều khiển

- Tính năng ưu điểm như động cơ một chiểu nhưng lại không có chổi than, không
phát sinh tia lửa điện.

Tuy nhiên, nguồn cung cấp cho động cơ bước là nguồn xung, không sẩn có ở lưới
điện công nghiệp nên cần phải trang bị thiết bị tạo nguồn xung.

Sa đồ kết nối phần cứng:

- Các nút ấn chức năng được nối vào các chân PA.O, PA .l, PA.2, PA.3, PA.4 tín hiệu
dược tạo ra là mức logic o v .

- Động cơ bước M được điều khiển bằng các chán PC.O, PC .l, PC.2, PC.3 thòng qua
mạch công suât. Có hai cách điều khiển mô tơ đỏ là: Cả bước (Full step) và nửa bước
(Hafl step).

54
M ã điều khiển

Xung thứ 1 2 3 4 5 6 7 8 9
1 1 1 0 1 1 1 0 1

Biểu diẻn số nhi 1 1 0 1 1 1 0 1 1


phân ra portC 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0
Biểu diễn sô' HEX 07H OBH ODH OEH 07H OBH ODH OEH 07H

II. CÁ C BƯỚC T IẾ N H ÀNH

Khởi động plíần m ềm lập trình Code Vision AVR.

- Tạo file dongcobuoc.c và lưu trong thư mục dongcobuoc.

Soạn thảo chương trình nguồn.

- Khai báo các biến và các chương trình con:

ttin d u d e < m egal6.h>

#include <delay.h>

u n s ig n e d c h a r m o d e = 0 , i = I 0 ;

void run_right();

void run_lefl( );

void stop( );

- Soạn thảo chương trình the o nội dung sau:


while (1) {
if(PINA.0==0) m ode= l;
if(PlNA.I==0) mode=2;
if(PlNA.2==0) mode=3;
if(PINA.3==0) i++;
if(PINA.4==0) i~;
switch(mode) {
case 1: run_right(); break;
case 2: nm _lefl(); break;
case 3: stop(); break;
PORTC=Oxff;•

}}}
void run_right(){
POFTC=0x07;
delay_ms( i);
POKTC=OxOB;
delay_ms(i);
POKTC=OxOD;
delayjns(i);
PORTC=OxOE;
delay_ms( i);

v o id r u n _ le fl(){

PORTC=OxOE;
delay _msị i );

POKTC-OxOD,
delay_ms(i);

PORTC=OxOB;

d ela ym s(i);

56
POKTC=0x07;
delay

}
void slop(){ PORTC=Oxff;}
HEnd Programmer.

Biên dịch chương trình nguồn sang File dongcobuoc.hex


Hoạt động thử.

- Tắt công tắc nguồn.


- G hếp nối m ôđun động cơ bước với M ain chính qua PORTC, m ôđun nút ấn qua
PORTA, (chú ý địa chỉ các chân vào ra).
- Bật công tắc nguồn.

- Dịch và nạp chương trình.


- Ân nút “PAO” động cơ chạy thuận.
- Ấn nút “ PA 1” động cơ chạy ngược.

- Ấn nút “ PA 2” động cơ dừng.


- An nút “ PA 3” động cơ chạy chậm.
- Ân nút “PA 4” động cơ chạy nhanh.

- T heo dõi sự hoạt động của động cơ.

[V. BÁO CÁO THÍ NGHIỆM

Sô thứ tự và tên bài.

M ục đích thí nghiệm .

Chương trình đã soạn thảo để thí nghiệm.

Kết quả thí nghiệm .

Nhận xét và kết luận.

/ . CÂ U H Ỏ I K IỂM TRA

Vẽ lưu đồ và giải thích hoạt động của chương trình điều khiển động cơ bước.

Viết lại chương trình để khới động động cơ bước, sau m ột thời gian động cơ tự động
ăng tốc.

Viết chương trình điều khiến động cơ bước quay 10 vòng thì dừng.
BÀI THỰC HÀNH SỐ 5
HIỂN THỊ LED 7 THANH

Bài tập ứng dụng:

Lập trình hiển thị số đếm từ 0 đến 99.

I. MỤC ĐÍCH
Học xong bài này học sinh cần nắm được cá nội dung sau:
- Hiểu được cấu tạo và phần cứng và cách hiển thị các Led 7 thanh.
- Hiểu được cách định nghĩa các chân out: VD “ttdefine ư ) PORTC.5"
- Hiểu được cách khai báo và gọi các giá trị trong một mảng.
- Hiểu và sử dụng các lệnh toán học như chia lấy phần nguyên, phần d ư ..
- Hiểu được cách đổi kiểu bằng phương pháp gán trong lập trình c.
- Xây dựng được chương trình hiển thị số đếm bằng LED 7 thanh.

II. TÓM TẮT LÍ THUYẾT

Phương quét dữ liệu:

Xem sơ đổ kết nối phẩn cứng để hiển thị 6 số bằng phương pháp quét như hình 5.1

58
M ạch điện dùng 6 Tranzitor được điều khiển bằng PC để xác địch địa chỉ. Dữ liệu
icuất ra tại PD đã được m ã hoá thành các sô' hộ 10. K hi quét dữ liệu được xuất ra đổng
hời trên tất cả các chân của Led 7 thanh nhưng chi có Led được chọn mới có thể hiển
:hị được giá trị xuất ra. N hư vậy tại m ột thời điểm chỉ có m ột con Led sáng.

Phương pháp quét:

Phưcmg pháp này dựa trên hiện tượng lưu ảnh của m ắt, nếu tần sô' sáng tắt của đèn
^ED lớn hơn 25H z thì ta cảm thấy là đèn sáng liên tục.

Phương pháp quét được m ô tả như sau:

Các LED 7 thanh được sử dụng trong m ạch là loại anốt chung. Vì vậy để LED sáng
hì các chân điều khiển (chân dữ liệu a,b,c,d...phải ở mức thấp còn chân COM của LED
)hải được nối lên mức l(nô'i qua Transistor). Các T ransistor sử dụng trong m ạch là loại
5NP, vì vậy m ức tín hiệu đầu ra của PD phải là mức 0 thì LED m ới sáng.

II. CÁC BƯỚC TIẾ N H ÀNH

Khởi động phần m ểm lập trình Code Vision AVR.

- Tạo file qu etled 7 th a n h .c lưu trong thư mục q u e tle d ĩthanh.

- Soạn thảo chương trình nguồn

Khai báo các chương trình con và các biến, các định nghĩa.

ttinclude < m egal6.h>

tỉ include <delay.h>

ttdefine LO PORTC.5

itdefm e L I POKTC.4

M e fm e L 2 PORTC.3

M e fin e L 3 PORTC.2

M e fin e L4 P O R TC .l

#define L5 POKTC.O

im a //= {0 xI2 ,0 x7 e,0 x0 b ,0 x4 a ,0x66,0xc2,0x82,0x7a,0x02,0x42}-

inl lang,tem p,trieu,tnghin,nghìn,tram ,chuc,donvi,i,j= 0;

void dispìay();

void convert();
- Soạn thảo chương trinh theo nội dung sau:
while (1){
convert));
displayị);
i f (PINA.1==0) tang=0,j=0;

}}
void convert(){
Irieu=tang/1000000;
temp=tang%1000000;
tnghin=lemp/100000;
temp=temp%100000;
nghin=templlOOO;
temp=temp%1000;
lram=temp/]00;
temp=temp%100;
chuc=templlO;
donvi=temp%10;
fo r (i=0;i<=9;i++){
if(i==trieu) trìeu=a[ij;
i f (i==mghin) tnghin=aji];
i f <i==nghin) nghin=a/iI;
i f (i==tram) li am=a/iI;
i f (i==chuc) cliuc=aịij;
i f (i==donvi) donvi=a[iI;

}}
void displayi){

PORTD=tríeu;
L0=0;

delayus(lO O );

60
L0= 1;
POKTD=tnghin;

L1= 0;

delay_us( 100);

L 1 = I;

PO RTD = nghin;

L2= 0;

delay_us( 100);

L 2 = l;

POKTD =tram;

L3= 0;

delay_us( 100);

L 3 = l;

P O R T D -ch u c;

L4= 0;

d e la y u s(lO O );

L 4 = l;

POKTD =donvi;

L5= 0;

d elay us(IOO);

L 5= J;

i f (P IN A .0= = 0)

{lang=j++;

d ela y_ u s(5 0 );} }

Hoạt động thử.

- Lắp Bus dữ liệu đun Led 7 thanh với PD, bus địa chỉ nối với PC. PA nối với m ôđun
ím ấn.

- Bật công tắc nguồn.

- Dịch và nạp chương trình.


- Nhấn nút ấn reset ứng với PA 1.
- Nhấn nút tăng ứng với PAO.
- Theo dõi sự hoạt động của mạch.

IV. BÁO CÁO THÍ NGHIỆM

Sô' thứ tự và tên bài.


Mục đích thí nghiệm.
Chương trình đã soạn thảo để thí nghiệm
Kết quà thí nghiệm:
Nhận xét và kết luận.

V. CÂU H Ỏ I K IỂM TRA

Vẽ lưu đồ và giải thích hoạt động cùa chương trình.


Viết lại chương trình Ihực hiện công việc như sau. Khi nhấn nút ứng với PAO thì
mạch tự động đếm từ 0 đến 100. Nhấn nút ứng với PA 1 thì reset về 0.

62
B À I THỰ C H À N H SỐ 6
G IẢ I M Ã BÀN PH ÍM

Bài tập ứng dụng:

L ập trình giải m ã bàn phím , với m ỗi phim nhấn s ẽ hiền thị s ố tương ứng trên LED
thanh.

M ỤC Đ ÍCH

Học xong bài này học sinh cần nắm được các nội dung sau:
- Hiểu được cấu trúc phẩn cứng, và cách quét các phím trên m atrix phím.
- H iểu được cách giải m ã bàn phím sử dụng phương phấp quét theo cột, theo hàng.

- X ây dựng được chương trình giải m ã các phím nhấn bố trí trên m a trận 4 x 4 .

. T Ó M T Ắ T LÍ T H U Y Ế T

Sử dụng nút ấn để nối với các đầu vào sẽ tốn nhiều đẩu vào (giả sử có n nút ấn sẽ
n n đầu vào). Đê giảm bớt các đẩu vào ta dùng các phím nhấn bố trí và kết nối thành
a trậ n m X n.

V í dụ: Có 12 nút ấn bố trí thành ma trận 3 x 4 nối như sơ đồ hình 6.1 ta chỉ cẩn 3 + 4 = 7
iu vào.
Đ ể xác định phím được nhấn ta sử dụng phương pháp quét hàng hoặc quét cột
iư sau:

Phương pháp qu ét cột:

Ban đẩu ở trạng thái bình thường tất cả các chán PAO đến PA7 đểu ở mức cao. Để
ẩm tra phím được nhấn ta lần lượt đặt các chân PA4, PA 5, PA6, PA7 ờ mức thấp và
1 lượt kiểm tra từng cột. Kiểm tra nếu thấy cột nào ở mức thấp ta sẽ kết luận phím nằm
làn g và cột tương ứng được nhấn.

V í dụ: Đầu tiên ta cho hàng PA7 = 0 sau đó lần lượt kiểm tra (quét) các cột PAO
u , PA2, PA3.

Phương pháp quét hàng:

Tương tự như trên, bây giờ ta lần lượt đặt các chân PAO, PA 1, PA2, PA3 ờ m ức thấp
li đó sẽ kiểm tra lần lượt tùng hàng.
H ình 6.1

m . CÁC Bước TIẾN HÀNH

Khởi động phẩn mềm lập trình Code Vision AVR.


- Tạo một dự án mới đặt tên là quetbanfim .c, trong thư mục quetbanfim
Soạn thảo chương trình nguồn
- Khai báo các biến, các chương trình con và các định nghĩa.
#inchide <megal6.li>
Uinclude <delay.h>
#define LO PORTC.5
Udefine L I PORTC.4
ttdefine L2 PORTC.3

M efine L ì POFTC.2

Xdefine L4 POKTC.l

ttdefine L5 POKTC.O

ttdefine data PORTD

64
int a[]= {O xl2,0x7e,0x0b,0x4a,0x66,0xc2,0x82,0x7a,0x02,0x42};

unsigned char tem p,chuc,donvi,i;

void scan();

void convert();

void d isp la yị);

- Soạn thảo chương trình theo nội dung sau:

w hile (1) {

scan();

convert();

display();

}}
void d ìsp la yị){

data= chuc;

L4= 0;

delay_us( 100);

L 4 = l;

data= donvi;

L5= 0;

delay_us( 100);

L 5 = l;

}
void c onvert(){

chuc= tem p/10;

donvi= tem p% 10;

f o r (i= 0;i< = 9;i+ + ){

i f (i= = chuc) c h u c - a /ij;

if(i= = d o n v i) donvi= a[i];

}}
void sc a n ị){

65
PORTA.0=0;
i f (PINA ,4==0) temp=0,delay_us(50);
i f (PINA.5==0) te m p -I .delay_us( 50);
if (PINA.6==0) temp=2,delay Jis(50);
i f (PINA.7==0) temp=3,delay_us(50);

PORTA.O=1;
PORTA.1=0;
if (PINA.4==0) temp=4,delay_us(50);
if (PINA.5==0) temp=5,delay_us(50);
i f (PINA.6==0) temp=6,delay_us(50);
if (PINA.7==0) temp=7,delay_us(50);
PORTA.1=1;
POKTA.2=0;
i f (PINA.4==0) temp=8,delay_us(50);
i f (P1NA.5==0) temp=9,delay_us(50);
if (PINA.6==0) temp=10,delayJts(50);
if (PINA,7==0) tem p=11 .delay_us(50);
P0KTA.2=l;
PORTA.3=0;
if (PINA.4==0) temp=12,delay_us(50);
if (PINA.5==0) temp=13,delay_us(50);
if (PINA.6==0) temp=14,delay_us(50);
if(P!NA.7==0) temp= 15 ,delay_us(50);
PORTA.3=l;

}
Hoạt động thử.

- Ghép nối môđun Led thanh với Main chính như sau: Bus dữ liệu nối với PD, bus địa
chỉ nối với PC.

- Ghép môđun bàn phím với PA cùa Main chính, (chú ý địa chi các chân vào ra).
- Bật cõng tắc nguồn.

66
- Dịch và nạp chương trình xuống Main.
- Lẩn lượt ấn các phím trên m atrix phím.

- Q uan sát hiển thị trên Led 7 thanh.

. BÁO CÁO THÍ NGHIỆM

Sô' thứ tự và tên bài.

M ục đích thí nghiệm .

Chương trình đã soạn thảo để thí nghiệm

K ết quả thí nghiệm :

N hận xét và kết luận.

. C Â U H Ỏ I K IỂ M T R A

Vẽ lưu đồ và giải thích hoạt động của chương trình trên.

Viết lại chương trình trên bằng phương pháp quét hàng.
BÀI THỰC HÀNH SỐ 7
HIỂN THỊ LCD

Bài tập ứng dụng:

Lập trình hiển thị các đoạn text lên LCD diều khiển qua nút ấn nối với PA.

I. MỤC ĐÍCH

Học xong bài này học sinh cần nắm được các nội dung sau:
- Hiểu được nguyên lý hoạt động của LCD.
- Hiểu được cách gừi lệnh, gửi dữ liệu lên LCD.
- Cách dùng lệnh “Breack;"
- Cách khai báo và sử dụng các đoạn text.

II. TÓM TẮT LÍ THUYẾT

Sơ kết nối của LCD. Như hìnli 7.1

PA

H ình 7.1

68
M ột số đặc điểm của LCD

LCD có hai c h ế độ làm việc:

+ C hế độ 8 bít: C hế độ này thường dùng cho 8051.

+ C hế độ 4 bít: Cách này thường dùng cho các loại vi diều khiển cgp c a o nh ư
A V R, PIC hay dsPIC.

- LCD có 3 đường điều khiển.

+ Đường E khởi tạo quá trình truyền dữ liệu từ V Đ K tới LCD:

• Nếu E = 1 cho phép

• Nếu E = 0 khõng cho phép.

+ Đường RS quy định gửi lệnh hay gửi dữ liệu lên LCD:

• RS = 1 dữ liệu (ký tự) đang được viết lên LCD.

• RS = 0 lệnh đang được viết lên LCD.

+ Đường R/W quy định hướng truyền dữ liệu.

• R/W = 0 vi điều khiển đang viết dữ liệu lẽn LCD.

• R /W = 1 vi điều khiển đang đọc dữ liệu từ LCD.

Để viết dữ liệu lên LCD cần thực hiện các bước sau:

+ Đ ặt R /W = 0.

+ Đ ặt RS = 0 hay RS = 1 tùy thuộc vào m ục đích gửi lệnh hay gửi dữ liệu.

+ Đ ặt dữ liệu vào bus dữ liệu (P2) nếu quá trình là quá trình viết.

+ Đ ặt E = 1.

+ Đ ặt E = 0.

+ Đ ọc dữ liệu tại bus dữ liệu (nếu quá trình là quá trình đọc). Việc đọc dữ liệu từ
LCD thực hiện tương tự như trên nhưng trường hợp này ít dùng.

- Các ký tự hiển thị trên LCD được lưu trong D D RAM (Display Data RAM ).

- Việc đọc viết ký tự lèn LCD tốn khoảng 40us đến 120us. T rong khoảng thời gian
này LCD “ bận” , không giao tiếp với bên ngoài. Do vậy trong chương trình ta cần
thực hiện delay để chờ LCD thực hiện công việc của m ình.

- Dưới đây là bảng m ã lệnh của LCD.


MãHEXA Lệnh đến thanh ghi LCD
1 Xóa màn hình hiển thị
2 Trờ về đầu dòng
4 Dịch con trỏ sang trái
6 Dịch con trỏ sang phải
5 Dịch hiển thị sang phải
7 Dịch hiển thị sang trái
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con trỏ.
c Bật hiển thị tắt con trỏ
E Bật hiển thị nhấp nháy con trỏ
F Tắt hiển thị nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang trái
18 Dịch toàn bộ hiển thị sang trái
1C Dịch toàn bộ hiển thị sang.phải
80 Đưa con trỏ về đầu dòng thứ 1
CO Đưa con trỏ về đầu dòng thứ 2
38 Hai dòng và ma trận 5x7

III. CÁC BƯỚC TIẾN HÀNH

Khởi động phần mềm lập trình Code Vision AVR.


- Tạo một file lcd.c trong thư mục led.

Soạn thảo chương trình nguồn


- Khai báo các biến và các sử dụng như sau:
ttinclude <megal6.h>
ttinclude <delay.h>

II Alphanumeric LCD Module functions


ttasm

■eqit led_port=0xl5 ;POKTC


ttendasm

70
tfinclude <lcd.h>

char i;
char a[] ={' N' , ' G' , ' 0' , ' C ' ' C' ,' o ' , , ' L ' d ' } ;

II........................................- .............................................................................................................. - .....................................


// D eclare your global variables here

void te x tl( );

void texl2();

void Iext3();

Soạn thảo chương trình theo nội dung sau:

while (1) {

for(i= 0;i< 16;i+ + ){

lcd_gotoxy(i,0);

led_putchar(a[iì);

delay_m s( 100);

}
break;

}
w hile (2){

i f (P ỈN A .0= = 0) textlO ;

i f (P IN A .1= = 0) text2();

if(P IN A .2 = = 0 ) text3();

d ela y_ms( 1 0 0 );

}}
void te x tl( ){

lcd_gotoxy(0,l);

led_putsf("K it A V R " );

delayJ is(5 0 );

}
void Iexl2(){
lcd_gotoxy(0,l);
led_putsf("Phat Iren lai ");
delay_us( 50);

}
void text3(){
lcd_gotoxy(0,l);
led'_putsf("Cty Ngoc Huy ");
delayJis(50);

}
Hoạt động thử.
- Tắt công tắc ngụổn.
- Lắp ghép môđun LCD với main chính qua PC, (chú ý địa chỉ các chân vào ra).
- Bật,công tắc nguồn.
- Dịch và nạp chương trình xuống Main.
- Tác động vào các nút ấn ở PA.
- Theo dõi quan sát hiển thị trên LCD.

IV. BÁO CÁO T H Í N G H IỆM

Số thứ tự và tên bài.


Mục đích thí nghiệm

Chương trình đã soạn thảo để thí nghiệm


Kết quả thí nghiệm:
Nhận xét và kết luận.

V. CÂU H Ở I K IỂ M TRA

Vẽ luu đồ và giải thích hoạt động của chương trình.

72
BÀI THỰC HÀNH SỐ 8
LẬP TRÌNH ĐIỂU KHIỂN MÔĐUN ADC-DAC

Bài tập ứng dụng:

Lập điều khiển m ôđun A D C hoạt động, đọc dữ liệu về từ PD và đưa ra PC.

I. M Ụ C Đ ÍC H

Học xong bài này học sinh cần nắm được các nội dung sau:
- Hiểu được cơ chê' hoạt động của chip AD C 0804 và DA C 0808
- Thiết lập được các c h ế độ đọc và ghi lèn ADC.

II. TÓ M T Ắ T LÍ T H U Y Ế T

- AD C là m ột m ạch đuợc sử dụng rất rộng rãi trong lĩnh vực điều khiển đo lường. Nó
được dùng để chuyển đổi tín hiệu tương tự (analog) thành tín hiệu sô' (digital).

V í dụ: Đ ầu ra của cảm biến nhiệt LM 35, hay cảm biến trọng lượng là m ột tín hiệu
điện áp thay đổi luyến tính theo giá trị tấc động lên cảm biến (nhiệt độ, khối lượng). Vì
vi điều khiển chỉ làm việc với các con số 0 và 1 nên bắt buộc ta phải chuyển đổi tín hiệu
này thành các con số 0 và 1.

Sơ đồ b ố trí chân AD C0804: Hình 8-1: Các chân data được nối với PortD, các chân
điều khiển nối với PortC.

ADCOỈO+LCN

+5V 20
18
INPUT VOLTACE 6 17
16
H -W H 19 15
u • Đ ến PortD
150 pF 10K.
4 13
12
11
7 2
g 3 Đ ến PortC
10 5

H ình 8-1

73
vcc =“

"0
OUTPUT

Hình 8-2

Sơ đổ bố trí các chân của IC DAC 0808: Hình 8-2


Nguyên tắc điều khiển IC ADC như sau: Làm theo đúng thứ tự sau.
+ Đặt chân RD ở mức cao.
+ Đặt chân c s ở mức thấp.
+ Chờ một lúc.
+ Đặt chân RW ở mức thấp.
+ Chờ một lúc.
+ Chuyển chân RW lên mức cao.
+ Chờ một lúc.

+ Chuyển chân c s lẽn mức cao.


Để đọc data từ ADC ta làm như sau:
+ Đặt chân c s ờ mức cao.
+ Chờ một lúc.

+ Đặl chân RD ờ mức thấp.


+ Đọc data.

+ Chuyển chân cs xuống mức thấp.

74
III. C Á C BƯỚC T IẾ N H ÀNH

Khởi động phần m ểm lập trình Code V ision AVR.

- Tạo m ột file adc.c trong thư m ục adc.

Soạn thảo chương trình nguồn

- Các khai báo, định nghĩa.


ttinclude <m ega!6.h>
ttinclude <deìay.h>

#define A D C D O N E POKTC.3 HỈNTR

Udefine A D C CS POKTC.2
ttdefine A D C RD PORTC.O
#clefine A D C W R P O K TC .l
M e fm e A D C D ATA P IN D
void convert();

vo id read();

unsigned char voltage;

- Soạn thảo chương trinh theo nội dung sau:


w hile (1){

co n verlf);

delay_m s( 1);

read();

delay_m s( I );

PO RTA= voltage;

}}
void convert(){

A D C _R D = 1;

AD C _C S= 0;

delay us(lOO);

A D C_W R=0;

delay_us(100);
delay_us( 100);
ADC_CS=1;

}
void readị){
ADC_CS=1;
delay_us( 100);
ADC_RD=0;
voltage = ADC DATA;
delay_us( 100);
ADC_CS=0;

}
Hoạt động thử.
- Tắt công tắc nguồn.
- Ghép môđun ADC như sau: Bus dữ liệu nối với PD, bus địa chỉ nối với PC, (chú ý
địa chỉ các chân vào ra).
- Nối PA ra môđun Led đơn.
- Chuyển JUM trên môđun ADC sang đo điện áp.
- Bật công tắc nguồn.
- Dịch và nạp chương trình xuống Main.
- Điều chỉnh chiết áp.
- Theo dõi quá trình hiển thị của các Led.

IV. BÁO CÁO T H Í N G H IỆM

Số thứ tự và tên bài.


Mục đích thí nghiệm
Chương trình đã soạn thảo để thí nghiệm
Kết quả thí nghiệm:
Nhận xét và kết luận.

V. CÂU H Ở I K IỂM TRA

Vẽ lưu đồ thuật toán và giải thích hoạt động cùa chương trình.

76
BÀI THỰC HÀNH SỐ 9
LẬP TRÌNH VỚI NGẮT CỦA BỘ ĐỊNH THỜI

Bài tập ứng dụng:

Tạo m ột xung bằng tín hiệu ngắt tại chân R D 7 và m ột xung bằng vòng w hile tại
chân RDO.

I. M Ụ C Đ ÍC H

Học xong bài này học sinh cần nắm được các nội dung sau:

- Hiểu được ý nghĩa và cơ chế làm việc của ngắt bộ định thời trong A V R.

- Hiểu được cách đặt các thông số cho thanh ghi cờ ngắt, thanh ghi m ặt nạ.

- Xây dựng được chương trình ứng dụng sử dụng ngắt của bộ định thời.

II, T Ó M T Ắ T L Í T H U Y Ế T

Ngắt là sự đáp ứng các sự kiện bên trong hoặc bên ngoài nhằm thông báo cho bộ vi
điều khiển biết thiết bị đang cần được phục vụ. Ở phương pháp ngắt, m ỗi khi có 1 thiết
bị cẩn được phục vụ thì thiết bị sẽ báo cho bộ vi điều khiển bằng cách gửi m ột tín hiệu
ngắt. Khi nhận được tín hiệu này, bộ vi điéu khiển ngừng m ọi công việc đang thực hiện
để chuyển sang phục vụ thiết bị. Chương trình đi cùng với ngắt được gọi là trình p hục vụ
ngắt ISR (Interrupt Service R outine) hay còn gọi là bộ quản ngắt (Interrupt handler).

Cho phép ngát và cấm ngắt:

Khi Reset thì tất cả m ọi ngắt đều bị cấm (bị che), có nghĩa là không có ngắt nào được
bộ vi điều khiển đáp ứng nếu chúng được kích hoạt. Các ngắt phải được cho phép bằng
phẩn mềm để bộ vi điều khiển có thể đáp ứng được.

Thanh ghi điều khiển - TCCRX:

Bi t 7 8 5 4 3 2 1 0

I FOCO Ị WGM00 I COM»1 ị COMOO Ị WGM01 Ị CS02 I CS01 csoo I TCCRO


R c a d W it c VY RAV RA"; RM RVl RAV RMl RMI

Initial V a lu e 0 0 0 0 0 0 0 0

B ít 3,6 - W G 00-W G 01: Đ ây là các bít chọn c h ế độ trong Tim er. Các giá trị được mồ
tả trong bảng sau. Bàng chọn chế độ time.

77
WGM01 WGM00 Timer/Counter Update of TOVO Flag
Mode TOP
(CTCO) (PWM0) Mode of Operation OCRO Set-on
0 0 0 Normal OxFF Immediate MAX
1 0 1 PWM, Phase Correct OxFF TOP BOTTON
2 1 0 c rc OCRO Immediate MAX
3 1 I Fast PWM OxFF TOP MAX

Bít 5-4 : COMOO-COMOl: Quy định giá trị đầu ra trong các phép so sánh
Bít 2: 0 - CS2:0: Đây là các bít quy định xung cấp cho hoạt động cùa timer. Bảng
dưới đây mô tà toàn bộ các giá trị. Bảng chọn chế độ xung clock.

CS02 CS01 csoo Description


0 0 0 No clock source (Timer/Counter stopped)
0 0 1 clkI/0/(No prescalling)
0 1 0 clkI/0/8 (From prescaler)
0 1 1 clk]/0/64 (From prescaler)
1 0 0 clkI/0/256 (From prescaler)
1 0 1 clkjyo/1024 (From prescaler)
1 1 0 External clock source on TO pin. Clock on falling edge
1 1 1 External clock source on TO pin. Clock on raising edge

Thanh ghi cờ ngắt - TIFR

B it 77 6 5 4
4_________3
3 22 11________ <)
0

O C F2
F2 TOV2 IC F1
F1 OCF1A 1B
O C F 1B T O V 1I OCFO T OVO
TO T IF R

R ead /W rite R/VV R R R R /W R /W R /W R /W

In itia l Value 0 0 0 0 0 0 0 0

Bít l-ocfx: Khi hai giá trị bằng nhau bít này được set lên bằng 1.
Bít 1-tvox: Khi bộ đếm vượt quá giá trị top thì bít này được set bàng 1.

Thanh ghi mặt nạ ngắt - TIMSK.

B it 7________
________66________ 5_________
5 4 __________3_________2_________1____________0
3 2 1 0

O C IE 2 TT O
O IE 2 TTIC IE11
IC IE O
O C IE 1 A O C IE 1 B T O IE 1 O C IEO
OCIEO TO IEO
TOIEO T IM S K

R e a d /W rite R /W R
R R
R R /w
R /W R /W /W
R /W R /W
R /W

In itia l V a lu e 0 0 0 0 0 0 0 0

78
B ít 1-O C IE x: Khi bít này được set lên bằng 1 thì cho phép ngắt so sánh Bít O-TOEEx:
K hi bít này được set lên bằng 1 thì cho phép ngắt tràn.

III. CÁ C BƯỚC TIẾN H ÀNH

Khởi động phẩn m ềm lập trình Code V ision AV R.

- Tạo file ngattim e.c trong thư m ục ngattim e.

Soạn thảo chương trình nguồn.

- Soạn thảo chương trình theo nội dung sau:


ttittclude < m egal6.h>

ếinclude <delay.h>

#define x ta l 1000000

#define fm o v e 2

bit a;

int count=0;

interrupt [TIMO_OVF] void timerO o v f isr(void) { IITrình phục vụ ngắt

count++ ;

i f (co u n t= -2 0 0 0 )

{a=~a;

POKTD .7=a;

count=0;

}}
void m ain(void) {

POKTA=OxOO;

D D RA=0x00;

D D RB=0xFF;

PORTC=OxOO;

DD RC= 0x00;

POKTD=OxFF;

DD RD =0xFF;

TCCR0=0x01;

79
TCNTO=OxOO;
OCRO=OxOO;

TCNT0=0xl0000-(xtal/1024/fmove);
TIFR-O;
TIMSK=0x01; UCho phép ngắt tràn timei-0
#asm(" sei" )

while (I) {
POFTD.0=0;
delay_ms(500);
POFTD.O=1;
delay_ms(500);

}}■
Biên dịch chương trình nguồn sang File ngattime.hex
Hoạt động thử.
- Ghép môđun Led đơn với main chính qua PD.
- Bật công tắc nguồn.
- Dịch và nạp chương trình xuống Main chính.
- Theo dõi sự hoạt động của LED tại PDO và xung ra tại chân PD7.

IV. BÁO CÁO THÍ NGHIỆM

Số thứ tự và tên bài.


Mục đích thí nghiệm.
Chương trình đã soạn thảo để thí nghiệm.
Kết quả thí nghiệm.
Nhận xét và kết luận.

V. CÂU HỎI KIỂM TRA

Vẽ lưu đổ và giải thích hoạt động của chương trình.

Viết lại chương trình trên với 2 xung tạo ra đều dùng ngắt timer.

80
B À I T H Ự C H À N H S Ố 10
L Ậ P T R ÌN H V Ớ I N G Ắ T N G O À I

Bài tậ p ứng d ụ n g :

Viết chương trình bật lắt liên tục m ột LE D ra tại chân PDO, khi có tín hiệu ngắt
ngoài thì bật rắt m ột LED khác tại chăn P D 7cho bộ đếm sử dụng ngắt ngoài l làm đẩu
vào đếm, ngắt ngoài 0 làm đẩu vào reset. Hiển thị ra Led 7 thanli.

I. M Ụ C Đ ÍC H

- Hiểu được ý nghĩa và cơ chế làm việc của ngắt ngoài INTO và INT1 trong 8051

- Xây dựng được chương trìn h ứng dụng sử dụng ngắt ngoài.

II. TÓ M TẮ T LÍ TH U Y ẾT

III. CÁC BƯỚC T IẾ N HÀNH

Khởi động phần m ềm lập trình Code V ision AVR.

- Tạo m ột file ngatngoai.c trong thư mục ngatngoai.

Soạn thảo chương trình nguồn

- Soạn thảo chương trình theo nội dung sau:

#include <m egal6.li>

Uincỉude <deìay.h>

bit a;

interrupt [E X T_IN T I ] void e x t j n t l j s r ( v o i d ) llta i chan PD3

{ a=~a;

PO RTC.7=a;

}
v o i d m a in (v o id ) {

PORT A=0x00;

DDRA=0x00;

81
POKTB=OxOO;
DDRB=OxOO;
POFTC=OxFF;
DDRC=OxFF;
POKTD=OxOO;
DDRD=OxOO;
TCCRO=OxOO;
TCNTO=OxOO;
OCRO=OxOO;
TCCRlA=OxOO;
TCCRỈB=OxOO;
TCNTlH=OxOO;
TCNTlL=OxOO;
1CR1H=OxOO;
ICRlL=OxOO;
OCRlAH=OxOO;
OCRlAL=OxOO;

0CR1 BH=OxOO;
OCRlBL=OxOO;
ASSR=OxOO;
TCCR2=0x00;
TCNT2=0x00;
OCR2=OxOO;
GlCR/=0x80;

MCUCR=0x08;
MCUCSR=OxOO,

GIFR=0x80;

TIMSK=OxOO;

ACSR=0x80;
SFIOR=OxOO;

#asm ("sei")

while (1) {

PORTC.O=1;
delay_ms(500);
PORTC.0=0;
delay_ms(500);

}}
Hoạt động thử.

- Tắt công tắc nguồn.


- G hép m ôđun Led đơn với M ain chính qua PORTC, m ôđun phím ấn với PORTD.
(Chú ý địa chỉ các chân vào ra).

- Bật công tắc nguồn.

- Dịch và nạp chương trình xuống Main.

- Nhấn phím kích hoạt ngắt tại chân PD.3.

- T heo dõi sự hoạt động của LED.

IV. BÁ O C Á O T H Í N G H IỆ M

Só' thứ tự và tên bài.

Mục đích th í nghiệm

Chương trình đã soạn thảo để thí nghiệm

Kết quả thí nghiệm :

Nhận xét và kết luận.

V. CÂU H Ỏ I K IỂ M T R A

Vẽ lưu đồ và giải thích hoạt động của chương trình trên.

83
BÀI THỰC HÀNH SỐ 11
LẬP TRÌNH HIỂN THỊ MATRIX 8X8

Bài tập ứng dụng:

Lập trình hiển thị chữ như sau: ấn nút ờ PAO tlù hiển thị chữ “B ", ấn nút ớ PA1 th
hiển thị "C ", ấn nút ở PA2 thì hiển thị cliữ 'ằD " lên matrix8x8.

I. MỤC ĐÍCH

Học xong bài này thì học sinh cần nắm được các điểm sau:
- Hiểu được cấu trúc phần cứng của matrix 8x8 từ đó mỏ rộng ra các matrix có kícl
thước lớn hơn.
- Hiểu được các khai báo các mảng, vòng fo r lồng trong nhau.

- Hiểu được cách quét dữ liệu theo cột.

II. TÓM TẮT LÍ THUYẾT

1. Mỏ tả thiết bị phần cứng.

Dưới đây là sơ đổ nguyên lý của Matrix 8 x 8 .

* * * <* \
Đệm
* * * X
Đến P1 a dòng
hàng
* *

*
\ * <
* * * - *
N
2 3

Đến P2
H ỉnh 12.1

84
Nếu coi m ỗi Led là m ột điểm sáng thì bảng hiển thị của chúng ta coi như m ột ma trậ
gồm 8 hàng và 8 cột. Mỗi Led tương ứng với m ột điểm sáng hoặc tắt. Nhìn vào sơ đồ I
thấy rằng m ỗi Led ij sẽ sáng khi i = 1, j = 0 (i chạy từ 0 - 8).
G iá trị xuất ra ở PC tại m ột thời điểm chỉ có m ột cột ở mức thấp các cột còn lại phí
để lên mức cao.
Ý tưởng:
- Tạo m ột bảng dữ liệu m ã hoá font chữ, khi hoạt động thì CPU sẽ dọc giá trị tron
bảng mã này. Bảng m ã này có cấu trúc gồm nhiều byte dữ liệu được sấp xếp nối tié
nhau có mục đích.
- Cách hiển thị chữ như sau: Byte dữ liệu đầu tiên được gửi ra PC cột j 1=0, tất các cá
cột còn lại ở mức cao. Chờ m ột lúc, byte tiếp theo được gửi ra PC cột j2=0, cột j
chuyển lên mức cao, tất cả các cột còn lại đều ở mức cao. Cứ như vậy cho đến cột thứ 8
- Như vậy con số 0 chạy từ j l đến j8 thì hiển thị được m ột ảnh, thời gian hiển thị nà
là rất ngắn chỉ khoảng 40m s. Như vậy m ắt ta không thể quan sát kịp nếu chỉ quét mị
lần. Để m ắt nhìn thấy được ảnh hiện lên liên tục thì ta phải quét > 24 ả n h /ls.
K ết luận:

Tại m ột thời điểm chỉ có duy nhất 1 cột mà ở đó có các Led sáng tương ứng với byl
dữ liệu được đọc ra. Sau khi các Led trên cột này tắt đi thì Led tương ứng trên cột k ế tiẽ
sẽ sáng. Q uá trình cứ tiếp tục cho tới cột cuối cùng thì ta đã thực hiện được 1 lần qué
tức là ta đã tạo được 1 ảnh cần hiển thị.

2. Phương pháp hiển thị chữ động

Để tạo chữ “A ” ở dạng ảnh động ta sẽ cho chữ “A ” xuất hiện ở dạng ảnh tĩnh trong
thời gian nào đó rồi chuyển sang hiển thị bắt đấu từ k ế tiếp (cột 2) tức chữ “A ” đã (
chuyển sang phải được 1 cột. Để làm được việc này thì khi bit 1 chuyển sang cột 2 I
mới đọc byte dữ liệu đầu tiên (có giá trị là 83h) và đọc các byte k ế tiếp như trường họ
chữ “A ” nằm ở cột 1.

III. CÁC BƯỚC T IẾ N H ÀNH

Khởi động phần m ềm lập trình Code V ision A V R

- Tạo m ột file m atrix8x8.c trong thư m ục m atrix8x8.


Soạn thảo chương trình nguồn

- Các khai báo

ttinclude <m egal6.h>


ttinclude <delay.h>


unsigned char k,l,m,n=0;
unsigned char al]={0xfe,0xfd,0xfb,0xp,0xef,0xdf,0xbf,0x7J};
unsigned char fo n t! l={0xff,0x80,0xB6,0xB6,0xB6,0xBE,0xff,0xff,
Oxff.OxBE,0x80,0xB6,0xB6,0xC9,0xff,0xffJIB
Oxff.OxCl ,0xBE,0xBE,0xBE,0xDD,0xff,0xff,IIC
0xff,0xBE,0x80,0xBE,0xBE,0xC 1 .Oxff.Oxffl ;/ID

- Soạn thảo chương trình theo nội dung sau:


white (1){
fo r (k=0;k<=8;k++){
fo r (l=0,m=n;l<8;l+ + ,m++){
POKTD=a[l];
POKTC=font[m];

delay_us(50);

PORTC=Oxff;
i f (PINA.0==0) n=8;
if(P IN A .I= = 0) n=16;
if(PIN A.2= = 0) 11=24;
}}}}// End Programmer

Hoạt động thử.


- Tắt công tắc nguồn.
- Ghép mõđun matrix với Main chính như sau: Bus dữ liệu nối với PC, bus địa chỉ nối
với PD. Môđun nút ấn nối với Main chính qua PA, (chú ý địa chỉ các chân vào ra).
- Bật cõng tắc nguồn.
- Nạp chương trình xuống Main chính.
- Tác động vào các nút ấn ớ PA.

- Quan sát sự hoạt động cùa mạch.

IV. BÁO CÁO T H Í N G HIỆM

Số thứ tự và tên bài.

86
M ục đích thí nghiệm
Chương trình đã soạn thảo để thí nghiệm
Kết quả thí nghiệm:

N hận xét và kết luận.

V. C Â U H Ỏ I K IỂ M T R A

Vẽ lưu đồ và giải thích hoạt động cùa chương trình trên.


B À I TH Ự C H À N H SỚ 12
LẬ P T R ÌN H G IA O T IẾ P I2C V Ớ I D S1307

Bài tập ứng dụng:

Viết chương trình thiết lập giao tiếp Ỉ2C, thiết lập các thông s ố cho DS1307, đọc thời
gian và hiển thị ra LCD

I. MỤC Đ ÍCH YÊU CẦU

Học xong bài này học sinh cần nắm được các nội dung sau:
- Hiểu được nguyên lý truyền nhận trên bus I2C.
- Hiểu được cấu tạo và các điểu kiện hoạt động của DS1307.
- Biết khai báo các chế độ hoạt động của giao tiếp I2C.
- Biết viết các chương trình con gửi và đọc dữ liệu lên đường truyền I2C.
- Xây dựng được chương trình viết và đọc thời gian lên DS1307.

II. TÓ M TẮ T LÍ THUY ẾT

1. Cơ bản về giao tiếp I2C

I2C là tên viết tắt của cụm từ Inter - Intergrated Circuit - Bus giao tiếp giữa các IC với
nhau và nó trở thành một chuẩn công nghiệp cho các giao tiếp điều khiển, được sử dụng
làm bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều khiển
8051, PIC, AVR, ARM, chip nhớ nhu RAM tĩnh (Static Ram), EEPROM, bộ chuyển
đổi tương tự sô' (ADC), sô' tương tự (DAC), IC điểu khiển LCD, L E D ...

MICRO
1 1X0 1 STATIC
controller; WUVFR RAWOS
A fFPROM

BOA
i • I ~ T — 7“ 7

L w : . '
I « >
1

r
[ Aoc

Hỉnh 12.1: BUS I2C và các thiết bị ngoại vi


M ột giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là
đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ và chỉ theo m ột
hướng. Như hình vẽ trên, khi m ột thiết bị ngoại vi kết nối vào đường I2C thì chân SDA
của nó sẽ nối với dây SDA của bus, chân SCL sẽ nối với dây SCL.
Mỗi dây SDA hay SCL đẻu được nối với điện áp dương của nguồn cấp thông qua một
điện trở kéo lên (pullup resistor). Sự cần thiết của các diện trở kéo này là vì chân giao tiếp
I2C của các thiết bị ngoại vi thường là dạng cực m áng hở (opendrain or opencollector).
Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp, thường dao
động trong khoảng lk đến 10k. Trở lại vói hình 1.1, ta thấy có rất nhiều thiết bị (ICs) cùng
được kết nối vào m ột bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thiết
bị, bởi mỗi thiết bị sẽ đuợc nhận ra bởi một địa chỉ duy nhất với m ột quan hệ chủ/tớ tồn tại
trong suốt thời gian kết nối. Mỗi thiết bị có thể hoạt động như là thiết bị nhận dữ liệu hay
có thể vừa truyền vừa nhận. Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó
là chủ (m aster) hay tớ (slave). M ột thiết bị hay m ột IC khi kết nối vói bus I2C, ngoài một
địa chỉ (duy nhất) để phân biệt, nó còn được cấu hình là thiết bị chủ (m aster) hay tớ
(slave). Tại sao lại có sự phân biệt này ? Đó là vì trên m ột bus I2C thì quyền điều khiển
thuộc về thiết bị chủ (master). Thiết bị chù nắm vai trò tạo xung đồng hồ cho toàn hệ
thống, khi giữa hai thiết bị chủ/tớ giao tiếp thì thiết bị chù có nhiệm vụ tạo xung đồng hồ
và quản lý địa chỉ của thiết bị tó trong suốt quá trình giao tiếp. T hiết bị chủ giữ vai trò chủ
động, còn thiết bị tớ giữ vai trò bị động trong việc giao tiếp.

Master SDA Slave M aster SDA Slave


--- ♦ * .... .
Transmitter R eceive r Receiver

SCL SCL

H ìn h 12.2: Truyền nhận d ữ liệu giữa m aster!stave

Nhìn hình trên ta thấy xung đồng hồ chỉ có m ột hướng từ chủ đến tớ, còn luồng dữ
liệu có thể đi theo hai hướng, từ chủ đến tớ hay ngược lại tớ đến chủ. v ề dữ liệu truyền
trên bus I2C, m ột bus I2C chuẩn truyền 8#bit dữ liệu có hưóng trên đường truyền với tốc
độ là 100Kbits/s - C hế độ chuẩn (Standard m ode). Tốc độ truyền có thể lên tới
400Kbits/s - C hế độ nhanh (Fast m ode) và cao nhất là 3,4M bits/s - C hế độ cao tốc
(High#speed m ode). M ột bus I2C có thể hoạt động ở nhiều c h ế độ khác nhau:

- M ột chủ m ột tố (one m aster - one slave)

- M ột chủ nhiều tớ (one m aster - m ulti slave)

- N hiều chủ nhiều tớ (M ulti m aster - m ulti slave)

Dù ở chê độ nào, m ột giao tiếp I2C đều dựa vào quan hệ chủ/tớ. G iả thiết m ột thiết bị
A m uốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện như sau:

89
- Thiết bị A (Chù) xác định đúng địa chỉ cùa thiết bị B (tớ), cùng với việc xác định
địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị tớ.
- Thiết bị A gửi dữ liệu tới thiết bị B.
- Thiết bị A kết thúc quá trình truyền dữ liệu.
Khi A muốn nhận dữ liệu từ B, quá trình diễn ra như trên, chỉ khác là A sẽ nhận dữ
liệu từ B. Trong giao tiếp này, A là chủ còn B vẫn là tớ.

2. T ruyền dữ liệu lén bus


Nguyên tấc truyền một byte dữ liệu lên bus I2C gồm có các bước sau:
- Gửi bít Start từ Master tới slave, đợi cho đến khi truyền xong.
- Gửi địa chỉ của slave lên đường truyền. Dùng để chọn Slave nào hoạt động, đợi
cho đến khi truyền xong.
- Gửi địa chỉ cần lưu dữ liệu tới, đợi cho đến khi truyền xong.
- Gửi dữ liệu cần truyền tới Slave, đợi cho đến khi truyền xong.
- Tiếp tục gửi dữ liệu...
- Khi muốn kết thúc gửi bít Stop lên đường truyền.

3. Nhận dữ liệu từ bus

Quá trình nhận dữ liệu từ slave phải tuân thủ theo các bước sau:

- Gửi bít Start từ Master tới slave, đợi cho đến khi truyền xong.
- Gửi địa chỉ cùa slave (bit 0 = 0) lẽn đường truyền. Dùng để chọn Slavenào hoạt
động, đợi cho đến khi truyền xong.
- Gửi địa chỉ cùa dữ liệu cần nhận, đợi cho đến khi truyền xong.
- Gửi bit Restart, đợi cho đến khi Iruyền xong.

- Gửi địa chỉ cùa slave lên đường truyền (bit 0 =1 báo rằng hoạt động sắp tới là đọc).
Đợi cho đến khi truyền xong.

- Đọc dữ liệu từ Slave, đợi cho đến khi đọc xong.

- Phát bít ACK báo tiếp tục nhận dữ liệu, đợi cho đến khi truyền xong.
- Đọc dữ liệu từ Slave, đợi cho đến khi đọc xong.

- Phát bít ACK báo tiếp tục nhận dữ liệu, đợi cho đến khi truyền xong.

- Đọc dữ liệu từ Slave, đợi cho đến khi đọc xong.

90
- Phát bít NACK báo rằng qua trình nhận dữ liệu đã kết thúc, đợi cho đến khi
truyền xong.

- Phát bít Stop để kết thúc.

4. IC thời gian thực DS1307

- DS1307 lả con Real Tim e clock của hãng D allas và được dùng khá phổ biến hiện
nay. Cũng giống như các RTC khác, DS1307 có các đặc tính sau:

+ D ùng chuẩn giao tiếp I2C.

+ Hiển thị giờ phút giây, ngày, tháng năm (đến tận nãm 2099).

+ Dùng thạch anh 32.768 kHz làm bộ tạo dao động-

+ Sử dụng Pin 3V để hoạt động khi m ất điện.

+ Có 56 byte Ram cho người sử d ụng......

- Một số đặc điểm mà các bạn cần phải chú ý:

+ DS1307 có 7 byte dữ liệu nằm từ địa chỉ 0x00 tới 0x06, 1 byte điều khiển, và 56
byte lưu trữ (dành cho người sử dụng).

+ Khi xử lý dữ liệu từ DS1307, nhà sản xuất đã tự chuyển cho ta về dạng số BCD,
ví dụ như ta đọc được dữ liệu từ địa chỉ 0x04 (tương ứng với d ay- ngày trong tháng)
và tại 0x05 (tháng) là 0x1 5 , 0x11 như th ế có nghĩa là lúc đó là ngày 15-11 chứ ko
phải là ngày 21 tháng 17.

+ Lưu ý đến vai trò của chân S Q W /O U T . Đây là chân cho xung ra của DS1307 có 4
chế độ 1Hz, 4.096H Z, 8.192Hz, 32.768Hz... các c h ế độ này đuợc quy định bởi các bít
của thanh ghi Control Register (địa chỉ 0x07).

+ Địa chỉ trên m ạng I2C của DS13071à OxDO.

III. C Á C BƯ Ớ C T IẾ N H À N H

1. K hỏi tạ o cho L C D và DS1307 n h ư sau

Trong Tab ta chọn chip DS1307 tích vào ô Enable để sử dụng DS1307 trong ô Square
Wave O utput ta cũng tích vào ô E nable, tại ô Freq ta chọn tần số 1Hz để khởi tạo cho
chân output của DS1307 cứ ls có 1 xung ra. Sau đó chọn F ile/ Save, G renate and Exit

Sơ đồ làm việc với DS1307 như sau:

91
C odeW izardA V R - u n title d .c w p fx j 3 C o d e W iz a fd A V R - u n title d .c w p I^ J

File Help Fie Help

USART Analog Comparator ADC SPI USART Analog CompaiaUy ' ADC SP1

I2C 1 Wire 2 Wire (I2C) Chip i Port* External IRQ Timers

Chip Ports External IRQ Timers LCD Bit-Banged Protect Information

LCD Bit-Banged Project Information Ĩ2C p 1 Wke V 2Wke P2 q

I2C Poft: PORTO V


LCD Port: la ilĩlliẩ V
SDA Bit: 0 V SCLBfc 1

Chars./Line: 16 V
PCF8583 Ị DS1307 < >
PORT Bit 0 - RS(LCDPin 4)
PORT Bit 1 • RD (LCDPin Ặ Square W ave Output
PORT Bit 2 - EN (LCD Pin 6) 0 Enabled 0 E nabled
PORT Bit 3 • Flee
PORT Bit 4 -D B 4 (LCD Pin 11) Freq.: 1 V Hz 1

PORT Bit 5 -D B 5 (LCD Pin 12


PORT Bit B -D B 6 (LCD Pin 13)
PORT Bit 7 - DB7 (LCD Pin 14)

2. Ngay trước vòng While (1) trong hàm Main ta bổ sung câu lệnh thời gian và
ngày tháng cho RTC. I2C, LCD, DS1307 đã được khởi tạo sân từ trước bằng
CodeWinzard:

// I2C Bus initialization


i2c_init();
IID S 1 3 0 7 R eal T im e C lock initialization
II Square wave output on pin SQ W /O U T: On
// Square wave fre q u en c y: 1Hz
r tc jn it( 0 ,l,0 ) ;
// LC D m odule initialization
lcd_init(16);

r tc _ s e tjim e (0,0,0);// khoi tao Oh Op Os

l tc se t date (10,10,201 l) ; ll ngay 10 thang 10 nam 2011

Để đọc được thời gian ta dùng các hàm rtc_get_time và rtc_get_date có sẩn trong thư
viện DS1307.h

92
3. T iếp theo chúng ta cần khai báo 3 biến lưu thông tin về thời gian là giờ □ h;
phút □ m; giây □ s; và 3 biến lưu thông tin về thời gian là ngày □ day; tháng □
month; năm □ year ; ngay trước hàm M ain như sau:

unsigned h,m ,s; IIkhai bao gio phut giay

unsigned day,m onth,year;ll khai bao ngay thang nam

void m ain(void)

4. Tiếp theo đê’ hiển thị giờ và ngày ra LCD ta cần viết thèm chương trình hiển
thị ra LCD:

// D eclare your global variables here

unsigned h,m ,s; I/khai bao gio phui giay

unsigned day,m onth,year;// kliai bao ngay thang nam

void led J ju tn u m (unsigned char x)

{
u n s ig n e d c h a r c liu c ,tr a m ,d o n v i;

tr a m = x /1 0 0 ; H la y h a n g tr a m

chac=(x-tram * 100)110; Hlay hang chuc

donvi=(x-tram * 100-cluic* 10); lllay hang don vi

II cluiyen qua m a ASH

led_putchar (tram + 48);

led Jiiitch a r (cliuc+48);

led_putchar (clonvi+ 48);

}
void m ain(void)

5. Lập trình cho vòng lặp W hile (1)

93
while (1)

II Place your code here


I tc_get_time(&h,&m,&s); II doc gio lu DS1307
rtc get date(&date,&monlh,&year); II Doc nagy tu DS1307

II hien thi ra LCD


lcd_gotoxy(0,0);
led_putnum(h);
led_putchar(’:‘);
■led_putnum(m);
led_putchar(':');
led_piitnum(s);
led_putchar(':');
lcd_gotoxy(0,l);
led_putnum(date);
led_putchar('l');
led_putnum(month);
led_putchar(T);
led_putmim(year);
delay_ms(500);

};

6. Biên dịch chương trình nguồn sang File I2C..hex.

7. H oạt động thử

- Tắt công tắc nguồn.


- Bật Switch chọn kết nối I2C trên Main chính.
- Kết nối môđun LCD Main như sau: Bus data nối với PortD,
- Nạp chương trình xuống Main chính.
- Bật công tắc nguồn.

94
- Q uan sát sự hoạt động của mạch.
- Khi hoạt động thì ied nối vói chân SQW có xung 1 giây.

K ết quả m ô phỏng :
LCD1
LMCM8L
:TE*T>

AThCOA*

IV. BÁO C Á O T H Í N G H IỆ M

1. Số thứ tự và tên bài

2. Mục đích thí nghiệm

3. Chương trình đã soạn thảo để thí nghiệm

4. K ết quả thí nghiệm

5. Nhận xét và kết luận.

V. C Â U H Ỏ I K IỂ M T R A

1. Hãy nêu phương thức hoạt động của bus I2C.

2. Vẽ lưu đồ và giải thích hoạt động của chương trình trên.

95
B À I T H Ự C H À N H S Ố 13
L Ậ P T R ÌN H G IA O T IẾ P M Á Y T ÍN H

Bài tập ứng dụng:

Viết chương trình thiết lập giao tiếp máy tính, truyền một dữ liệu từ máy tínlì xuống vi
điều khiển, ấn một nút trên Main thì truyền một dữ liệu lên máy lính.

I. MỤC Đ ÍCH VÊƯ CẦU

Học xong bài này học sinh cần nắm được các nội dung sau:
- Hiểu cách thiết lập các thông số cho chuẩn giao tiếp RS232 giữa vi điều khiển và PC.
- Biết cách gửi một giá trị lên máy tính và cách đọc một giá trị từ máy tính xuống.

II. T Ó M TẮ T L Í THUY ẾT

96
Chuẩn giao tiếp RS232
G hép nối qua cổng nối tiếp RS-232 là m ột trong những kỹ thuật được sử dụng rộng
rãi nhất để ghép nối các thiết bị ngoại vi với m áy tính. Qua cổng nối tiếp có thể ghép nối
chuột, m odem , thậm chí cả m áy in, bộ biến đổi AD, các thiết bị đo lường.
Việc truyền dữ liệu xảy ra trên 2 đường dăn qua chân cắm ra TxD, gửi dữ liệu của nó
đến thiết bị khác. Trong khi đó dữ liệu mà m áy tính nhận được dẫn đến chân RxD. Các
tín hiệu khác đóng vai trò như tín hiệu hỗ trợ khi trao đổi thông tin và vì thế không phải
trong mọi ứng dụng đều dùng đến.
Mức tín hiệu trên chân ra RxD tùy thuộc vào đường dẫn TxD và thông tin thường
nằm trong khoảng - 12V.. + 12V các bit dữ liệu được đảo ngược lại. Mức điện áp ở mức
cao nằm trong khoảng - 3V và - 12V và mức thấp nằm trong khoảng từ + 3Vvà +12V.
Trạng thái tĩnh trên đường dẫn có mức điện áp - 12V.
Lập trình truyền thông nối tiếp trên A tm egaló
A tm egaló hỗ trợ rất tốt cho truyền thông nối tiếp USART. Các đặc điểm nổi bật là:

- Hoạt động toàn phẩn Full-duplex.


- Hỗ trợ cả hoạt động đồng bộ và không đồng bộ.
- Định dạng khung có thể lập trình (với 5,6,7,8 hoặc 9 Data bits và 1 hoặc 2 Stop
Bits), tự dò lỗi định dạng khung và lỗi Data O ver Run.
- Hỗ trợ truyền thông điểu khiển ngắt.

- Hỗ trợ truyền thông đa xử lý.


Các đặc điểm của Bộ thu (Receiver):

- Dò trạng thái rỗi của đường truyền.


- Dò lỗi khung, nhiễu, và lỗi overrun.

- Báo trạng thái thanh ghi dữ liệu của bộ thu đầy.

Các đặc điểm của bộ phát (T ran sm itter):

- Báo trạng thái thanh ghi dữ liệu bộ phát rỗng.

- Báo hoàn thành quá trình truyền.

- Ngắt quá trình truyền.

- Phát trạng thái rỗi lên đường truyền.

III. C Á C B Ư Ớ C T IẾ N H À N H

1. Khởi tạo cho chương trình CodeW inzard

97
3 CodeWizardAVR - u ntilled .cw p
Fie Help

I2C 1W ke 2W ire(l2C)
LCD Bk-Banged Protect Infamadon
Chip Ports External IRQ Timeis
USART Analog Compaiator ADC SPI

0 R eceive* 0 Rx Interrupt

R eceiver Buffer 8

0 Transmitler 0 Tx Interrupt

Transmrttef Buffer: 8 yQ
Baud Rate: 9GOO V 0x2

Baud R ale Error: 0.2%


Communication Paiametefs:

8 Dala, 1 Stop. No Paiily V

M ode Asynchfonous V

Trong tab USART check vào các Ô Receiver để cho phép nhận dữ liệu; Rx
Interrupt để nhận dữ liệu sử dụng ngắt; Transmitter để cho phép truyền dữ liệu; Tx
Interrupt để truyển dữ liệu sử dụng ngắt.
Các thông số còn lại: Receiver Buffer và Transmitter Buffer là bộ nhớ đệm nhận và
đệm truyển. Trong ứng dụng đơn giản chúng ta để mặc định là 8, trong các ứng dụng
truyền số lượng thông tin lớn ta có thể tăng bộ đệm để tránh mất thông tin. Tốc độ baud
mặc định là 9600 (bit/s). Các thông so của bộ truyền: 8 bit, 1 bit dừng (stop), không ưu
tiên. Chế độ truyền không đồng bộ.

2. Theo yêu cầu là nhận dữ liệu và truyền lên dữ liệu đó ta viết code nhu sau

Trước tiên ta khai báo một biến trung gian để truyền nhận dữ liệu và khởi tạo cho
PORTA là đẩu ra như sau:

Uinclude <stdio.h>

unsigned char temp; bien nho trung gian


// Declare your global variables here
void main(void)

98
3. Lập trình cho hàm Main:

#asm ("sei")
while (1)

{
II P lace your code here
i f (rx_counter>0)

temp= getcharị);
POKTA= temp;
putchar (temp);

};
}
END
Lưu và nạp chương trình vào vi điểu khiển

4. Lập trình truyền nhận với Visual B asic trên m áy tính

Khởi tạo Project trong VB. K ích đúp và biểu ICON của VB được cửa sổ
New Project như sau:

N ew P roject p?~]
1

New Ị Existing ị Recent ị

2 ? ẳ 7 Ề 7 n
ETĨĨTĨA-Ì ActiveX EXE ActiveX DLL ActiveX VB Application
C ontrol W izard

u S I
VB Wizard D ata P roject IIS Application Addin ActiveX
M anager D ocum ent Dll

r** <s <s V


r**» <s

I Open I

Cancel I

Help j

ỉ D on t show this dialog in (he future

99
Hoặc khi đã mở một Project sẩn muốn tạo một Project mới có thể sử dụng Menu:
File/New Project (phím tắt Ctrl + N). Như sau:

*íì M ic r o s o f t V is u a l B a s ic

Trong cửa sổ New Project có 3 tab: New để tạo Project mới; Existing để mở một
Project có sẵn; Recent: để mở các Project gẩn đây. Trong tab new có nhiều loại P ro je ct:
Standar Exe, ActiveX exe, ActiveX DLL, ... . Chúng ta chọn Standar EXE và chọn
Open được Project như sau:

Để sửa tên của Form trong thuộc tính điều khiển cùa Form ta sửa Text trong m ục
Caption như sau :

100
P ro p e r tie s - F orm l
Form l Form »1
TKUYENTHONG M AY TINH Alphabetic I Categorized I
ATM EGAlố (Name) Forml
Appearance 1 -3 0
AutoRed’aw False
PacWotof □ w eooooi
Tiụyen BorderStyte 2 -Suable
1B<J |-toa CDXI
CSpControk True
ControtBox True
Drav/*tode 13 - Copy Pei
DrawStyle 0 - Solid
Draw Width 1
Enabled True
FiColor ■ &H00000C
Fltstyie 1 - Transpare
Foot MS Sans Serif

Caption
Returns/sets th e text displayed
In an object’s title bar or below an

V í dụ: Tạo FO R M đơn giản như sau: truyền và nhận dữ liệu khi nhấp vào m ột nút.
Đầu vào sẽ có 1 tham số a để truyền, đẩu ra có 1 thông số- nhận dữ liệu- như vậy ta sẽ
dùng 2 textbox control, ngoài ra ta cần sử dụng 3 nút bấm button dể xác định sự kiện
truyền, nhận và thoát. Để có thể đưa m ột control vào trong FO R M , ở phần CAC DIEU
KHIEN CO BAN ta chỉ cẩn nhấp đúp vào các control mới dùng. V í dụ lấy textbox
control.

101
Trong phần thuộc tính của Textbox T extl, tìm ô text và xoá chữ T extl đi. Để ô Text
1 thành trắng, để di chuyển các control ta nhấp trái chuột và dữ chặt và di chuyển tới vị
trí thích hợp.
•» B ui H oa CDXỮ- Trujmo th o n g TOK - —X

T k n t N THONG MAY TINH


a t m e g a io

Truyen 1
l i
Thoai 1

Nhan 1
l i f

m\

Đường biên của các Control đều có các điểm tô màu đậm, đưa trò chuột tới đó trỏ
chuột biến thành mũi tên, nhấp trái chuột và dữ chặt để thay đổi kích thước của các
control. Lấy LABEL như sau:

Thay đổi Caption cùa Label thành MSCOM CONTROL BASIC. Lấy các button và
sửa các thuộc tính tương tự như sau:

102
T R Ư Y E N THONG M A Y TIN H

Tưcmg tự lấy các text và cấc label và sắp xếp lại như sau:

* Bui Hoa CDXD- Truyen thong VDK

T R U Y E N TH O N G M A Y TIN H
A ĨM E G A lO

Trong trường hợp các bạn kích đúp chuột vào m ột điều khiển nó sẽ hiện ra cửa sổ
CODE, các bạn có thể tắt nhờ dấu X trên góc trên phải m à hình:

103
■> P ro jccll Microsoft Visual Uiuic I design) [Forml (GodcJI
o Ffc £■* gew ProỊBữ Farm* Qebug

a - b - ~ a»H ■ f *
<i|ery Dw«m loots ftdd-Ins Endow Heto

" • >11 . « »5f 9 ii *6 . Coll


MO
3
t
a sst
tr
3
J
. QtnaỊầ : P r iv a te Sub rorB_Locul()
□a
k sa - ~J%fawn
End Sub
A 1ST Q Fermi (Fanal)
_J P r iv a te Sub T ext4_C han0e0

End Sub

Ồo ;Te*»4 Textfta
Alphabetic Ịcategorap) ị
ScroB»5
<1 ^ T*Index
Tabỉtop
C91
1
Tort
Retims/se»s die text cartoned n the
control.

Trong ô thuộc tính của các control chúng ta có thể thay đổi các thông sô' như tên của
các control ví dụ: Name, Font chữ hiển thị, mẩu sắc chữ, mầu nền, v.v. Như vậy ta đã tạo
ra một FORM các tham số a, b hiển thị bời các textbox 1,2. Nút truyền là Command 1,
nút nhận là Command2, nút thoát là Command3.
Form chạy như sau: Nhập thông số vào các text 1, nhấn nút Truyền thì dữ liệu trong
textl được truyền ra cổng COM. Nhấn nút nhận thì dữ liệu nhận được sẽ hiển thị lên text
2. Phún thoát để thoát khỏi chương trình. Vì Control để điểu khiển cổng COM - MSCOM
không phải control cơ bản nên nó không hiển thị trên tools, chúng ta phải lấy trong thư
viện ra. Như sau: kích chuột phải vào thanh các control đơn giản chọn Component.

A íããl > B ui Hoa C D XD -T ruyen th o n g VDK

_l
17 B T R U Y E N T H O N G M A Y TINH

a aa ATMEGA10

J1U ịỊ

õ D Command'

Zi ®

B I
m

' Dockable
rtde

104
Được cửa sổ Com ponents như sau:

Com ponents
Ml
Controls Ị Designers Ị Insertable Objects ị
FPDTC 1.0 TYPE LIBRARY
GridDTC
HHActiveX 1.0 Type Library _] M
IStudio Active Designer Controls
LayoutDTC 1.0 Type Library «-■ f e j i r
Microsoft ActiveX Plugin
o i t. %
Microsoft ADO Data Control 6 .0 (OLEDB)
Microsoft Calendar Control 8.0 :i!” s B
Microsoft Chart Control 6.0 (OLEDB)

Microsoft Common Dialog Control 6 .0 (SP3)


Microsoft Data Bound Grid Control 5.0 (SP3)
Microsoft Data Bound List Controls 6 .0
< >
f~ Selected Items Only

Microsoft Comm Control 6.0

Location: c :\W INDO WS\system32\MSCOMM32. OCX

OK Cancel Apply

Tim dòng M icrosoft Com m Control 6.0 và check vào đó và nhấn OK. Bây giờ trên
thanh công cụ có thêm m ột biểu tượng mới là M SCOM M control.

Kích đúp vào đó để lấy control vào Form .nhu sau:

A |ã b ĩ

” _J

ml ẹỊ
Ỗ □
_t SI
e
mm
Em ©

105
Thuộc tính mặc định cho MSCOMM như sau:

P ro p e rtie s - M S C om m l □
|MSComml MSComm A
Alphabetic 1Categorized Ị

(Name) MSComml A

’- '5 5 E 2 3 H Ì 1
DTREnable True
EOFEnable False
Handshaking 0 - comNone V

Để viết Code cho đối tượng nào ta chỉ cẩn nhấp đúp chuột vào đối tượng đó cửa số
viết code sẽ hiện ra. Khi chạy chương trình thì trước hết ta cần khời tạo cho control
MSCOMM. Như vậy ta phải khởi tạo trong hàm Form_Load. Ta chuyển trỏ chuột để nó
đánh dấu Form (Nhấp đúp vào khoảng trống trẽn Form)

Ta được cửa sổ soạn code như sau:

P ro jc c tl M icrosoft Visual Basic [design] [F o rm l (Code)]

ữ . File Edit View Project Format Debug Run Query Diagram Tools Add-Ins Window Help

fe* • 'ã t f Q « « ► %l sf a « * 9 .a Ln 6 , Col 1

*j ▼ I [Load
General
P r i v a t e S ub Forro_Load()
------------------------- E Ẽ1 CD
K M - P ro je c t I (Pro
E nd Sub - is Forms
A [®i Ồ Forml (

fcJr'wcsS
F o rm ! Form

VB tự khới tạo cho ta một hàm khi load form. Viết mã lệnh như sau:

106
P ro je c t 1 M icro s o ft V isu a l Bdsic [d e s ig n ] [F o r m l (C ode)]

C3. File Edit View Project Ffirmat Qebug Run Query Diagram Tools Add-Ins Window Help

S Ỉ - a ■ GÍ H SB, # 4 ^ ► % ỉ Ef" © ỉ? Ễâ .ìl Ln 1 , Col 1

|M M *J [(Geneial) ▼! |<Declai ations)


General J —
1
*t S3 P r i v a t e S u b F o r m Load() - P r o je c t l (P ro ]
H S C o m m l . C o rw n P o rc = 1 ' C h o n C O M c o m 1 - Forms
A lããĩ 1T h i e t - l a p t h o n g s o c h o c o n g corn & Forml (f
M S C o m m l .S e t t i n g s * " 9 6 0 0 , 11, 8 , 1 "
' D e CO t h e c r u y e n n h a n d u lie u
' t a p h a i mo c o n g com
w o
H S C o n m l. P o r t O p e n = T r u e
m m E nd Sub

Để viết m ã lệnh cho nút truyền kích đúp chuột vào button truyền:

Mã lệnh như sau:

P ro je ct 1 M icro so ft V is u a l Basic [d e s ig n ] [F o r m i (C o d e )]

o File Edit View Project Form at Debug Run Q uery Diagram Tools Add-Ins Window Help

. ■§’ eg- H M « ' ► I f <g g JJ] Ln 5, Col 8

H U Z] /3SèMỈ3SSSS2SStlÊt
General j D ire s A s S t r i n g ' K h a i b a o ' t o i e n 3 d e c h u a g i a t n c u a te x t i i Ũ
\ M P r i v a t e S u b C o m m a n d l_ C 1 i c k () - i ỹ P r o je c t 1 (P ro
3 = T e x t 1 . T e x t ' la y g ia t r i t u c e x t l - Forms
A ISÍ M Scom m 1 . O u t p u t = s 1 t r u y e n r a c c n g corn ^ Forml (
E n d S u b [___ ____________________________________________ ______________________

Tương tự làm cho nút nhận để viết code. M ã lệnh như sau:

>s, P r o je c tl - M icro so ft V isu al B asic [ d e s ig n ] - [ F o r m l (C o d e )]

Ồ File Edit View Project Format Debug Run Query Diagram lools Add-Ins Window Help

ầ ĩ' b - g B ___________ ^ g e f t '» g .f t Ln8,c


. -ill C om m and? jr j Ị C lick ~ Tj
General I r-
Dim 3 As S t r i n g 1Khai b a o ' b i e n 3 đe c h u a g i a t r i c u a t e x t r j
\ H P r i v a t e Sub Cornrnandl_Click()
s = T ex tl.T ex t 1 la y g ia t r i tu t e x t l
A Ịibi
MSComml. O u tp u t = s 1 t r u y e n r a c o n g com
End Sub
_I
P r i v a t e Sub Command2_C lick()
p = HSComml. I n p u t 1 nhan ciu l i e u t u co n g com
^ íĩ ' I End Sub

107
Tương tự làm cho nút EXIT:

P r i v a t e S u b C o m m a n d 2 _ C l i c k ()
s = M S C o m m l. I n p u t . ' n h a n d u l i e u tu c o n g com
End Sub _________

P r i v a t e S u b C o r n m a n d 3 _ C l i c k ()
1 K et th u c ch u o n g t r i n h
End
Endj S u b ________________________ _______________

Chọn File/Save Project và File Save Form với tên là tut. Để lưu lại Project vừa tạo.
Chọn File/Make tut.exe dể tạo file thực thi và chạy như phần mềm thòng thường.

I P r o je c tl - M icrosoft Visual B asic [d e sig n ] - [F o rm l (Code)] Q B E


f t Fie £dit View Eroject Fermat Qebug Bun Qypry Diagram ip d s Add-Ins Window Help _ IS ! X

•á
ỊMH*1
GeoeralJ
Dim 3 As S t r i n g ' K h a i b a o ' . s dechua gn
It P r i v a t e S u b C o m m a n d l_ C lic k ( ^ P roject 1 (tut.vbp)
3 ■ Text 1 .T ext la v ạ ia t r t u te x ' - 'fS Forms
A l$i M S C om m l . O u t p u t = 3 t r u y e r * r a c o n g KICrl CHUG I VAO Q Forml (tut.frm>
E nd S ub
LAV b l CrlAY

P r i v a t e S u b CoOTnand2_ C l i c k ( ) cHUONG TXINH


3 “ MSComml. I n p u t nhan đu l i e u c u C!
E nd Sub

J ill ịỊ P r i v a t e S u b Con*nand3_ C l ic lc ( )
' K et chue chuong tr in h
a n E nd jForm l Form
E nd Sub
_J IB Alphabetic I Categorized I
Appearance 1-30 A
P r i v a t e S u b F o rro _ L o a d ()
AutoRedraw False
MSComml. Com m Port “ 1 C hon coner com .
BackColor □ &H8000000F
' T h i e t J a p Chong 3 0 Clio c o n a com
Border Style 2 - Sizable
M S C o n m l.S e ttin g s " " 9 6 0 0 , 11, 8 , 1 "
DKS_MTC_JACI V
■ De CO C he c r u y e n n h a ii đ u l i e u
• c a p h a i mo c o n g COR.
Caption
M S C o m m l.P o rtO p en = T r u e Returns/sets th e text dsplayed m an
E nd S ub object's title bar or below an object's

I BS . X

Í start c fỉ ” 0W«ụ’ ỉptìíC*i. fs uiii.'.." „ fỹ*-33.~. *•ềj 10.-VPH

Được kết quả như sau:

108
B u i H oa CDXD T ru ye n th o n g VDK
B E ®
T R U Y E N T H O N G M A Y TIN H
A T M E G A 10

Tfuyen I

Thoat

Nhan

cắm cổng COM vào và test chương trình.

IV. BÁO C Á O T H Í N G H IỆ M :

1. Sô' thứ tự và tên bài.

2. Mục đích thí nghiệm.

3. Chương trình đã soạn thảo để thí nghiệm.

4. Kết quả thí nghiệm:

5. Nhận xét và kết luận.

V. CÂU H Ỏ I K IỂ M TRA

1. Hãy nêu phương thức hoạt động của giao thức 232.

2. Vẽ lưu đồ và giải thích hoạt động của chương trình trên.


M Ụ C LỤC
Trang

Lời nói đầu 3

Phần I: Tổng Quan vể ATEm egaló và hướng dẫn cài đạt và


sử dụng phán mềm CODE vision AVR

I. Tổng quan về Atm egaló 5


II. Hướng dẫn cài đặt và sử dụng phần mềm CODE vision AVR
1. Hướng dẫn cài đặt và sử dimg phần mểm CODE vision AVR 29
2. Tạo một project trong mới trong CODE Vision AVR 34
3. Cài đặt và sử dụng AVR 910 USB Programmer. 36

P hần II: C ác bài thực hành cơ bản

Bài thực hành số 1: Nháy LED 38


Bài thực hành số 2: Điều khiển vào ra 44
Bài thực hành sô' 3: Điều khiển động cơ một chiểu 47
Bài thực hành số 4: Điều khiển động cơ bước 52
Bài thực hành số 5: Hiển thị LED 7 thanh 58
Bài thực hành sô' 6: Giải mã bàn phím 63
Bài thực hành sô' 7: Hiển thị LCD 68
Bài thực hành số 8: Lập trình điểu khiển mô đun ADC-DAC 73
Bài thực hành số 9: Lập trình với ngắt cùa bộ định thời 77
Bài thực hành số 10: Lập trình với ngắt ngoài 81
Bài thực hành số 11: Lập trình hiển thị matrix 8 x 8 84
Bài thực hành sô' 12: Lập trình giao tiếp I2C với DS 1307 88
Bài thực hành số 13: Lập trình giao tiếp máy tính 96

110
HƯỚNG DẪN THỰC HÀNH
VI ĐIỂU KHIỂN AVR

C hịu trách nhiệm xuất bàn: ■

TRỊN H X U Â N SƠN

Biên tập: N G U Y Ế N T H Ị BÌNH

C h ế bản điện tử: T R Â N KIM AN H

Sửa bản in: NGUYỄN t h ị b ì n h

Trình bày bìa: v ũ BÌNH M IN H


In 300 cuốn khổ 19 X 27cm tại Xưởng in Nhà xuất bàn Xây dựng. Giấy chấp nhận đăng ký kế hoạch
xuất bản số 18-2012/CXB/987-160/X D ngày 29- 12-20X1. Q uyết định xuất bán số 185/Q Đ -X B X d
ngày 16-7-2012. In xong nộp lưu chiểu tháng 8 -2012.

You might also like