串行连接ATMEGA328p

时间:2017-05-03 17:43:10

标签: c arduino avr uart atmega

我编写了一个通过UART连接并打印字符串以进行调试的函数。但是我的逻辑并没有以某种方式加起来......我看到了一行"随机数"在控制台中打印但速度极快......无论我为_delay_ms值添加什么,它都无法使用。我错过了什么吗?

为什么延迟功能对串行终端的输出没有任何影响?

void initUSART(void) {

    #define BAUDRATE ((F_CPU) / (BAUD * 8UL)-1) // Set Baud Rate Value for UBRR

    // Set register
    UBRR0H = (BAUDRATE >> 8);
    UBRR0L = BAUDRATE;
    UCSR0A |= (1 << U2X0);  
    // Enable USART transmitter and receiver
    UCSR0B = (1 << TXEN0) | (1 << RXEN0);
    // Set 8 data bits and 1 stop bit
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
}

void transmitByte(uint8_t data) {
    // Wait for empty transmit buffer
    loop_until_bit_is_set(UCSR0A, UDRE0);
    UDR0 = data;
}

void printString(const char myString[]) {
    uint8_t i = 0;
    while (myString[i]) {
        transmitByte(myString[i]);
        i++;
    }
}

int main(void)
{
    setup();    
    randomSeed(adcRead(0));

    while (1) 
    {   
        printString("Random Number:\n");
        _delay_ms(100000);
    }

    return (0);
}

当我在字符串的末尾使用\r\n时,输出变得非常奇怪:

enter image description here

当我尝试这个测试代码时,一切都按预期工作,LED每秒闪烁一次。我真的不知道差异在哪里,因为它是相同的功能。

                                                       /* Blinker Demo */

// ------- Preamble -------- //
#include <avr/io.h>                        /* Defines pins, ports, etc */
#include <util/delay.h>                     /* Functions to waste time */


int main(void) {

  // -------- Inits --------- //
  DDRB |= 0b00000001;            /* Data Direction Register B:
                                   writing a one to the bit
                                   enables output. */

  // ------ Event loop ------ //
  while (1) {

    PORTB = 0b00000001;          /* Turn on first LED bit/pin in PORTB */
    _delay_ms(1000);                                           /* wait */

    PORTB = 0b00000000;          /* Turn off all B pins, including LED */
    _delay_ms(1000);                                           /* wait */

  }                                                  /* End event loop */
  return 0;                            /* This line is never reached */
}

0 个答案:

没有答案