本文以HT系列的BH66F2260单片机为讲解对象。该单片机为8位单片机,有四个系统振荡器,包括两个高速振荡器和两个低速振荡器。而振荡器就是单片机的系统时钟源。
振荡器类型
类型 | 名称 | 频率 | 引脚 |
---|---|---|---|
外部高速晶振 | HXT | 400kHz~16MHz | OSC1/OSC2 |
内部高速 RC | HIRC | 4/8/12MHz | — |
外部低速晶振 | LXT | 32.768kHz | XT1/XT2 |
内部低速RC | LIRC | 32kHz | — |
系统时钟配置选项(学会看DATA SHEET很重要)
使用高速或低速振荡器作为系统时钟的选择是通过设置 SCC 寄存器中的 CKS2~CKS0 位决定的,系统时钟可动态选择。
低速振荡器的实际时钟源由 SCC 寄存器的 FSS 位选择,高速振荡器的实际时钟源由 SCC 寄存器的 FHS 位选择。低速或高速系统时钟频率由 SCC 寄存器的CKS2~CKS0 位决定的。
请注意,两个振荡器必须做出选择,即一个高速和一个低速振荡器。
指令周期和时钟周期
指令周期与时钟周期的区別
(1)时钟周期也称为振荡周期,定义为时钟脉冲的倒数,是MCU中的最基本的时间单位。
(2)指令周期定义为执行一条指令所需要的时间
常见的IC均为4T架构,即1个指令周期是4个时钟周期
假定IC主频fSYS为HIRC 8MHz,则
时钟周期 = 1T = 1÷fSYS=1÷(8MHz)= 0.125μs
指令周期 = 4T = 4×0.125us = 0.5μs
振荡器的配置
在这里希望大家能够用汇编脚踏实地的一步步把寄存器的配置弄清楚同时学会看结构框图。下面几种时钟的配置都需要结合上面的结构框图进行理解。
HIRC和LIRC模式配置
汇编代码:
;=========HIRC模式===================
; CLR HIRC1
; CLR HIRC0 ;4M
;======;===========================
; CLR HIRC1
; SET HIRC0 ;8M
;;;==================================
; SET HIRC1
; CLR HIRC0 ;12M
;
; CLR CKS2
; CLR CKS1
; CLR CKS0 ;F=F
单片机在默认情况下的高速振荡器选择为内部高速RC,因此不需要进行使能操作。
;===============LIRC模式=============
SET CKS2
SET CKS1
SET CKS0
CLR HIRCEN
单片机在默认情况下的低速振荡器选择为内部低速RC,但是当使用低速作为单片机系统的时钟时(即fsub=fsys)需要将高速失能即添加代码句“ CLR HIRCEN”。
HXT和LXT模式配置
汇编代码
;;=======HXT模式============
; MOV A,11000000B
; LMOV PAS0,A ;对PAS0寄存器操作将引脚配置为OSC1
;
; MOV A,00000011B ;对PAS0寄存器操作将引脚配置为OSC2
; LMOV PAS1,A
;
; CLR HXTM ;晶振频率4.8MHZ OSC <10MHZ
; SET HXTM ;晶振频率 OSC >10MHZ
;
; SET HXTEN ;HXT振荡器使能控制位
; CLR WDT
; SNZ HXTF ;HXT振荡器稳定标志位
; JMP $-2
; SET FHS ;高频时钟选择位
; CLR HIRCEN ;HIRC失能
;
; CLR CKS2
; CLR CKS1
; CLR CKS0 ;F=F
;==========LXT模式===================
; MOV A,00110011B ; PA3.4設置為XT2,XT1
; LMOV PAS0,A ;LMOV间接寻址
; MOV A,00000000B
; LMOV PAS1,A
; SET LXTEN ;先使能后稳定
; CLR WDT
; SNZ LXTF ;LXT振荡器稳定标志位
; JMP $-2
;
; SET FSS ;等时钟频率稳定再打开外部时钟
;
; SET CKS2
; SET CKS1
; SET CKS0
振荡器频率验证
t_toggle_4096:
clr pac.7 ;设置为输出
set pa.7
t_ toggle_4096_loop:
set pa.7 ;1条指令的时间
delay(4095) ;delay 4095条指令的时间
clr Pa.7 ;1条指令的时间
delay(4093) ;delay 4093条指令的时间
jmp t_idd_4096_loop ;2条指令的时间
NOTE:
(1)指令需完全执行完后才会有对应的动作
(2)观察PA.7的波形可知,其波形为方波,周期为8192条指令时间
频率计算
从上面的代码可以看出 PA.7输出波形为一个duty为50%的方波,high/low width均为4096条指令时间,即PA.7一个周期的时间为8192指令时间,故PA.7方波的频率
f =1÷T = 1÷(8192指令时间) = 1÷(8192×4×(1÷fSYS))
→ f = 1÷(32768÷fSYS)
→ fSYS = 32768×f
f可通过示波器直接观察,从而推算出fSYS