关于stc15系列单片机的串口通信问题。
时间:10-02
整理:3721RD
点击:
可以直接在串口中断函数里将接收到的数据存进16位数组里吗?请大侠指导一下,不知道下面的代码可不可以实现功能?
void UART1_Rountine(void) interrupt 4
{
uint16 i ;
if(RI == 0)
{
RI = 0;
i = SBUF;
i = i<<8;
while(i == 0)
{
i |= SBUF;
RecBuf[j] = i; /* 串口接收数组 */
}
j++;
}
else
{
TI = 0;
}
}
void UART1_Rountine(void) interrupt 4
{
uint16 i ;
if(RI == 0)
{
RI = 0;
i = SBUF;
i = i<<8;
while(i == 0)
{
i |= SBUF;
RecBuf[j] = i; /* 串口接收数组 */
}
j++;
}
else
{
TI = 0;
}
}
你还需要再看一看C语言,你把一碗水倒在锅里,肯定是可以称下的,你只是把它放在unsigned int 里,没有什么意义
程序应该可以实现,但是一般人不会这样接收数据。
能解释一下为什么吗 不太明白
每一次接收的数据我把它存进接收数组里了啊,i只是个中间转换的变量而已
那一般你们是怎么处理的呢
一般串口中断里面只是接受数据并保存到缓冲区中,处理是在主程序中做。
如果像这样等待接收到的数据的到来,CPU就不能做其他事情了,只能一直在这里干等着
可以在中断里面做个标志位,接收到想要的数据之后置位。然后在主程序里检测标志位再处理可以吗?
但是我想要把串口接收的前后两个单字节存进一个16位数组里面啊,这种要怎么实现
这个我也清楚,那么我只能把串口接收到的数据存进数组,然后写一个转换程序(8位转16位)在主程序里调用?
通过指针来做。
这个程序不能实现,因为uint16 i是形参,至少你要把它定义成全局变量或者添加一个static关键字。
stc15可以在线仿真了吗?小编?
I<<8 之后肯定为0,代码很多冗余。
j 没有定义,随时可能让数值越界。
小编的C语言基础很差,需要多努力。
i<<8是为了将先传送过来的1字节存进高8位,再接收下一个字节的时候存进低8位组成双字节数据、
这样,我试一下
不错,过来看看,学习学习。
小编,你的whlie语句的判断条件我看不懂,为什么这样写呢?还有j的定义也不明确
不过我感觉你的程序是可以实现这个功能的~只不过会让单片机在一段时间内一直处于接收状态,挺好的