完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,我正在编写一个PIC16LF804微控制器和NFC标签之间的串行接口。接口是串行同步的,有两条线:数据(IO)和CLK。协议是1个起始位(高到低转换)、8位数据、1个奇偶校验位、2个停止位。由于接口是同步的,每个位占用一个时钟周期,我试图构建如下:E端口,一个作为我的IO引脚,另一个作为CLK,去NFC标签。首先,根据需要将IO管脚设置为高或低。然后,通过将时钟管脚设置为半个时钟周期的高然后将其设置为另一个半时钟周期的低来发送一个时钟脉冲。然后对下一位重复这个过程,以此类推。我有两种方法,一种用于在IO行上何时发送高位,另一种用于何时发送低位。这里,它们是://Sets.pin to 1,然后将其清除为0,即发送一个时钟周期,IO pin设置为.(1)void sendOneCLK_IO.(){TRISB=0x00;LATBbits.LATBbits.LATB0=1;LATBbits.LATB1=1;u._us(1);LATBbits.LATB1=0;u._us(1)}//Sets.pin将其清除为0,即发送在一个时钟周期中,IO管脚设置为.(0)void sendOneCLK_IO.() {TRISB=0x00;LATBbits.LATBbits.LATB0=0;LATBbits.LATB1=1;u._us(1);LATBbits.LATB1=0;u._us(1)}然后在更详细的方法中引用这些方法。路怎么走?此外,我现在使用内置的γ延迟函数来创建CLK的时间延迟。我的上司告诉我,我不应该使用延迟,我应该使用计时器代替。我试着用计时器计时,但他坚持说我根本不应该使用循环,所以我无法找到没有循环的方法。你对这个案子有什么建议?
|
|
相关推荐
9个回答
|
|
关于延迟-不影响计时器本身:1。获取当前计时器值,并将其存储为引用2。比较一下(CurrentTimer-MemorizedTimer)与您想要延迟的刻度数(在无符号算术里),如果比较低:重复步骤2。如果更高/相等:延迟完成。容易做-需要一个单一的变量大小的定时器。
|
|
|
|
谢谢你们的答复。我确信使用_u delay不应该是个问题,因为我的应用程序对时序不是很敏感,而且_u delay占用了微控制器的资源直到它完成并不是问题,因为接口是串行和同步的。然而,我的上司认为使用_u delay是糟糕的编码风格,不应该出现在任何值得尊敬的项目中。我曾想过用您建议的方式来实现延迟,但我没能实现这一部分:“阅读它,看看它是否通过了正确的滴答数”而没有循环。在我的脑子里,它必须包括一个空的while循环,就像这样(TMR0)!//假设延迟需要5滴答的时间,并且TMR0在开始时使用空循环被重置,这是我的主管不希望我做的事情,因为他也认为这是微控制器编程中的糟糕的编码风格。Y之间有一段时间,给计时器一个机会来增加我需要的数量?这是一个聪明和容易的方法,但是我相信在需要的时候,我也需要使用一个循环来重复第2步,对吧?如果是这样,那也是同样的。不幸的是,我的上司不希望我使用循环。----总而言之,我的上司认为_u delay函数和循环是糟糕的编码风格,不希望我使用它们。即使没有这两件事,也有可能实施延迟吗?
|
|
|
|
这将需要签署的数学处理翻滚。
|
|
|
|
用未署名的数学来NKurzmanTry:它处理翻滚就像小菜一碟。无需考虑翻转,只有前提条件:延迟必须比定时器周期低一点。
|
|
|
|
关于延迟-不影响计时器本身:1。获取当前计时器值,并将其存储为引用2。比较一下(CurrentTimer-MemorizedTimer)与您想要延迟的刻度数(在无符号算术里),如果比较低:重复步骤2。如果更高/相等:延迟完成。2 - 65530=8,我猜它确实有效。
|
|
|
|
凯泽7“主管”的意思是“老板”还是“学校导师”。一般来说,不坐等待圈是个不错的选择,但是它有它的局限性。等待时间太短,以至于变得不敬。你会花更多的时间进出这个函数。他们有什么想法吗?这是一堂教学课吗?其他选择会更糟。1。在定时器中断中进行。不是中断延迟会占用大部分延迟,除非你有一个快速时钟。2。使用状态机。再次调用SHITER机器将比延迟使用更多的时间,但您可以服务其他任务。
|
|
|
|
NKurZMANI正在攻读我的学士学位论文,我正在一个博士生的指导下工作。他没有特定的替代方案,但是他觉得使用延迟和循环不是一个好的实现,并且希望我找到没有这两种情况的解决方案。
|
|
|
|
当然,你问他为什么这不是一个好的实施方案,他说了什么?如果你的PIC同时有一些其他的工作要做,那么你必须组织一个定时器中断,并且每中断一个比特。同时,其他任务将在中断之间嗡嗡作响。然而,这将严重限制速度并产生一些开销,这可能是实质性的。它可能比你所做的延迟更有益,一旦你完成了,让其他任务自由运行。如果你的PIC在那时没有其他工作要做,那么你的实现完全是GOO。d.
|
|
|
|
他是对的,他错了。遵循经验法则会产生更坏的结果。规则有例外。但因为他们在制定规则和评分。使用状态机。如果延迟仅为毫秒,它将运行良好,是一个不错的选择。生成一个包含开关状态的函数,每个步骤和每个延迟都有一个情况。从主回路调用它。它会比没有等待的步骤。下降的原因是你的延误可能会超过一微秒。但时机并不重要,这也无关紧要。
|
|
|
|
只有小组成员才能发言,加入小组>>
5184 浏览 9 评论
2005 浏览 8 评论
1932 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3179 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2230 浏览 5 评论
742浏览 1评论
628浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
512浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
640浏览 0评论
538浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 19:55 , Processed in 1.412235 second(s), Total 95, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号