You are on page 1of 29

TÌM HIỂU VỀ AVR

I.Tổng quan về AVR :


1. Giới thiệu AVR:
+Đây là một lọai Vi điều khiển có nhìều tính năng đặc biệt thích hợp cho việc giải quyết
những bài toán điều khiển trên nền vi xử lý.
+Các lọai vi điều khiển AVR rất phổ biến trên thị trừơng Việt Nam nên không khó khăn
trong việc thay thế và sửa chữa hệ thống lúc cần.
+Giá thành của dòng Vi Điều Khiển này khá phải chăng
+Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.Các
thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống.
Sơ đồ khối của vi điều khiển:
2.Sơ lược về vi điều khỉển:

Đây là lọai vi điều khiển 8 bit,các lệnh được xử lý nhanh hơn,tiêu thụ năng lượng thấp.

- Atmega có cấu trúc RISC với:


+131 lệnh,hầu hết được thực thi trong 1 chu kì xung nhịp.
+32x8 thanh ghi đa dụng
+Full static operation
+Tốc độ làm việc 16MPIS,với thạch anh 16MHz
+On_chip 2 cycle Multiplier

-Bộ nhớ:
+16 KB ISP Flash với khả năng 10.000lần ghi/xóa
+512Byte EEROM
+1KB SRAM ngọai

-Giao tiếp JTAG:


+Khả năng quét toàn diện theo chuẩn JTAG
+Hỗ trợ khả năng Debug on-chip
+Hỗ trợ lập trình Flash,EEROM,fuse…
+Lock bit qua giao tiếp JTAG

-Ngọai vi:
+2 timer/counter 8 bit với các mode :so sánh và chia tần số
+1 timer/counter 16 bit với các mode:so sánh,chia tần số,capture,PWM
+1 timer thời gian thực(Real time clock) với bộ dao động riêng biệt
+4 kênh PWM(họăc nhiều hơn trong các VĐK khác thuộc họ này)
+8 kênh biến đổi ADC 10bit
+Hỗ trợ giao tiếp I2C
+Bộ giao giao tiếp nối tiếp lập trình được USART
+Giao tiếp SPI
+Watch_dog timer với bộ dao động on-chip riêng biệt

-Những thuộc tính đặc biệt::


+Power On reset và Brown-out detection
+chế độ hiệu chỉnh bộ sai số cho bộ dao động RC On-chip
+Các chế độ ngắt ngoài và trong đa dạng
+6 mode sleep:Idle,ADC noise reduction,tiết kiệm năng lượng,power-down,
standby,extended standby

-I/O port:
+32 chân I/O(Atmega16) và 21 chân I/O (Atmega8) lập trình được
+vỏ 40 chân (Atmega16) ,28 chân(Atmega8),64 chân(AT90can128);
Đều có 3 địa chỉ vào ra đi kèm, địa chỉ vào ra được cần đến để đặt cấu hình cho
các bit riêng biệt thành lối vào hoặc thành lối ra; địa chỉ khác được cần đến để xuất ra dữ
liệu tới các bit (hoặc tất cả) được đặt cấu hình thành lối ra và địa chỉ thứ 3 được cần đến
để đọc dữ liệu từ các chân (hoặc tất cả) được cấu hình thành lối vào.

-Nguồn cấp:
2,7->5.5 V với ATmega16L
4.5->5.5V với ATmega16H

-Tiêu hao năng lượng:


+Khi họat động tiêu thụ dòng 1,1mA
+Ở mode Idle tiêu thụ dòng 0.35mA
+Ở chế độ Power_down tiêu thụ dòng nhỏ hơn 1uA

-Đây là những chức năng cơ bản thường thấy trong các Vi điều khiển AVR,ngoài ra trong
các vi điều khiển khác thuộc dòng vi điều khiển này thì thường được hỗ trợ thêm những
chức năng đặc biệt.Ví dụ AT90can128 hỗ trợ thêm bộ giao tiếp mạng Can bus on-chip

3. Các phần mềm lập trình cho AVR:

+ AVRStuido (free), Code Vision. Các phần mềm này có hỗ trợ phần nạp và debug on
chip
+ Ngoài ra có thể dùng chương trình nạp PonyProg2000, Winpic800...

II. Vi điều khiển AVR AT90S8535 :

Vi điều khiển AT90S8535 là loại có kiến trúc RISC(Reduced Intruction Set


Computer) phức tạp. Đây là kiến trúc phổ biến của các bộ vi điều khiển hiện đại. Có
chỉ tiêu chất lượng cao và tiêu thụ năng lượng ít, nhiều bộ phận ngoại vi được thiết
kế ngay trên chip.

AT90S8535 còn nổi bật với cấu trúc Hardvard cải tiến là cấu trúc có bộ nhớ chương trình
và bộ nhớ dữ liệu riêng. Bên trong gồm có:

+ 8 kbyte Ram Flash với giao diện nối tiếp SPI giúp lập trình được ngay trên hệ thống,
chịu được khoảng 100000 lần ghi/xoá.
+ 118 lệnh mạnh, hầu hết được thực hiện trong một chu kỳ xung nhịp.
+ Bộ nhớ EEPROM 512 bytes.
+ Bộ nhớ SRAM bên trong 512 bytes.
+ Bộ chuyển đổi ADC 8 kênh, 10 bit.
+ 32x8 thanh ghi làm việc đa năng.
+ Bộ đếm thời gian thực với bộ dao động và chế độ đếm tách biệt.
+ Hai bộ đếm/định thời 8 bit với chế độ so sánh và chia tần số tách biệt.
+ Một bộ đếm/định thời 16 bit với chế độ so sánh, chia tần số tách biệt và chế độ bắt
mẫu.
1.Kiến trúc RISC của AT90S8535:

2.Cấu tạo chân của AT90S8535 :


3.Tổ chức vùng nhớ AVR AT90S8535 :

Các bộ vi xử lí AVR có cấu trúc Harvard nghĩa là có bộ nhớ chương trình và bộ nhớ dữ
liệu riêng.

Bộ Boä nhôù chöông Boä nhôù Boä nhôù


nhớ trình
$00 döõ lieäu $000 döõ lieäu $00
32 thanh
0 0
$001 0
ghi ña
muïc ñích F
$002
0
Boä nhôù Flash 64 thanh
(4K x 16) ghi
Input/Outp EEPRROM
$005 (512 x 8)
ut
F
$006 $1F
0 F

SRAM noäi
(512 x 8)

$025
F

$FFF
chương trình là loại bộ nhớ Flash, 16 bit, có dung lượng 8Kbyte. Bộ nhớ chương trình
được truy nhập theo từng chu kỳ đồng hồ và một lệnh được ghi vào thanh ghi lệnh.
Bộ nhớ chương trình, bên cạnh các lệnh lưu trữ, còn chứa các vectơ ngắt ở đầu địa
chỉ(xem phần ngắt). Chương trình hiện tại sẽ bắt đầu ở phía bên kia vùng cho các vectơ
ngắt.
Bộ nhớ dữ liệu: có 4 vùng khác nhau
+ Vùng tập thanh ghi: gồm 32 thanh ghi có độ rộng 8 bit.
+ Vùng các thanh ghi vào ra: gồm 64 thanh ghi vào ra, mỗi thanh ghi có độ rộng 8 bit.
Các thanh ghi này thực chất là một phần của bộ nhớ SRAM trên chip và cũng có thể được
truy nhập như bộ nhớ SRAM có địa chỉ từ $20 -> $5F hoặc như các thanh ghi I/O có địa
chỉ từ $00 -> $3F. Hầu hết các thanh ghi này được trao đổi như các thanh ghi I/O chứ
không phải như SRAM.
+ Vùng nhớ SRAM bên trong(RAM đa dụng): gồm 512 byte. Bộ nhớ SRAM sử dụng
cho ngăn xếp cũng như để lưu trữ các biến.
+ Vùng EEPROM: gồm 512 byte và được truy nhập theo bản đồ bộ nhớ tách biệt. Địa chỉ
bắt đầu của bộ nhớ EEPROM là $0000. Bộ nhớ này có thể được đọc/ghi bằng phần mềm.
Hoạt động của các bộ phận trên AVR AT90S8535
+ Bộ nhớ EEPROM: được truy nhập qua các thanh ghi truy nhập EEPROM, cụ thể là:
thanh ghi địa chỉ EEPROM [EEAR], thanh ghi dữ liệu EEPROM [EEDR] và thanh ghi
điều khiển EEPROM [EECR], Để truy nhập EEPROM ta phải trải qua các trình tự sau:
cho địa chỉ cần truy nhập (vào thanh ghi địa chỉ) -> đọc hay ghi (vào thanh ghi điều
khiển) -> dữ liệu cần đọc hoặc ghi (qua thanh ghi dữ liệu).
+ Bộ nhớ SRAM: được truy nhập bằng cách sử dụng nhiều lệnh truy nhập dữ liệu trực
tiếp hoặc gián tiếp qua các con trỏ X,Y,Z. Thời gian truy nhập bộ nhớ SRAM bằng 2 chu
kỳ xung đồng hồ.

4.Bộ UART:

Bộ truyền nhận UART: Việc truyền dữ liệu được khởi tạo bằng cách ghi dữ liệu
vào thanh ghi dữ liệu I/O UART [UDR].

a.Bộ truyền UART :


Sơ đồ khối:
Quaù trình truyeàn döõ lieäu ñöôïc khôûi ñoäng baèng caùch vieát
döõ lieäu caàn truyeàn ñeán thanh ghi döõ lieäu I/O cuûa boä UART,
goïi laø thanh ghi UDR. Döõ lieäu ñöôïc truyeàn töø thanh ghi UDR
ñeán thanh ghi dòch phaùt khi :
• Moät kí töï môùi ñöôïc vieát ñeán UDR sau khi bit stop cuûa kí
töï tröôùc ñoù ñaõ ñöôïc dòch ra ngoaøi. Thanh ghi dòch seõ
ñöôïc naïp giaù trò môùi ngay laäp töùc.
• Moät kí töï môùi ñöôïc vieát ñeán UDR tröôùc khi bit stop töø kí
töï tröôùc ñoù ñöôïc dòch ra ngoaøi. Thanh ghi dòch seõ ñöôïc
naïp khi bit stop cuûa kí töï hieän ñang truyeàn ñöôïc dòch ra
ngoaøi.
Neáu thanh ghi dòch phaùt 10(11)-bit laø roãng, döõ lieäu ñöôïc
truyeàn töø thanh ghi UDR ñeán thanh ghi dòch. Khi ñoù Bit côø thanh
ghi döõ lieäu roãng UDRE(UART Data Register Empty) trong thanh ghi
traïng thaùi UART, USR (UART Status Register) ñöôïc set. Khi bit naøy
ñöôïc set (baèng 1) thì UART saün saøng nhaän kí töï tieáp theo. Vaøo
cuøng thôøi ñieåm döõ lieäu ñöôïc truyeàn töø UDR ñeán thanh ghi
dòch 10(11)-bit, bit 0 cuûa thanh ghi dòch ñöôïc xoùa (bit start) vaø bit
9 hoaëc 10 ñöôïc set (bit stop). Neáu ta muoán truyeàn döõ lieäu 9 bit
(bit döõ lieäu 9 coù theå laø bit kieåm tra chaün /leû), thì bit CHR9
trong thanh ghi ñieàu khieån UART: UCR (UART control register) phaûi
ñöôïc set. Vaø bit TXB8 trong thanh ghi UCR ñöôïc truyeàn ñeán bit 9
trong thanh ghi dòch phaùt. Nhö vaäy bit döõ lieäu 9 phaûi ñöôïc
chöùa trong bit TXB8 trong thanh ghi UCR.
Theo nhòp ñoàng hoà toác ñoä baud cung caáp cho thanh ghi
dòch phaùt, bit start ñöôïc dòch ra ngoaøi ñaàu tieân treân chaân TXD.
Theo sau laø caùc bit döõ lieäu, trong ñoù bit coù troïng soá thaáp seõ
ñöôïc dòch ra tröôùc.Vaø cuoái cuøng laø bit stop ñöôïc dòch ra. Khi bit
stop ñöôïc dòch ra ngoaøi, thanh ghi dòch seõ ñöôïc naïp giaù trò môùi
neáu nhö coù baát kyø döõ lieäu naøo ñöôïc vieát ñeán thanh ghi UDR
trong suoát thôøi gian truyeàn. Trong thôøi gian naïp giaù trò (load),
bit UDRE ñöôïc set (leân 1). Neáu khoâng coù döõ lieäu môùi trong
thanh ghi UDR ñeå truyeàn ñi khi bit stop ñöôïc dòch ra ngoaøi, côø
UDRE seõ duy trì traïng thaùi set cho ñeán khi thanh ghi UDR ñöôïc
vieát giaù trò moät laàn nöõa. Khi khoâng coù döõ lieäu môùi ñöôïc ghi
vaø bit stop ñaõ ôû treân chaân TXD ñuùng moät chieàu daøi bit, côø
phaùt hoøan thaønh TXC (TX Complete) trong thanh ghi USR ñöôïc
set.
Bit TXEN trong thanh ghi UCR khi set (baèng1) thì boä phaùt
UART môùi ñöôïc cho pheùp. Khi bit naøy bò xoùa (traïng thaùi maëc
ñònh) thì boä phaùt UART khoâng ñöôïc cho pheùp vaø chaân TXD
chæ coù theå söû duïng nhö muïc ñích I/O thoâng thöôøng. Khi bit
TXEN ñöôïc set, boä phaùt UART seõ ñöôïc keát noái ñeán chaân TXD
(PD1), vaø chaân TXD trôû thaønh chaân ngoõ ra, baát keå söï thieát
laäp höôùng cuûa bit DDD1 trong thanh ghi DDRD.

b.Bộ nhận UART:


Sơ đồ khối:
Boä nhaän döõ lieäu chöùa khoái logic front-end coù nhieäm vuï
laáy maãu tín hieäu treân chaân RXD vôùi taàn soá laáy maãu baèng
16 laàn toác ñoä baud. Khi ñöôøng truyeàn ôû traïng thaùi nghæ
(möùc logic 1), neáu coù söï chuyeån veà "0" thì noù ñöôïc xem laø
caïnh xuoáng cuûa moät bit start vaø tuaàn töï phaùt hieän bit start
ñöôïc khôûi ñoäng. Vì boä nhaän chöùa khoái logic front-end laáy maãu
ôû taàn soá baèng 16 laàn toác ñoä baud neân moät bit seõ ñöôïc laáy
maãu 16 laàn. Trong tröôøng hôïp naøy, khi coù söï chuyeån möùc töø
traïng thaùi nghæ cuûa ñöôøng truyeàn xuoáng möùc "0", thì tuaàn töï
phaùt hieän bit start seõ laø : neáu trong ba laàn laáy maãu 8, 9 vaø
10 cuûa bit start maø hai (hoaëc ba) laàn laø möùc logic "1", thì bit
start naøy bò loïai boû vaø ñöôïc xem nhö moät tín hieäu nhieãu, boä
nhaän baét ñaàu tìm söï chuyeån traïng thaùi töø 1-ñeán-0 ( 1 laø
traïng thaùi sau cuûa bit stop chôù khoâng phaûi laø bit döõ lieäu)
tieáp theo.
Tuy nhieân, khi bit start ñöôïc xem laø hôïp leä, vieäc laáy maãu
cuûa caùc bit döõ lieäu theo sau bit start seõ ñöôïc thöïc hieän. Vaø
caùc bit naøy cuõng ñöôïc laáy maãu taïi ba maãu 8, 9 vaø 10. Neáu 2
hoaëc ba laàn giaù trò logic laø gioáng nhau thì giaù trò ñoù ñöôïc xem
laø giaù trò hôïp lyù. Taát caû caùc bit ñöôïc dòch vaøo thanh ghi dòch
cuûa boä truyeàn gioáng nhö chuùng ñaõ ñöôïc laáy maãu.

Khi bit stop ñöôïc ñöa vaøo boä nhaän, thì hai hoaëc ba trong 3
laàn laáy maãu phaûi laø 1 ñeå nhaän bit stop hôïp leä. Neáu trong ba
laàn laáy maãu, maø nhieàu hôn hai laàn laø möùc logic "0", thì côø
loãi khung truyeàn FE (Framing Error) trong thanh ghi traïng thaùi
UART( USR) ñöôïc set (baèng 1). Tröôùc khi ñoïc döõ lieäu töø thanh
ghi döõ lieäu UART (UDR), ngöôøi söû duïng neân kieåm tra bit FE ñeå
phaùt hieän loãi khung truyeàn.
Coù hoaëc khoâng coù giaù trò bit stop ñöôïc phaùt hieän laø hôïp
leä thì döõ lieäu cuõng seõ ñöôïc truyeàn ñeán UDR vaø côø nhaän
hoaøn thaønh RXC ñöôïc set. Thanh ghi UDR thöïc chaát laø hai thanh
ghi taùch bieät veà maët vaät lyù, moät cho döõ lieäu truyeàn vaø
moät cho döõ lieäu nhaän. Khi thanh ghi UDR ñöôïc ñoïc thì thanh ghi
döõ lieäu nhaän (the Receive Data register) ñöôïc truy caäp, ngöôïc
laïi, khi thanh ghi UDR ñöôïc ghi thì thanh ghi döõ lieäu phaùt (The
transmit data register) ñöôïc truy caäp.
Neáu ta muoán truyeàn döõ lieäu 9 bit, thì bit CHR9 trong thanh
ghi ñieàu khieån UART (UCR) phaûi ñöôïc set, vaø bit RXB8 trong
thanh ghi USR seõ ñöôïc naïp vaøo bit 9 trong thanh ghi dòch phaùt
khi döõ lieäu ñöôïc truyeàn ñeán thanh ghi UDR. Bit döõ lieäu thöù 9
naøy seõ ñöôïc nhaän taïi bit RXB8 trong thanh ghi USC.
c.ÑIEÀU KHIEÅN UART :
Thanh ghi döõ lieäu I/O UART : UDR (UART I/O Data
Register)
Thanh ghi UDR thöïc chaát laø hai thanh ghi rieâng leû veà maët
vaät lyù nhöng cuøng chia seû ñòa chæ I/O gioáng nhau. Khi vieát
ñeán thanh ghi naøy thì thanh ghi döõ lieäu truyeàn UART ñöôïc truy
caäp. Coøn khi ñoïc thanh ghi naøy thì thanh ghi döõ lieäu nhaän UART
ñöôïc truy caäp.
Thanh ghi traïng thaùi UART : USR (UART Status Register)

Ñaây laø thanh ghi chæ cho pheùp söï truy caäp ñoïc, cung caáp
thoâng tin veà traïng thaùi UART.
Thanh ghi ñieàu khieån UART: UCR (UART Control
Register):

Thanh ghi taïo toác ñoä baud : UBRR

Ñaây laø thanh ghi 8 bit coù theå ñoïc/vieát vaø ñöôïc söû duïng
ñeå taïo ra toác ñoä baud cho UART nhö mieâu taû tröôùc ñoù.

5.Bộ so sánh Analog :

Bộ so sánh Analog: so sánh các giá trị điện áp ở lối vào AIN0 (AC+) và AIN1
(AC-) với nhau. Nếu như điện áp lối vào AIN0 lớn hơn AIN1 thì lối ra bộ so sánh Analog
(AC0) được đặt lên mức “1”. Lối ra này có thể sử dụng cho bộ Timer/Counter 1 để
Trigger hoặc xoá ngắt bộ so sánh Analog.
6.Bộ ADC:

Bộ biến đổi tương tự sang số (ADC): với độ phân giải 10 bit/1 kênh. Bộ biến đổi
ADC có bộ dồn kênh 8 lối vào, mỗi lối có thể dẫn riêng lẻ tới ADC. Thời gian thực hiện
cho tất cả các chuyển đổi từ 65 ms đến 260 ms. Bộ biến đổi ADC được thực hiện qua 4
thanh ghi ADMUX, ADCSR, ADCH, ADCL và có thể hoạt động trong 2 chế độ: quá
trình biến đổi được người dùng khởi động (Single Conversion Mode), quá trình biến đổi
diễn ra liên tục (Free Running).

7.Bộ định thời WATCHDOG TIMER :

Boä ñònh thôøi Watchdog ñöôïc ngöôøi duøng söû duïng nhieàu
nhaát vôùi muïc ñích choáng “treo”cho vi ñieàu khieån. Trong quaù
trình laäp trình coù nhöõng tình huoáng ta khoâng ñoaùn tröôùc ñöôïc
caùc söï kieän, ta ñaõ laäp trình ñeå vi ñieàu khieån chôø ñôïi moät söï
kieän naøo ñoù maø thöïc teá söï kieän ñoù khoâng xaûy ra hoaëc ta
laäp trình bò loãi voøng laëp hoaëc nhieàu lí do khaùc khieán cho heä
thoáng bò treo, khoâng hoaït ñoäng. Khi ñoù boä ñònh thôøi watchdog
coù leõ laø coâng cuï höõu hieäu ñeå giaûi quyeát tröôøng hôïp naøy.
Boä ñònh thôøi watchdog söû duïng moät boä dao ñoäng rieâng treân
chip. Baèng caùch ñieàu khieån boä chia taàn ta coù theå coù ñöôïc
caùc khoaûng thôøi gian reset watchdog khaùc nhau. Moät caùch ñôn
giaûn ñeå hieåu veà laäp trình watchdog laø : ta ñònh moät khoaûng
thôøi ñeå chuoãi caùc söï kieän dieãn ra bình thöôøng laø tn, ta choïn
thôøi gian reset watchdog laø tw > tn. Trình töï nhö sau :
+ Cho pheùp watch dog hoaït ñoäng vôùi khoaûng thôøi gian
reset laø tW
+ Chuoãi caùc coâng vieäc, söï kieän ...
+ Khoùa Watchdog laïi.
Roõ raøng neáu caùc coâng vieäc söï kieän dieãn ra bình thöôøng thì tn
< tw vaø watchdog bò khoùa, reset do watchdog khoâng xaûy ra. Coøn
neáu caùc coâng vieäc, söï kieän bò “truïc traëc” rôi vaøo voøng ñôïi
hoaëc laëp thì khi tn vöôït quaù tW , watchdog khoâng bò khoùa, reset
xaûy ra vaø vi ñieàu khieån quay veà traïng thaùi khôûi taïo taïi ñòa
chæ vector reset.

Chuù yù : Boä dao ñoäng Watchdog treân chip phuï thuoäc vaøo
nguoàn nuoâi, do ñoù tuyø theo giaù trò nguoàn nuoâi maø ta choïn
giaù trò thích hôïp.
Leänh WDR (Watchdog reset) neân luoân luoân ñöôïc thi
haønh tröôùc khi Watchdog ñöôïc cho pheùp hoaït ñoäng. Ñieàu naøy
ñaûm baûo raèng chu kyø reset seõ phuø hôïp caùc thieát laäp cuûa
boä chia taàn cho watchdog. Bôûi vì neáu boä Watchdog ñöôïc cho
pheùp “chaïy” maø khoâng ñöôïc reset tröôùc (duøng leänh WDR) thì
raát coù theå noù seõ ñeám töø moät soá khoâng phaûi laø zero. Ñeå
traùnh caùc Reset khoâng mong muoán do Watchdog, thì boä ñònh
thôøi Watchdog neân ñöôïc caám (khoaù) hoaëc ñöôïc reset (duøng
leänh WDR) tröôùc khi ta choïn giaù trò boä chia cho watchdog.

8.Bộ TIMER/COUNTER:

Caáu taïo vaø lyù thuyeát chung :


Vi ñieàu khieån AT90S8535 coù taát caû ba timer/counter khaùc
nhau goàm : hai timer/counter 8 bit vaø moät timer/counter 16 bit.
Timer/counter2 coù theå ñöôïc choïn nguoàn clock khoâng ñoàng boä
töø dao ñoäng beân ngoaøi. Dao ñoäng naøy ñöôïc toái öu hoaù khi
söû duïng thaïch anh ñoàng hoà 32.768 Khz, khi ñoù Timer/counter2
ñöôïc söû duïng nhö moät ñoàng hoà thôøi gian thöïc (RTC : real timer
clock). Timer/counter 0 vaø 1 coù boä chia taàn soá rieâng, noù coù
theå chia taàn soá gaàn nhö moät boä chia taàn soá 10bit.
Timer/counter 2 thì coù moät boä chia rieâng cuûa noù. Caû ba
Timer/counter naøy coù theå ñöôïc söû duïng nhö moät boä ñònh thôøi
(timer) vôùi neàn xung clock beân trong cuûa heä thoáng hoaëc coù
theå söû duïng nhö boä ñeám (counter) vôùi nguoàn xung kích
(trigger) beân ngoaøi.
Hoaït ñoäng cuûa Timer/counter trong AT90S8535
+Hoaït ñoäng ñònh thôøi
+So saùnh ngoõ ra
+Baét soáng ngoõ vaøo
+Ñieàu cheá ñoä roäng xung.
a. Timer/counter 0:
Timer/counter 0 laø Timer/counter 8 bit, coù theå choïn nguoàn
xung clock töø CK, boä chia taàn soá CK hoaëc töø moät chaân beân
ngoaøi. Ta cuõng coù theå cho döøng Timer/counter 0 nhö baûng
mieâu taû chöùc naêng cuûa thanh ghi ñieàu khieån Timer/counter 0,
TCCR0. Côø traïng thaùi traøn Timer/counter 0 thì coù theå tìm thaáy
trong thanh ghi TIFR. Tín hieäu ñieàu khieån Timer/counter 0 ta coù
theå thieát laäp trong thanh ghi TCCR0. Ñeå thieát laäp ngaét trong
Timer/counter 0 ta coù theå thieát laäp caùc bit trong thanh ghi TIMSK.
Khi Timer/counter 0 laáy nguoàn clock töø beân ngoaøi, tín hieäu
beân ngoaøi naøy seõ ñöôïc ñoàng boä vôùi taàn soá cuûa CPU. Ñeå
ñaûm baûo söï laáy maãu chính xaùc tín hieäu beân ngoaøi, taàn soá
xung clock toái ña beân ngoaøi laø CK/2. Tín hieäu xung clock beân
ngoaøi ñöôïc laáy maãu ôû caïnh leân cuûa xung clock CPU.
Timer/counter 0 laø Timer/counter ñôn giaûn nhaát trong ba
Timer/counter bôûi vì noù khoâng coù chöùc naêng naøo khaùc ngoaøi
vieäc ñònh thôøi vaø ñeám xung.
Sô ñoà caáu taïo Timer/counter 0
Ñaây laø thanh ghi chöùa giaù trò cuûa Timer/counter 0.
Timer/counter 0 ñöôïc xem nhö moät boä ñeám leân vôùi söï truy caäp
ñoïc / vieát. Neáu Timer/counter 0 ñöôïc vieát moät giaù trò naøo ñoù
vaø nguoàn clock ñöôïc choïn (TCCR0 khaùc 0), Timer/counter 0 seõ
tieáp tuïc ñeám leân cho ñeán khi noù ñeán giaù trò maxval=$ff vaø
noù seõ bò traøn vaø giaù trò Timer/counter 0 bò reset veà $00 ( khi
ñoù côø TOV0 seõ ñöôïc set ).
b. Timer/counter 1 (Timer/counter 16 bits):
Coù leõ ñaây laø Timer/counter phöùc taïp vaø khoù söû duïng nhaát
trong ba Timer/counter.
Timer/counter 1 coù theå choïn nguoàn clock töø CK, boä chia
taàn soá CK hoaëc töø moät chaân beân ngoaøi. Khi ñoù ta coù theå
duøng Timer/counter1 nhö mieâu taû chöùc naêng trong thanh ghi
ñieàu khieån Timer/counter1 (TCCR1A vaø TCCR1B). Caùc côø traïng
thaùi khaùc nhau (côø traøn TOV1, Côø so saùnh OCF1A, OCF1B vaø
côø baét soáng ngoõ vaø ICF1) coù theå tìm thaáy trong thanh ghi
TIFR. Tín hieäu ñieàu khieån Timer/counter1 coù theå ñöôïc thieát laäp
trong TCCR1A vaø TCCR1B. Ñeå thieát laäp caùc ngaét do
Timer/counter1 ta thieát laäp caùc bit trong thanh ghi TIMSK.
Khi Timer/counter1 söû duïng nguoàn clock beân ngoaøi, ñeå
ñaûm baûo söï laáy maãu chính xaùc taàn soá toái ña cuûa nguoàn
clock beân ngoaøi laø CK/2.
Timer/counter1 hoå trôï hai chöùc naêng so saùnh ngoõ ra söû duïng
thanh ghi OCR1A vaø OCR1B nhö nguoàn döõ lieäu ñeå so saùnh vôùi
noäi dung chöùa trong thanh ghi Timer/counter1: TCNT1 (goàm
TCNT1H vaø TCNT1L)
Timer/counter1 coøn cung caáp moät chöùc naêng ñaëc bieät
khaùc ñoù laø chöùc naêng baét soáâng ngoõ vaøo. Treân vi ñieàu
khieån AVR coù moät chaân ñeå kích (trigger) söï kieän baét soáng
ngoõ vaøo ICP (Input Capture Pin). Söï thay ñoåi möùc tín hieäu treân
chaân naøy seõ laøm cho giaù trò hieän haønh trong timer ñöôïc ñoïc
vaø löu tröõ trong thanh ghi baét soáng ngoõ vaøo ICR1(input capture
register). Vaøo thôøi ñieåm naøy, côø baét soáng ngoõ vaøo ICF1 trong
thanh ghi TIFR seõ ñöôïc set. Ñieàu naøy cöïc kyø höõu ích trong vieäc
ño ñoä roäng cuûa xung beân ngoaøi. Ngoaøi ra, boä so saùnh Analog
cuõng coù theå ñöôïc set ñeå trigger söï kieän baét soáng ngoõ vaøo.

Neáu chöùc naêng choáng nhieãu ñöôïc cho pheùp, ñieàu kieän
ñeå trigger söï baét soáng ngoõ vaøo laø boán chu kyø laáy maãu lieân
tieáp ñoä roäng xung ngoõ vaøo phaûi gioáng nhau, khi ñoù côø baét
soáng ngoõ vaøo môùi ñöôïc set. Tín hieäu chaân ngoõ vaøo ñöôïc laáy
maãu taïi taàn soá xung CK cuûa heä thoáng.

* Thanh ghi Timer/counter1 : TCNT1 (goàm TCNT1H vaø


TCNT1L)

Thanh ghi TCNT1 laø thanh ghi 16 bit chöùa giaù trò cuûa
Timer/counter1. Ñeå ñaûm baûo caû byte cao vaø byte thaáp ñöôïc
ñoïc vaø ghi ñoàng thôøi khi CPU truy caäp ñeán nhöõng thanh ghi
naøy, söï truy caäp ñöôïc thöïc thi nhôø vaøo vieäc söû duïng moät
thanh ghi taïm TEMP 8 bits. Thanh ghi TEMP naøy cuõng ñöôïc söû
duïng khi truy caäp caùc thanh ghi OCR1A, OCR1B vaø ICR1. Neáu
chöông trình chính vaø chöông trình ngaét cuøng thöïc hieän söï truy
caäp ñeán nhöõng thanh ghi coù söû duïng thanh ghi TEMP thì caùc
ngaét phaûi bò caám trong suoát quaù trình truy caäp töø chöông trình
chính ( vaø töø chöông trình ngaét neáu ngaét ñöôïc cho pheùp töø
trong chöông ngaét).
* Moät soá chuù yù quan troïng khi truy caäp ñeán thanh
ghi Timer/counter1:
- Khi vieát döõ lieäu vaøo Timer/counter1:
Khi CPU vieát ñeán byte cao TCNT1H, döõ lieäu vieát ñöôïc ñaët
trong thanh ghi TEMP. Tieáp theo CPU vieát ñeán byte thaáp TCNT1L,
byte naøy cuûa döõ lieäu keát hôïp vôùi byte döõ lieäu trong thanh ghi
TEMP, vaø taát caû 16 bits cuûa döõ lieäu ñöôïc vieát ñeán thanh ghi
TCNT1 moät caùch ñoàng thôøi.
Nhö vaäy, theo tuaàn töï byte cao TCNT1H seõ ñöôïc vieát tröôùc,
sau ñoù vieát tieáp ñeán byte thaáp TCNT1L ñeå ñaûm baûo cho söï
vaän haønh vieát ñaày ñuû cuûa thanh ghi 16 bits.
- Khi ñoïc döõ lieäu töø TCNT1
Khi CPU ñoïc byte ñoïc byte thaáp TCNT1L, döõ lieäu cuûa byte
thaáp TCNT1L ñöôïc gôûi ñeán CPU vaø döõ lieäu byte cao TCNT1H
ñöôïc ñaët trong thanh ghi TEMP. Khi CPU ñoïc döõ lieäu trong byte cao
TCNT1H, CPU nhaän döõ lieäu trong thanh ghi TEMP.
Nhö vaäy, theo tuaàn töï TCNT1L phaûi ñöôïc ñoïc tröôùc, sau ñoù
TCNT1L ñöôïc sau.

Timer/counter1 ñöôïc xem nhö laø moät ñeám leân hoaëc boä
ñeám leân/xuoáng ( trong cheá ñoä PWM) vôùi söï truy caäp ñoïc vaø
vieát. Neáu Timer/counter1 ñöôïc naïp giaù trò vaø nguoàn xung clock
ñöôïc choïn, Timer/counter1 seõ tieáp tuïc ñeám töø giaù trò naïp trong
Timer/counter1 taïi chu kyø xung clock cung caáp cho timer sau ñoù.
Nhöõng thanh ghi so saùnh ngoõ ra laø thanh ghi 16 bits coù theå
ñoïc/vieát. Thanh ghi so saùnh ngoõ ra chöùa noäi dung ñöôïc so saùnh
lieân vôùi giaù trò Timer/counter1. Taùc ñoäng cuûa traän so saùnh
ñöôïc xaùc ñònh trong caùc thanh ghi ñieàu khieån vaø thanh ghi
traïng thaùi cuûa Timer/counter1. Traän so saùnh chæ vaän haønh khi
Timer/counter1 ñeám ñeán giaù trò chöùa trong thanh ghi OCR1. Khi
trong phaàn meàm ta vieát giaù trò cuûa Timer/counter1 vaø giaù trò
OCR1A (hoaëc OCR1B) baèng nhau, thì traän so saùnh seõ khoâng
ñöôïc phaùt sinh(xaûy ra).
Traän so saùnh seõ set côø ngaét so saùnh vaøo chu kyø xung clock
CPU tieáp theo sau söï kieän so saùnh. Khi naïp giaù trò vaøo caùc
thanh ghi so saùnh naøy thì ta phaûi naïp giaù trò cuûa byte cao
(OCR1AH hoaëc OCR1BH) tröôùc. Ngöôïc laïi, khi ñoïc giaù trò cuûa
nhöõng thanh ghi so saùnh naøy thì byte thaáp (OCR1AL hoaëc
OCR1BL) phaûi ñöôïc ñoïc tröôùc. Toùm laïi, söï truy nhaäp ñeán caùc
thanh ghi OCRx töông töï söï truy caäp thanh ghi TCNT1.
Thanh ghi baét soáng ngoõ vaøo laø moät thanh ghi 16 bits chæ
cho pheùp ñoïc. Khi caïnh leân hoaëc caïnh xuoáng (tuyø thuoäc caïnh
ngoõ vaøo ñöôïc choïn bôûi bit ICES1) cuûa tín hieäu taïi chaân ICP
ñöôïc phaùt hieän, giaù trò hieän haønh cuûa Timer/counter1 ñöôïc
truyeàn ñeán thanh ghi ICR1. Vaøo cuøng thôøi ñieåm naøy, côø baét
soáng ngoõ vaøo ICF1 cuõng ñöôïc set. Söï truy caäp thanh ghi ICR1
töông töï söï truy caäp Timer/counter1.
* TIMER/COUNTER1 TRONG CHEÁ ÑOÄ ÑIEÀU CHEÁ ÑOÄ ROÄNG
XUNG :
Khi cheá ñoä PWM ñöôïc choïn, baèng caùch thieát laäp
Timer/counter1, thanh ghi so saùnh ngoõ ra OCR1A vaø thanh ghi so
saùnh ngoõ ra OCR1B, caùc chaân ngoõ ra PD5 (OC1A) /PD4 (OC1B)
coù theå xuaát ra xung ñöôïc ñieàu cheá PWM ñuùng pha hoaëc chaïy
khoâng ñeàu hoaëc chaïy töï do 8bit, 9bit hoaëc 10 bit. Timer/counter1
hoaït ñoäng nhö moät boä ñeám leân/xuoáng, ñeám leân töø giaù trò
$0000 ñeán giaù trò TOP (xem baûng sau), vaøkhi ñoù noù quay trôû
laïi ñeám veà zero tröôùc khi chu kyø naøy ñöôïc laëp laïi. Khi giaù trò
ñeám baèng giaù trò 10 bit coù troïng soá thaáp nhaát trong thanh ghi
OCR1A hoaëc OCR1B, Caùc chaân PD5(OC1A)/PD4(OC1B) ñöôïc set
leân moät hoaëc xoaù veà 0 tuyø thuoäc vaøo caùch thieát laäp caùc
bit COM1A1/COM1A0 hoaëc COM1B1/COM1B0 trong thanh ghi ñieàu
khieån Timer/counter1 (TCCR1A).

d. Timer/counter2 (Timer/counter 8 bits):

Sô ñoà nguyeân lyù Timer/counter2:


Timer/counter2 coù theå choïn nguoàn clock töø PCK2 (maëc

ñònh noái vôùi CK cuûa heä thoáng), hoaëc boä chia PCK2. Noù coù
theå ñöôïc döøng nhö mieâu taû trong baûng chöùc naêng cuûa thanh
ghi ñieàu khieån Timer/counter2 (TCCR2).
Traïng thaùi cuûa côø traøn TOV2, côø so saùnh OCF2 ñöôïc tìm
trong thanh ghi côø ngaét Timer/counter (TIFR). Tín hieäu ñieàu khieån
ñöôïc thieát laäp trong thanh ghi TCCR2. Söï cho pheùp/khoâng cho
pheùp ngaét do Timer/counter2 ñöôïc tìm thaáy trong thanh ghi TIMSK.
Timer/counter2 hoå trôï moät chöùc naêng so saùnh ngoõ ra söû
duïng thanh ghi so saùnh OCR2 nhö nguoàn döõ lieäu ñöôïc so saùnh
vôùi noäi dung Timer/counter2. Chöùc naêng so saùnh ngoõ ra coù
theå cho pheùp ta xoaù boä ñeám khi coù traän so saùnh, vaø taùc
ñoäng leân chaân ngoõ ra PD7 (OC2) khi coù traän so saùnh.
Timer/counter2 coù theå söû duïng nhö moät boä ñieàu cheá ñoä
roäng xung 8-bit. Khi ñoù Timer/counter2 vaø thanh ghi so saùnh ngoõ
ra OCR2 ñöôïc phuïc vuï cho cheá ñoä PWM.
Thanh ghi 8-bit naøy chöùa ñöïng giaù trò cuûa Timer/counter2.
Thanh ghi Timer/counter2 ñöôïc xem nhö moät boä ñeám leân hoaëc
ñeám leân/xuoáng (trong cheá ñoä PWM)coù theå truy caäp ñoïc/vieát.
Neáu Timer/counter2 ñöôïc naïp giaù trò vaø nguoàn xung clock ñöôïc
choïn noù seõ tieáp tuïc ñeám leân töø giaù trò ñöôïc ñeám.

Thanh ghi so saùnh ngoõ ra laø moät thanh ghi ñoïc /vieát 8-bit.
Thanh ghi so saùnh ngoõ ra OCR2 chöùa döõ lieäu ñeå so saùnh lieân
tuïc vôùi Timer/counter2. Taùc ñoäng cuûa traän so saùnh ñöôïc quy
ñònh trong thanh ghi TCCR2. Moät traän so saùnh chæ xaûy ra neáu
Timer/counter2 ñeám ñeán giaù trò so saùnh chöùa trong thanh ghi
OCR2. Neáu trong phaàn meàm, ta vieát giaù trò cuûa Timer/counter2
baèng giaù trò cuûa OCR2 thì seõ khoâng phaùt sinh söï kieän so
saùnh naøo caû. Moät traän so saùnh seõ set côø ngaét so saùnh OCF2
vaøo chu kyø xung lock CPU tieáp theo sau söï kieän so saùnh ñöôïc
phaùt hieän.

* Timer/counter2 trong cheá ñoä ñieàu cheá ñoä roäng xung :


Khi cheá ñoä PWM ñöôïc choïn, thanh ghi Timer/counter2 vaø thanh ghi
OCR2 ñöôïc söû duïng ñeå taïo xung PWM treân chaân ngoõ ra OC2
(PD7). Timer/counter2 hoaït ñoäng nhö moät boä ñeám leân/xuoáng.
Ñeám leân töø giaù trò $00 ñeán $FF, taïi nôi naøy noù seõ quay veà
vaø ñeám xuoáng $00. Khi giaù trò boä ñeám baèng giaù trò so saùnh
chöùa trong OCR2, chaân OC2 seõ ñöôïc set hoaëc xoaù tuyø theo
caùch thieát laäp caùc bit COM21/COM20 trong thanh ghi ñieàu khieån
Timer/counter2 TCCR2
* Söï vaän haønh khoâng ñoàng boä cuûa Timer/counter2:

Khi Timer/counter2 vaän haønh khoâng ñoàng boä, coù moät soá xem
xeùt caàn ñöôïc quan taâm.
 Caûnh baùo : Khi chuyeån ñoåi giöõa söï ñoàng boä vaø khoâng
ñoàng boä nguoàn clock cuûa Timer/counter2 thì caùc thanh ghi
TCNT2, OCR2 vaø TCCR2 coù theå bò sai leäch. Ñeå ñaûm baûo ta
caàn thöïc hieän caùc böôùc sau :
1. Khoaù (khoâng cho pheùp) caùc ngaét do traøn
Timer/counter2, ngaét so saùnh ngoõ ra OCIE2.
2. Choïn nguoàn clock baèng caùch thieát laäp bit AS2 thích
hôïp.
3. Vieát giaù trò môùi ñeán TCNT2, OCR2 vaø TCCR2.
4. Ñeå chuyeån ñoåi sang söï vaän haønh khoâng ñoàng boä
phaûi ñôïi caùc côø TCN2UB, OCR2UB vaø TCR2UB xuoáng 0.
5. Xoaù caùc côø ngaét do Timer/counter2.
6. Xoaù côø TOV2 vaø OCF2 trong thanh ghi TIFR.
7. Cho pheùp caùc ngaét trôû laïi, neáu caàn.
 Khi ghi moät trong caùc thanh ghi TCNT2, OCR2 hoaëc TCCR2,
giaù trò naøy ñöôïc truyeàn ñeán thanh ghi taïm vaø ñöôïc choát sau
hai caïnh döông treân chaân TOSC1. Ngöôøi söû duïng khoâng neân
vieát giaù trò môùi tröôùc khi noäi dung cuûa thanh ghi taïm ñöôïc
truyeàn ñeán thanh ghi ñích. Ba thanh ghi TCNT2, OCR2 vaø TCCR2,
moãi moät thanh ghi coù moät thanh ghi taïm rieâng. Cho neân, maëc
duø khi ta vieát giaù trò ñeán TCNT2, giaù trò töø thanh ghi taïm vaãn
chöa ñöôïc truyeàn ñeán TCNT2, nhöng ñieàu naøy khoâng aûnh
höôûng khi ta vieát giaù trò môùi ñeán thanh ghi OCR2.
 Khi vaøo cheá ñoä döõ tröõ nguoàn nuoâi (Power save mode),
sau khi vieát caùc giaù trò ñeán TCNT2, OCR2 hoaëc TCCR2, ngöôøi
söû duïng phaûi ñôïi cho ñeán khi nhöõng thanh ghi naøy ñöôïc update
neáu Timer/counter2 ñöôïc söû duïng ñeå ñaùnh thöùc thieát bò. Neáu
khoâng, MCU seõ vaøo cheá ñoä nguû, tröôùc khi nhöõng thay ñoåi
naøy coù hieäu löïc. Ñieàu naøy cöïc kyø quan troïng neáu ngaét do so
saùnh ngoõ ra ñöôïc söû duïng ñeå ñaùnh thöùc thieát bò; So saùnh
ngoõ ra bò disable (caám) trong suoát thôøi gian ghi OCR2 hoaëc
TCNT2. Giaû söû, chu kyø vieát chöa hoaøn thaønh (OCR2UB chöa
quay veà 0) maø ngöôøi söû duïng thöïc hieän leänh sleep, vì theá
thieát bò seõ khoâng bao giôø coù traän so saùnh ngoõ ra vaø MCU
khoâng bao giôø ñöôïc ñaùnh thöùc.
 Neáu Timer/counter2 ñöôïc söû duïng ñeå ñaùnh thöùc thieát bò
töø cheá ñoä nguoàn döï tröõ, thì thôøi gian töø luùc thieát bò ñöôïc
ñaùnh thöùc ñeán luùc thieát bò trôû laïi cheá ñoä nguoàn giaûm
khoâng ñöôïc ít hôn moät chu kyø xung dao ñoäng treân chaân TOSC1.
Neáu khoâng ngaét seõ khoâng ñöôïc vaän haønh vaø thieát bò seõ bò
"loãi"( coù theå hoaït ñoäng sai, hoaëc khoâng ñöôïc ñaùnh thöùc) khi
bò ñaùnh thöùc. Ñeå chaéc chaén, ngöôøi duøng neân thöïc hieän caùc
böôùc sau :
1. Vieát giaù trò ñeán TCCR2, TCNT2 hoaëc OCR2.
2. Ñôïi ñeán khi côø baän update töông öùng veà 0.
3. Vaøo cheá ñoä nguoàn döï tröõ (Power save mode)
 Khi cheá ñoä vaän haønh khoâng ñoàng boä ñöôïc choïn, dao
ñoäng 32 Khz cho Timer/counter2 luoân ñöôïc chaïy, ngoaïi tröø cheá
ñoä Power- down (Nguoàn giaûm). Sau khi reset nguoàn hoaëc ñöôïc
ñaùnh thöùc töø cheá ñoä nguoàn giaûm, ngöôøi duøng caàn phaûi
bieát raèng dao ñoäng naøy coù theå maát 1 giaây ñeå oån ñònh.
Ngöôøi duøng ñöôïc khuyeân phaûi ñôïi ít nhaát moät giaây tröôùc khi
söû duïng Timer/counter2 sau khi reset nguoàn hoaëc ñaùnh thöùc
thieát bò töø cheá ñoä nguoàn giaûm (power down).
 Mieâu taû söï ñaùnh thöùc töø cheá ñoä nguoàn döï tröõ khi
Timer söû duïng nguoàn clock khoâng ñoàng boä: Khi ñieàu kieän
ngaét xaûy ra, Vieäc xöû lyù ñeå ñaùnh thöùc MCU ñöôïc baét ñaàu
vaøo chu kyø theo sau cuûa xung clock timer. Timer ñöôïc taêng leân ít
nhaát 1 tröôùc khi boä xöû lyù coù theå ñoïc giaù trò cuûa boä ñeám.
Sau khi ñaùnh thöùc, MCU ñöôïc taïm döøng 4 chu kyø heä thoáng,
roài thöïc thi chöông trình ngaét vaø keát thuùc coâng vieäc khi gaëp
leänh SLEEP.

9. NGẮT và RESET :

AT90S8535 cung caáp 16 nguoàn ngaét khaùc nhau. Moãi ngaét


coù mooït vectô chöông trình rieâng trong khoâng gian boä nhôù
chöông trình. Caùc ngaét ñöôïc cho pheùp bôûi töøng bit cho pheùp
ngaét rieâng leû vaø ñöôïc quaûn lyù bit bit cho pheùp ngaét toaøn
cuïc. Ñeå cho pheùp moät ngaét naøo ñoù thì bit cho pheùp ngaét
rieâng cuûa noù phaûi ñöôïc set leân 1 vaø ñoàng thôøi bit cho pheùp
ngaét toaøn cuïc( bit I trong thanh ghi traïng thaùi) phaûi ñöôïc set
leân 1. Khi bit cho pheùp ngaét toaøn cuïc I bò xoùa thì taát caû caùc
ngaét seõ bò caám. Coù theå bieåu dieãn moái quan heä ñoù nhö sau :
I=0 INT0
INT1

ANA_COMP

Nhöõng ñòa chæ thaáp nhaát trong khoâng gian boä nhôù chöông
trình ñöôïc ñònh nghóa (moät caùch töï ñoäng) nhö laø nhöõng vectô
ngaét vaø reset. Baûng beân döôùi seõ lieät keâ ñòa chæ cuûa caùc
vectô ngaét vaø reset. Ta cuõng coù theå döïa vaøo baûng naøy ñeå
xaùc ñònh möùc ñoä öu tieân cuûa caùc ngaét khaùc nhau. Ñòa chæ
thaáp hôn thì möùc ñoä öu tieân seõ cao hôn. Chaúng haïn theo baûng
ta thaáy, RESET coù möùc öu tieân cao nhaát, keá ñeán laø INT0, …
A. RESET :
* Caùc nguoàn Reset
Vi ñieàu khieån AT90S8535 coù ba nguoàn reset laø:
+ Reset do nguoàn (Power-on Reset) : MCU seõ ñöôïc reset khi
nguoàn cung caáp thaáp hôn ngöôõng reset VPOT.
+ Reset beân ngoaøi (External Reset) : MCU seõ bò reset khi coù
möùc "thaáp" treân chaân Reset trong khoaûng thôøi gian lôùn hôn
50ns.
+ Reset do Watchdog (Watchdog Reset) : MCU seõ bò reset khi
chu kyø thôøi gian Watchdog keát thuùc vaø Watchdog ñöôïc cho
pheùp.
Trong suoát thôøi gian reset, taát caû caùc thanh ghi I/O seõ ñöôïc
ñaët veà giaù trò maëc ñònh cuûa noù vaø chöông trình baét ñaàu thi
haønh töø ñòa chæ $000. Leänh ñaët taïi ñòa chæ $000 phaûi laø
moät leänh nhaûy RJMP ñeán chöông trình xöû lyù reset. Neáu chöông
trình khoâng bao giôø söû duïng ñeán caùc nguoàn ngaét, caùc ñòa
chæ vecto ngaét khoâng ñöôïc söû duïng thì maõ chöông trình thoâng
thöôøng coù theå ñöôïc ñaët ôû caùc ñòa chæ vecto ngaét naøy.
Hình : Sô ñoà khoái cuûa maïch reset beân trong VÑK

* Thanh ghi traïng thaùi MCU : MCUSR ( MCU Status


Register ) :
Thanh ghi traïng thaùi MCU cung caáp thoâng tin veà nguoàn
reset naøo laø nguyeân nhaân gaây ra reset MCU.

B. NGAÉT :
AT90S8535 coù hai thanh ghi ñieàu khieån che ngaét 8-bit :
GIMSK (General Interrupt Mask register : Thanh ghi che ngaét chung)
vaø TIMSK (Timer/counter Interrupt Mask register : thanh ghi che ngaét
Timer/counter).
Khi moät ngaét xaûy ra (chöông trình ngaét ñang ñöôïc thi haønh)
thì maëc ñònh bit cho pheùp ngaét toaøn cuïc I bò xoùa (veà 0) vaø
taát caû caùc ngaét bò caám. Tuy nhieân, ngöôøi söû duïng coù theå
duøng phaàn meàm ñeå set (leân 1) bit I ñeå cho pheùp caùc ngaét
loàng vaøo. Bit cho pheùp ngaét toaøn cuïc I seõ ñöôïc set trôû laïi
baèng 1 khi MCU thoaùt khoûi chöông trình ngaét (gaëp leänh RETI).
Khi boä ñeám chöông trình ñöôïc ñaët ñeán ñòa chæ vecto ngaét
thöïc söï ñeå thi haønh chöông trình xöû lyù ngaét, phaàn cöùng seõ
xoùa côø töông öùng phaùt sinh ngaét naøy. Moät vaøi côø ngaét
cuõng coù theå ñöôïc xoùa baèng caùch vieát möùc logic "1" ñeán vò
trí bit töông öùng cuûa côø. Neáu ñieàu kieän ngaét xaûy ra khi bit cho
pheùp ngaét töông öùng bò xoùa ( baèng 0 ), thì côø ngaét naøy seõ
ñöôïc set vaø nhôù cho ñeán khi ngaét naøy ñöôïc cho pheùp hoaëc laø
côø bò xoùa bôûi phaàn meàm.
Neáu moät (hoaëc nhieàu) ngaét xaûy ra khi bit cho pheùp ngaét
toaøn cuïc bò xoùa, thì (caùc) côø ngaét töông öùng seõ ñöôïc set vaø
nhôù cho ñeán khi bit cho pheùp ngaét toaøn cuïc I ñöôïc set (baèng 1)
vaø (caùc) ngaét seõ thi haønh theo möùc öu tieân.
* Chuù yù : Thanh ghi traïng thaùi SREG seõ khoâng ñöôïc
löu tröõ töï ñoäng khi vaøo chöông trình ngaét, cuõng nhö
khoâng ñöôïc traû laïi ( hay " phuïc hoài ") khi thoaùt khoûi
chöông trình ngaét. Cho neân ngöôøi duøng phaûi xöû lyù
ñieàu naøy baèng phaàn meàm ñeå ñaûm baûo chöông trình
chaïy ñuùng.

* Thanh ghi che ngaét chung : GIMSK : General Interrupt


Mask Register

* Thanh ghi côø ngaét chung : GIFR : General Interrupt


Flag Register

* Thanh ghi che ngaét Timer/counter : TIMSK :


Timer/counter Interrupt Mask Register :

Ñaây laø thanh ghi cho pheùp (hoaëc caám) caùc ngaét lieân quan
ñeán caùc Timer/counter. Baïn ñoïc haõy tham khaûo trong phaàn Söû
duïng Timer/counter ñeå hieåu roõ caùch vaän haønh.
* Thanh ghi côø ngaét Timer/counter : TIFR : Timer/counter
interrupt Flag Register :

Đây laø thanh ghi chöùa caùc côø ngaét cuûa caùc ngaét lieân
quan ñeán caùc Timer/counter. Thanh ghi naøy cuõng ñöôïc trình baøy
trong phaân Söû duïng Timer/counter. Baïn ñoïc coù theå tham khaûo
ôû ñoù ñeå deã naém baét hôn.
* Caùc ngaét beân ngoaøi :
Caùc ngaét beân ngoaøi thì ñöôïc kích hoaït treân chaân INT0 vaø
INT1. Quan saùt thaáy raèng, neáu ñöôïc cho pheùp caùc ngaét
ngoaøi vaãn ñöôïc kích hoaït ngay caû khi caùc chaân INT0/INT1 ñöôïc
caáu hình laø ngoõ ra.Chính ñaëc ñieåm naøy cung caáp cho ta caùch
phaùt sinh moät ngaét phaàn meàm. Caùc ngaét beân ngoaøi coù theå
ñöôïc kích hoaït bôûi caïnh leân hoaëc caïnh xuoáng hoaëc möùc
thaáp. Ñieàu naøy tuyø thuoäc vaøo caùch caøi ñaët thanh ghi ñieàu
khieån MCU : MCUCR. Khi ngaét beân ngoaøi ñöôïc cho pheùp vaø
ñöôïc caáu hình laø kích hoaït möùc, thì ngaét seõ ñöôïc kích hoaït
mieãn laø chaân naøy ñöôïc giöõ ôû möùc thaáp.
* Thôøi gian ñaùp öùng ngaét :
Thôøi gian ñaùp öùng thi haønh ngaét, cho taát caû caùc ngaét
ñöôïc cho pheùp trong AVR, toái thieåu laø 4 chu kyø xung ñoàng hoà.
Boán chu kyø xung ñoàng hoà sau khi côø ngaét ñöôïc set, ñòa chæ
vecto chöông trình cho chöông trình xöû lyù ngaét thöïc söï ñöôïc thi
haønh. Trong giai ñoaïn 4 chu kyø xung ñoàng hoà naøy, Boä ñeám
chöông trình (2 byte) ñöôïc "ñaåy" vaøo trong ngaên xeáp Stack vaø
con troû ngaên xeáp Stack seõ bò giaûm ñi hai ñôn vò. Sau ñoù boä
ñeám chöông trình ñöôïc troû ñeán chöông trình ngaét, vaø böôùc
nhaûy naøy maát 2 chu kyø xung ñoàng hoà. Neáu moät ngaét ñöôïc
xaûy ra khi MCU ñang thöïc hieän moät leänh nhieàu chu kyø, thì leänh
naøy seõ ñöôïc hoaøn thaønh tröôsc khi khi ngaét ñöôïc phuïc vuï.
Söï trôû laïi töø chöông trình xöû lyù ngaét (töông töï nhö söï trôû
laïi chöông trình töø chöông trình con) maát 4 chu kyø xung ñoàng
hoà. Trong 4 chu kyø xung ñoàng hoà naøy, boä ñeám chöông trình
(2byte) ñöôïc "keùo" ra töø ngaên xeáp stack, con troû ngaên xeáp
stack ñöôïc taêng leân hai ñôn vò vaø côø I trong thanh ghi SREG ñöôïc
set. Khi AVR thoaùt khoûi chöông trình ngaét, noù seõ quay trôû laïi
chöông trình chính vaø thi haønh moät hoaëc nhieàu leänh tröôùc khi
baát kyø ngaét ñang treo naøo (chaúng haïn nhö khi ñang thi haønh
chöông trình ngaét naøy thì moät ngaét nöõa ñöôïc kích hoaït nhöng
do bò caám neân noù bò treo(chôø)) ñöôïc phuïc vuï.
* Thanh ghi ñieàu khieån MCU : MCUCR : MCU Control
Register
Thanh ghi ñieàu khieån MCU chöùa caùc bit ñieàu khieån caùc
chöùc naêng chung cuûa MCU.

Chế độ tiết kiệm năng lượng : Bộ điều khiển AVR có khả năng giảm năng lượng
tiêu thụ để chuyển sang chế độ ngủ: bit SE trong MCUCR được đặt và lệnh SLEEP được
thực thi. Nếu một ngắt đã cho phép xuất hiện trong khi MCU đang trong trạng thái ngủ
thì MCU sẽ thức dậy thực thi đoạn chương trình ngắt và lại tiếp tục trạng thái ngủ kể từ
lệnh SLEEP tiếp theo. Nội dung các thanh ghi, SRAM và bộ nhớ I/O vẫn được giữ
nguyên. Có 3 chế độ ngủ: Idle, Power-down, Power save.

You might also like