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

TODAY171 TOTAL2,227,501
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


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

페이지 정보

작성자 키트 작성일2017-08-29 10:08 조회2,322회 댓글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,322

등록된 댓글이 없습니다.

AVRHOME > AVR > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기