完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
C是一个PIC18F67 J50,主频为8MHz,VDD为2.75伏,内部调节器使TMR1的振荡器连接到32.768 kHz XTAL。我用示波器检查,两个OSC工作正常。当程序启动时,我配置T1CONC:0B11001011,OSCCon=0x81-并且从未触摸T1CON-A。增益;然后我调用一个延迟例程,SETSTMR1= 0x00;CCPR1=32000;ECCP1CON= 0x0A;PY1= 0x04;然后等待一段时间循环直到CCP1IF被设置,但是该标志从未被设置,因为TMR1不计数来自它自己振荡器的脉冲。在TMR1 OSC引脚上,我有一个1.42VPP。还有另外一件事要配置。为了让TMR1运行,我忘记了吗?
|
|
相关推荐
4个回答
|
|
您显示SFR值,但没有注释来指示您的意图。考虑OSCCON=0x81。MSb将休眠模式配置为空闲模式,空闲模式使外围设备在休眠期间保持运行。LSb将系统振荡器配置为从Timer1振荡器运行。考虑到你说8 MHz是主时钟,我猜你不想运行在32.768千赫,所以不要设置LSB。因此,设置OSCCon=0x80。考虑T1CONN=0B11001011。位7选择16位模式。我建议不要设置此位,除非您试图用程序读取捕获Time1值。编译器并不总是按照您的期望来做,设置位7会导致意想不到的问题。比特6是指示系统从Time1振荡器运行的只读状态位。试图设置这个位没有任何效果。其余的位是可以的。因此,设置T1CON= 0B000 01011。考虑CCP1=32000。我假设你想要1秒的延迟。但是,你使用的是32.768千赫晶体,所以这个值不应该是32768吗?考虑PIE1=1。您说您正在循环中等待,所以我假设您正在轮询PIR1中的CCP1IF位。如果您没有使用中断服务例程来服务CCP1IF中断,则不需要设置这个位。CCP1IF位被设置,不管CCP1IE值。我还建议在进入等待循环之前在PUR1中清除CCP1IF位。总之,这里是推荐代码:
|
|
|
|
在进入睡眠(空闲)之前,你是用SCS位改变系统时钟选择吗?如果是这样,那可能会导致重置。当改变系统时钟时,您需要在进入睡眠之前验证开关是否完成。如果您只改变频率与IRF CF位,那么变化是即时的,没有必要等待,因为这只影响时钟分频器,而不是振荡器。
|
|
|
|
如果我不等到开关完成,为什么C会重置?我不是指下一个指令周期吗?我如何检查开关是否已完成?这是关于C数据表的信息吗?谢谢你提供的信息。
|
|
|
|
如果当设备进入休眠时开关没有完成,那么当CPU时钟停止休眠时,开关在旧振荡器和新振荡器之间的一半。在这种情况下,当唤醒事件发生时,未完成的开关没有完成,旧的或新的振荡器选择都不活动,导致看门狗超时重置设备。T1CON寄存器中的T1RUN位指示到Timer1振荡器的开关已经完成。请参阅数据表中的3.1.3节。
|
|
|
|
只有小组成员才能发言,加入小组>>
5237 浏览 9 评论
2027 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3202 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
772浏览 1评论
662浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
590浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
672浏览 0评论
572浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 18:25 , Processed in 1.617102 second(s), Total 84, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号