发 帖  
原厂入驻New
[问答] 怎么用C语言创建一个代码来捕获传入的字节及其时间
93 c语言
分享
嗨,有人能告诉我怎么用C语言创建一个代码来捕获传入的字节及其时间吗?我想通过将字节放入缓冲区,然后以相同的间隔将它们发送出去,来创建这些字节的中继。输入位定时器,如果收到10字节保存输入字节,退出循环遍历数组以获得定时开始定时器,如果匹配计数,发送相应的字节。我看到一些关于定时器的在线代码,等等,但是不确定我需要插入定时器并执行定时器重置等需要什么。如果(T0IF){+.;//if T0IF=1将计数器//变量增加1T0IF=0;//清除T0IF标志,以便//下一个溢出可以被检测到}T汉克斯!
0
2020-4-26 11:22:36   评论 分享淘帖 邀请回答
13个回答
你从来没有提到字节是怎么进来的,这是通过串行/RS232接口吗?如果是,您还应该显示您使用的是哪种型号的PIC。对于定时器,您的硬件定时器将在您的时间范围内滚动(回到零),所以您可能需要实现定时器中断来扩展定时器的宽度。
2020-4-26 11:40:54 评论

举报

@ QHB抱歉-是通过串行和使用PIC16F628谢谢
时间需要精确到什么程度?例如最近的毫秒?
2020-4-26 12:10:57 评论

举报

时序需要尽可能接近原始模式。微会很棒。
“尽可能接近”在工程学中不是一个有效的术语。毫秒精度很容易。微秒精度更难。你必须在沙子里画一条线,在决定如何做之前,先确定“足够好”有多好。
2020-4-26 12:27:48 评论

举报

好的,那就从毫秒开始。
好,假设您的PIC16F628A以4MHz运行。如果设置TMR2,PR2=250,Prescale=1:4,那么它将每毫秒滚动一次。创建一个无符号32位全局变量(无符号long),并在定时器中断中递增它。这给您一个毫秒计数,该计数仅起作用。l每隔4294967秒=71582分钟=1193小时=49天(16位计数器每隔65.5秒翻转)。因此,对于每个收到的字节,您需要保存8位字节和32位定时器计数。您可能会变得很棘手,并为两者使用一个32位变量,将计数限制为24位。这只能在4.6小时后翻转。如果在每10个字符之后从零开始,则可能使用16位计数器。这将在65.5秒后翻转。注意,您应该接收该字节,并读取USART的intur.服务内的时间值,否则您在读取时将面临计数值更改的风险。接下来的步骤是提出一个再次输出数据的方案。您可能在定时器中断内执行此操作,根据存储的计数检查当前计数。您没有指定是否需要在接收时开始发送,或者直到接收完成后才开始发送。
2020-4-26 12:52:10 评论

举报

非常感谢!字节将被发送后,他们都收到。
正如我提到的,如果这一切都发生在不到65秒,那么你可以用16位计数器来完成。
2020-4-26 13:24:40 评论

举报

为什么不只记录每个收到的字节之间的“delta”计数,并且在重传时只等待每个发送之间的时间单位。你知道这些字节以10块的形式出现,所以重传可以在每个收到的第10字节之后开始。(这确实会引起同步问题,但这是另一回事)。通过这种方式,您只需要关心接收值之间的时间间隔的大小,而不需要关心整个字节块的大小。
2020-4-26 13:44:38 评论

举报

嗨,使用最新的PIC16会使这项工作简单得多。最新的PIC16F18xxx有一些新的外围设备和定时器,它们运行在24位上,这对于高分辨率和宽动态非常有用。此外,他们中的许多都有CLC,所以其他外围设备可以由硬件触发(无错误/无延迟)。PIC16F1619(查找SMT计时器)问候
2020-4-26 14:00:26 评论

举报

IsupportSusan的想法。接收一个字节可能需要不到1毫秒(我们还不知道波特率)。如果10字节为单个传输,则字节测试之间的延迟将远远大于1ms。无论如何,持续时间可能适合于单个字节。在滚动时没有中断的慢速自由运行定时器(例如,具有1:256预缩放器的TMR0)应该足以捕获间隔值。在接收和传输过程中都可以使用相同的定时器。
2020-4-26 14:17:12 评论

举报

只有小组成员才能发言,加入小组>>

108个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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