I/O 포트의 특정 비트 입력값 조회
I/O 포트에 들어오는 입력값들 중
하나의 레지스터의 특정 비트만 입력값을 받아내고 싶다면
& 연산자를 이용하면 돼요.
PIND 레지스터에
0 0 1 0 1 1 0 0
이렇게 값이 들어와 있고 2번 비트만 검사하고 싶다면
int num = PIND & 0x04;
이러한 방법으로 받아올 수 있어요!
PIND(0 0 1 0 1 1 0 0)
0x04(0 0 0 0 0 1 0 0)
이 두개를 &연산으로 취하면 두 개의 비트 모두 1일 때에 결과 값이 1이 나오므로,
0x04라는 값이 num에게 저장됩니다.
만약 PIND의 2번 비트가 0이었다면, num에게는 0x00이라는 값이 저장되었겠죠.
if문을 활용한 예시
PINC의 4번 비트가 HIGH일 때, PORTC의 3번 비트를 LOW로 바꾸는 부분
if(PINC & 0x10){
PORTC |= 0x08;
}
-> 0x08은 0000 1000이고,
PORTC에는 PORTC | 0b00001000 이 들어가므로,
PORTC가 0x10이었다고 하면 0x18으로 바뀌게 돼요.
또는,
if(PINC.4 == 1){
PORTC.3 |= 0x08;
}
이렇게 해도 돼요!
스위치를 이용한 입력
스위치로부터 입력을 받을때는 단순히 HIGH와 LOW만 있는게 아니라,
스위치를 누르는 순간인 rising edge, 스위치를 떼는 순간인 falling edge도 있어요.
'하드웨어, 펌웨어 > AVR' 카테고리의 다른 글
[Atmega128] 외부 인터럽트 사용법 (0) | 2019.10.21 |
---|---|
[Atmega128] 외부 인터럽트 제어 레지스터 (0) | 2019.10.17 |
[Atmega128] 외부 인터럽트 (0) | 2019.10.16 |
[Atmega128] 비트 단위의 출력? (0) | 2019.10.14 |
[Atmega128] I/O 포트란 무엇일까? (0) | 2019.10.11 |