STC12C5A60S2系列双串口单片机串口转发问题

两个串口设置同样的波特率,串口1收到数据后直接给串口2发送出去,中间不做任何处理。比如:中断里buf=SBUF后,程序里直接S2BUF=buf传出去。请问这样做会不会因为收到的数据比较密集,而出现拥堵问题呢?谢谢!

第1个回答  2013-06-25
不会
一般串口的工作速率和单片机的速率相差很远
再一个,按正常程序设计.必须等发送标志结束再送SBUF追问

我以前写串口发送程序都是:SBUF=buf;while(!TI);TI=0;看到那个while语句感觉时间挺长。还有按正常程序设计.必须等发送标志结束再送SBUF 这句话没看太懂

追答

不是这样的
当发送速率较高时,可以使用while(!TI);TI=0

但速度很低时.可采用内部空闲查询,或内部定时中断查询两种方法

在串行通讯中每隔一段时间 适当插入间隔时间 对接收端的同步有很好的效果

本回答被提问者采纳
第2个回答  2021-09-25
经过我测试, 发现会丢包.
即 串口2 收发短路, 然后串口1 接收中断里面, 把接收数据发送给串口2, 串口2接收中断里面,把接收的数据发送给串口1.
测试在串口1发送一串数据,检查接收, 发现丢包严重, 经过试验发送3个字符以内字符串, 就不会丢包.
所以, 建议采用 判断帧 结束, 然后 再发送给 串口2, 同样 串口2接收也做 帧结束判断, 在转发到串口1, 就可以避免 丢包问题.

51单片机程序问题 stc12c5a60s2 的a\/d转换问题..
1.转换的引脚由ADC_CONTG的低3位CHS2、CHS1和CHS0控制,三位二进制能表示0~7八个数,与P1口一一对应。ADC的结构决定了它一次只能转换一个口,但是STC的转换速度达到10万次\/秒,依次转换P1.0和P1.1与同时转换差别不大。设置P1.0时,ch=0x00.设置P1.1时,ch=0x01.2.是按照一个字节读的...

stc12c5a60s2 双串口传输漏字符
发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P3.0和P3.1端口,但是它是一个字节一个字节发送的,发送完一个字节会产生一个中断(也可以用判断TI的方式判断是否发送完),中断响应后再次启动发送SBUF=0Xxx,就会自动连续的发送,再加上判断就可以控制发送的字节数。串口初...

STC12C5A60S2单片机的串口中断问题求助
还是那个中断优先级寄存器没有设置好,至少要设置IP,IP2寄存器,将两个串口设置成高优先级,而将定时器0设置成低优先级。另外,STC12C5A60S2串口的波特率可以设置得很高的,尽量用高波特发送,可以减少发送时间,完全可以设置成38400的,甚至57600,都没有问题的。

stc12c5a60s2单片机第二串口通讯问题(可以发送不能接接收)?
如果确定硬件没有问题,先用查询方式测试接收是否正常(标志位是S2CON的最低位)。如果查询方式接收正常,再检查中断相关的设置(串口2中断允许IE2的最低位置位了没有,时钟源有没有在运行,波特率设置是否正确,中断入口函数是不是对应于矢量8)

stc12c5a60s2型号单片机串口通信和定时器中断问题
这个似乎不难吧,按照你的说法,串口1接第一次收到数据后启动定时器开始计时,并把每次接收的数据放在一个临时的缓存里,当定时器时间到的时候开始串口2的发送程序。个人感觉给串口1的数据里定义一个起始位和结束位更好,这样就不用定时器了

单片机stc12c5a60s2 想要用串口助手来控制led亮灭,其中led由P0口控制...
这里有一个关键问题,用串口助手发送数据时,是发送十六进制数(也是二进制数)?还是字符?看你的程序应该是发送十六进制数。还有,串口助手的波特率是否为9600?串口初始化程序要写一行,如下,原写法初始有误。还有,串口接收后,不要返回,删掉SBUF=0X00;这没有什么用,但串口还要发送,又没while语句...

stc12c5a60s2串口发送
看STC-ISP软件中的串口助手接收的字符,可以看出STC12C5A60S2单片机的串口的发送是正常的。而且重复不断发送一个字符串。但不知道,你想问什么问题?而且单片机还与ESP8266进行串口通信。

STC12C5A60S2使用双串口进行通信时,两个串口在发送数据时都没有问题...
这是可能的,如果接收速度慢了的话,发送方速度较快,两个数据发送间隔较小,那么可能丢失数据

求一个使用STC12C5A60S2单片机的串口1向STC-ISP串口助手发送abcd字符串...
9600波特率)void Usar_sent(unsigned char dat); \/\/ 串口发送数据 \/\/unsigned char Usar_read(); \/\/ 串口接受数据void Usart_Init(){ SCON=0X50; PCON=0X80;\/\/波特率翻倍 \/* EA=1; ES=1; PS=1;*\/ \/\/串口中断相关设置 AUXR=AUXR|BRTR; TMOD=0X20; TH1=0xfa;...

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

相似回答