STC单片机把串口接收的数据再发出去

void Uart() interrupt 4 using 1
{

unsigned char i;
unsigned char ii;
if (RI)
{
RI = 0; //清除RI位

RI=0;
receive[i++]=SBUF; //P0显示串口数据
ii=i++;
P22 = RB8; //P2.2显示校验位
while (1) {
SBUF=receive[i++];
}

}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
} }
好像有错误,不能吧输入的一个一个发出去!
帮我修改下
void Uart() interrupt 4 using 1

{
static uchar i= 0;
static uchar ii= 0;
static uchar iii= 0;
static uchar w[16];
if (RI)
{
RI = 0;
w[i++]=SBUF;
P22 = RB8;

SBUF=w[i++];
while(TI==0);
TI=0;
}
if (TI)
{
TI = 0;
busy = 0;

}
}
没有效果,hex输出00

这样做会丢失数据的。并且你将一个死循环放到中断里面也有很大问题。
void Uart() interrupt 4 using 1
{

statick unsigned char i;
if (RI)
{
RI = 0; //清除RI位
receive[i++]=SBUF; //P0显示串口数据
P22 = RB8; //P2.2显示校验位
SBUF=receive[i++];
while(TI==0);
TI=0;
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
} }追问

没有效果,我补充问题了,你再帮我看下哪了错了,输出00

追答

void Uart() interrupt 4 using 1

{
static uchar i= 0;
static uchar ii= 0;
static uchar iii= 0;
static uchar w[16];
if (RI)
{
RI = 0;
w[i]=SBUF;
P22 = RB8;

SBUF=w[i];
while(TI==0);
TI=0;
i++;
}
if (TI)
{
TI = 0;
busy = 0;

}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-27
可以写
定做的追问

免费就要,没有就没有必要回了!

追答

好的

STC单片机把串口接收的数据再发出去
这样做会丢失数据的。并且你将一个死循环放到中断里面也有很大问题。void Uart() interrupt 4 using 1 { statick unsigned char i;if (RI){ RI = 0; \/\/清除RI位 receive[i++]=SBUF; \/\/P0显示串口数据 P22 = RB8; \/\/P2.2显示校验位 SBUF=receive[i++];while(TI==0);TI=...

stc单片机串口测试程序,串口接收再发送问题
……你自己把逻辑锁死了。收到一回4字节序列后,flag1置位,之后发送数据。可是在发送数据的时候又会进入中断的,由于接收缓冲区中还是那4字节的序列,于是flag1再次被置位……于是乎进入永不停歇的死循环。你的串口中断应当判断一下是发送还是接收……

STC单片机串口通信问题!
reg51.h里面是标准51的寄存器,是只有1个串口的,建议你去stc的官网把stc12系列的头文件下载下来进行包含,如果你的程序没错的话,应该就可以用了 欢迎追问

STC12C5A单片机串口1接收数据给数组后,由串2发送,反之也可以,求大神...
uart1_sendbyte(uc);\/\/串口1将数据发给串口2 databuff[pin]=uc;pin++;if(pin>20)pin=0;} \/\/ RI=1;\/\/ ES=1; \/\/开串口中断 } \/\/串口2用于接收GPS信号 void uart2_init(){ S2CON=0X50;\/\/方式2 允许接受 BRT=0XFD;\/\/ 设置波特率9600 AUXR|=0X10;\/\/允许波特率发生器运行 AUXR1&...

STC 串口复用
串口UART就是全双工的,是可以同时收发的。就一组引脚,也完全可以接收完立即发送。如果想在接收之前发送都可以。STC单片机串口还是一个,只是两组引脚,用法也还是按一个串口的方法。如果按两组引脚使用,也是分时来用,不可能同时发,或同时收啊。但可以一组收完,立即切换到另一组发送,其实,也可以...

单片机采集捕捉脉冲并上传串口
二、由于要不断采集,并且发送,如果合并8位作一个字符发送,以51单片机串口模式1发送,则至少要在0.02ms*8=0.16ms内发送一个字符,中间还要有计算开销等,所以串口波特率建议为标准115200。但是由于有特殊间隔字符标志,除非这个间隔前后的数据位为8的整数倍,否则,只能一个数据位一个数据位传输(...

怎么编程用stc单片机串口1接收数据通过串口2送出
让串口1响应中断 将串口1接收寄存器中的数据放到内存中 退出串口1中断 将内存中的数据通过串口2发送寄存器发出去

求助stc 单片机串口发送接收多个数据的程序
收\/发一个数据会了,那收\/多个的方法也相同。接收最好用中断方式,不影响其它程序执行。发送时,采用查询方式比较方便好写。发送多个,可用for循环控制,循环体内就是发送一个数据的程序,只是循环发送了。在循环发送前,把串口中断关了,ES=0;发送结束再打开中断,ES=1;...

大神帮忙修改下用STC12C5A60S2 单片机串口1接收11个字节的数据然后将这...
串口1单独使用时,可以用独立波特率发生器也可使用定时器做波特率发生器,在串口1和串口2同时使用时,串口1就只能使用定时器做波特率发生器。 参看例程初始化两个串口

STC单片机串口通信为什么上电后会多发出一串字节,后面的数据就一切正...
STC单片机串口通信上电后会多发出一串字节,后面的数据就一切正常了。出现这种情况估计是你的单片机直接连到写入器上了,由编程器直接供电,而单片机程序启动阶段没有加延时。写入器连接到USB口会有一个初始化过程,串口有数据输出,被单片机误接收了。解决方法:1、单片机程序启动阶段加1到2秒延时,躲过...

相似回答