[AVR单片机] mega 128的双串口问题

[复制链接]
3557|5
 楼主| 麻辣鸭脖子 发表于 2010-7-8 21:30 | 显示全部楼层 |阅读模式
本帖最后由 麻辣鸭脖子 于 2010-7-10 16:29 编辑

程序如下:
#include <iom128v.h>
#include <macros.h>
#include <avr/io.h>

#define uchar unsigned char
#define uint unsigned int

uchar str[16];
unsigned int indexx;
//URAT的0口
void uart0_init(void)
{
UCSR0B = 0x00; //设置波特率时关闭发送和接收
UCSR0A = 0x00;
UCSR0C = 0x06;//8位数据+1位STOP位
UBRR0L = 0x33;
UBRR0H = 0x00;//设置波特率
UCSR0B = 0xD8;//允许发送和接收
}
//URAT的1口
void uart1_init(void)
{
UCSR1B = 0x00; //设置波特率时关闭发送和接收
UCSR1A = 0x00;
UCSR1C = 0x06;//8位数据+1位STOP位
UBRR1L = 0x33;
UBRR1H = 0x00;//设置波特率
UCSR1B = 0xD8;//允许发送和接收
}

//URAT的0口输出
void putchar0(unsigned char c)
  {   
  while (!(UCSR0A&(1<<UDRE0)));//判断上次发送是否完成
  UDR0=c;               //发送数据   
  }   
//URAT的1口输出
void putchar1(unsigned char c)
  {   
  while (!(UCSR1A&(1<<UDRE1)));//判断上次发送是否完成
  UDR1=c;               //发送数据   
  }   
//URAT的0口输入
unsigned char getchar0(void)
    {
          uchar c;
  while(!(UCSR0A& (1<<RXC0)));//判断是否接收到数据
        c=UDR0;
  return c;           //接收数据
  }
//URAT的1口输入
unsigned char getchar1(void)
    {
  uchar c;
  while(!(UCSR1A& (1<<RXC1)));//判断是否接收到数据
  return UDR1;           //接收数据
  return c;
  }

int main(void)
{
  int i;
  uchar c;
  indexx=0;
          uart0_init();
          uart1_init();

  while(1)
  {   
    if(UCSR0A&(1<<RXC0))//
    {
        c=UDR0;
        str[indexx]=c;
        indexx++;
    }
    if(indexx==15)//每次输入15个字符
    {
        for(i=0;i<15;i++)
        {
            putchar0(str);
          putchar1(str);
        }     
        indexx=0;
    }
  }
}
出现的问题是,串口0接收到的数据通过串口0(putchar0)返回时是正确的结果,由串口1(putchar1)的结果却不对.
设置断点调试时,str数组只能接受到前三个和最后一个字符,和前面一个兄弟的问题一样,始终突破不了4个.
不用断点直接运行时,str中的结果却是对的
ps:给串口0发送的数据 大概是 81 01 06 03 10 10 00 00 00 00 00 00 00 00 ff
请指点,多谢
 楼主| 麻辣鸭脖子 发表于 2010-7-10 16:29 | 显示全部楼层
怎么没人回答呢?
ljhtj 发表于 2010-7-10 16:39 | 显示全部楼层
//URAT的1口输入
unsigned char getchar1(void)
    {
  uchar c;
  while(!(UCSR1A& (1<<RXC1)));//判断是否接收到数据
  return UDR1;           //接收数据
  return c;
  }

返回 UDR1行吗?c?
ljhtj 发表于 2010-7-10 16:46 | 显示全部楼层
把uart0屏蔽如果uart0正常在中间加延时
婕迷云潇潇 发表于 2010-7-11 08:16 | 显示全部楼层
这个版本未真正激活,是使用测试版的文件**的,不能用。真正可用的,是大师版里那个:
wangwo 发表于 2010-7-11 14:33 | 显示全部楼层
设置断点调试时,str数组只能接受到前三个和最后一个字符,和前面一个兄弟的问题一样,始终突破不了4个.
这句话没理解了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

454

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部