Professional Documents
Culture Documents
Hướng Dẫn Thực Hành Vi Điều Khiển AVR
Hướng Dẫn Thực Hành Vi Điều Khiển AVR
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
I. T Ổ N G Q U A N V Ể A T E M E G A 1 6
- 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 Đ ẩy dù các xử lí tĩnh.
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.
6
1. Sơ dồ ch ân
P D IP
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 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.
- 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
7 6 5 4 3 2 1 0
initial Value 0 0 0 0 X X X X
X X X X X X X X
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.
Bit 7 6 s 4 3 2 1 0
MSB
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.
Bít 7 6 5 4 3 2 Ị 0
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.
R/W R/W
initial
0 0
Value
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
Read/
R/W R/W R/W R/W R/W R/W R/W R/W
write
initial
Value
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
Read/ write
R R R R R R R R
initial
NIA NIA NIA NIA NIA NIA NIA NIA
Value
10
Bit 7:6 - C O M nA lĩO : C om pare O utput M ode for C hannel A
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:
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
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ố
Bảng 61. Lựa chọn các chê độ thục tlii cùa bộ địnli tlìời 1(3)
12
Bit 7 - IC NCn: Input Capture N oise Canceler
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.
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).
w w w R
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).
7 6 5 4 3 2 1 0
0C R IA [Ỉ5:8Ị OCR1AH
OCR1A[7:0] O C RIAL
Initial Value 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
OCR1B115:8!
OCR1BỊ7.-OI
Initial Value 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
OCR1CỊ15.-8I OCR1C1Ỉ
OCR1C[7:OJ OCR I d .
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.’.
1CRIỊ7.0I
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).
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
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.
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
Initial Value 0 0 0 0 0 0 0 0
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 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 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.
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 - 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
0 0 0 0 0 0 0 0
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 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ó.
Initial Value 0 0 0 0 0 0 0 0
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
Bit 7 6 5 4 3 2 1 0
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
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
Initial Value 0 0 0 0 0 0 0 0
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
7 6 5 4 3 2 ỉ 0
Initial Value 0 0 0 0 0 0 0 0
7 6 5 4 3 2 1 0
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ó.
Bit 7 6 5 4 3 2 1 0
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).
Bit 7 6 5 4 3 2 1 0
Initial Value 0 0 0 0 0 0 0 0
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.
I 0 Reserved
0ŨŨŨ0 ADC0
00001 ADC 1
00010 ADC2
00100 ADC4
00101 ADC5
00110 ADC 6
0 0 111 ADC7
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.
Initial Value 0 0 0 0 0 0 0 0
26
Bit 7 - ADEN: ADC Enable
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
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
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
Đâ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
7 6 5 4 3 2 1 0
ASDLAR = 1
Bi: 15 14 13 12 11 10 9 8
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
Ị ŨK I Ị Cancel
đ tỊ Ị ^ I '
Welcome to the CodeVisionAVR c
Compiler Setup Wizard
This will install CodeVisicMVR V1.25.6 on your computer
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 -
■This product is (C) Copyright 1998-2007 Pavel Haiơuc and HP IntoTech s.rJ., V
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:
Điền Password bạn được cấp vào đây. Nhấn next để tiếp tục.
T 0 continue, click Next If you would like to select a different folder, click Browse.
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...
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
31
Nhấn Install để tiếp tục.
■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.
1 Next > Ị
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
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
CodeWizardAVR - untitled.cw p
File Help
Chip: [ E S jE S S E S B ]* ]
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:
D Ntv. SPI 1
& Open ie«2CI 1
M Save 1 1
Save As... fomwlion 1
j Program Preview
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.
3
My Recent
Documents
Desktop
s*
My Computer
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.
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
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.
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.
Để 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
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.
- 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.
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
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
};
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
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
✓ 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:
- 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
V. CÂ U H Ở I K IỂM TRA
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
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 ’.
- 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.
w h ile ( 1 ) {
ịPOKTC.O=();
if(P IN A .l= = 0 )
{ PORTC. 0=1;
delay_us(5);
}}}
- 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).
- 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.
IV . BÁO C Á O TH Í NG H IỆM
M ụ c đ íc h th í n g h iệ m
Chương trình đã soạn thảo để thí nghiệm
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
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
H ình 2-1
III. CÁC BƯỚC T IẾN HÀNH
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;
s w it c h ( i) {
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.
50
IV . BÁO C Á O TH Í N G H IỆM
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
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.
52
N guyên lí làm v iệc c ủ a động c ơ b ư ớ c:
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à: = ——-
360° „
Góc quay cùa một bước chuyến là: ------ =30
- 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.
- 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
#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( );
}}}
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.
/ . 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
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.
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ư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.
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.
Khai báo các chương trình con và các biến, các định nghĩa.
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
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++;
- 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.
62
B À I THỰ C H À N H SỐ 6
G IẢ I M Ã BÀN PH ÍM
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:
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.
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 efine L ì POFTC.2
Xdefine L4 POKTC.l
ttdefine L5 POKTC.O
64
int a[]= {O xl2,0x7e,0x0b,0x4a,0x66,0xc2,0x82,0x7a,0x02,0x42};
void scan();
void convert();
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(){
}}
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.
. C Â U H Ỏ I K IỂ M T R A
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
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.
PA
H ình 7.1
68
M ột số đặc điểm của LCD
+ 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.
+ Đường RS quy định gửi lệnh hay gửi dữ liệu lên 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.
70
tfinclude <lcd.h>
char i;
char a[] ={' N' , ' G' , ' 0' , ' C ' ' C' ,' o ' , , ' L ' d ' } ;
void te x tl( );
void texl2();
void Iext3();
while (1) {
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.
V. CÂU H Ở I K IỂ M TRA
72
BÀI THỰC HÀNH SỐ 8
LẬP TRÌNH ĐIỂU KHIỂN MÔĐUN ADC-DAC
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
74
III. C Á C BƯỚC T IẾ N H ÀNH
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();
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.
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
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).
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.
Bi t 7 8 5 4 3 2 1 0
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.
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
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.
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.
ếinclude <delay.h>
#define x ta l 1000000
#define fm o v e 2
bit a;
int count=0;
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.
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
Uincỉude <deìay.h>
bit a;
{ 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ử.
IV. BÁ O C Á O T H Í N G H IỆ M
V. CÂU H Ỏ I K IỂ M T R A
83
BÀI THỰC HÀNH SỐ 11
LẬP TRÌNH HIỂN THỊ MATRIX 8X8
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.
* * * <* \
Đệ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ị.
Để 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.
ỉ
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
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
86
M ục đích thí nghiệm
Chương trình đã soạn thảo để thí nghiệm
Kết quả thí nghiệm:
V. C Â U H Ỏ I K IỂ M T R A
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
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
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
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:
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ớ.
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.
- 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.
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.
- 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:
+ Hiển thị giờ phút giây, ngày, tháng năm (đến tận nãm 2099).
+ 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).
III. C Á C BƯ Ớ C T IẾ N H À N H
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
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
USART Analog Comparator ADC SPI USART Analog CompaiaUy ' ADC SP1
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
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:
Để đọ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:
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:
{
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
}
void m ain(void)
93
while (1)
};
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
V. C Â U H Ỏ I K IỂ M T R A
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
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.
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à:
III. C Á C B Ư Ớ C T IẾ N H À N H
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
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>
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
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
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
I Open I
Cancel I
Help j
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
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:
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
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.
_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)
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.
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)
ữ . File Edit View Project Format Debug Run Query Diagram Tools Add-Ins Window Help
*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
Để viết m ã lệnh cho nút truyền kích đúp chuột vào button truyền:
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
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:
Ồ File Edit View Project Format Debug Run Query Diagram lools Add-Ins Window Help
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.
•á
Ị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
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
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
IV. BÁO C Á O T H Í N G H IỆ M :
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.
110
HƯỚNG DẪN THỰC HÀNH
VI ĐIỂU KHIỂN AVR
TRỊN H X U Â N SƠN