AVR > ADC 데이터 1채널 전송 포멧 - 수신 함수

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > AVR

ADC | ADC 데이터 1채널 전송 포멧 - 수신 함수

페이지 정보

작성자 키트 작성일17-08-29 10:08 조회2,386회 댓글0건

본문

#include <mega128.h>
#include 
<delay.h>
//
int adc_value=0;

//
interrupt [USART1_RXC] void usart1_rx_isr(void){

    char c;

    c=UDR1;

    if(c&0x80)adc_value=(adc_value&0x007F) | ((int)(c&7)<<7);

    else       adc_value=(adc_value&0x0380) | c;

}
//
void main(void){
    DDRA=0xFF// LED PORT
    UCSR1B=0x90; UBRR1H=0; UBRR1L=103;
    #asm("sei")
    while (1){}
}

//

adc_value에는 수신 받은 10비트 ADC 데이터가 들어갑니다.

LCD에 표시하든지 포트에 출력하면 되겠죠

//

설명을 조금 더 해드리죠 

□□□□▩▩▩  ▩▩▩▩▩▩▩

적색은 1이고 청색은 0입니다.

비트7을 체크해서 1이면 상위바이트이고 0이면 하위바이트입니다.
상위바이트에는 10비트 중 비트7~9가 들어 있습니다.

하위바이트에는 10비트 중 비트0~6이 들어 있습니다.

두개를 합해야겠죠

    if(c&0x80)adc_value=(adc_value&0x007F) | ((int)(c&7)<<7);

    else       adc_value=(adc_value&0x0380) | c;

이 문장을 분석해보죠

    if(c&0x80) <-- 상위바이트이면

    else       <-- 아니면 하위바이트

(adc_value&0x007F) 원래 들어있는 값에서 비트7~15를 크리어 시키고 ( 값을 넣기 전에 크리어 시키기 위함)

(c&7) 비트0~비트2를 남기고 크리어 시킨 후

((int)(c&7)<<7) 좌로 시프트7 시켜서 비트7~비트9가 되도록 만든 후

adc_value=(adc_value&0x007F) | ((int)(c&7)<<7);  OR(|) 시켜서 더해줍니다.

원래 데이터에서 상위 바이트로 전송된 비트로 교체하는 문장입니다.

 

    else       adc_value=(adc_value&0x0380) | c;

(adc_value&0x0380) 원래 값에서 비트0~비트6을 크리어시키고 ( 값을 넣기 전에 크리어 시키기 위함)

c(하위바이트)를 더해줍니다.

댓글 : 0

조회수 : 2,386

등록된 댓글이 없습니다.

게시물 검색

AVR 목록

게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전