最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C8051F020学习笔记-时钟初始化

来源:动视网 责编:小OO 时间:2025-10-01 12:45:33
文档

C8051F020学习笔记-时钟初始化

一,关于系统初始化程序,从现在的学习情况来看,基本上大部分的程序都用到时钟初始化.所以,把这部分内容作为第一个解决难题.。/--------------------------------------------------------------------//时钟初始化程序//将器件配置为使用外部CMOS时钟//--------------------------------------------------------------------voidsysclk_init(void){
推荐度:
导读一,关于系统初始化程序,从现在的学习情况来看,基本上大部分的程序都用到时钟初始化.所以,把这部分内容作为第一个解决难题.。/--------------------------------------------------------------------//时钟初始化程序//将器件配置为使用外部CMOS时钟//--------------------------------------------------------------------voidsysclk_init(void){
一,关于系统初始化程序,从现在的学习情况来看,基本上大部分的程序都用到时钟初始化.所以,把这部分内容作为第一个解决难题.。

/-------------------------------------------------------------------- 

// 时钟初始化程序 

// 将器件配置为使用外部 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)改变。

MSCLKEIFRDYCLKSLIOSCEN 

IFCN1IFCN0
位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 XOSCMD2XOSCMD1 XOSCMD0XFCN2XFCN1XFCN0 
位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:系统时钟为来自XTAL1引脚的外部CMOS时钟。

10x:RC/C振荡器方式二分频。

110:晶体振荡器方式。

111:晶体振荡器方式二分频。    

(在这里被设置为110,即为选择振荡器方式)

位3,读0

位2-0,XFCN2-0:外部振荡器频率控制位。 

      1, 晶体方式,XOSCMD设置为11X

      2,选择XFCN值,以匹配晶体或陶瓷谐振器频率。 

      (这里设置为111,具体参照C8051F02X.PDF第124页。)

13.8.2 禁止 WDT

向 WDTCN 寄存器写入 0xDE 后再写入 0xAD 将禁止 WDT。下面的代码段说明禁止 WDT

的过程。

CLR

EA

; 禁止所有中断

MOV

WDTCN, #0DEh ; 禁止软件看门狗定时器

MOV

WDTCN, #0ADh

SETB

EA

; 重新允许中断

写 0xDE 和写 0xAD 必须发生在 4 个时钟周期之内,否则禁止操作将被忽略。在这个过程

期间应禁止中断,以避免两次写操作之间有延时。

文档

C8051F020学习笔记-时钟初始化

一,关于系统初始化程序,从现在的学习情况来看,基本上大部分的程序都用到时钟初始化.所以,把这部分内容作为第一个解决难题.。/--------------------------------------------------------------------//时钟初始化程序//将器件配置为使用外部CMOS时钟//--------------------------------------------------------------------voidsysclk_init(void){
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top