新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > C8051F320-时钟和4in1八段管

C8051F320-时钟和4in1八段管

作者:时间:2012-08-16来源:网络收藏
包含一个内部振荡器,也可以采用其他方式提供振荡。手头没有任何元器件,所以只考虑使用内部振荡器。

一、设定

系统复位时,默认使用内部振荡器作为系统,出厂前已经将基频定为12MHZ,可以根据需要对其进行分频操作。

分频方法: 寄存器OSCICN 最低两位D1D0的值决定了分频数,00~11分别为8分频、4分频、2分频、不分频。

此外,D7=1表示内部振荡器使能,反之禁止内部振荡器

D6=1内部振荡器频率准备好标志

D5=1强行挂起内部振荡器

寄存器OSCICL 内部振荡器校准,D4~D0的数值决定了校准后的频率偏差,计算方法由如下公式决定:


点击浏览下一页

第二项的分母为基准频率,第三项为D4~D0,浮动范围0~31,根据这个公式,当基准设置为12M时,能够设置的偏差很小。

△T=0.0025×0.083us×(0~31)=0 ~ 0.0064325 us

以12Mhz为例,12M对应的周期为0.0833us,加上该偏差为0.0897625us,对应频率为11.14M。

也就是说,当基准频率为12 Mhz时,最多可以调整为11.14M

以此类推。2分频时,6Mhz,最多可以5.57M

4分频时,3Mhz,最多可以2.78M

8分频时,1.5Mhz,最多可以1.39M

二、的一点小收获

偶然发现自己以前写显示程序实在是太老土了,display()铁打不动就是选一个管,送个段码,延时,选下一个管,段码,延时,再选下一个管。。。 这样一来显示程序必定要消耗大量的时间在显示程序上。当系统时序要求高时,这种写法根本就是自杀行为。

正确方法应该是,设置定时器在一个足够小的时间上,比如10ms,利用一个变量保存中断的次数。每次进入中断,根据(变量%4)的值,来驱动一个管显示数字,下一次中断时切换下个管,以此类推。。

三、F320内部定时/计数器的使用

芯片内部有4个定时计数器,其中T0T1与51兼容,T2T3只能定时不能计数,但可以实现16位自动重装计数值。

寄存器TMOD TH0 TL0 TH1 TL1 以及T0T1相应的启停位中断位不变。

新增部分:

1、CKCON 控制器 复位值00H

D7D6控制T3高低位的时钟源,1为选择系统时钟,0为用户设定。

D5D4控制T2高低位的时钟源,1为选择系统时钟,0为用户设定。

*如果设置为单个16位定时器,则D5D7无效

D3D2作用类似,分别控制T1T0的时钟源,1为系统时钟,0为分频时钟,默认为分频时钟。其分频系数由D1D0决定,

00——12分频 01——4分频 10——48分频 11——8分频

2、定时器T2

和T0做个对照:

TH0 —— TMR2H TL0 —— TMR2L

TMOD —— TMR2CN (D4D3决定T2工作方式)

TF0 —— TF2H(16位时,H起作用)/TF2L ET0 —— IE.5 TR0 —— TR2(双8位时,只能控制高八位定时器,低八位永远工作)

TF2LEN =1 低八位时钟中断允许位

TMR2RLH TMR2RLL 专用于高低八位的计数值重载

设为2个八位时钟时,共用一个中断,必须在中断程序中检查对应的标志位才能确定是哪一个时钟计数到,且标志位必须手动清零

另有usb起始帧捕捉模式,暂时不研究

细节: TMR2H 控制字 D7D6 为TF2H 、TF2L,中断标志

D5为 TF2LEN,定时器2低字节中断允许位

D4 为T2SOF 没研究那部分,应该给0,表示禁用

D3 为T2SPLIT 1表示双8位,0表示单16位,均可自动重载计数值

D2 为TR2,高八位时钟启动(16位时钟不知道怎么启动。。。。)

D1无用D0 为T2外部时钟选择,需要与上面的CKCON对应,没研究。

上一页 1 2 下一页

关键词: C8051F320 时钟 八段管

评论


相关推荐

技术专区

关闭