一、准备工作
1、KEIL C51编译环境
2、CodeGen8 代码生成器
3、MC96F6332D 开发板
4、USB-OCD II仿真器
二、内部WT时钟代码生成
1、在CodeGen8 代码生成器的外设窗口中选择内部RC时钟作为时钟源,设置时钟源的频率为8MHz;内部的WT时钟选择主时钟的256分频(MC96F6332内部没有32.768kHz的副时钟,所以无法选择fSub作为RTC的时钟频率),周期选择fWCK/(2^14 x (7bit WTDR Value+1))具体配置如下图①,生成的代码如下图②所示;
特别说明:虽然我们主动使能了中断,但是CodeGen8 却把WTCR寄存器确配置为了0x8D,没有把中断的Bit置位; 严格意义上应该配置为0x9D才对,详细讲解见下面WTCR寄存器说明;但经过实际的验证,配置为0x8D时中断也是可以正常响应的(切记IE3 |= 0x04;这句如果不配置,中断则不会响应),此处推荐按照正常的逻辑配置为0x9D。
2、点击CodeGen8 中的C 图标,自动打开KEIL C51软件;
3、在主函数的循环体中增加如下代码,因为有配置WT的中断,所以可以在WT的中断函数中进行标志位的置位,主函数中不断的判断是否有WT中断标志位置位,如果置位则进行串口提示信息的打印;代码如下:
while(1)
{
if(WT_STATE)
{
WT_STATE = 0;
printf("System RTC 1 Hz\n");
}
}
4、编译工程,结果如下所示:
5、关于WT工作流程简介:
1)、WT的时钟选择内部的fx的256分频时钟,再经过Determine interrupt interval决定其周期;这里选择fWCK/(2^14 x (7bit WTDR Value+1));所以最终的WT周期计算为T=fWCK/(2^14 x (7bit WTDR Value+1))=((fX/256) / (2^14)*(1+1)=(8MHz/256)/(2^14)*2)≈0.9537s。WT的方框图如下所示:
2)、WTCR寄存器说明(初始化为:0x9D):
3)、WTDR寄存器:
6、点击编译器的下载按钮,将刚刚编译好的代码下载到MCU中进行仿真调试。
7、连接串口助手到PC端,可以看到代码运行符合预期目标,串口大约1秒输出1次提示信息,如下所示:
三、实验现象(具体内容可以参考工程中的Readme.txt文件)
1、MCU主频选择为内部8MHz;
2、RTC的时钟周期计算公式为:T=fWCK/(2^14 x (7bit WTDR Value+1))=((fX/256) / (2^14)*(1+1)=(8MHz/256)/(2^14)*2)≈0.9537s,串口大概1Hz的频率输出提示信息。
3、具体的代码可以访问链接:https://share.weiyun.com/5zLSrl7;进行免费获取。
因为小编自己能力水平有限,文中难免有错误或表达失误的信息,还望广大阅读者留言批评指正,谢谢。