Professional Documents
Culture Documents
Đâ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.
-Bộ nhớ:
+16 KB ISP Flash với khả năng 10.000lần ghi/xóa
+512Byte EEROM
+1KB SRAM ngọai
-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
-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
-Đâ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
+ 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...
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:
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.
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].
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):
Ñ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ù.
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).
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:
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 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).
ñò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.
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 :
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
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.
Ñ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.