0
下面是一個代碼運行在一個ATMEGA328P。它應該每秒發送一次「abcdef」到我的電腦。但是,它每秒只給我發「ab」。這裏有什麼問題?AVR USART僅發送2字符
#include <avr/io.h>
#include <util/delay.h>
void USART_transmit(unsigned char data);
void print(const unsigned char *buffer, size_t n);
void print(const char* str);
int main(void) {
// Serial.begin(115200)
UCSR0B |= (1<<TXEN0);
UBRR0L = 8;
while(1){
// Serial.write(i)
print("abcdef");
_delay_ms(1000);
}
}
void USART_transmit(const uint8_t data) {
/* wait for empty transmit buffer */
while (!UCSR0A & (1<<UDRE0));
UDR0 = data;
}
void print(const uint8_t *buffer, size_t n) {
while(n--){
USART_transmit(*buffer++); //**
}
}
void print(const char *str) {
if(strlen(str) != 0) print((const uint8_t *) str, strlen(str));
}
的代碼導致:
ababababababababababab ...
從USART_transmit(*buffer++);
到USART_transmit(n + 48);
更改(+48轉換爲字符)導致:
5454545454545454545454545454 ...
所以我猜這個循環不應該被阻止?