本帖最后由 麻辣鸭脖子 于 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
请指点,多谢 |