完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
您好,根据XC8手册,PC18的最大延迟值(_.or_delaywdt)必须是179.200,其他8位设备为50.659.000。这两个数字是如何发生的,为什么微控制器不能执行更多的指令周期?是关于8位架构的吗?下面的代码来自XC8 PIC18.H文件3.5.10,我如何实现代码中的延迟?如果需要准确的延迟,或者在延迟期间还有其他任务可以执行,那么使用定时器来生成中断是最好的方法。如果代码中没有这些问题,那么可以使用编译器内置的delay伪函数:_.、_._ms或_._ms。参见《图书馆功能》附录A。所有这些扩展为内联汇编指令或(嵌套)指令循环,这将消耗指定的周期或时间。延迟参数必须是常数,对于PIC18设备小于大约179200,对于其他设备小于大约50659000。注意,这些代码序列将只使用NOP指令和/或形成循环的指令。这些伪函数的备选PIC18版本,例如,γDelayWDT,也可以使用CLRWDT指令。也见附录A“图书馆功能”。
|
|
相关推荐
15个回答
|
|
|
不,这是“宏”中的东西。你可以用定时器或简单的循环来创建其他函数。或者你可以在一个循环中调用上面的,从而得到所需的时间。
|
|
|
|
|
|
DarioG谢谢你的答复,但是我已经创建了以下函数,以便达到更大的延迟,但我想知道这些限制从何而来。
|
|
|
|
|
|
这仅仅是产生一些设备的延迟的代码与其他设备不同的代码。例程是在不同的时间写的,并且出现在不同的应用程序中。您将高兴地知道,我希望纠正这种情况,为未来的编译器版本。同时,您需要为PIC18 DEVICES.JEFF多次调用延迟。
|
|
|
|
|
|
达里奥说了什么。编译器有一个模板来生成循环中的延迟。当创建这个循环时(无论是在生成过程中还是在运行时),它会自动尝试避免溢出,方法是在每次调用_u._xx()时将参数值限制为最大值。恰恰相反,结果最大循环的指令数量大约是您从文档中引用的任意数字。您可以多次调用这些延迟,或者在循环中运行这些延迟来扩展它们。
|
|
|
|
|
|
限制是宏中循环计数器的数目。时钟越快,时间越短,它们就越不重要。
|
|
|
|
|
|
谢谢大家。下面是一个具有延迟功能的示例代码,它增加了延迟时间。
|
|
|
|
|
|
习惯于写LATx寄存器,而不是PORTx——这将有助于避免将来出现问题。您可能也知道“浪费时间”在现实固件编程中并不是一个好习惯(除了上面的简单案例):所以,运行Timer并导致interr是很好的。Ups,用于处理增加一个或多个计数器;在主代码中检查这些“信号量”,并在需要时执行操作,让CPU可以自由运行其他任务。
|
|
|
|
|
|
Close:void._ms(unsigned.int i)orvoid._ms(uint16_t i)for(unsigned char x=0;x<=20;x++)为什么16位对只到达20的数字进行mat。记住它是一个8位的核心,没有签名的OP代码。为作业选择适当的大小变量。除非速度和代码大小并不重要。
|
|
|
|
|
|
Close:void._ms(unsigned.int i)orvoid._ms(uint16_t i)for(unsigned char x=0;x<=20;x++)为什么16位对只到达20的数字进行mat。记住它是一个8位的核心,没有签名的OP代码。为作业选择适当的大小变量。除非速度和代码大小不重要。为什么我不能使用整数,而我必须使用“无符号短int”?在8位微控制器(PIC10、PIC12、PIC16、PIC18)中,我在XC8的手册(第143页)中看到,所有数据类型都被接受,或者我遗漏了什么?20是错误的,右边是“i”变量。谢谢你的指正。
|
|
|
|
|
|
所有数据类型都很好。但是:在一个PICS有限的RAM中,int占用2个字节。PIC10-PIC18核心没有签名的操作码。这意味着编译器可能需要生成额外的代码来处理签名的可能性。它是一个8位的核心,它需要生成额外的代码来处理向High字节添加以及与高、可能签名的字节进行比较。这可能涉及调用子例程来完成这项工作,所以它会奏效,是的。但要付出代价。
|
|
|
|
|
|
是的,最后,你几乎不会有“负延迟”。
|
|
|
|
|
|
但如果你管理它,诺贝尔奖和大量现金等着你。
|
|
|
|
|
|
“我只是知道你会这么说”——这是“负延迟”吗?苏珊
|
|
|
|
|
|
LOL伟大绝对女性第六感!!
|
|
|
|
|
|
但如果你真的做到了,还有诺贝尔奖和许多现金等着你。请不要窃取我的想法——我已经在努力了。!!!PS: BTW,对不起Michael J Fox…他的病越来越严重了。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 21:05 , Processed in 0.965758 second(s), Total 102, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4643