打印
[AVR单片机]

Atmega128串口查询收发问题,求助!

[复制链接]
1533|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蔚飞|  楼主 | 2013-12-5 15:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是ICCAVR的编译器,型号为Atmega128A,熔丝位没有选M103,编译器单片机选ATmega128,下面的程序如果单独发送数据是没有什么大问题,但是加上了查询接收函数,发送就错误了,求解!
程序如下:
#include<iom128v.h>
#include<macros.h>

#define u8  unsigned char
#define u16 unsigned int
#define fosc 11059200

const table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 receive=0;
u8 flag=0;

void delay_ms(u16 n);//11059200
void USART_Init(u16 baud);
void USART_SendData(u8 dat);
u8   USART_GetData(void);
void USART_SendChar(char *s);
void delay_ms(u16 n)
{
        u16 i,j;
        for(i=1579;i>0;i--)//8-->1142;1.8432-->264
        {
            for(j=n;j>0;j--);
        }
}

void USART_Init(u16 baud)
{
   UCSR0B=0x00;//控制状态寄存器B各个标志位清零
   UCSR0A=0x00;//控制状态寄存器A各个标志位清零
   UCSR0C=0x06;//选择UCSRC,异步模式,禁止校验,1位停止位,8位数据位
   //波特率最小为11059200/256/16=2700;最大为345600
   UBRR0L=((fosc/16/baud)-1)%256;//设置波特率寄存器低8位                                                        
   UBRR0H=((fosc/16/baud)-1)/256;//设置波特率寄存器高8位
   UCSR0B=(1<<TXEN0)|(1<<RXEN0);//|(1<<RXCIE0);==0x18--->1:接收使能;8:发送使能
   //接收、发送使能,接收中断使能
   SREG|=BIT(7);//全局中断开放
   PORTE = 0xFF;   //设置RXD0和TXD0
   DDRE|=0X02;//配置TX为输出(很重要)TXD0=PE1
}

void USART_SendData(u8 dat)
{
   while(!(UCSR0A&(1<<UDRE0)));//UDREn为1 说明缓冲器为空
   UDR0=dat;  
//   while(!(UCSR0A&BIT(TXC0)));//发送缓冲为空时,该位为1,写1清零
}

u8 USART_GetData(void)
{
//   UCSR0B=0x10;//发送失能///////////////////////////////
   while(!(UCSR0A&(1<<RXC0)));////Bit 7 –RXCn:USART有数据要接收-->接收缓冲器中有未读出的数据时RXCn 置位,否则清零。
   receive=UDR0;
//   UCSR0B=0x18;//发送失能//////////////////////////////
   return receive;
}

void USART_SendChar(char *s)
{
   while(*s)
   {
      USART_SendData(*s);
          s++;
   }
   USART_SendData(0x0a);//回车
   USART_SendData(0x0d);//换行
}

void main(void)
{
   u8 count;
   USART_Init(9600);
   DDRC=0xff;
   PORTC=0xff;
   USART_SendChar("HELLO !");
   while(1)
   {
          USART_GetData();
          PORTC=~table[receive];
//          USART_SendChar("收到数据:");  
          USART_SendData(receive);
//          USART_SendChar(" ");
//          USART_SendChar("Test Send OK !");
   }
}

相关帖子

沙发
qin552011373| | 2013-12-6 08:53 | 只看该作者
什么错误?

使用特权

评论回复
板凳
蔚飞|  楼主 | 2013-12-8 21:29 | 只看该作者
qin552011373 发表于 2013-12-6 08:53
什么错误?

问题解决了,是我电脑串口坏了。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

1

粉丝