AVRマイコン UART動作異常
AVRマイコンのATmega168にてPCとRS-232Cにてシリアル通信(UART)を行うと最初のスタートビット'L'が正常に出ず、スタートビット'L'の後すぐに'H'に戻ってその後データビットを送っています。2回目以降のスタートビットは正常に'L'が指定したボーレートの時間幅で出ており、問題はありません。最初のスタートビットが正常に出ない原因がわかりませんので教えてください。
システムクロック:1MHz(内部発振器のみ)
ボーレート:4800bps
データビット数:8bit
ストップビット数:1bit
パリティビット数:なし
--------------------------------------------
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#define sbi(addr,bit) addr |= (1<<bit)
#define cbi(addr,bit) addr &= ~(1<<bit)
void port_init(void){
PORTB = 0xFE;
DDRB = 0xFF;
asm("NOP");
}
void uart_init(void){
sbi(DDRD,1);
cbi(DDRD,0);
asm("NOP");
}
void uart_putchar(unsigned char c){
loop_until_bit_is_set(UCSR0A,UDRE0);
// asm("NOP");
UDR0 = c;
}
void _delay_1s(void){
int i;
for(i=0;i<100;i++){
_delay_ms(10);
}
}
int main(void)
{
port_init();
uart_init();
UCSR0B = _BV(TXEN0);
UCSR0C = 0b00000110;
UBRR0H = (uint8_t)0;
UBRR0L = (uint8_t)12;
while(1)
{
uart_putchar(0b01011010);
_delay_1s();
}
return 0;
}
-----------------------------------------------
お礼
回答、ありがとうございます。 なるほど、大方はシリアル―パラレル変換が主な機能のようですね。 しかし、UARTというのはシリアル―パラレル変換機能を有するものを総称しているだけなんでしょうか。 うーむ...