
CÂU H I ÔN T P MÔN H CỎ Ậ Ọ
VI X LÝ VÀ VI ĐI U KHI NỬ Ề Ể
-T t c các chip trong h AVR đu bao g m 32 thanh ghi Register File có đa ch tuy t đi t ấ ả ọ ề ồ ị ỉ ệ ố ừ
0x0000 đn 0x001F.ế
-Và ph n n m ngay sau register file, ph n này bao g m 64 thanh ghi đc g i là 64 thanh ghi ầ ằ ầ ồ ượ ọ
nh p/xu t (64 I/O register) hay còn g i là vùng nh I/O (I/O Memory). Vùng nh I/O là c a ngõ ậ ấ ọ ớ ớ ử
giao ti p gi a CPU và thi t b ngo i viế ữ ế ị ạ
Câu 1. S khác nhau gi a Vi đi u khi n 8 bit và 16 bit?ự ữ ề ể
-Thanh ghi là các ô nh đc bi t,đc s d ng đ l u tr t m th i các l nh và d li u thông ớ ặ ệ ượ ử ụ ể ư ữ ạ ờ ệ ữ ệ
qua vi c l u tr các giá tr 0 và 1.ệ ư ữ ị
-Vdk 8 bit là vdk có nh ng thanh ghi có 8 bit nh và b x lí s h c trên các toán h ng 8 bit (tr ữ ớ ộ ử ố ọ ạ ừ
tr ng h p ghép 2 thanh ghi High và Low đ đc 16 bit),vdk 16bit có nh ng thanh ghi có 16 bit ườ ợ ể ượ ữ
nh và b x lí s h c trên các toán h ng 16 bit là ch y u.ớ ộ ử ố ọ ạ ủ ế
Câu 2.So sánh Vi đi u khi n có ki n trúc Von-Neumann và Vi đi u khi n có ki n trúc ề ể ế ề ể ế
Havard?
-Von-Neuman: Trong ki n trúcế von Neumann không phân bi t vùng ch a d li u và mã ch ng ệ ứ ữ ệ ươ
trình. C ch ng trình và d li u đu đc truy nh p theo cùng m t đng. Đi u này cho phép ả ươ ữ ệ ề ượ ậ ộ ườ ề
đa d li u vào vùng mã ch ng trình ROM, và cũng có th l u mã ch ng trình vào vùng d ư ữ ệ ươ ể ư ươ ữ
li u RAM và th c hi n t đó.ệ ự ệ ừ
-Ki n trúcế Havard tách/phân bi t vùng l u mã ch ng trình và d li u. Mã ch ng trình ch có ệ ư ươ ữ ệ ươ ỉ
th đc l u và th c hi n trong vùng ch a ROM và d li u cũng ch có th l u và trao đi trongể ượ ư ự ệ ứ ữ ệ ỉ ể ư ổ
vùng RAM.
- u đi m n i b t c a c u trúc b nh Harvard so v i ki n trúc von Neumann là có hai kênh tách Ư ể ổ ậ ủ ấ ộ ớ ớ ế
bi t đ truy nh p vào vùng b nh mã ch ng trình và d li u nh v y mà mã ch ng trình và ệ ể ậ ộ ớ ươ ữ ệ ờ ậ ươ
d li u có th đc truy nh p đng th i và làm tăng t c đ lu ng trao đi v i b x lý.ữ ệ ể ượ ậ ồ ờ ố ộ ồ ổ ớ ộ ử
Câu 3.Truy n nh n n i ti p UART gi a hai Vi đi u khi n ,gi a vdk và máy tínhề ậ ố ế ữ ề ể ữ
-Truy n thông n i ti p :d li u đc truy n t ng bit trên 1 (ho c m t ít) đng truy n.ề ố ế ữ ệ ượ ề ừ ặ ộ ườ ề
-Khái ni m “đng b ” đ ch s “báo tr c” trong quá trình truy nệ ồ ộ ể ỉ ự ướ ề
-Truy n thông “không đng b ” ch c n m t đng truy n cho m t quá trình. “Khung d li u” ề ồ ộ ỉ ầ ộ ườ ề ộ ữ ệ
đã đc chu n hóa b i các thi t b nên không c n đng xung nh p báo tr c d li u đn.ượ ẩ ở ế ị ầ ườ ị ướ ữ ệ ế
-Baud rate (t c đ Baud):Ph i gi ng nhau trên các thi t bố ộ ả ố ế ị
-Frame (khung truy n): Khung truy n bao g m các quy đnh v s bit trong m i l n truy n, s ề ề ồ ị ề ố ỗ ầ ề ố
l ng các bit trong 1 data ,các bit “báo” nh bit Start và bit Stop, các bit ki m tra nh Parity;tuân ượ ư ể ư
theo 1 quy t c nh t đnh đ tránh m t ho c sai d li u.ắ ấ ị ể ấ ặ ữ ệ
-Start bit: bit đu tiên,báo cho thi t b nh n bi t r ng có m t gói d li u s p đc truy n t i.ầ ế ị ậ ế ằ ộ ữ ệ ắ ượ ề ớ
-Data: là thông tin chính mà chúng ta c n g i và nh n.ầ ở ậ
Trang 1/14

-Parity bit: parity là bit dùng ki m tra d li u truy n đúng không.ể ữ ệ ề
-Stop bits: là m t ho c các bit báo cho thi t b nh n r ng m t gói d li u đã đc g i xong.ộ ặ ế ị ậ ằ ộ ữ ệ ượ ở
*)Truy n thông n i ti p không đng b v i AVR (UART)ề ố ế ồ ộ ớ
G m:chân xung nh p - XCK, chân truy n d li u – TxD (Transmitted Data) và chân nh n d li u ồ ị ề ữ ệ ậ ữ ệ
– RxD (Reveived Data).
1. Thanh ghi:
Cũng nh các thi t b khác trên AVR, t t c ho t đng và tráng thái c a module USART ư ế ị ấ ả ạ ộ ủ
đc đi u khi n và quan sát thông qua các thanh ghi trong vùng nh I/O. Có 5 thanh ghi đc ượ ề ể ớ ượ
thi t k riêng cho ho t đng và đi u khi n c a USART, đó là:ế ế ạ ộ ề ể ủ
-UDR: hay thanh ghi d li u, là 1 thanh ghi 8 bit ch a giá tr nh n đc và phát đi c a USART. ữ ệ ứ ị ậ ượ ủ
Th c ch t thanh ghi này có th coi nh 2 thanh ghi TXB (Transmit data Buffer) và RXB (Reveive ự ấ ể ư
data Buffer) có chung đa ch . Đc UDR thu đc giá tr thanh ghi đm d li u nh n, vi t giá tr ị ỉ ọ ượ ị ệ ữ ệ ậ ế ị
vào UDR t ng đng đt giá tr vào thanh ghi đm phát, chu n b đ g i đi. Chú ý trong các ươ ươ ặ ị ệ ẩ ị ể ở
khung truy n s d ng 5, 6 ho c 7 bit d li u, các bit cao c a thanh ghi UDR s không đc s ề ử ụ ặ ữ ệ ủ ẽ ượ ử
d ngụ
UCSRA (USART Control and Status Register A): là 1 trong 3 thanh ghi đi u khi n ho t đng c aề ể ạ ộ ủ
module USART.
Thanh ghi UCSRA ch y u ch a các bit tr ng thái nh bit báo quá trình nh n k t thúc ủ ế ứ ạ ư ậ ế
(RXC), truy n k t thúc (TXC), báo thanh ghi d li u tr ng (UDRE), khung truy n có l i (FE), dề ế ữ ệ ố ề ỗ ữ
li u tràn (DOR), ki m tra parity có l i (PE).ệ ể ỗ
+UDRE (USART Data Register Empty) khi bit bày b ng 1 nghĩa là thanh ghi d li u UDR đang ằ ữ ệ
tr ng và s n sàng cho m t nhi m v truy n hay nh n ti p theo. Vì th n u b n mu n truy n dố ẵ ộ ệ ụ ề ậ ế ế ế ạ ố ề ữ
li u đu tiên b n ph i ki m tra xem bit UDRE có b ng 1 hay không, sau khi ch c ch n r ng ệ ầ ạ ả ể ằ ắ ắ ằ
UDRE=1 hãy vi t d li u vào thanh ghi UDR đ truy n đi.ế ữ ệ ể ề
+U2X là bit ch đnh g p đôi t c đ truy n, khi bit này đc set lên 1, t c đ truy n so cao g p 2ỉ ị ấ ố ộ ề ượ ố ộ ề ấ
l n so v i khi bit này mang giá tr 0.ầ ớ ị
+MPCM là bit ch n ch đ ho t đng đa x lí (multi-processor).ọ ế ộ ạ ộ ử
-UCSRB (USART Control and Status Register B): đây là thanh ghi quan tr ng đi u khi n ọ ề ể
USART. Vì th chúng ta s kh o sát chi ti t t ng bit c a thanh ghi này.ế ẽ ả ế ừ ủ
+RXCIE (Receive Complete Interrupt Enable) là bit cho phép ng t khi quá trình nh n k t thúc. ắ ậ ế
Vi c nh n d li u truy n b ng ph ng pháp n i ti p không đng b th ng đc th c hi n ệ ậ ữ ệ ề ằ ươ ố ế ồ ộ ườ ượ ự ệ
Trang 2/14

thông qua ng t, vì th bit này th ng đc set b ng 1 khi USART đc dung nh n d li u.ắ ế ườ ượ ằ ượ ậ ữ ệ
- TXCIE (Transmit Complete Interrupt Enable) bit cho phép ng t khi quá trình truy n k t thúc.ắ ề ế
- UDRIE (USART Data Register Empty Interrupt Enable) là bit cho phép ng t khi thanh ghi d ắ ữ
li u UDR tr ng.ệ ố
- RXEN (Receiver Enable) là m t bit quan tr ng đi u khi n b nh n c a USART, đ kích ho t ộ ọ ề ể ộ ậ ủ ề ạ
ch c năng nh n d li u b n ph i set bit này lên 1.ứ ậ ữ ệ ạ ả
- TXEN (Transmitter Enable) là bit đi u khi n b phát. Set bit này lên 1 b n s kh i đng b ề ể ộ ạ ẽ ở ộ ộ
phát c a USART.ủ
- UCSZ2 (Chracter size) bit này k t h p v i 2 bit khác trong thanh ghi UCSRC quy đnh đ dài ế ợ ớ ị ộ
c a d li u truy n/nh n. Chúng ta s kh o sát chi ti t khi tìm hi u thanh ghi UCSRC.ủ ữ ệ ề ậ ẽ ả ế ể
- RXB8 (Receive Data Bit 8) g i là bit d li u 8. B n nh l i r ng USART trong AVR có h tr ọ ữ ệ ạ ớ ạ ằ ỗ ợ
truy n d li u có đ dài t i đa 9 bit, trong khi thanh ghi d li u là thanh ghi 8 bit. Do đó, khi có ề ữ ệ ộ ố ữ ệ
gói d li u 9 bit đc nh n, 8 bit đu s ch a trong thanh ghi UDR, c n có 1 bit khác đóng vai ữ ệ ượ ậ ầ ẽ ứ ầ
trò bit th chín, RXD8 là bit th chín này. B n chú ý là các bit đc đánh s t 0, vì th bit th ứ ứ ạ ượ ố ừ ế ứ
chín s có ch s là 8, vì l đó mà bit này có tên là RXD8 (không ph i RXD9).ẽ ỉ ố ẽ ả
- TXB8 (Transmit Data Bit 8), t ng t nh bit RXD8, bit TXB8 cũng đóng vai trò bit th 9 ươ ự ư ứ
truy n thông, nh ng bit này đc dung trong lúc truy n d li u.ề ư ượ ề ữ ệ
-UCSRC (USART Control and Status Register C): thanh ghi này ch y u quy đnh khung truy n ủ ế ị ề
và ch đ truy n. Tuy nhiên, có m t r c r i nho nh là thanh ghi này l i có cùng đa ch v i ế ộ ề ộ ắ ố ỏ ạ ị ỉ ớ
thanh ghi UBRRH (thanh ghi ch a byte cao dùng đ xác l p t c đ baud), nói m t cách khác 2 ứ ể ậ ố ộ ộ
thanh ghi này là 1. Vì th bit 7 trong thanh ghi này, t c bit URSEL là bit ch n thanh ghi. Khi ế ứ ọ
URSEL=1, thanh ghi này đc chip AVR hi u là thanh ghi đi u khi n UCSRC, nh ng n u bit ượ ể ề ể ư ế
URSEL=0 thì thanh ghi UBRRH s đc s d ng.ẽ ượ ử ụ
Các bit còn l i trong thanh ghi UCSRC đc mô t nh sau:ạ ượ ả ư
- UMSEL (USART Mode Select) là bit l a ch n gi a 2 ch đ truy n thông đng b và không ự ọ ữ ế ộ ề ồ ộ
đng b . N uồ ộ ế UMSEL=0, ch đ không đng b đc ch n, ng c l i n u UMSEL=1, ch đế ộ ồ ộ ượ ọ ượ ạ ế ế ộ
đng b đc kích ho t.ồ ộ ượ ạ
- Hai bit UPM1 và UPM0( Parity Mode) đc dùng đ quy đnh ki m tra pariry. N u ượ ể ị ể ế
UPM1:0=00, parity không đc s d ng (mode này khá thông d ng), UPM1:0=01 không đc sượ ử ụ ụ ượ ử
d ng, UPM1:0=10 thì parity ch n đc dùng, UPM1:0=11 parity l đc s d ng (xem thêm ụ ẵ ượ ẻ ượ ử ụ
b ng 1).ả
B ng 1: ch n ki m tra parity.ả ọ ể
Trang 3/14

- USBS (Stop bit Select), bit Stop trong khung truy n b ng AVR USART có th là 1 ho c 2 bit, ề ằ ể ặ
n u USBS=0 thì Stop bit ch là 1 bit trong khi USBS=1 s có 2 Stop bit đc dùng.ế ỉ ẽ ượ
- Hai bit UCSZ1 và UCSZ2 (Character Size) k t h p v i bit UCSZ2 trong thanh ghi UCSRB t o ế ợ ớ ạ
thành 3 bit quy đnh đ dài d li u truy n. B ng 2 tóm t t các giá tr có th có c a t h p 3 bit ị ộ ữ ệ ề ả ắ ị ể ủ ổ ợ
này và đ dài d li u truy n t ng ng.ộ ữ ệ ề ươ ứ
B ng 2: đ dài d li u truy n.ả ộ ữ ệ ề
- UCPOL (Clock Pority) là bit ch c c c a xung kích trong ch đ truy n thông đng b . n u ỉ ự ủ ế ộ ề ồ ộ ế
UCPOL=0, d li u s thay đi thay đi c nh lên c a xung nh p, n u UCPOL=1, d li u thay ữ ệ ẽ ổ ổ ở ạ ủ ị ế ữ ệ
đi c nh xu ng xung nh p. N u b n s d ng ch đ truy n thông không đng b , hãy set bit ổ ở ạ ố ị ế ạ ử ụ ế ộ ề ồ ộ
này b ng 0..ằ
-UBRRL và UBRRH (USART Baud Rate Register): 2 thanh ghi th p và cao quy đnh t c đ ấ ị ố ộ
baud.
- Nh c l i là thanh ghi UBRRH dùng chung đa ch thanh ghi UCSRC, b n ph i set bit này ắ ạ ị ỉ ạ ả
b ng 0 n u mu n s d ng thanh ghi UBRRH. Nh b n quan sát trong hình trên, ch có 4 bit th p ằ ế ố ử ụ ư ạ ỉ ấ
c a UBRRH đc dùng, 4 bit này k t h p v i 8 bit trong thanh ghi UBRRL t o thành thanh ghi ủ ượ ế ợ ớ ạ
12 bit quy đnh t c đ baud. Chú ý là n u b n vi t giá tr vào thanh ghi UBRRL, t c đ baud s ị ố ộ ế ạ ế ị ố ộ ẽ
t c thì đc c p nh t, vì th b n ph i vi t giá tr vào thanh ghi UBRRH tr c khi vi t vào thanhứ ượ ậ ậ ế ạ ả ế ị ướ ế
ghi UBRRL.
-Giá tr gán cho thanh ghi UBRR không ph i là t c đ baud, nó ch đc USART dùng đ tínhị ả ố ộ ỉ ượ ể
t c đ baud. ố ộ
- Đ s d ng module USART trên AVR b n ph i th c hi n 3 vi c quan tr ng, đó là: cài đt t c ể ử ụ ạ ả ự ệ ệ ọ ặ ố
đ baud (thanh ghi UBRR), đnh d ng khung truy n (UCSRB, UCSRC) và cu i cùng kích ho t ộ ị ạ ề ố ạ
b truy n, b nh n, ng t…ộ ề ộ ậ ắ
*)Truy n nh n n i ti p UART gi a hai Vi đi u khi nề ậ ố ế ữ ề ể
Đu chéo TxD c a vdk này v i RxD c a vdk khác và ng c l i.ấ ủ ớ ủ ượ ạ
Truy n d li u:ề ữ ệ
void uart_tx_setup(){
//set baud,f=8Mhz
UBRRH=0;
Trang 4/14

UBRRL=51; //9600 bps
//set khung truyen va kich hoat bo nhan du lieu
UCSRA=0x00;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //du lieu 8bit
UCSRB=(1<<TXEN); //cho phep truyen
while (bit_is_clear(UCSRA,UDRE)); //cho den khi bit UDRE=1
// truy n d li u.......ề ữ ệ
}
-Nh n d li u:ậ ữ ệ chúng ta có 2 cách đc d li u nh n v . Cách th nh t là cáchọ ữ ệ ậ ề ứ ấ h i vòng ỏ
(polling), ki m tra n u bit RXC = 1 thì đc giá tr thanh ghi UDR (và đc c bit RXB8 trong ể ế ọ ị ọ ả
thanh ghi UCSRB n u frame truy n 9 bit đc dùng). Cách th hai là s d ng ng t “nh n hoàn ế ề ượ ứ ử ụ ắ ậ
t t” (Receive Complete Interrupt), b ng cách set bit cho pháp ng t nh n hoàn t t, t c bit RXCIE ấ ằ ắ ậ ấ ứ
trong thanh ghi UCSRB, và bit cho phép ng t toàn c c (bit I, xem l i bài 3) thì m t ng t s x y raắ ụ ạ ộ ắ ẽ ả
khi d li u đã đc nh n và ch a trong thanh ghi UDR, chúng ta ch c n đc giá tr c a thanh ghiữ ệ ượ ậ ứ ỉ ầ ọ ị ủ
UDR trong trình ph c v ng t là xong.ụ ụ ắ
-Code nh n d li u b ng ph ng pháp ng tậ ữ ệ ằ ươ ắ
void uart_rx_setup(){
//set baud,f=8Mhz
UBRRH=0;
UBRRL=51; //9600 bps
//set khung truyen va kich hoat bo nhan du lieu
UCSRA=0x00;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);// cho phep truyen,nhan,ngat RxD
sei(); //cho phep ngat toan cuc
}
ISR(SIG_UART_RECV){ //trinh phuc vu ngat USART hoan tat nhan
//đc d li u trong UDR.....ọ ữ ệ
}
*)Giao ti p AVR v i máy tínhế ớ
Giao ti p thông qua c ng COM là giao ti p theo chu n n i ti p RS232ế ổ ế ẩ ố ế
Chu n RS232ẩ
-Là chu n giao ti p n i ti p không đng b ,kho ng cách k t n i 12,5m đn 25,4mẩ ế ố ế ồ ộ ả ế ố ế
-Đc đi m:ặ ể
+ M c gi i h n trên và d i (logic 0 và 1) là ±12V.M c logic 1 n m trong kho ng -12V đn ứ ớ ạ ướ ứ ằ ả ế
-3V.M c logic 0 n m trong kho ng 3V đn 12V. ứ ằ ả ế
+ T c đ truy n nh n d li u 20kbps,t i đa có th lên đn 100kbps.ố ộ ề ậ ữ ệ ố ể ế
Trang 5/14

