통신 > 1대2 통신 - 1문자 전송

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

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


BASIC4MCU | 통신 | 485통신 | 1대2 통신 - 1문자 전송

페이지 정보

작성자 키트 작성일2017-08-31 17:50 조회1,736회 댓글0건

본문

간단한 1대2 통신 예제를 만들어봤습니다. 

 


 
//-------------------------------------------------------------------
// 마스터 128
// 슬레이브의 스위치를 읽어서 PORT B에 연결된 LED를 점등
// PB0,PB1 - 슬레이브1 응답
// PB2,PB3 - 슬레이브2 응답
//-------------------------------------------------------------------
#include <mega128.h>
#include <delay.h>
//
#define Byte unsigned char 
#define TX_EN  PORTE.  
//
Byte a;
//
void putch_USART1(char data){ TX_EN=1; UDR1=data; while(!(UCSR1A&0x40)); UCSR1A|=0x40; TX_EN=0; }
void putch_USART0(char data){ while(!(UCSR0A&(1<<UDRE0))); UDR0=data; }
void puts_USART0(char *str){ while(*str)putch_USART0(*str++); } 
//
interrupt [USART1_RXC] void usart1_rx_isr(void){
    a=UDR1;
    if     ((a&0xF0)==0x10){ PORTB=(PORTB&0xFC)|(a&3);      }// PB0,PB1 - 슬레이브1 응답
    else if((a&0xF0)==0x20){ PORTB=(PORTB&0xF3)|((a&3)<<2); }// PB2,PB3 - 슬레이브2 응답
}
//
void main(void){   
    DDRB=0xff; PORTB=0xff// 슬레이브 응답 확인용 LED 포트
    DDRE.2=1;  // TX_EN  
    //
    UCSR0B=0x08; UBRR0L=103;
    UCSR1B=0x98; UBRR1L=103;
    SREG=0x80;
    while(1){   
        putch_USART1(0x10); delay_ms(2); // 슬레이브 1 호출
        putch_USART1(0x20); delay_ms(2); // 슬레이브 2 호출
    }
}
//
 
//-------------------------------------------------------------------
//슬레이브1
//-------------------------------------------------------------------
// 0x10 컴맨드면 스위치 값을 마스터로 전송함
#include <mega8.h>
#include <delay.h>
//
#define Byte  unsigned char
#define TX_EN PORTC.0
//
Byte a; 
//
void putch_USART(char i){ TX_EN=1; UDR=i; while(!(UCSRA&0x40)); UCSRA|=0x40; TX_EN=0; }                
//
interrupt [USART_RXC] void usart_rx_isr(void){
    a=UDR;
    if(a==0x10){ putch_USART( 0x10+(PINA&3) ); } // 0x10 슬레이브 1 호출
}
//
void main(){   
    DDRC.0=1// TX_EN
    PORTA=3;  // SW input 내부 풀업저항
    UCSRB=0x98; UBRRL=103
    SREG=0x80;
    while(1){}  
}
//
//-------------------------------------------------------------------
//슬레이브2
// 0x10 컴맨드면 스위치 값을 마스터로 전송함
//-------------------------------------------------------------------
#include <mega8.h>
#include <delay.h>
//
#define Byte  unsigned char
#define TX_EN PORTC.0
//
Byte a; 
//
void putch_USART(char i){ TX_EN=1; UDR=i; while(!(UCSRA&0x40)); UCSRA|=0x40; TX_EN=0; }                
//
interrupt [USART_RXC] void usart_rx_isr(void){
    a=UDR;
    if(a==0x20){ putch_USART( 0x20+(PINA&3) ); }
}
//
void main(){   
    DDRC.0=1// TX_EN
    PORTA=3;  // SW input 내부 풀업저항
    UCSRB=0x98; UBRRL=103
    SREG=0x80;
    while(1){}  
}

 

댓글 0

조회수 1,736

등록된 댓글이 없습니다.

통신HOME > 통신 > 전체 목록

게시물 검색

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
모바일버전으로보기