wxhdmf 发表于 2013-6-7 21:28:24

PIC 电脑上位机向PIC发送串口数据

电脑上位机向PIC单片机发送串口数据,一次发大量数据,如100个字节,下位机PIC16F1936怎么处理这100个字节,我用串口接收中断一次只能收一次,放到main里查询接收,一直等待,太耗 cpu,大家有好的方法吗?讲的是RX一次接收大量数据

wxhdmf 发表于 2013-6-7 21:30:56

串口中断一次只能收一个字节的数据,我要一次收100个字节数据,怎么处理,讲一下思路

mon51 发表于 2013-6-8 07:55:00

中断接收就是一个个地接收,中断了100次,不就接收完了吗?只有你有100个字节的缓存,就肯定可以的。

liansh2002 发表于 2013-6-8 08:18:26

通讯速率多少?1200的话就主循环查询,但是主循环必须保证时间,不能有死循环等待。

承浩2012 发表于 2013-6-8 08:38:27

开辟100字节的缓存空间,用来专门保存数据,接收够100个了,关闭接收,再去处理,处理完成再继续接收
或者开辟2个100字节的缓存空间,第一个接收满了,处理第一个,同时把处理期间接收的数据放入第二个缓存,
两个缓存交替使用接收或者处理数据

wxhdmf 发表于 2013-6-8 13:04:23

本帖最后由 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次 附上串口工具


tongdayusu 发表于 2013-6-8 13:19:08

GIEPEIE RCIE 没被关掉吧?
应该可以产生100次中断的。

wxhdmf 发表于 2013-6-8 13:19:25

PC是一次发100个数据的, 单片机RX中断就一次,怎么搞?
void interrupt ISR(void)
{
    //--------------------------------串口接收-----------------------
    if((RCIE) && (RCIF)) //仅可以处理一个字符
    {
        static volatile unsigned char i=0;
        RxData=RCREG;
      if(i>100)
          i=0;
    }
}

tongdayusu 发表于 2013-6-8 13:20:30

当然前提是接收中断函数中读了RCREG寄存器。

wxhdmf 发表于 2013-6-8 13:28:44

tongdayusu 发表于 2013-6-8 13:19 static/image/common/back.gif
GIEPEIE RCIE 没被关掉吧?
应该可以产生100次中断的。


RCIE = 1;                            //接收中断开启
PEIE = 1;                            //外设中断允许位
GIE = 1;                           //开中断


全部打开了

wxhdmf 发表于 2013-6-8 13:37:38

已解决。 谢谢!{:smile:}

承浩2012 发表于 2013-6-8 15:11:58

清中断标志位

xieguangye2001 发表于 2013-6-8 15:47:58

找带FIFO单元的MCU能实现收8个字节一次中断。。

Friendz 发表于 2013-6-12 22:28:20

wxhdmf 发表于 2013-6-8 13:04 static/image/common/back.gif
PC 上位机 一次发100个数据BYTE, 波特率9600 下位机中断100次? 但我发现一次发100个BYTE, 单片机就中 ...

我的理解是,会不会是偶尔溢出了,就不会产生中断了。查一下溢出标志?

如果是PIC18,用快速中断?

我用C语言,没问题,不但9600可以接收无限长度的数据,而且可以通过CH376把数据写到U盘里,不出错。

fengye7251 发表于 2013-6-13 10:03:35

wxhdmf 发表于 2013-6-8 13:37 static/image/common/back.gif
已解决。 谢谢!

请问你是怎么解决的,是否可以分享一下,我认为是不是你应该设置一个数组buffer[]来保存这一百字节的数据。谢谢!

wxhdmf 发表于 2013-6-27 08:35:34

是DEBUG时,到中断断点发现只能收一个数据,让它跑就可以了,要buffer保存数据

wwxxcc 发表于 2013-6-29 23:48:38

正解
使用buffer、清中断即可

真的好多巧合 发表于 2014-11-11 22:17:41

不是很明白,,,
页: [1]
查看完整版本: PIC 电脑上位机向PIC发送串口数据