标题:
单片机串口数据接收程序问题
[打印本页]
作者:
YXLlll
时间:
2023-1-20 17:51
标题:
单片机串口数据接收程序问题
想要实现串口从上位机接收到的数据一个一个存入数组中,
但是经过测试,数据只能存到数组的第一位中,而且RI=0所在位置不同,存入内容长短不同
void UART1_Isr() interrupt 4
{
if(RI==1)
{
Data=SBUF;
if(Data!='\0')
{Sbuf[i++]=Data;}
uart_send(Sbuf[0]);
uart_string(Sbuf);RI=0;
作者:
chenbingjy
时间:
2023-1-21 20:11
你的程序不完整。而且发送的程序不要在中,有可能造成数据没发送完又收到新的数据,会丢数据。
中断只负责把数据送人缓冲区,其他处理在主函数。
作者:
Hephaestus
时间:
2023-1-23 11:18
代码不全无法分析,i怎么定义的,代码后面如何处理i的?
作者:
名字不是重点
时间:
2023-1-26 18:01
Sbuf[i++],,这个i是全局变量,该不会是被其它函数修改了吧?
全局变量最好能起个有意义的、个性的名字,不然有可能会被误操作,我看用rxd_count就不错
接收数据的数组Sbuf,尽量不要用系统关键字SBUF,虽然KEIL大小写不一样,你无法保证会不会被误操作,你看rxd_arr[]如何?
起名字是个学问~~好听、好拼写、还要有意义,英文简写或汉语拼音都可以啊。不用这么懒吧?
作者:
Y_G_G
时间:
2023-2-9 23:58
当初学ModBus的时候写的,代码不怎么好,但也算是正确,你参考一下
void Uart1_Isr() interrupt 4 //串口1中断函数
{
static unsigned RX_Count=0; //接收到的字节数
if(TI) //发送中断
{
TI=0;
busy=0;
}
//────────────────────────────────────────────────────
if(RI) //接收中断
{
RI=0;
if((New_Cmd)) //新命令
{
New_Cmd=0; //新命令标志位清除
TR0 = 1; //接收到串口信号后,定时器0开始计时
RX_Count=0; //重新指定指针位置
Buffer0.cnt_Byte=0; //接收字节数清除
}
Buffer0.buf_uart[RX_Count]=SBUF; //把接收到的数据保存
RX_Count++; //数组指针加1
Buffer0.cnt_Byte++; //接收字节数+1
T0_1ms_uart=0; //接收完一个字节数据,重新计时
}
//───────────────────────────────────────────────────────────
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1