C8051F020学习笔记-时钟初始化.docVIP

  • 18
  • 0
  • 约 3页
  • 2017-06-07 发布于重庆
  • 举报
一,关于系统初始化程序,从现在的学习情况来看,基本上大部分的程序都用到时钟初始化.所以,把这部分内容作为第一个解决难题.。 / // 时钟初始化程序 // 将器件配置为使用外部 CMOS 时钟 // void sysclk_init void WDTCN 0xde; // 禁止看门狗定时器 WDTCN 0xad; OSCXCN 0x67; for i 0; i 256; i++ ; // XTLVLD 有效需要大于1ms左右的时间 while ! OSCXCN 0x80 ; // 等待外部振荡器起动 OSCICN 0x88; // 选择外部振荡器作为系统时钟 // 禁止内部振荡器 1.1 看门狗定时器复位 MCU 内部有一个使用系统时钟的可编程看门狗定时器(WDT)。当看门狗定时器溢出时, WDT 将强制 CPU 进入复位状态。为了防止复位,必须在溢出发生前由应用软件重新触发 WDT。如果系统出现了软件/硬件错误,使应用软件不能重新触发 WDT,则 WDT 将溢出并产 生复位,这可以防止系统失控。 1.2 使能/复位WDT 向WDTCN寄存器写入0xA5将使能并复位看门狗定时器。用户的应用软件应周期性地向WDTCN写入0xA5,以防止看门狗定时器溢出。每次系统复位都将使能并启动WDT。 向WDTCN寄存器写入0xDE后再写入0xAD将禁止WDT。所以,在前面的时钟初始化程序中, WDTCN 0xde; // 禁止看门狗定时器 WDTCN 0xad; 禁止WDT。(具体寄存器参照C8051F02X.PDF第118页) 1.3关于寄存器OSCXCN以及OSCICN 关于OSCICN: (内部振荡器控制寄存器) MCU有一个内部振荡器和一个外部振荡器驱动电路,每个驱动电路都能产生系统时钟。MCU在复位后从内部振荡器启动。内部振荡器的启动是瞬间完成的。内部振荡器可以被使能/禁止,其振荡频率可以用内部振荡器控制寄存器(OSCICN)改变。 MSCLKE IFRDY CLKSL IOSCEN IFCN1 IFCN0 位7 位6 位5 位4 位3 位2 位1 位0 1 0 0 0 1 0 0 0 位7, MSCLKE: 时钟丢失使能位 0:禁止时钟丢失检测器。 1:使能时钟丢失检测器;检测到时钟丢失将触发复位 从函数void sysclk_init void 来看,OSCICN 0X88,因此,bit 7被置一了,禁止始终丢失检测器。 位 6-5: 未用。读 00b,写 忽略。 位4,IFRDY:内部振荡器频率准备好标志 0:内部振荡器频率不是按IFCN位指定的速度运行。 1:内部振荡器频率按照 IFCN 位指定的速度运行。 位3,CLKSL:系统时钟源选择位 0:选择内部时钟源作为系统时钟。 1:选择外部时钟源作为系统时钟。 在这里被置高,即为选择外部时钟 位2,IOSCEN:内部振荡器使能位 0:内部振荡器禁止。 1:内部振荡器使能。 位1-0,IFCN1-0:内部振荡器频率控制位 00:内部振荡器典型频率为 2MHz。 01:内部振荡器典型频率为4MHz。 10:内部振荡器典型频率为8MHz。 11:内部振荡器典型频率为16MHz。 因为没有用到内部振荡器,所以该两位任意设置。 关于OSCXCN:(外部振荡器控制寄存器) 当/RST引脚为低电平时,内外两个振荡器都被禁止。MCU可以从内部振荡器或外部振荡器运行,可使用OSCICN寄存器中的CLKSL位在两个振荡器之间随意切换。外部振荡器需要一个外部谐振器、并行方式的晶体、电容或RC网络连接到XTAL1/XTAL2引脚。必须在OSCXCN寄存器中为这些振荡源中的某一个配置振荡器电路。一个外部CMOS时钟也可以通过驱动XTAL1引脚提供系统时钟。XTAL1和XTAL2引脚的耐压值是3.6V(不是5V)。 XTLVLD XOSCMD2 XOSCMD1 XOSCMD0 - XFCN2 XFCN1 XFCN0 位7 位6 位5 位4 位3 位2 位1 位0 0 1 1 0 0 1 1 1 位7,XTLVLD:晶体振荡器有效标志 (只有当XOSCMD=1xx时有效) 0:晶体振荡器未用或未稳定。 1:晶体振荡器正在运行并且工作稳定(为了避免瞬态条件,应在使能晶体振荡 器工作1ms后开始读)。 (该位是只读位,在实际应用中有一句判断while ! OSCXCN 0x80 ,即为判断晶体振荡器是否有效。) 位6-4,XOSCMD2-0:外部振荡器方式位 00x:关闭。XTAL1引脚内部接地。 010

文档评论(0)

1亿VIP精品文档

相关文档