RXCIE0(接收结束中断使能)使能状态下会出现,PC发数据,单片机发送while()函数前发送的字符串,始终进不去串口中断—还在研究中,没整明白
还在进行中
先不用中断凑合着先用
下一步识别字符串
将RXCIE0(接收结束中断使能)使能关闭;
单纯使用RXEN0使能 接收数据;
读取到单一字符识别并反馈字符串表明通讯成功
#include <asf.h>
/***********************************宏定义**********************************/
#define fosc 8000000 //晶振8MHZ
#define baud 9600 //波特率
/****************************************************************************
函数功能:uart0初始化程序
入口参数:
出口参数:
****************************************************************************/
void uart0_init(void) //初始化COM0
{
UCSR0B = 0x00;
UCSR0A = 0x00;
UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
UBRR0L=(fosc/16/(baud+1))%256;
UBRR0H=(fosc/16/(baud+1))/256;
UCSR0B =(1<<RXEN0)|(1<<TXEN0);//|(1<<RXCIE0);
}
/****************************************************************************
函数功能:uart0发送单字节数据
入口参数:c
出口参数:
****************************************************************************/
void putchar(unsigned char c)
{
/* 等待发送缓冲器为空 */
while ( !( UCSR0A & (1<<UDRE0)) );
/* 将数据放入缓冲器,发送数据 */
UDR0 = c;
}
unsigned char getchar0(void)
{
while(!(UCSR0A& (1<<RXC0)));
return UDR0;
}
/****************************************************************************
函数功能:uart0发送字符串数据
入口参数:*s
出口参数:
****************************************************************************/
void puts(char *s) //发送字符串函数
{
while (*s)
{
putchar(*s);
s++;
}
putchar(0x0a); //发送结束字符
putchar(0x0d); //发送结束字符
}
/****************************************************************************
函数功能:初始化单片机
入口参数:
出口参数:
****************************************************************************/
void init_devices(void)
{
cli(); //关闭所有中断
XDIV = 0x00;
XMCRA = 0x00;
MCUCR = 0x00;
EICRA = 0x00;
EICRB = 0x00;
EIMSK = 0x00;
TIMSK = 0x00;
ETIMSK = 0x00;
}
void delay_us(unsigned int microsecond)
{
do
{
microsecond--;
}
while (microsecond>1);
}
void delay_ms(unsigned int millisecond)
{
while (millisecond--)
{
delay_us(999);
}
}
int main (void)
{
unsigned int i;
init_devices();
uart0_init();
puts("pc");
while(1)
{
if (getchar0()=='t')//按键盘t键开始测试
{
puts("getchar0");
for (i=0;i<10;i++)
{
putchar(0x30+i);
}
putchar(0x0a);
putchar(0x0d);
}
}
}
版权声明:本文为mjc1321原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。