BASIC4MCU | 질문게시판 | atmega-2560-pc 데이터주고받기
페이지 정보
작성자 베이식포유 작성일2020-08-28 14:38 조회13,328회 댓글2건본문
atmega128에 들어있는 아스키코드값을 2560보드의 uart1으로 데이터를 보내고 uart3으로 pc와 연결하여 통신하려 합니다.
stcom 하이퍼터미널로 통신을 하고있는데 128에 들어있는 아스키코드값이 안나오네요.
소스코드에 문제가 있는지 확인부탁드립니다. 선배님들
#include <avr/io.h>
#include <avr/iom2560.h> // muc 선정
#include <stdio.h> // standard IO 사용,UART에 사용가능한 기본 입출력함수를 사용.
#include <stdlib.h> // standard library 사용 기본 라이브러리 함수 사용
#include <stdint.h>
#include <math.h>
#define F_CPU 16000000UL // 크리스탈 속도 정의
#include <util/delay.h> // delay의 기능을 사용하겠다.
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include "hw_config.h"
#include "config.h"
void putch(char data) //PC로 송신부분
{
while((UCSR1A & 0x20) == 0 );
UDR1 = data;
UCSR1A |= 0x20;
}
void tx3Char(char message)
{ while (((UCSR1A >> UDRE1) & 0x01) == 0);
UDR1 = message;
}
static int Putchar3(char c, FILE *stream)
{
tx3Char(c);
return 0;
}
int main(void)
{
_delay_ms(1000);
MCU_Init();
_delay_ms(100);
fdevopen(Putchar3,0);
num_buf[0] = eeprom_read_byte((uint8_t*)0x0110);
num_buf[1] = eeprom_read_byte((uint8_t*)0x0112);
num_buf[2] = eeprom_read_byte((uint8_t*)0x0114);
printf("%c%c%c%\n", num_buf[0],num_buf[1],num_buf[2]);
_delay_ms(40);
PORTD = 0xE7; // 128 -> 2560
rx1_data = UDR1;
// clk TX RX
PORTJ = 0xFB; // device - > AVR 1111 1 1 1 0
//PORTJ = 0xFD; // AVR -> device 1111 1 0 1 0
_delay_ms(10);
PORTJ = 0xFD;
_delay_ms(10);
while(1)
{
UDR3 = rx1_data;
while((UCSR3A & 0x80) == 0);
rx3_data = UDR3;
}
}
ISR(USART1_RX_vect)
{
int p;
while((UCSR1A & 0x80) == 0);
rx1_data = UDR1;
UCSR1A |= 0x80; // UCSR1A 8번째 비트 1 , UCSR1A와 UCSR1A AND 0x80 합이 등가
if(rx1_data == 0x04)
{
rx1_count =0;
flag1 =1;
}
// 시작
else if (rx1_data == 0x05)
{
// clk TX RX
//PORTD = 0xD7; // 2560 - > 128 1 1 0 1 0 1 1 1
PORTD = 0xF7; // 128 -> 2560 1 1 1 1 0 1 1 1
_delay_ms(10);
if((num_buf[0] == rx1_buf[0]) && (num_buf[1] == rx1_buf[1]) && (num_buf[2] == rx1_buf[2])) // buf 012 confirm
{
if (rx1_buf[3]== 0x3A) // Read
{
if(rx1_buf[4] == 0x31) // module -> (ID, mode )
{
if(rx1_buf[5] == 0x31) // ID
{
num_buf[0] = eeprom_read_byte((uint8_t*)0x0110);
num_buf[1] = eeprom_read_byte((uint8_t*)0x0112);
num_buf[2] = eeprom_read_byte((uint8_t*)0x0114);
printf("%c%c%c%c%c%c%c%c\n", 0x02,0x49,0x44,0x3A,num_buf[0],num_buf[1],num_buf[2],0x03); // ID:000
_delay_ms(20);
}
if((rx1_buf[0] == 0x52) && (rx1_buf[1] == 0x44)) // ID Set
{
_delay_ms(20);
printf("%c%c%c%c%c\n",0x02,num_buf[0],num_buf[1],num_buf[2],0x03);
_delay_ms(20);
}
for (p=0;p<7;p++)
{
rx1_buf[p]=0;
}
rx1_count = 0;
flag1 = 0 ;
} // case0x05
else
{
if( flag1 == 1 )
{
rx1_buf[rx1_count++] = rx1_data;
}
}
// clk TX RX
PORTD = 0xE7; // 2560 - > 128 1 1 0 1 0 1 1 1
//PORTD = 0xF7; // 128 -> 2560 1 1 1 1 0 1 1 1
_delay_ms(10);
}
댓글 2
조회수 13,328master님의 댓글
master 작성일128 코드는 어디에 있나요?
베이식포유님의 댓글
베이식포유
128은 프로토콜만 가지고있어요 아스키코드만요