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가 수행하는 모든 것을 정지, 잠재우는 함수, 단, 인터럽트만 제외한다. 그래서 무한 반복상태이나,
전력을 아낄 수 있는 장점이다.
'임베디드 > Atmega' 카테고리의 다른 글
7월 24일 오실로스코프를 이용한 시간 지연. (0) | 2013.07.24 |
---|---|
atmega adc컨버젼 (0) | 2013.06.12 |
5월 30일 lcd에 숫자를 출력하는 함수. (0) | 2013.06.10 |
5월 31일 atmega timer (0) | 2013.06.03 |
5월 30일 atmega 문자출력 (0) | 2013.05.31 |