BASIC4MCU | 질문게시판 | UART 포트 1개로 3개의 디바이스 통신 질문
페이지 정보
작성자 master 작성일2019-12-25 20:57 조회2,783회 댓글0건본문
Q)
atmega128 하고 atmega128 두개를 연결해서 하나를 pc와 연결한다음
문자열을보내서 카운트를 한뒤 카운트 수를 pc측으로 보내야하는데요
장비 두개 연결시 서로 통신을하려면 어떤 소스를 써야하나요? 또 어떻게 연결해야하나요?
ㅠ_ ㅠ
또 atmega128 와 pc간에 터미널로 연결해서 테스트 해보려면 장비에 download할 소스도 있나요?
소스 내에서 포트를 여는 소르를 넣야하나요ㅠㅠ
질문이 복잡하긴하지만 ㅠㅠ 답변좀 부탁합니다 !
//
A)
![]()
RS-232는 1대1 통신용이지만
3대를 연결 하려면 위 처럼 사용 하면 될겁니다.
컴에서 우측128에 문자열을 보내면 우측128에서는 문자열을 세어서 좌측128로 보내고
좌측 128은 그 데이터를 그대로 컴에 전달만 해주면 됩니다.'
// 우측128 ///////////////
/*****************************************************
Chip type : ATmega128 : 16.000000 MHz
*****************************************************/
#include
#include
//int count=0, flag=0, cnt=0, str[100];
//
interrupt [USART1_RXC] void usart1_rx_isr(void){
char i;
i=UDR1;
if(i=='\n'){ count=cnt; flag=1; cnt=0; } //엔터키 카운터 값을 저장,플래그셋
else cnt++;
}
//
void TX1_CHAR(char Sdata){ while(!(UCSR1A&0x20)); UDR1=Sdata; } // txd ch//
void tx1_str(char *str){ while(*str)TX1_CHAR(*str++); } // txd str
//
void main(void){
DDRD=8; // TXD1 PORTD.3
UCSR1B=0x98; UCSR1C=6; UBRR1H=0; UBRR1L=103; // 9600
#asm("sei")
while(1){
if(flag){ flag=0;sprintf(str,"%d\n",count);
tx1_str(str);
}
}
}
// 우측128 끝//
// 좌측128 *******************************************
/*****************************************************
Chip type : ATmega128 : 16.000000 MHz
*****************************************************/
#include
#include
//int flag=0, cnt=0, rxbuf[100], str[100];
//
interrupt [USART1_RXC] void usart1_rx_isr(void){
char i, k;
i=UDR1;
if(i=='\n'){ //엔터키 카운터 값을 저장,플래그=1
rxbuf[cnt++]=i;
for(k=0;k=rxbuf[k]; // copy buf
str[k]=0; // null
flag=1; cnt=0;
}
else rxbuf[cnt++]=i;
}
//
void TX1_CHAR(char Sdata){ while(!(UCSR1A&0x20)); UDR1=Sdata; } // txd ch//
void tx1_str(char *str){ while(*str)TX1_CHAR(*str++); } // txd str
//
void main(void){
DDRD=8; // TXD1 PORTD.3
UCSR1B=0x98; UCSR1C=6; UBRR1H=0; UBRR1L=103; // 9600
#asm("sei")
while(1){
if(flag){ flag=0; tx1_str(str); }}
}
// 좌측128 끝//
댓글 0
조회수 2,783등록된 댓글이 없습니다.