程序很短,调试了很久,没有解决,去拿示波器抓了一下波形,帧格式是7位或者6位数据位,因为停止位的高电平和数据位的第七位(bit6)分不清,而且UCSRC 无法设定,即DEBUG的时候,执行了如下MAIN的第一条指令后,IO VIEW窗口的UCSRC仍然全0,不知道是什么原因造成,且RXD,TXD通过1K上拉到VDD5V,这两口没有接其他器件。
#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 1000000 //CPU 时钟为1MHz
#define BAND 9600 //设置波特率为9600
int main(void)
{
UCSRC |=(1<<URSEL)|(3<<UCSZ0); //八位数据长度,一位停止位,无校验位;
UBRRH = (F_CPU/BAND/16 -1)/256;
UBRRL = (F_CPU/BAND/16 -1)%256;
UCSRB |= (1<<RXEN)|(1<<TXEN);
// sei();
while(1)
{
while(!(UCSRA & (1<<UDRE)));
UDR = 0x55;
}
F5之后,串口助手的数据重复:A5...B5....没有什么规律,高手指点下
} |