BASIC4MCU | 질문게시판 | 답변 : ATmega128 2개로 hc-05,hc-06블루트수 통신
페이지 정보
작성자 master 작성일2024-12-04 19:46 조회1,062회 댓글4건본문
//---------------송신측:
#include <mega128.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x15 ; PORTC
#endasm
//
void uart_send(char d){ while(!(UCSR0A&0x20)); UDR0=d; }
//
void main(){
PORTD=1; // 풀업 저항 활성화
UCSR0B=0x10; UBRR0L=103; // 16MHz 9600bps
lcd_init(16); lcd_clear(); lcd_putsf("Controller Ready");
while(1){
if(!(PIND&1)){
uart_send('A');
lcd_clear(); lcd_putsf("Sent:A ");
delay_ms(500);
lcd_clear(); lcd_putsf("Controller Ready");
}
}
}
//---------------수신측
#include <mega128.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x15 ; PORTC
#endasm
//
char uart_receive(){ while(!(UCSR0A&0x80)); return UDR0; }
//
void main(){
char received;
DDRA=1;
UCSR0B=0x80; UBRR0L=103; // 16MHz 9600bps
lcd_init(16); lcd_clear(); lcd_putsf("Waiting...");
while(1){
received=uart_receive();
if(received=='A'){ // 수신된 데이터가 'A'면 PORTA LOW
PORTA=0;
lcd_clear(); lcd_putsf("PORTA set LOW");
delay_ms(500);
lcd_clear(); lcd_putsf("Waiting...");
}
else PORTA=1;
}
}
이상한 문자가 뜬다는 것이 어떤 문자가 뜬다는 것이죠?
댓글 4
조회수 1,062동콩이님의 댓글
동콩이 작성일
죄송합니다 제가 수신측 코드를 잘못 올렸습니다 수신측 코드는 밑에 와 같고 CLCD에는 Received: x 이렇게 나오고 리셋을 송신측에서 누르면 ㅣㅣㅣ 이렇게 출력이됩니다!
#include <mega128.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x15 ; PORTC
#endasm
// UART 데이터 수신 함수
char uart_receive(void) {
while (!(UCSR0A & (1 << RXC0))); // 데이터 수신 대기
return UDR0; // 수신된 데이터 반환
}
void main(void) {
char received; // 수신 데이터 저장
// CLCD 초기화
lcd_init();
// UART 초기화 (38400bps)
UCSR0B = (1 << RXEN0); // 수신 활성화
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8비트 데이터
UBRR0L = 51; // 16MHz에서 38400bps 설정
// CLCD 초기 메시지
lcd_clear();
lcd_putsf("Waiting...");
// 데이터 수신 대기 루프
while (1) {
// 데이터 수신
received = uart_receive();
// CLCD에 데이터 출력
lcd_clear();
lcd_gotoxy(0, 0);
lcd_putsf("Received:");
lcd_gotoxy(10, 0);
lcd_putchar(received);
delay_ms(500); // 출력 유지
}
}
master님의 댓글
master 작성일
UCSR0B=0x80; UBRR0L=51; // 16MHz 38400bps
보내는 곳에서 9600bps로 전송하고
38400bps로 수신하면 데이터가 깨지는 것은 당연합니다.
동콩이님의 댓글
동콩이 작성일수신하는곳에도 보우 레이트를 9600수신을 해도 데이터가 깨집니다...
master님의 댓글
master 작성일퓨즈비트 클럭 설정 제대로 하지 못하면 보레이트가 맞지 않을 수 있습니다.