블로그 이미지
송시혁

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 6. 11. 17:15 임베디드/Atmega










UCSR0B= 

1<<RXCIE0;

해당 비트에 1을 넣고, 상태레지스터가 I가 1이 되면, 

한 문자가 수신되고 수신완료 인터럽트 발생.


UCSR0A = (0<<MPCM0)|(0<<U2X0)|(0<<UPE0)|(0<<DOR0)|

 (0<<FE0)|(0<<UDRE0)|(0<<TXC0)|(0<<RXC0);


수신부=1<<RXEN0,

USART0포트의 수신부가 동작하도록 하는 레지스터

수신부 활성화 


송신부 동작=1<<TXEN0. p224

USART0포트의 송신부가 동작하도록 하는 레지스터

송신부 활성화



UCSR0C = (0<<UCPOL0)|(1<<UCSZ00)|(1<<UCSZ01)|(0<<USBS0)|

 (0<<UPM00)|(1<<UPM01)|(0<<UMSEL00)|(0<<UMSEL01);


UCSR0C= 


(0<<UMSEL00)|(0<<UMSEL01)은 동작모드 설정 부분.




 (0<<UPM00)|(1<<UPM01)






이 부분은 패리트 비트를 설정하는 부분이다. 

위에서부터 차례대로 설명하면, 패리티 체크 기능 사용안함(0,0)

사용하지 않음.(0,1)

짝수 패리티 사용(1,0)

홀수 패리티 사용(1,1)

여기서는 짝수 패리티 사용.


(1<<UCSZ01)|(1<<UCSZ00);

이부분은 전송데이터 길이를  설정하는 부분이다. 8비트를 사용하기 위해서 

UCSZ01과 UCSZ00에 각각 1,1을 넣는다.



UCPOL0은 동기 모드에서만 유효하다.


UDRR레지스터는 보어레이트 속도에 관련된 레지스터. 8BIT를 전송하지만, 12비트가 붙어있는 형태

우리는 그냥 8을 보내기 위하여 (여기서 8은 오차가 가장적은 분주비8)

UBRR0H를 0으로 넣고 UBRR0L=8로 직접넣는다.


UBRR0H

 -

 -

 -

 -

 0

 0

 0

 0

 

UBRR0L

  

 0

 0

 0

 0

 1

 0

 0

 0

형태로 삽입된다.










인터럽트 발생시키는 함수. LED를 켜는데 1번자리에는 불이 다들어오고, 2번은 1번을 제외하고 들어오고, 8번은 8번을  제외하고 불이 꺼지는 형태로 동작시키는것이 목적이다.


따라서, LED가 역방향이므로 GND가 전원이라고 생각하고 1번자리에는 제일 오른쪽에 0을 넣는다.

1111 1110=0XFE;


2번 = 1111 1100=0XFC 이런식으로  PORTA에 대입한다. 





MAIN()함수에는 INIT함수만, 호출한뒤, SLEEP()함수를 호춣한다.

SLEEP()은 CPU가 수행하는 모든 것을 정지, 잠재우는 함수, 단, 인터럽트만 제외한다. 그래서 무한 반복상태이나,

전력을 아낄 수 있는 장점이다.





posted by 송시혁