首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助] sci发数据,pc收不到

[求助] sci发数据,pc收不到

调试时TDRE = 1,这个不怎么变化,

这个标志TC = 1,这个有时候变化。

但是SCI0DRL中一直没有我要发送的数据。

接受的时候可以收到数据。

硬件连接开始直接用串口线,后来用得USB转串口。

调试软件是串口调试助手V2.2

请问给位大侠给我指点一下。可能是什么问题。

程序如下:

/*---------延迟程序----------------------*/
void Delay(void)
{
unsigned char i,j;
for(i=0;i<200;i++)
{
for(j=0;j<100;j++)
asm nop;
}
}

/*--------闪烁程序-----------------------*/
void light(void)
{
unsigned char i;
for(i=0;i<10;i++)
{
PORTB=0;
Delay();
PORTB=0XFF;
Delay();
}
}

/*-------串口初始化----------------------*/
void SciInit(){
SCI0BDL = (unsigned char)((16000000UL /* OSC freq */ / 2) / 9600 /* baud rate */ / 16 /*factor*/);
SCI0CR1=0; /*normal,no parity*/
SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1*/
}

/*-------发射端程序----------------------*/
void SciTx(unsigned char text){
unsigned char temp;
temp=SCI0SR1; /*clear flag*/
while (!(SCI0SR1&0x80)); /* wait for output buffer empty */
SCI0DRH=0;
SCI0DRL=text;
}

/*-------接受端程序----------------------*/
char SciRx(void){
char result,temp;
temp=SCI0SR1; /*clear flag*/
while(!(SCI0SR1&0x20));
result=SCI0DRL;
return result;
}


/*--------中断程序-----------------------*/
interrupt void Serv_int(void)
{unsigned char data;
DisableInterrupts;
data=SciRx();
light();
SciTx(data);
EnableInterrupts;
}


/*-------主函数--------------------------*/
void main(void) {
EnableInterrupts;
DDRB=0XFF;
SciInit();
for(;;) {


}
}

[此贴子已经被作者于2009-3-8 16:50:31编辑过]

[讨论]

谢谢楼上的朋友。我试了也不行,还是一样能收到电脑发的数据,电脑不能收到单片机发的数据。

我昨天试了一下,两个单片机能够发送和接收。单片机发送,用dspase可以收到单片机发的数据。

我在想问题不应该出现在单片机的程序上,可能是电脑那边有问题。

希望大家多给意见,谢谢

谢谢给位大侠的指点,我找到问题了。是我的串口接口两头都是公的,导致了TXD和RXD翻转,现在将其再一次翻转就可以用了。谢谢大家的指点。

返回列表