完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好。我有一个在18F25K50上用32.678KHz晶体等设置的次级振荡器。我有下面的代码设置TMR1,和一个调用waitFortimer以给出50mS循环的循环。主振荡器是16MHz=48MHz,PPL x3。我可以使用运行主系统时钟的定时器来创建这个50mS循环,但是我想用它来从睡眠中醒来,这在睡眠期间是不可能的,因为主时钟将被关闭。现在,在等待定时器时,我们可以通过启动睡眠来节省一些功率,并且由于定时器1使用外部时钟,所以当溢出发生时,它应该能够从睡眠中醒来。我把waitForTimer改为:现在我认为我不想设置GIE=1,因为我只是想在睡眠之后返回到下一个指令,而不是进入中断向量。有没有人做过类似的事情,并且能够帮助我?谢谢,Phil
|
|
相关推荐
5个回答
|
|
我想你可以在论坛上找到一些线索:用谷歌搜索!(我用睡眠,但不是在这种情况下)
|
|
|
|
我现在读了不少类似的线索。我所面临的问题是,我并不真正理解可以用18F25K50设置的低优先级和高优先级例程。我以前使用的PIC只是在sleep()之后进入下一个指令,但是我认为这个PIC会发生更复杂的行为。
|
|
|
|
如果你不需要IRQS,但只有唤醒,你可以忘记优先事项等。
|
|
|
|
你没有清楚地陈述你所面临的问题,什么不起作用?你确信次级振荡器被激活了吗?
|
|
|
|
参阅数据表,第13.9节,要使用连接到SOSC引脚的32.768kHz晶体来计时计时计时器1,必须相应地设置TMR1CS和SOSCEN位(在T1CON中)。计时器1只有在异步计数器模式下才能在睡眠期间工作,所以在T1CON中设置nT1SYNC位。OFF,我将加载计时器计数,然后启用外围中断和计时器中断。如果程序的其他部分使用GIE,请保存此信息,以便在唤醒后可以恢复。现在将GIE设置为零,以便执行在SLEEP()指令之后重新开始,并且不会在中断服务例程中寻找需要做的事情。通过将OSCCon的SCS位设置为适当的值,使系统时钟成为副振荡器。(也许没有必要,但…)最后,最终,在唤醒时,我会将系统时钟恢复到配置参数中指定的值,适当地设置SCS位,并将GIE位恢复到以前的值。根据一般原理,我可能会禁用定时器1及其中断,直到下一个睡眠序列。上面的序列在我的PIC18F25K50系统上工作。以下是我测试的方法:
|
|
|
|
只有小组成员才能发言,加入小组>>
5003 浏览 9 评论
1921 浏览 8 评论
1850 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3066 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2143 浏览 5 评论
571浏览 1评论
427浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
474浏览 0评论
366浏览 0评论
IPECMD命令烧录AVR128DA48芯片,报找不到芯片错误
851浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-15 12:17 , Processed in 1.398110 second(s), Total 85, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191