본문 바로가기

하드웨어, 펌웨어/AVR

[Atmega128] I/O포트의 입력?

 

 

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도 있어요.