Первый МК отправляет:
Код
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>
void USART_Init( unsigned int baudrate );
unsigned char USART_Receive( void );
void USART_Transmit( unsigned char data );
int main( void ) //Главная функция
{
const unsigned int BAUDRATE = 9600;
const unsigned int BAUDDIVIDER = F_CPU/(16*BAUDRATE)-1;
USART_Init(BAUDDIVIDER);// Скорость соединения 9600 бит/с
_delay_ms(1000);
while(1){
USART_Transmit(0x68); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x65); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x6C); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x6C); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x6F); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x78); //Команда очистки
_delay_ms(1000);
}
}
void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{
UBRRH = (unsigned char) (baudrate>>8);
UBRRL = (unsigned char) baudrate;
UCSRA = (1<<U2X); //Удвоение скорости
UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
UCSRC = (1<<USBS) | (3<<UCSZ0);
}
unsigned char USART_Receive( void ) //Функция приема данных
{
while ( !(UCSRA & (1<<RXC)) ); //Ожидание приема символа
return UDR; //Возврат символа
}
void USART_Transmit( unsigned char data ) //Функция отправки данных
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>
void USART_Init( unsigned int baudrate );
unsigned char USART_Receive( void );
void USART_Transmit( unsigned char data );
int main( void ) //Главная функция
{
const unsigned int BAUDRATE = 9600;
const unsigned int BAUDDIVIDER = F_CPU/(16*BAUDRATE)-1;
USART_Init(BAUDDIVIDER);// Скорость соединения 9600 бит/с
_delay_ms(1000);
while(1){
USART_Transmit(0x68); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x65); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x6C); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x6C); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x6F); //Отправка символа
_delay_ms(1000);
USART_Transmit(0x78); //Команда очистки
_delay_ms(1000);
}
}
void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{
UBRRH = (unsigned char) (baudrate>>8);
UBRRL = (unsigned char) baudrate;
UCSRA = (1<<U2X); //Удвоение скорости
UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
UCSRC = (1<<USBS) | (3<<UCSZ0);
}
unsigned char USART_Receive( void ) //Функция приема данных
{
while ( !(UCSRA & (1<<RXC)) ); //Ожидание приема символа
return UDR; //Возврат символа
}
void USART_Transmit( unsigned char data ) //Функция отправки данных
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}
Второй МК принимает и выводит на экран:
Код
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd_lib.h" // библиотека для работы с LCD HD44780
void USART_Init( unsigned int baudrate );
unsigned char USART_Receive( void );
void USART_Transmit( unsigned char data );
int main( void ) //Главная функция
{
lcd_init();// инициализация LCD
_delay_ms(10);
lcd_clr();// очистить LCD
lcd_gotoxy(0, 0); // Переходим к 0 ячейки
const unsigned int BAUDRATE = 9600;
const unsigned int BAUDDIVIDER = F_CPU/(16*BAUDRATE)-1;
USART_Init(BAUDDIVIDER);// Скорость соединения 9600 бит/с
unsigned char symbol;
while(1) {
symbol = USART_Receive();
// Если пришел символ 0x00, то очищаем
if (symbol == 0x78) {
lcd_clr();
lcd_gotoxy(0, 0);
}
else {
lcd_dat(symbol); // Показываем полученный символ на LCD
}
}
}
void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{
UBRRH = (unsigned char) (baudrate>>8);
UBRRL = (unsigned char) baudrate;
UCSRA = (1<<U2X); //Удвоение скорости
UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
UCSRC = (1<<USBS) | (3<<UCSZ0);
}
unsigned char USART_Receive( void ) //Функция приема данных
{
while ( !(UCSRA & (1<<RXC)) ); //Ожидание приема символа
return UDR; //Возврат символа
}
void USART_Transmit( unsigned char data ) //Функция отправки данных
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd_lib.h" // библиотека для работы с LCD HD44780
void USART_Init( unsigned int baudrate );
unsigned char USART_Receive( void );
void USART_Transmit( unsigned char data );
int main( void ) //Главная функция
{
lcd_init();// инициализация LCD
_delay_ms(10);
lcd_clr();// очистить LCD
lcd_gotoxy(0, 0); // Переходим к 0 ячейки
const unsigned int BAUDRATE = 9600;
const unsigned int BAUDDIVIDER = F_CPU/(16*BAUDRATE)-1;
USART_Init(BAUDDIVIDER);// Скорость соединения 9600 бит/с
unsigned char symbol;
while(1) {
symbol = USART_Receive();
// Если пришел символ 0x00, то очищаем
if (symbol == 0x78) {
lcd_clr();
lcd_gotoxy(0, 0);
}
else {
lcd_dat(symbol); // Показываем полученный символ на LCD
}
}
}
void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{
UBRRH = (unsigned char) (baudrate>>8);
UBRRL = (unsigned char) baudrate;
UCSRA = (1<<U2X); //Удвоение скорости
UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
UCSRC = (1<<USBS) | (3<<UCSZ0);
}
unsigned char USART_Receive( void ) //Функция приема данных
{
while ( !(UCSRA & (1<<RXC)) ); //Ожидание приема символа
return UDR; //Возврат символа
}
void USART_Transmit( unsigned char data ) //Функция отправки данных
{
while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
UDR = data; //Начало передачи данных
}
Теперь я решил по UART подключиться компом к этим МК, на макетке собрал переходник RS232-->UART из MAX232 и 4 кондеров, подключаюсь и вижу в minicom, что символы приходят каждую секунду, но это не те символы что отправляет МК:

Скорость везде выставил 9600, да и по minicom видно что символы приходят каждую секунду, но не те, в чем может быть проблема?