BASIC4MCU | 질문게시판 | 답변 : 아트메가와 아두이노 통신 하는방법!
페이지 정보
작성자 master 작성일2020-06-01 08:57 조회7,615회 댓글3건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=12543
본문
////아트메가 코드//#include <avr/io.h>#include <avr/interrupt.h>#include <stdio.h>#define F_CPU 16000000L#include <util/delay.h>////char RX0_char(void){ while(!(UCSR0A&0x80)); return UDR0; }//char RX1_char(void){ while(!(UCSR1A&0x80)); return UDR1; }void TX0_char(char c){ while(!(UCSR0A&0x20)); UDR0=c; }void TX1_char(char c){ while(!(UCSR1A&0x20)); UDR1=c; }void TX0_STR(char *s){ while(*s)TX0_char(*s++); }void TX1_STR(char *s){ while(*s)TX1_char(*s++); }//ISR(USART0_RX_vect){char r0;r0=UDR0;if(r0=='1'){PORTA^=1; // PA0 토글}}//ISR(USART1_RX_vect){char r1;r1=UDR1;if(r1=='1'){PORTA^=2; // PA1 토글}}//int main(void){DDRA=0xFF; DDRB=0xFF; DDRC=0xFF;UCSR0B=0x98; UBRR0L=103; // 9600UCSR1B=0x98; UBRR1L=103; // 9600SREG=0x80;while(1){}}////아두이노 코드//#include <SoftwareSerial.h>SoftwareSerial atmega(0,1);//void setup(){Serial.begin(9600);atmega.begin(9600);}//void loop(){atmega.write('1');Serial.write('1');delay(1000);}
초음파센서 코드는 제거했습니다.
원하는대로 잘 동작하는지 확인 한 후에 초음파 코드를 추가하세요
댓글 3
조회수 7,615jiseok님의 댓글
jiseok 작성일
void TX0_char(char c){ while(!(UCSR0A&0x20)); UDR0=c; }
void TX1_char(char c){ while(!(UCSR1A&0x20)); UDR1=c; }
void TX0_STR(char *s){ while(*s)TX0_char(*s++); }
void TX1_STR(char *s){ while(*s)TX1_char(*s++); }
//
ISR(USART0_RX_vect){
char r0;
r0=UDR0;
if(r0=='1'){
PORTA^=1; // PA0 토글
}
}
//
ISR(USART1_RX_vect){
char r1;
r1=UDR1;
if(r1=='1'){
PORTA^=2; // PA1 토글
}
혹시 이부분에서 if(r0=='1'){
PORTA^=1; // PA0 토글
이부분에 대해 설명을 들을 수있을까요?
master님의 댓글
master 작성일
PORTA^=1; // PA0 토글
XOR 연산자를 공부하셔야 하고요
1과 XOR 연산하면 논리가 반전됩니다.
master님의 댓글
master 작성일
PORTA^=2; // PA1 토글
이 연산결과는 비트1 위치만 반전됩니다.