搜索
bottom↓
回复: 17

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

[复制链接]

出0入0汤圆

发表于 2013-6-7 21:28:24 来自手机 | 显示全部楼层 |阅读模式
电脑上位机向PIC单片机发送串口数据,一次发大量数据,如100个字节,下位机PIC16F1936怎么处理这100个字节,我用串口接收中断一次只能收一次,放到main里查询接收,一直等待,太耗 cpu,大家有好的方法吗?讲的是RX一次接收大量数据

出0入0汤圆

 楼主| 发表于 2013-6-7 21:30:56 来自手机 | 显示全部楼层
串口中断一次只能收一个字节的数据,我要一次收100个字节数据,怎么处理,讲一下思路

出0入20汤圆

发表于 2013-6-8 07:55:00 | 显示全部楼层
中断接收就是一个个地接收,中断了100次,不就接收完了吗?只有你有100个字节的缓存,就肯定可以的。

出0入0汤圆

发表于 2013-6-8 08:18:26 | 显示全部楼层
通讯速率多少?1200的话就主循环查询,但是主循环必须保证时间,不能有死循环等待。

出0入0汤圆

发表于 2013-6-8 08:38:27 | 显示全部楼层
开辟100字节的缓存空间,用来专门保存数据,接收够100个了,关闭接收,再去处理,处理完成再继续接收
或者开辟2个100字节的缓存空间,第一个接收满了,处理第一个,同时把处理期间接收的数据放入第二个缓存,
两个缓存交替使用接收或者处理数据

出0入0汤圆

 楼主| 发表于 2013-6-8 13:04:23 | 显示全部楼层
本帖最后由 wxhdmf 于 2013-6-8 13:14 编辑
mon51 发表于 2013-6-8 07:55
中断接收就是一个个地接收,中断了100次,不就接收完了吗?只有你有100个字节的缓存,就肯定可以的。 ...


PC 上位机 一次发100个数据BYTE, 波特率9600 下位机中断100次? 但我发现一次发100个BYTE, 单片机就中断1次 附上串口工具


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

发表于 2013-6-8 13:19:08 | 显示全部楼层
GIE  PEIE RCIE 没被关掉吧?
应该可以产生100次中断的。

出0入0汤圆

 楼主| 发表于 2013-6-8 13:19:25 | 显示全部楼层
PC是一次发100个数据的, 单片机RX中断就一次,怎么搞?
void interrupt ISR(void)
{
    //--------------------------------串口接收-----------------------
    if((RCIE) && (RCIF)) //仅可以处理一个字符
    {
        static volatile unsigned char i=0;
        RxData[i++]=RCREG;
        if(i>100)
          i=0;
    }
}

出0入8汤圆

发表于 2013-6-8 13:20:30 | 显示全部楼层
当然前提是接收中断函数中读了RCREG寄存器。

出0入0汤圆

 楼主| 发表于 2013-6-8 13:28:44 | 显示全部楼层
tongdayusu 发表于 2013-6-8 13:19
GIE  PEIE RCIE 没被关掉吧?
应该可以产生100次中断的。


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


全部打开了

出0入0汤圆

 楼主| 发表于 2013-6-8 13:37:38 | 显示全部楼层
已解决。 谢谢!

出0入0汤圆

发表于 2013-6-8 15:11:58 | 显示全部楼层
清中断标志位

出0入0汤圆

发表于 2013-6-8 15:47:58 | 显示全部楼层
找带FIFO单元的MCU能实现收8个字节一次中断。。

出0入0汤圆

发表于 2013-6-12 22:28:20 | 显示全部楼层
wxhdmf 发表于 2013-6-8 13:04
PC 上位机 一次发100个数据BYTE, 波特率9600 下位机中断100次? 但我发现一次发100个BYTE, 单片机就中 ...

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

如果是PIC18,用快速中断?

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

出0入0汤圆

发表于 2013-6-13 10:03:35 | 显示全部楼层
wxhdmf 发表于 2013-6-8 13:37
已解决。 谢谢!

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

出0入0汤圆

 楼主| 发表于 2013-6-27 08:35:34 | 显示全部楼层
是DEBUG时,到中断断点发现只能收一个数据,让它跑就可以了,要buffer保存数据

出0入0汤圆

发表于 2013-6-29 23:48:38 | 显示全部楼层
正解
使用buffer、清中断即可

出0入0汤圆

发表于 2014-11-11 22:17:41 | 显示全部楼层
不是很明白,,,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 07:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表