问题描述:本人新手第一次使用ATMEAGA64单片机,使用的ICC7和AVRSTUDIO4,编写代码如下,功能很简单,上位机发送个字符单片机收到后就返回给上位机,主函数中调用了一个外部函数USART();可是在硬件仿真下就卡在这个函数里面的最后一句代码下执行不下去,如果在软仿真的条件下就可以通过,不会卡在里面,一切正常。
在主程序中,直接对寄存器进行配置,不调用外部函数,也一切正常,硬仿真和上位机通信都可以实现。
刚开始程序一切都是正常的,后来自己添加代码后不知道误改了什么,就变成现在的样子了。是不是在AVRSTUDIO或者ICC中的设置问题。
请问是什么原因,如有描述不清的地方,请留言。
#include <iom64v.h>
#include <macros.h>
#include <stdio.h>
#include <usart0.h>
unsigned char USART_recieve(void)
{
while(!(UCSR0A&(1<<RXC1)));
return UDR0;
}
void main()
{
unsigned char c;
DDRA=0xff;
PORTA=0x00;
USART();//卡在这里
while(1)
{
while(!(UCSR0A&(1<<RXC1)));//因为同上的问题就没有调用外部函数
c=UDR0;
while(!(UCSR0A&(1<<UDRE0)));
UDR0=c;
}
}
USART0.C 的代码如下:
#include <iom64v.h>
#include <macros.h>
#include <stdio.h>
void USART(void)
{
UBRR0L = 0x2F;
UBRR0H = 0x00;
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
UCSR0B&=~(1<<UCSZ02);
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
}
void USART_TXD(unsigned char data)
{
while(!(UCSR0A&(1<<UDRE0)));
UDR0=data;
}
unsigned char USART_RXD(void)
{
while(!(UCSR0A&(1<<RXC1)));
return UDR0;
}
USART0.H代码如下
void USART(void);
void USART_TXD(unsigned char data);
unsigned char USART_RXD(void); |