Я хочу отправить некоторую строку на ПК через последовательную шину. В симпатичном com его отображение строки вместе с некоторыми символами отсутствует, а в начале и конце строки добавляется несколько шестнадцатеричных чисел. Почему эта проблема возникает, я не знаю, пожалуйста, помогите в этом вопросе. Мой код здесь.Последовательная связь в Atmega128
#include <avr/io.h>
#include <string.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#define USART_BAUDRATE 9600 // Baud Rate value
#define BAUD_PRESCALE (((F_CPU/(USART_BAUDRATE * 16UL))) - 1)
void usart_init() {
//Enable communication in duplex mode
UCSR1A = (1 << U2X1);
UCSR1B |= (1 << RXEN1) | (1 << TXEN1); // Turn on the transmission and reception circuitry
UCSR1C &= ~(1 << UMSEL1);
UCSR1C |= (1<<USBS1) | (1 << UCSZ10) | (1 << UCSZ11);
UBRR1L = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
UBRR1H = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value..
}
void serial_write(unsigned char data) {
while(!(UCSR1A & (1<<UDRE1)))
;
UDR1 = data;
_delay_ms(10);
}
void transmitString(unsigned char *str) {
int i;
for(i=0;i<strlen(str);i++) {
serial_write(str[i]);
_delay_ms(1);
}
}
int main() {
cli();
usart_init();
unsigned char buffer[20];
strcpy(buffer, "Walk Alone");
while(1) {
transmitString(buffer);
//_delay_ms(250);
}
return 0;
}
АРН микроконтроллеры использует две частоты гетеродинов для запуска. По умолчанию контроллер использует встроенный генератор с частотой 1 МГц. И в программе F_CPU составляет 16 МГц, что приводит к появлению данных как нежелательных. Для выбора внешнего осциллятора установите бит Fuse контроллера. Контроллер выбирает внешний генератор для работы. – Sanjeev