2013-02-22 2 views
0

Я хочу отправить некоторую строку на ПК через последовательную шину. В симпатичном 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; 
} 
+0

АРН микроконтроллеры использует две частоты гетеродинов для запуска. По умолчанию контроллер использует встроенный генератор с частотой 1 МГц. И в программе F_CPU составляет 16 МГц, что приводит к появлению данных как нежелательных. Для выбора внешнего осциллятора установите бит Fuse контроллера. Контроллер выбирает внешний генератор для работы. – Sanjeev

ответ

0

Во-первых, этот вопрос принадлежит http://electronics.stackexchange.com

Чтобы ответить на ваш вопрос, функции strcpy() и strlen() ожидают со char * и не unsigned char * Регулярно проверяйте here

Смежные вопросы