模块自动连续发送以下格式(ASCII):x.xx nn.n ppp.pp<CR><LF>,x.xx,nn.n,ppp.pp分别代表三个数据,波特率115200,数据位8,停止位1,无校验。STC12C5A32S2单片机接收这三个数据,请帮忙写出接收代码。或者查看以下代码接收不到数据的错误在哪里
void main(void)
{
int_UART();
jpn = 0;
buffer[0] = 0;
buffer[1] = 0 ;
buffer[2] = 0;
display();
while(1)
{
if(sendtime >= 40) //每2s开串口中断并计算
{
sendtime = 0;
ES = 1;
comput(showflag);//采集到的数据进行计算并显示
}
void int_UART(void) //115200bps@11.0592MHz
{
PCON |= 0x80; //0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xFA; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
RI = 0; //清收发标志
TI = 0;
}
void interrupt_UART(void)interrupt 4 //using 0
{
if(RI)
{
if(SBUF == recstart ) //接收开始
{
recbuf[0] = SBUF;
}
if(recbuf[0]== recstart ) //接收开始
{
recbuf[recPosi] = SBUF;
recPosi++;
}
RI=0;
if(recbuf[2]==0x2e )
{
grealC = (recbuf[1]-48) + (recbuf[3]-48)*0.1+(recbuf[4]-48)*0.01;
if(recbuf[6] == 0x2e)
{
grealT = (recbuf[5]-48)*10+(recbuf[7]-48);
}
else if(recbuf[7] == 0x2e)
{
grealT = (recbuf[5]-48)*100+(recbuf[6]-48)*10+(recbuf[8]-48);
}
}
else if(recbuf[3]==0x2e)
{
grealC = (recbuf[1]-48)*10 +(recbuf[2]-48) + (recbuf[4]-48)*0.1;
// grealT = (recbuf[6]-48)*100+(recbuf[7]-48)*10+(recbuf[8]-48);
if(recbuf[6] == 0x2e)
{
grealT = (recbuf[5]-48)*10+(recbuf[7]-48);
}
else if(recbuf[7] == 0x2e)
{
grealT = (recbuf[5]-48)*10+(recbuf[6]-48)+(recbuf[8]-48)*0.1;
}
}
}
if(TI)
{
TI=0;
}
}
串口调试助手采集到的模块发送数据
还是接收不到数据呀?
if(SBUF == 0x0A ) //接收开始
{
recbuf[0] = SBUF;
}
if(recbuf[0]== 0x0A ) //接收开
{
recbuf[recPosi] = SBUF;
recPosi++;
}
这样写接收开始对吗?
还有,不一定是20个字节,最后的p会在会在997.00~1003.00之间变化
STC15W408AS的485串口实现自发自收
8. UART1中断函数和定时器中断函数的实现 9. 数据接收的逻辑处理 10. ADC电压读取函数 通过上述程序,实现了一个能够实现485串口自发自收的实例。程序已通过测试,确保数据传输的准确性。值得注意的是,在初次接收数据时可能出现小概率的乱码问题,但其余数据传输都是正确的。
求助stc 单片机串口发送接收多个数据的程序
收\/发一个数据会了,那收\/多个的方法也相同。接收最好用中断方式,不影响其它程序执行。发送时,采用查询方式比较方便好写。发送多个,可用for循环控制,循环体内就是发送一个数据的程序,只是循环发送了。在循环发送前,把串口中断关了,ES=0;发送结束再打开中断,ES=1;...
串口屏与stc单片机怎么接线
1、首先,打开STCISP软件。2、其次,选择要烧录的单片机型号。3、最后,选择单片机与电脑连接的串口号。
STC单片机串口接收程序
根据字节数,设定一个数组。收到一个,存放一个。收到 20 个后,判断:if (recbuf[16] == 'm' && recbuf[17] == 'b' && recbuf[18] == 'a' && recbuf[19] == 'r')满足条件,就把其前面的,变换成数:\/\/recbuf[1] = '.';x = (recbuf[0] - 48) + (recbuf[2] - ...
stc单片机串口调试的小程序,但是在串口调试助手里,显示接收不到数据...
你先看看串口线有没问题:将串口的2、3脚两根针短接,用键盘在串口调试输入字符,如果串口调试接收区能够显示输入的字符,说明串口工作正常 等我再看看程序 我觉得这儿有问题 JBC TI,SEND JBC在T1为0的时候,会顺序执行,然后就end了 ,这里我觉得应该改为等待发送结束的指令 JNB T1,...
求助,STC12系列单片机与上位机的串口通信程序
T1, 1T Mode InitUART();} void UARTInterrupt(void) interrupt 4 { if(RI){ RI = 0;\/\/add your code here!} else TI = 0;} 其他部分你自己会善的啦。推荐个软件:单片机小精灵 v1.3 破解版,在新浪共享有得下载。里面就有这些计算的。直接生成 可用。希望我的回答对你有所帮助 ...
stcisp怎么读取单片机程序
1、stcisp读取单片机程序需要在计算机上安装并打开stcisp软件,选择正确的单片机型号和串口号。2、在stcisp软件中,找到读出按钮并点击它,即可从stcisp中读取程序。
STC 52 单片机 从串口接收字符串
假设收到的数据存在单片机temp里面。char temp[4] ={'5','1','6','8'};a = (temp[0] - '0') * 10 + (temp[1] - '0');b = (temp[2] - '0') * 10 + (temp[3] - '0');这样就可以了。
STC单片机串口接收发送函数,我想让单片机把程序中的字符串只发送一次...
1.你用uchar * 来指向uchar code* 这个可能有问题 2.设ES = 1; 会在TI被置1时CPU控制权会跳到串口向量,但你未定义串口中断函数 3.程序就算能发送,也只在单片机开机那一小会,你看不到很正常,应当改成由开关按据触发,按一次,发一回,这样,你就可以有时间来监测有没有发生串口信号了...
请大神帮忙编写一个单片机C语言程序,串行通信的。
这是基于STC12C5A60S2 单片机编写的程序,应该也兼容51单片机。这里只是串口的收发,和数码管显示,由于我的数码可能和你的不一样所以需要更改。include<stc.h> define uchar unsigned char define uint unsigned int \/\/unsigned char code dofly[16]={0,0x3f,0x79,0x5e,0x07,0x7f,0x6f,0x39,...