PIC 电脑上位机向PIC发送串口数据
电脑上位机向PIC单片机发送串口数据,一次发大量数据,如100个字节,下位机PIC16F1936怎么处理这100个字节,我用串口接收中断一次只能收一次,放到main里查询接收,一直等待,太耗 cpu,大家有好的方法吗?讲的是RX一次接收大量数据 串口中断一次只能收一个字节的数据,我要一次收100个字节数据,怎么处理,讲一下思路 中断接收就是一个个地接收,中断了100次,不就接收完了吗?只有你有100个字节的缓存,就肯定可以的。 通讯速率多少?1200的话就主循环查询,但是主循环必须保证时间,不能有死循环等待。 开辟100字节的缓存空间,用来专门保存数据,接收够100个了,关闭接收,再去处理,处理完成再继续接收或者开辟2个100字节的缓存空间,第一个接收满了,处理第一个,同时把处理期间接收的数据放入第二个缓存,
两个缓存交替使用接收或者处理数据 本帖最后由 wxhdmf 于 2013-6-8 13:14 编辑
mon51 发表于 2013-6-8 07:55 static/image/common/back.gif
中断接收就是一个个地接收,中断了100次,不就接收完了吗?只有你有100个字节的缓存,就肯定可以的。 ...
PC 上位机 一次发100个数据BYTE, 波特率9600 下位机中断100次? 但我发现一次发100个BYTE, 单片机就中断1次 附上串口工具
GIEPEIE RCIE 没被关掉吧?
应该可以产生100次中断的。
PC是一次发100个数据的, 单片机RX中断就一次,怎么搞?
void interrupt ISR(void)
{
//--------------------------------串口接收-----------------------
if((RCIE) && (RCIF)) //仅可以处理一个字符
{
static volatile unsigned char i=0;
RxData=RCREG;
if(i>100)
i=0;
}
}
当然前提是接收中断函数中读了RCREG寄存器。 tongdayusu 发表于 2013-6-8 13:19 static/image/common/back.gif
GIEPEIE RCIE 没被关掉吧?
应该可以产生100次中断的。
RCIE = 1; //接收中断开启
PEIE = 1; //外设中断允许位
GIE = 1; //开中断
全部打开了 已解决。 谢谢!{:smile:} 清中断标志位 找带FIFO单元的MCU能实现收8个字节一次中断。。 wxhdmf 发表于 2013-6-8 13:04 static/image/common/back.gif
PC 上位机 一次发100个数据BYTE, 波特率9600 下位机中断100次? 但我发现一次发100个BYTE, 单片机就中 ...
我的理解是,会不会是偶尔溢出了,就不会产生中断了。查一下溢出标志?
如果是PIC18,用快速中断?
我用C语言,没问题,不但9600可以接收无限长度的数据,而且可以通过CH376把数据写到U盘里,不出错。
wxhdmf 发表于 2013-6-8 13:37 static/image/common/back.gif
已解决。 谢谢!
请问你是怎么解决的,是否可以分享一下,我认为是不是你应该设置一个数组buffer[]来保存这一百字节的数据。谢谢! 是DEBUG时,到中断断点发现只能收一个数据,让它跑就可以了,要buffer保存数据 正解
使用buffer、清中断即可 不是很明白,,,
页:
[1]