BASIC4MCU | AVR | 포트 | AVR 포트 입출력 설정 및 사용 방법
페이지 정보
작성자 키트 작성일2017-08-25 17:11 조회3,137회 댓글0건본문
간단한 내용이지만 한번 더 적어봅니다.
AVR 포트의 레지스터
입력 레지스터 PINx
출력 레지스터 PORTx
방향설정 레지스터 DDRx
입력
char a;
a=PINx;
출력
char a;
PORTx=a;
입력으로 설정 후 출력?
DDRx을 0으로 해서 입력으로 설정 한 후에
PORTx=1을 출력하면 내부 풀업저항(30~50K)이 연결 됩니다.
출력으로 설정 후 입력?
DDRx을 1로 해서 출력으로 설정 한 후에
PORTx를 입력하면 이 전에 출력한 출력 레지스터 내용이 읽혀집니다.
리셋 후 초기조건
DDRx=0 입력
PORTx=0 풀업저항 사용 안함
128 경우 포트A~E까지는 비트 조작이 가능 합니다.
포트F는 입력은 되고 출력은 안됩니다.
포트G는 입출력 모두 안됩니다.
2560에서는 포트G까지 모두 지원 되고
포트 H, I등 몇개의 포트가 추가로 비트조작이 지원됩니다만
뒤쪽 몇개의 포트는 비트조작이 지원되지 않습니다.
이런 식으로 MCU가 새로운 버전이 나올 때마다 되고 안되는 것들이 섞여 있습니다.
타이머1과 타이머3이 16비트 레지스터로 읽고 쓰기가 지원 되기도 하고 안되기도 하는 것입니다.
128 경우는 타이머1은 16비트 읽고 쓰기가 지원 되고, 타이머3은 안됩니다,
타이머3은 8비트로 나눠서 처리 해줘야 합니다.
OCR3AH=0; OCR3AL=0x10;
OCR3BH=0; OCR3BL=0x0A;8비트로 나누어서 쓰기를 할 때에는
상위바이트 부터 쓰고 하위 바이트를 나중에 씁니다.
16비트 레지스터를 8비트로 나누어서 읽을 때에는 그 반대입니다.
하위바이트를 읽고나서 상위바이트를 읽습니다. ( ADC 예제에서 많이 봤을 겁니다. )
128애서 ADC를 16비트로 한번에 읽을 수도 있습니다.
int adc_result;
adc_result=ADCW;
ADCW 는 ADCH와 ADCL이 합쳐진 16비트 레지스터입니다.
이것 또한 mcu에 따라서 될 수도 있고 에러가 날 수도 있습니다.
AVRStudio와 코드비젼은 ADCW지만 일부 컴파일러는 ADC로 표기 합니다.
댓글 0
조회수 3,137등록된 댓글이 없습니다.