完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
你好,我又看到了一篇题为“与tmr1中断混淆”的文章,它似乎和我有相似的问题,但我仍然没有好运。我试图通过使用MCC代码来开始学习。MPLAB 3.65 XC8 1.42 MCC 3.36 Linux Mint 18.1.在tmr2.c中,我们有:而且,在inter._manager.c中,我们有……最后,在main.c中,我甚至没有眨眼看到LED。我对此过程的理解是,我可以加载TMR2的公关寄存器,重置计数寄存器,然后启动t。埃默它将计数到PR2值。在一次性模式下,它应该触发中断并停止,我相信。我注释掉了初始化函数中设置默认处理程序的行,因为我相信它与他们在Inter.ManagerHigh中发布的内容冲突……任何帮助都很感激。Rgds,Steve
|
|
相关推荐
19个回答
|
|
|
你使用的是什么PIC设备?
|
|
|
|
|
|
对不起的。PIC18F27 K40
|
|
|
|
|
|
也许我没有Limtoc?这是MCC中振荡器设置的代码,特别是在OSCEN中,我相信ELFOEN(位4)可以显式设置为启用。数据表上说,这个位的“0”仍然允许外围设备选择它,但是我没有看到这种情况在哪里发生。我是否应该显式启用LFOEN?
|
|
|
|
|
|
Haiswmcl,我想一个标题为Atype的线程,每隔1秒就有一个定时器中断,这将有助于你解决问题。
|
|
|
|
|
|
谢谢你的答复,我会看看它能给我什么。
|
|
|
|
|
|
在寻找我看到的东西的时候…每个寄存器的名字都是浅蓝色的。T2CON,T2HLT,T2RST等,除了T2CLKCON!是否可以在MPLABX X或XC8中识别此寄存器?请看屏幕截图。
|
|
|
|
|
|
MPLABX高亮显示是众所周知的不可靠的。如果XC8没有识别出来,那么它在编译时就会出错,但这不应该导致T2CLKCON确实出现在图18f27k40中。h可能有些混淆,因为T2CLKCON是T2CLKCON的别名。
|
|
|
|
|
|
我不知道你说的是什么问题。你能把确切的问题弄清楚吗?谢谢。
|
|
|
|
|
|
在中断处理程序中不应该有很长的延迟,也不应该在主循环中重新加载计时器。
|
|
|
|
|
|
Cinzia,我很感谢你的职位。我所做的就是尝试得到一些闪光,让我能看到它!我稍微修改了代码,以便在不启动定时器的情况下运行ISR,它确实在运行,但是似乎无法触发中断。我确信有更好的方法,但我关心的只是在这个阶段让中断运行。
|
|
|
|
|
|
只是一些注释:我建议您更新您的MPLAB版本,您使用的是旧版本。新版本有可能使用回调函数来计算多个中断。我没有使用或测试过这个函数,所以仍然可以工作。浅蓝色表示它是一个宏。您可以通过Ctrl +单击宏名称跳转到定义。在中断例程中使用500ms的延迟例程是不明智的。这会阻塞/冻结您的程序。ISR必须尽可能短。您还要在TMR2_ISR中再次EN中断,这样您将永远不会得到一次触发。如果我应该使用TMR2(PIC 18F46K20)生成一次触发,那么在大多数情况下,我得到的延迟是16.384ms(@16MHz,Postscaler 1:16,Prescaler 1:16),可能太短,在LED上看不见(参见MCC中的简单设置)。通常情况下,您将使用cntr并在每次TMR2中断时递增它。此代码(未经测试)
|
|
|
|
|
|
好吧,我现在还不确定你是否想要一次一次的行为或一个闪光灯…
|
|
|
|
|
|
各位,我最终会尝试使用TMR2在EUSAT上超时输入的字节流。因此,超时将是1.144MS或在最终应用中。由于传入的数据流将是不规则的,因此我将在单击模式下使用TMR2,然后重新加载它。在这个阶段,我所要做的就是如何证明中断正在工作,以及如何证明TMR2能够工作——因此测试期间的时间不是问题。在上面的例子中,我假设从LFINTOSC得到了时钟源,它是一个32kHz的源。证明TMR2是使用32 kHz的内部时钟源。2。证明TMR2在单镜头模式下的工作。(能够重新加载周期寄存器并复位计数器/定时器寄存器)3。为了证明TMR2没有使用或需要外部复位(这让我困惑,但它不应该是一次性模式下的问题),我将在下一次尝试中尝试使用前后缩放器将其减慢到最大值。我的代码正在改变,但是仍然在努力实现相同的结果,我认为微芯片代码不会调用(或处理)中断(我不知道还有多少代码可以被截断!)如果有人有更好的方法来实现我的目标,那么请分享。
|
|
|
|
|
|
这是我最近的尝试。正如您将看到的,我假设使用LFINTOSC作为时钟源,我已经将周期寄存器和计时器/计数器寄存器最大化,以便在LED关断之间获得长周期。在它到达这个阶段之前,它已经把LED闪烁了800毫秒,应该有一个100ms的时间,在那里LED是关闭的。这是从TMR2A ISR内完成的。实际上,LED关闭时没有时间。因此,我假设ISR没有运行。为什么?我认为所有的例程我认为在这个讨论中是重要的,并且包括了所有的评论。
|
|
|
|
|
|
当然,您不应该在ISR内部有延迟(也不需要ISR中的禁用/启用中断)。
|
|
|
|
|
|
再次问好,请问您将如何测试TMR2操作?这是我的最新…如果TMR2不超时,这个代码将手动设置条件在500毫秒后进入ISR。在ISR内部,我已经重新设置了所有的好测量,暂停了200毫秒,然后重新启动计时器。所以我想!结果是闪烁的LED与500毫秒SND 200毫秒小康。这告诉我TMR2没有发生任何事情。要么它没有启动,要么它没有启动ISR本身。由于500ms的巨大暂停在主。我一直在降低预设值,但它仍然没有停止。如果您能建议一种更简单或更有说服力的方法来测试TMR2的功能,请分享。谢谢你的答复。我把头发扯掉了!!
|
|
|
|
|
|
我不能让我的范围记录第一次启动程序。它是一个内存非常有限的老式范围,它的单次拍摄模式不会慢于每div 20ms,因此在这种情况下没有用处。有可能整个程序第一次工作时,定时可能不同,但是持续的结果是一个闪烁的LED,打开500ms。200米关闭。
|
|
|
|
|
|
MCC图表显示,对于1:2的预缩放和1:2的后缩放,使用LFINTOSC的时间周期从~129.032us到~33.0322ms。对于1:16的后缩放和1:128的预缩放设置,使用相同的LFINTOSC.I,时间增加到66.064ms到16.912秒。不知道这些值是否正确,但是在我刚才发布的设置中,我认为0x02的周期寄存器将是两个时间段~130us。所以TMR应该在第一个500毫秒开启周期结束之前启动……测试例程应该只在很短的时间内看到LED开启(TMR2周期值),并且我认为ISR中的200毫秒延迟应该关闭。
|
|
|
|
|
|
您的代码看起来过于复杂和异常。您应该能够使用软件模拟器(或者像PICTIT3这样的调试器)来确定TMR2中断是否正在发生。还要注意,在一次拍摄模式下,必须循环T2ON位OFF和ON以重新启动定时器。如果使LED开启500mSec(主回路中的延迟),然后关闭200mSec(TMR2_ISR中的延迟),则看起来中断正在触发,ISR正在工作。但是,您当然是绕过计时器,手动设置IF,以便调用ISR。我不知道TMR2_Start()在哪里定义。如果你张贴了所有的代码,这会很有帮助。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:36 , Processed in 1.145657 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
628