ATMAGE16L的串口通讯的奇怪问题。
我用信真器+开发板+串口调试助手调试ATMAGE16L的串口通讯功能:
#include <iom16v.h>
//#include<intrinsics.h>
#define UDRE 5
#define RXC 7
//BAUD=FOSC/(16(UBRR+1)) 异步模式 FOSC=7.3728M
/***************************************/
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x02;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0xFF;
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x02;
}
/**************************************/
void uart0_init(void)
{
UCSRB = 0x00; //清零RXEN、TXEN
UCSRA = 0x02; //倍速
UCSRC = 0x06; //8位、无校验
UBRRL = 0x5F; //
UBRRH = 0x00; //波特率9600
UCSRB = 0x18; //使能RXEN、TXEN
}
void init_devices(void)
{
// __disable_interrupt();
port_init();
uart0_init();
}
/********************************/
void uart0_send(unsigned char i)
{
while(!(UCSRA&(1<<UDRE)));
UDR=i;
}
//接收区************************************************/
unsigned char uart0_receive(void)
{
//unsigned char status;
//status=UCSRA;
while(!(UCSRA&(1<<RXC)))
return UDR;
//if(status&(1<<FE))
//return 9;
//if(status&(1<<DOR))
//return 8;
//if(status&(1<<PE))
//return 7;
}
/******************************************/
void main(void)
{
unsigned char temp,k;
init_devices();
while(1)
{
temp=uart0_receive(); //接收
//uart0_send(0X0A); //发送
k=temp;
if(k==0x03)
PORTA=0X00;
}
}
使用外部晶振7。3728,熔丝位设为外部晶振高频,COM口:8位,9600,无校验,1停止位
问题:1,单独调试发送功能时,很正常,串口调试助手能接收到所发送的字符;2,单独调试接收功能时,串口调试助手的接收区无任何反应,接收不到任何字符;3,单独调试接收功能时,仿真器监控k,temp的变量变化,发现一直为0X00,同时使用单步调试,时已确认进入 while(!(UCSRA&(1<<RXC))) return UDR;
请问:为什么会没有反应呢???