You are on page 1of 72

Ngưӡi thӵc hiӋn : NguyӉn Nam Phong

Nhóm : BKFET
BÀI 1: Mӣ đҫu
 Giӟi thiӋu vӅ hӑ VĐK AVR.
 Các phép toán cơ bҧn.
 Thӵc hiӋn cài đһt các phҫn mӅm liên quan.
 Làm quen vӟi Atmega16.
ii i t iӋ
X ҩt xӭ:
 Do ãng tmel sҧn x ҩt.
 Là 1 trong 3 dòng vi điӅ k iӇn t ông dөng n ҩt trên t ӏ
trưӡng iӋn nay.
 Có n iӅ tín năng vưӧt trӝi.
Giӟi thiӋu hӑ VĐK AVR
Đһc điӇm chung:
 Là dòng vi điӅu khiӇn khá mҥnh.
 Có cҩu trúc RISC.
 Có nhiӅu thanh ghi điӅu khiӇn.
 Có nhiӅu loҥi bӝ nhӟ : Flash , EEPROM , SRAM.
 Các chân vào ra có khҧ năng chӏu dòng lӟn : 20mA.
 Có nhiӅu chӃ đӝ tiӃt kiӋm năng lưӧng: idle, power- down,
standby «
 Có khҧ năng hoҥt đӝng ӣ nhiӅu tҫn sӕ.
iiӟi thiӋu h Đ A R
Đһc điӇm chung:
 Có nhiӅu ngҳt trong và ngҳt ngoài.
 Tích hӧp nhiӅu chӭc năng : PWM , timer/counter , ADC
v«v .
 Tích hӧp nhiӅu chuҭn giao tiӃp ngoҥi vi : UART, USART ,
TWI , SPI «.
 Dҧi điӋn áp làm viӋc rӝng.
 Hoҥt đӝng әn đӏnh đáng tin cұy.
 Chӫng loҥi phong phú phù hӧp vӟi nhiӅu mөc đích sӱ
dөng.
Giӟi thiӋu hӑ VĐK AVR
Mӝt vài dòng vđk AVR:
 Dòng ATtiny : ATtiny 11 , ATtiny 12 «
 Dòng AT90 : AT90C8515 , AT90S2313 , AT90S8515«
 Dòng Mega : ATmega8 , ATmega16 , ATmega32 ,
ATmega128«
Các phép toán cơ bҧn
Phép toán AND ( & ) :
 Câu lӋnh trong C : !     

  !
0 0 0
0 1 0
1 0 0
1 1 1
Các phép toán cơ bҧn
Phép toán OR ( | ) :
 Câu lӋnh trong C : !     

  !
0 0 0
0 1 1
1 0 1
1 1 1
Các phép toán cơ bҧn
Phép toán NOT ( ~ ) :
 Câu lӋnh trong C : !   

 !
0 1
1 0
Các phép toán cơ bҧn
Phép toán dӏch bít ( << , >> ) :
 Câu lӋnh trong C :
!      !  

!     !   
Thӵc hiӋn cài đһt hưӟng dүn sӱ
dөng các phҫn mӅm hӛ trӧ
Làm quen vӟi Atmega16
BÀI 2: Chӭc năng I/Ovà Ngҳt ngoài
 ThiӃt lұp chӭc năng I/O cho VĐK
 ThiӃt lұp chӭc năng sӱ dөng ngҳt ngoài
Chӭc năng I/O
Mô tҧ:
 Atmega16 có 32 chân vào/ra (I/O) có thӇ lұp trình đưӧc
 PORTA (cәng A): 8 chân : PA0 ± PA7 .
 PORTB (cәng B): 8 chân : PB0 ± PB7 .
 PORTC (cәng C): 8 chân : PC0 ± PC7.
 PORTD (cәng D): 8 chân : PD0 ± PD7.
 Các chân này đưӧc điӅu khiӇn thông qua các thanh ghi
tương ӭng vӟi các cәng cӫa chúng.
Chӭc năng I/O
Các thanh ghi điӅu khiӇn chӭc năng I/O:
 Vӟi PORTA (Cәng A ) ± Các cәng khác tương tӵ :
 Thanh ghi PORTA: Thanh ghi dӳ liӋu cӫa các PORT . Đӑc ghi đưӧc .

Thӵc hiӋn set bit :


PORTA |= ( 1<<PAn )
i    

 Phép toán ³ |= ´ :
A |= B ; ~ A = A | B ;
Tương tӵ :
A &= B; ~ A = A&B;
A += B; ~ A = A+B;

 PAn (n : 0-7 ):
Trong thư viӋn < avr/io.h > các chân PA0 đӃn PA7 đã đưӧc
đӏnh nghĩa tương ӭng vӟi các sӕ nguyên tӯ 0 ± 7.
 Vұy ta có :
PORTA |= (1<<PA2); => PORTA = PORTA | (1*2^2) ;
1*2^2 = 4 => 0000 0100
PORTA = PORTA | 0b00000100 ;

Y  Y 
PA7 0 0 PA7 0

PA6 0 0 PA6 0

PA5 0 0 PA5 0

=
PA4 0 0 PA4 0

PA3 0 | 0 PA3 0

PA2 0 1 PA2 1

PA1 0 0 PA1 0

PA0 0 0 PA0 0
Tương tӵ khi ta muӕn đһt 1 bit vӅ µ0¶:
PORTA &= ~ ( 1 << PA2 ); => PORTA &= ~ 0b 0000 0100 ;
=> PORTA = PORTA & 0b 1111 1011 ;

Y  Y 
PA7 1 1 PA7 1

PA6 1 1 PA6 1

PA5 1 1 PA5 1

PA4 1 & 1 = PA4 1

PA3 1 1 PA3 1

PA2 1 0 PA2 0

PA1 1 1 PA1 1

PA0 1 1 PA0 1
 Vұy ta có công thӭc tәng quát cho viӋc set bít cӫa 1 thanh ghi
như sau
 Set lên µ1¶ :


      
  
Y   Y 
 Set vӅ µ0¶ :


      
  
Y Y
Chӭc năng I/O
Các thanh ghi điӅu khiӇn chӭc năng I/O:
 Vӟi PORTA (Cәng A ):
 Thanh ghi DDRA : Thanh ghi chӍ hưӟng vào/ra . Đӑc ghi đưӧc

Thӵc hiӋn set bit :


DDRA |= ( 1<< DDAn ); // vӟi chân tương ӭng là đҫu ra.
DDRA &= ~( 1<< DDAn ); // vӟi chân tương ӭng là đҫu vào.
Chӭc năng I/O
Các thanh ghi điӅu khiӇn chӭc năng I/O:
 Vӟi PORTA (Cәng A ):
 Thanh ghi PINA : Thanh ghi chӍ dùng cho mөc đích đӑc các giá
trӏ đҫu vào. ChӍ đӑc đưӧc .

Cách kiӇm tra các chân vào:


if (PINA == 0b0000 0100) // KiӇm tra chân 2 cӫa PORTA có
// phҧi ӣ mӭc 1 không.
{ /*code*/}
Thӵc hành sӱ dөng chӭc năng I/O
 Hҥn chӃ :
 if (PINA = 0x00000100) {}
khi có nhiӅu phím ҩn đӗng thӡi thì không nhұn biӃt đưӧc =>
cҫn thӵc hiӋn kiӇm tra đӝc lұp theo đҫu vào
=> If (!( PINA & ( 1<< PA2 )))
{/* code */}
 ViӋc sӱ dөng phím bҩm theo dҥng này đòi hӓi VĐK phҧi
hoҥt đӝng liên tөc ( chӃ đӝ hӓi vòng )
Chӭc năng ngҳt ngoài (External Interrupt)
Mô tҧ:
 Ngҳt : là mӝt tín hiӋu khҭn cҩp đưӧc gӱi đӃn bӝ xӱ lý
trung tâm , yêu cҫu tҥm dӯng tҩt cҧ các công viӋc khác đӇ
ưu tiên thӵc hiӋn công viӋc mà ngҳt yêu cҫu.
 Khi có tín hiӋu ngҳt , các chương trình đang chҥy sӁ đưӧc
lưu vào các ngăn xӃp , bӝ xӱ lý trung tâm sӁ gӑi 1 chương
trình phөc vө ngҳt tương ӭng vӟi ngăt đưӧc yêu cҫu đӇ
thӵc hiӋn các thao tác xӱ lý ngҳt đó , sau khi thӵc hiӋn
xong chương trình con phөc vө ngҳt , chương trình sӁ quay
trӣ vӅ trҥng thái trưӟc đó.
Chӭc năng ngҳt ngoài (Extrenal Interrupt)
Mô tҧ:
 Atmega16 có 3 chân ngҳt ngoài là INT0, INT1, INT2
 INT0 (cәng D): chân : PD2
 INT1 (cәng D): chân : PD3
 INT2 (cәng B): chân : PB2
 Chӭc năng ngҳt cӫa các chân này đưӧc điӅu khiӇn bӣi các
thanh ghi : MCUCR , MCUCSR , GICR .
 Thanh ghi cӡ : GIFR.
Chӭc năng ngҳt ngoài (External Interrupt)
`    `  
  

ISC11 ,ISC10 : thiӃt lұp kiӇu ngҳt cho chân INT1

     
0 0 Ngҳt mӭc thҩp
0 1 Ngҳt thay đәi mӭc logic
1 0 Ngҳt sưӡn xuӕng
1 1 Ngҳt sưӡn lên
Chӭc năng ngҳt ngoài (External Interrupt)
`    `  
  

ISC01 ,ISC00 : thiӃt lұp kiӇu ngҳt cho chân INT0

     
0 0 Ngҳt mӭc thҩp
0 1 Ngҳt thay đәi mӭc logic
1 0 Ngҳt sưӡn xuӕng
1 1 Ngҳt sưӡn lên
Chӭc năng ngҳt ngoài (External Interrupt)
`    `  

    

ISC2 : thiӃt lұp kiӇu ngҳt cho chân INT2


  
0 Ngҳt sưӡn xuӕng
1 Ngҳt sưӡn lên

ĐӇ xҧy ra ngҳt ӣ chân này thì xung tín hiӋu vào phҧi có đӝ rӝng lӟn
hơn 50ns
Chӭc năng ngҳt ngoài (External Interrupt)
i   i
  
 
  

INT1 : Cho phép ngҳt ӣ chân INT1


INT0 : Cho phép ngҳt ӣ chân INT0
INT2 : Cho phép ngҳt ӣ chân INT2
Chӭc năng ngҳt ngoài (External Interrupt)
i  i
  
    

 INTF1 : Đưӧc set lên 1 khi xҧy ra ngҳt sưӡn hoһc thay đәi mӭc logic ӣ
chân INT1. Luôn là 0 khi là ngҳt mӭc.
 INTF0 : Đưӧc set lên 1 khi xҧy ra ngҳt sưӡn hoһc thay đәi mӭc logic ӣ
chân INT0. Luôn là 0 khi là ngҳt mӭc.
 INTF2 : Đưӧc set lên 1 khi xҧy ra ngҳt ӣ chân INT2.

Các bit này đưӧc xóa vӅ 0 khi các vector ngҳt đưӧc gӑi.
Chӭc năng ngҳt ngoài (External Interrupt)
 
   


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

unsigned char x=0;

SIGNAL(SIG_INTERRUPT1)
{
PORTA |= (1<<PA0);
_delay_ms(100);
PORTA &= ~(1<<PA0);
}
void main()
{
DDRA = 0xFF;
DDRB = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
PORTB = 0x00;

MCUCR &=~ ((1<<ISC11)|(1<<ISC10)); // ngat muc thap o chan ngat INT1


GICR |= (1<<INT1); // cho phep ngat ngoai
sei(); // cho phep ngat toan cuc
while(1)
{
for(x=0;x<8;x++)
{
PORTB =(1<<x);
_delay_ms(100);
}
}
}
ӝ Timer/Counter
Mô tҧ:
 Atmega16 có 2 Timer/Counter 8 bits và 1 Timer/Counter
16 bits
 Timer/Counter0 : 8 bits.
 Timer/Counter1 : 16 bits.
 Timer/Counter2 : 8 bits.
 Các bӝ Timer/Counter này có rҩt nhiӅu chӭc năng ӭng
dөng đa dҥng trong thӵc tӃ .
Bӝ Timer/Counter
Các chân cӫa bӝ timer/counter:
 Timer/Counter 0:
 T0 ( PB0 ) :
 OC0 ( PB3 ) :
 Timer/Counter 1:
 T1 ( PB1) :
 OC1A ( PD5 ):
 OC1B ( PD4 ) :
 ICP ( PD6 ) :
 Timer/Counter 2:
 OC2 ( PD7 ) :
ӝ Timer/Counter
Các vҩn đӅ trong bài hӑc:
 Các vҩn đӅ cơ bҧn cӫa bӝ Timer/Counter.
 Sӱ dөng Timer/Counter như 1 bӝ Timer.
 Sӱ dөng Timer/Counter như 1 bӝ Counter.
 Sӱ dөng Timer/Counter làm bӝ PWM ( Pulse Width
Modulation ).
ӝ Timer/Counter
Các vҩn đӅ cơ bҧn:
 Là Module đӝc lұp so vӟi CPU.
 Chӭc năng chính là làm bӝ đӏnh thӡi (timer) và bӝ đӃm sӵ
kiӋn (counter).
 3 bӝ Timer/Counter cӫa ATmega16 đӅu có bӝ canh chӍnh
thӡi gian ( Caliration ) sӱ dөng trong các ӭng dөng thӡi
gian thӵc rҩt tiӋn lӧi.
 Thông thưӡng 1 bӝ Timer/Counter sӁ có các chӃ đӝ hoҥt
đӝng : Normal Mode , CTC Mode , PWM Mode.
hҧ sát Timer/C unter
Các đӏnh nghĩa quan trӑng cҫn nҳm đưӧc:
 BOTTOM : giá trӏ nhӓ nhҩt mà 1 T/C có thӇ đӃm đưӧc ,
giá trӏ này bҵng 0.
 MAX : giá trӏ lӟn nhҩt mà 1 T/C có thӇ đӃm đưӧc , giá trӏ
này phө thuӝc vào đӝ phân giҧi cӫa T/C . VD: T/C0 là T/C
8bits => MAX = 2^8 - 1 = 255.
F   ` và ` là 2 
  đӕi vӟi 1 T/C.
 TOP : Là giá trӏ mà khi T/C đҥt tӟi nó sӁ thay đәi trҥn thái.
BOTTOM ” TOP ” MAX . Giá trӏ TOP đưӧc thiӃt lұp
thông qua 1 thanh ghi ӭng vӟi mӛi T/C.
hҧo sát Timer/Counter0
Các thanh ghi điӅu khiӇn Timer/Counter :
 TCCR0 : Time/Counter Control Register :

 Bit 6,3 : WGM00 , WGM01 : ThiӃt lұp chӃ đӝ hoҥt đӝng cӫa T/C
ҧo sát Timer/Counter0
 TCCR0 : Time/Counter Control Register :

 Bit 5,4 : COM01,COM00 : ThiӃt lұp chӃ đӝ đҫu ra cӫa chân OC0.
m ҧ sát i er/ ter
Đӕi vӟi các c Ӄ đӝ k ô g p ҧi PWM

Đӕi vӟi c Ӄ đӝ Fast PWM


m ҧ sát i er/ ter
Đӕi vӟi các c Ӄ đӝ P ase rrect PWM M de
mhҧo sát Timer/Counter0
Các thanh ghi điӅu khiӇn Timer/Counter :
 TCCR0 : Time/Counter Control Register :

 Bit 2,1,0 : CS02-0 : ThiӃt lұp chӃ đӝ chia tҫn


m ҧ sát i er/ ter
ác c Ӄ đӝ c ia tҫ :
m ҧo sát Timer/Counter0
 TCNT0 : Time/Counter Register :

 Thanh ghi này làm nhiӋm vө lưu giá trӏ đӃm cӫa bӝ T/C . Giá
trӏ cӫa thanh ghi này sӁ tăng 1 đơn vӏ sau mӛi khoҧng thӡi
gian đã đưӧc đӏnh sҹn trong quá trình chia tҫn.
 Mӛi khi giá trӏ cӫa TCNT bҵng vӟi giá trӏ cӫa thanh ghi OCR
sӁ xҧy ra 1 sӵ kiӋn ngҳt và chân OC0 sӁ cho ra dҥng sóng đã
đưӧc thiӃt lұp ӣ mode .
m ҧo sát imer/Cou ter0
 OCR0 : Output Compare Register :

 Giá trӏ cӫa thanh ghi này đưӧc ngưӡi sӱ dөng thiӃt lұp .
K ҧo sát Timer/Counter
 TIMSK : Time/Counter Interrupt Mask :

 Bit OCIE0 : Cho phép ngҳt khi thanh ghi OCR = TCNT
 Bit TOIE0 : Cho phép ngҳt tràn Timer/Counter0.
ӝ Timer/Counter
Sӱ dөng T/C như 1 bӝ Timer:
 Mô tҧ hoҥt đӝng : ( Normal Mode )
Trong chӃ đӝ Normal Mode thanh ghi TCNT tăng giá trӏ
cӫa nó lên 1 đơn vӏ sau mӛi 1 khoҧng thӡi gian đã đưӧc
đӏnh trưӟc trong quá trình chia tҫn . Khi TCNT đҥt giá trӏ
bҵng MAX = 255 , nó sinh ra mӝt ngҳt. Ta tұn dөng ngҳt
này đӇ biӃn T/C thành 1 bӝ Timer.
 Ví dө : Thӵc hiӋn nháy đèn LED sau mӛi 0.1ms .Vӟi
VDK hoҥt đӝng ӣ tҫn sӕ 8Mhz.
i er/ ter
1 s 1 s
(255-155) x 1 s = 0.1 s
155 156 157 158 159 « 255

hươ g trì h c phөc


vө Ngҳt : thay đәi trҥ g
thái cӫa LED
ӝ Timer/Counter
Sӱ dөng T/C như 1 bӝ Counter:
 Mô tҧ hoҥt đӝng : ( Normal Mode )
Các sӵ kiӋn đưӧc đӃm tӯ chân T0 và lưu lҥi sӕ sӵ kiӋn
trong thanh ghi TCNT.
 Ví dө : Thӵc hiӋn đӃm sӵ kiӋn và đưa các giá trӏ đӃm
đưӧc ra PORTD.
B Timer/Counter
#include <avr/io.h>
#include <util/delay.h>
void main()
{
DDRD = 0xFF; // PORTD ra
PORTD = 0x00; // muc thap , cho giong voi thanh ghi TCNT0

DDRB = 0x00; // PORTB dau vao cho chân T0


PORTB = 0xFF; // Muc cao

TCCR0 |= (1<<CS01)|(1<<CS02); // su dung suon xuong de bat su kien

TCNT0 =0;
Timer/Co nter
while(1)
{
if (TCNT0 == 200) TCNT0 = 0; // cho phep dem den 200
PORTD = TCNT0;
}
}
ӝ Ti er/ nter
Sӱ dөng T/C làm bӝ PWM:
 Mô tҧ hoҥt đӝng : ( chӃ đӝ fast PWM )
Tӯ chân OC0 cӫa VĐK sӁ có xung ra vӟi đӝ rӝng xung thay đәi
đưӧc bҵng cách thay đәi giá trӏ cӫa OCR0 ( 0 ± 255 ). Tҫn sӕ cӫa
chuӛi xung này đưӧc tính bҵng công thӭc:
2Y`  2    
Trong đó: fPWM : Tҫn sӕ xung ra.
fclk : Tҫn sӕ hoҥt đӝng cӫa VĐK.
N : HӋ sӕ chia tҫn.
 Ví dө : Thӵc hiӋn nháy đèn LED bҵng chӃ đӝ PWM , nhұn xét
sӵ nhҩp nháy cӫa LED .
V i er/ ter
fPWM = 8/(8 x 256)
= 0,004 Mhz

PWM = 1/ fPWM
= 250 s
B Timer/Counter
#include <avr/io.h>
void main()
{
DDRB = 0xFF;
TCCR0 |= (1<<CS01); //chia tan 8
TCCR0 |= (1<<WGM01)|(1<<WGM00); // che do fast
PWM
OCR0 = 10; // khoi tao thanh ghi OCR0
TCCR0 |= (1<<COM01)|(1<<COM00);
//chon che do OC0 =1 khi TCNT = OCR
}
mhӕi USART
Mô tҧ:
 Atmega16 có 1 bô USART ( Universal Synchronous/
Asynchronous serial Receiver and Transmitter) .
 Đây là khӕi giao tiӃp nӕi tiӃp rҩt linh hoҥt :
 Hoҥt đӝng đưӧc ӣ chӃ đӝ song công ( truyӅn nhұn đӝc lұp )
 TruyӅn thông nӕi tiӃp đӗng bӝ ( Synchronous )hoһc không
đӗng bӝ ( Asynchronous ).
 Đӗng bӝ giao tiӃp Master / Slave
 Giҧi tӕc đӝ truyӅn đa cҩp
 Cho phép sӱ dөng nhiӅu khung truyӅn : 5,6,7,8,9 Databits ;
1,2 Stopbit.
mhӕi 
Mô tҧ:
 Có khҧ năng tҥo bit kiӇm tra chҹn lҿ và kiӇm tra bit kiӇm tra
chҹn lҿ.
 Có khҧ năng phát hiӋn lӛi tràn
 Có khҧ năng phát hiӋn lӛi khung truyӅn
 Có khҧ năng x2 tӕc đӝ ӣ chӃ đӝ không đӗng bӝ
 Có các ngҳt phát hiӋn: kӃt thúc quá trình nhұn , thanh ghi
truyӅn trӕng , kӃt thúc quá trình truyӅn
Khӕi USART
Các chân cӫa khӕi USART:
 Chân TXD ( PD1 ) :
Chân xuҩt tín hiӋu ra cӫa khӕi USART.
 Chân RXD ( PD0 ) :
Chân nhұn tín hiӋu vào cӫa khӕi USART.
=>> Muӕn 2 khӕi truyӅn thông này giao tiӃp vӟi nhau thì phҧi
kӃt nӕi TXD cӫa bӝ này vӟi RXD cӫa bӝ kia.
 Chân XCK ( PB0 ) :
Chân kӃt nôi xung Clock cӫa các bӝ USART . Chân
này chӍ sӱ dөng trong chӃ đӝ đӗng bӝ ( Synchronous )
Kh i S 
Khung truyӅn:

 St : Start bit : luôn ӣ mӭc thҩp và chӍ có 1.


 Data bits : 5, 6, 7, 8 hoһc 9 bits.
 Không có Parity bit , Parity bit chҹn , Parity bit lҿ.
 Sp : Stop bit : 1 hoһc 2 Stop bit : luôn ӣ mӭc cao.
 IDLE : không có giao tiӃp ( mӭc cao ).
mhӕi S R
Giҧi thích vӅ khung truyӅn
 Start bit:
 Là bít đҫu tiên đưӧc gӱi đi đӇ thông báo vӟi bên nhұn là có dӳ
liӋu đang đưӧc gӱi tӟi.
 Stop bit:
 Là bít cuӕi cùng thông báo kӃt thúc 1 khung truyӅn .
 Parity bit:
 NӃu đưӧc sӱ dөng thì bít này nҵm giӳa data bit cuӕi cùng và
Stop bit đҫu tiên.
 Bit này đưӧc tính như sau :
 Parity chҹn : là kӃt quҧ cӫa phép XOR các databit và bit 0.
 Parity lҿ : là kӃt quҧ cӫa phép XOR các databit và bit 1.
Khӕi USART
Giҧi thích vӅ khung truyӅn
 Các data bit:
 Các data bit sӁ đưӧc kiӇm tra bҵng tӕc đӝ truyӅn Baudrate.
 KӃt luұn : đӇ 2 khӕi giao tiӃp đưӧc vӟi nhau thì:
 Có cùng 1 khung truyӅn ( frame format ).
 Phҧi có cùng tӕc đӝ truyӅn ( baud rate ).
Các vҩn đӅ trên đưӧc thiӃt lұp tҥi các thanh ghi điӅu khiӇn
khӕi USART
mh i USART
Các thanh ghi :
 UDR ( USART Data buffer Register )

 Thanh ghi dӳ liӋu cӫa khӕi USART.


 Khi truyӅn thi đây là thanh ghi ghi dӳ liӋu cҫn truyӅn.
 Khi nhұn thanh ghi này ghi dӳ liӋu nhұn.
FPhân biӋt ?
 Thanh ghi này ban đҫu mһc đӏnh là nhұn
 Muӕn ghi dӳ liӋu gӱi đi thì trưӟc đó cҫn UCSRA |= ( 1<< UDRE ).
 Sau khi ghi dӳ liӋu xong , bӝ Transmitter đưӧc khӣi đӝng thì dӳ
liӋu này sӁ đưӧc chuyӇn vào thanh ghi dӏch khi thanh ghi đó trӕng,
rӗi dӳ liӋu đó đưӧc truyӅn đi.
mh i USART
Các thanh ghi :
 UCSRA ( USART Control and Status Register A)

 RXC : Receive complete :


 Set lên 1 khi trong UDR có dӳ liӋu chưa đưӧc đӑc.
 Xóa vӅ 0 khi bӝ đӋm trӕng.
 TXC : Transmit complete :
 Set lên 1 khi toàn bӝ dӳ liӋu trong thanh ghi dӏch đưӧc đҭy ra
ngoài và không có dӳ liӋu mӟi xuҩt hiӋn trong UDR.
 Tӵ vӅ 0 khi chương trình con phөc vө ngҳt đưӧc gӑi, hoһc ngưӡi
dùng có thӇ xóa bҵng cách ghi 0 vào.
mh i USART
Các thanh ghi :
 UCSRA ( USART Control and Status Register A)

 UDRE: UDR is Empty:


 Set lên 1 khi UDR trӕng và sҹn sàng nhұn dӳ liӋu mӟi.
 Xóa vӅ 0 khi bӝ đӋm trӕng.
 FE : Frame Error :
 Set lên 1 khi xҧy ra lӛi khung truyӅn.
 0 khi không có lӛi khung truyӅn
 Luôn đһt bit này là 0 khi tác đӝng vào UCSRA
mh i USART
Các thanh ghi :
 UCSRA ( USART Control and Status Register A)

 DOR : Data Over Run :


 Set lên 1 khi xҧy ra sӵ cӕ tràn dӳ liӋu: đang có dӳ liӋu trong bӝ
đӋm , có dӳ liӋu trong thanh ghi dӏch và đӗng thӡi phát hiӋn 1 start
bit mӟi.
 Xóa vӅ 0 khi có thao tác đӑc dӳ liӋu tӯ UCR
 Khi sӱ dөng thanh ghi UCSRA thì phҧi đӇ bit này là 0
 PE : Parity Error :
 Set lên 1 khi xҧy ra lӛi bit kiӇm tra chҹn lҿ.
 Xóa vӅ 0 khi có thao tác đӑc dӳ liӋu tӯ UCR
mh i USART
Các thanh ghi :
 UCSRA ( USART Control and Status Register A)

 U2X : Double the USART Transmittion speed :


 ChӍ có tác dөng vӟi chӃ đӝ Asynchronous.
 MPCM : Multi ± processor Communication Mode :
 Khi set lên 1 , tҩt cҧ các khung truyӅn không có đӏa chӍ sӁ bӏ loҥi
bӓ.
mh i USART
Các thanh ghi :
 UCSRB ( USART Control and Status Register B)

 RXCIE : RX Complete Interrupt Enable :


 Cho phép ngҳt khi nhұn xong.
 TXCIE : TX Complete Interrupt Enable :
 Cho phép ngҳt khi truyӅn xong.
 UDRIE : UDR Empty Interrupt Enable:
 Cho phép ngҳt khi UDR trӕng.
mh i USART
Các thanh ghi :
 UCSRB ( USART Control and Status Register B)

 RXEN : RX Enable :
 Cho phép nhұn.
 TXEN : TX Enable :
 Cho phép truyӅn.
 UCSZ2 : Character size: sӕ lưӧng databit
 kӃt hӧp cùng UCSZ1, UCSZ0 ӣ thanh ghi UCSRC đӇ xác đӏnh
sӕ databit.
mhӕi 
Chӑ sӕ data bit:
mh i USART
Các thanh ghi :
 UCSRB ( USART Control and Status Register C)

 URSEL:
 Bit này là 1 thì thanh ghi này là UCRSC ( chính nó :D )
 Bit này là 0 thì thanh ghi này trӣ thành UBRRH sӱ dөng đӇ set
Baudrate.
 UMSEL : Mode Select : Chӑn chӃ đӝ :
 Set lên 1: chӃ đӝ đӗng bӝ Synchronous.
 Set vӅ 0 : chӃ đӝ không đӗng bӝ Asynchronous.
mh i USART
Các thanh ghi :
 UCSRB ( USART Control and Status Register C)

 UPM1, UPM0: Parity Mode :


 Chӑn chӃ đӝ cho bít kiӇm tra chҹn lҿ.
mh i USART
Các thanh ghi :
 UCSRB ( USART Control and Status Register C)

 USBS: Stop Bit Select :


 0 : 1 Stop bit.
 1 : 2 Stop bits.
 UCPOL : Clock Polarity :
 ChӍ sӱ dөng trong chӃ đӝ Synchronous.
 Trong chӃ đӝ Asynchronous đӇ bit này là 0.
 Chӑn sưӡn lҩy mүu tín hiӋu .
mh i U R
Các thanh ghi :
 UBRRL và UBRRH ( Baudrate Register )

 URSEL : bit chӑn = 0 thì là UBRRH


 Khi set baudrate ta tra bҧng và gán giá trӏ cho UBRRH và UBRRL
Khӕi A T
Mô phӓng :
 Thӵc hiӋn giao tiӃp truyӅn thông nӕi tiӃp giӳa 2 VĐK.
 Yêu cҫu khung truyӅn : 8 data bits , 1 stop bit , no parity ,
Baudrate 9600 bps.
 Giҧ sӱ 2 VĐK Atmega16 sӱ dөng thҥch anh 8Mhz.

You might also like