STC12C5A单片机串口1接收数据给数组后,由串2发送,反之也可以,求大神帮忙看看程序为啥不行? 求一个用STC12C5A60S2 单片机串口1接收11个字节...

作者&投稿:长沙露 (若有异议请与网页底部的电邮联系)
#include "include.h"
uchar databuff[20];
uint pin,pout;
/*
串口1用于发送系统采集到的数据
串口2用于GPS信号收集,
*/
//串口1用于将系统采集到的信息发送给PC或路由
void uart1_init()
{
SCON=0X50;//串口方式1,允许接收
TMOD=0X21;//定时器1的方式2,定时器0的方式1
TH1=0Xfd;//GPS接受信号波特率4800 //9600
TL1=0Xfd;//
PCON|=0X00;
TR1=1;//启动定时器1
REN=1; // 允许接收
ES=1; //允许串口中断
EA=1; // 开总中断
}
void uart1_sendbyte(uchar i)
{
ES=0;//发送数据时关中断
TI=0;
SBUF=i;
while(TI==0);
TI=0;
ES=1;
}
void uart1_receive(void) interrupt 4
{
uchar uc;
if(RI)
{
RI=0;
ES=0;//接收数据时关闭串口中断
uc=SBUF;
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&=0XEF;//S2_P4=0 将uart2切换到p1口
IE2|=0X01;// 允许串口2中断
}
void uart2_sendbyte(uchar i)
{
ES=0;
S2BUF=i;// uart2发送数据
while((S2CON&0X02)!=0X02); //
S2CON&=~0X02; //
ES=1;
}
void uart2_receive(void) interrupt 8
{
uchar a;
uint k=0;
a=S2CON&0X01;
if(a==1)
{
k=S2BUF;
S2CON&=0xfe;
uart1_sendbyte(k);
// GPS(k);//将串口接收到的信息交给GPS处理程序
S2CON&=0xfd;
}
// else
// S2CON&=0xfd; // 清0 S2RI
}
void uart_printf(char a,uchar *p)
{
if(a==1)
{
while(*p!='\0') uart1_sendbyte(*p++);
}
if(a==2)
{
while(*p!='\0') uart2_sendbyte(*p++);
}
}
你好,你看一下这一个,我改的,正在用。。。希望对你有帮助

你串口2没设波特率 啊,这怎么接

STC12C5A单片机串口2接收数据给数组后,由串口1发送,反之也可以,求大神帮忙看看程序为啥不行?~

先确定2个串口独立发送都能接到数据
然后在其中一个串口接到数据的时候 在接收中断里开启另外一个串口的发送
这样是最直接的转发模式

如果先接收一个字符串 再启用发送 有可能会造成冲突的情况

如果有显示设备的话
可以写一个检测程序 显示单片机的运行状况

参看STC12C5A60S2 数据手册有例程

STC12C5A单片机串口1接收数据给数组后,由串2发送,反之也可以,求大神...
答:void uart1_init(){ SCON=0X50;//串口方式1,允许接收 TMOD=0X21;//定时器1的方式2,定时器0的方式1 TH1=0Xfd;//GPS接受信号波特率4800 //9600 TL1=0Xfd;// PCON|=0X00;TR1=1;//启动定时器1 REN=1; // 允许接收 ES=1; //允许串口中断 EA=1; // 开总中断 } void uart1_s...

STC12C5A60S2串口1接收问题,问一下程序高手,为什么在1200波特率下这个串 ...
答:是接收端的问题,发送得太快的话有的调试助手会把数据积压一段时间然后才能显示出来,有的调试助手不会这样

请问下面关于STC12C5A60S2单片机串口问题,在调试时发出和接收不同,请...
答:serinit();while(1){ if(flag==1) // 判断是否完成接收 { flag=0;ES=0; // 串口中断关闭 SBUF=temp; // 将原先发送的值给缓存器(接发都是同一个,但意义不一样)while(!TI); //判断是否发送完成 TI=0; // 是则硬件清0 ES=1; // 再次打开串口中断 } } } ...

stc12c5a60s2单片机,如何将串口接收的数据写入扩展flash
答:STC单片机的假EEPROM可以用,但不好玩,以下是将从串口接收到的一个字节数据写入Flash 0单元的应用实例,供参考。最好在内存中开辟一段缓存,将从串口接收到的数据先置于缓存,之后一并写入Flash。IAP_CONTR = 0x83; //设置操作等待时间 IAP_CMD = 0x03; //扇区擦除命令 IAP_ADDRH = 0;...

STC12C5A单片机范例程序中的串口1程序无法运行,烧写后在串口助手上看...
答:有一个关键的,是选内部晶振了还选外部晶振了,看不到啊。你的程序,定义的串口的波特是多少,串口助手的波特率是否一致,要求两者一致才能收到。还有,单片机串口发送的是十六进制数还是ASCII码,要求串口助手也要一致才能看到。所以,这些问题你都搞清楚了吗?你这么问,谁也知道问题出在哪里。

谁能帮我总结下stc12c5a60s2的优点
答:回答:增强型8051CPU,1T(1024G),单时钟/机器周期 2、工作电压 5.5-3.5V 3、1280字节RAM  4、通用I/O口,复位后为:准双向口/弱上拉  可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏  每个I/O口驱动能力均可达到20mA,但整个芯片最...

STC12C5A60S2,串口1可以发字符串了,串口2不知道怎么回事只能发一个字符...
答:ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P3.0和P3.1端口,但是它是一个字节一个字节发送的,...

STC 12C5204AD 数据采集,串口发送;接受数据,显示至屏幕上
答:// 本程序演示 STC12C5AxxAD 系列 MCU 的 A/D 转换功能。时钟 18.432MHz // 转换结果以 16 进制形式输出到串行口,可以用串行口调试程序观察输出结果。//--- //#include <REG52.H> include <intrins.H> include "NEW_8051.H"//--- typedef unsigned char uchar;typedef un...

如何解释STC12C5A60S2单片机串口1通讯中,只有在下载后程序才能执行有效...
答:看看是不是复位的问题,或者是因为电源不稳定,下载的时候有外电进来稳定了电源才启动的,还有就是你的开关,在开机的时候振荡不够,引到晶振那里,导致晶振不起振

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