2495|1

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【沁恒试用】三、系统时钟及TIMER0 [复制链接]

本帖最后由 lising 于 2019-7-2 15:02 编辑

       本次实验利用CH549内部的定时器资源产生定时时间,控制板载的LED翻转产生闪烁效果。实验的主要目的是为了更深入地学习了解CH549的时钟系统及定时器资源。

一、实验资源
1、CH549EVT学习开发板;
2、Keil v5.28.0.0;
3、CH549开发资料汇总.rar;
4、WCHISPTool v2.70;

5、CH549EVT其它相关文档;

6、逻辑分析仪;

其它更多资讯可访问江苏沁恒股份有限公司  http://wch.cn/

 

二、实验准备

1、认识CH549的时钟系统。下面是CH549 时钟系统及结构图:

 

       从上图可以直观地了解到CH549对于时钟可以有两种选择,即内部时钟24MHz及外部晶振,选择是通过时钟控制寄存器“CLOCK_CFG”的“bOSC_EN_INT”进行二选一设置。“CLOCK_CFG”复位值为“0X83”,即bOSC_EN_INT=1使用内部时钟24MHz。被选择的时钟做为原始时钟经PLL倍频后Fpll兵分两路:一路经USB时钟分频器分频后供USB设备使用;另一路则通过“CLOCK_CFG”的[2:0]“MASK_SYS_CK_SEL”系统时钟分频器进行分频,分频后的系统时钟“Fsys”供CH549其它资源使用,当然对于部分模块还可以根据不同的使用要求进行更一步的分频处理。“MASK_SYS_CK_SEL”系统时钟分频器可对“Fpll”进行八种分频,为应用提供了极大的灵活性。

通过学习了解可以看到CH549的时钟系统功能强大,并且应用灵活,方便了产品的设计应用。

 

2、定时器资源。CH549具备T0/T1/T2等三组标准51定时器。这次实验使用了TIMER0的定时器模式1,并启用中断。下面是TIMER0的系统图:

       从图中可以看出,模式1对于计时时钟有多种选择方式,通过寄存器“T2MOD”相关位“bTMR_CLK”、“bT0_CLK ”进行配置。“T2MOD”复位值为“0X00”,即这使得定时/计数的应用更加灵活。

 

3、GPIO端口。CH549的GPIO功能较之传统51也有着极大的改进,使得GPIO面向不同的应用更加灵活方便。主要表现在增加了GPIO端口的输出模式寄存器“Pn_MOD_OC”,通过对其进行配置可将GPIO端口配置为“推挽输出”或“开漏输出”;增加了GPIO端口的输入、输出方向选择和“开漏输出”模式下的上拉电阻使能控制,通过对端口方向控制和上拉使能寄存器“Pn_DIR_PU”的配置,可将GPIO端口在“推挽输出”模式下设置为“输入”或“输出”;或将GPIO端口在“开漏输出”模式下设置为“使能上拉电阻”或“禁止上拉电阻”。这些都使得GPIO功能更加强大,更加灵活。

三、本次实验。

1、资源配置

       使用定时器T0产生50ms中断,在中断函数中将与P22连接的LED取反,使其产生闪烁。为了便于实验将CLOCK_CFG=0X83(系统复位值)即使用内部时钟Fosc=24MHz时Fsys=12MHz;T2MOD=0X00(系统复位值)即“bT0_CLK=0”,T0内部时钟频率选择标准时钟Fsys/12。

2、程序实现

程序比较简单,直接对照手册配置了寄存器:

#include "CH549.H"

sbit D2 = P2^2;
sbit D3 = P2^3;
sbit D4 = P2^4;
sbit D5 = P2^5;

void CLK_Config(void)
{
  CLOCK_CFG = 0x83;
}

void GPIO_Config(void)
{
	P2_MOD_OC &= ~(D2|D3|D4|D5);//设置P2.2、P2.3、P2.4、P2.5为推挽输出
	P2_DIR_PU |= (D2|D3|D4|D5); 
}

void TIMER0_Config(void)
{
	//bTMR_CLK=1使用没有分频的系统主频Fsys作为计数时钟;
	//bTMR_CLK=0使用分频的系统主频Fsys作为计数时钟;
	//bT0_CLK=0 选标准时钟Fsys/12;
	//bT0_CLK=1 选快速时钟Fsys/4(bTMR_CLK=0)或 Fsys(bTMR_CLK=1);
	
	T2MOD = 0X00;		
	TMOD = 0X01;	//配置TIMER0为定时器工作方式1(16位)
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;

	TR0 = 1;			//启动TIMER0
	ET0 = 1;			//TIMER0中断允许
	EA = 1;				//全局中断使能
}

void main(void)
{
	CLK_Config();
	GPIO_Config();
	TIMER0_Config();
	while(1)
	{	
	}
}

void TIMER0_ISR(void) interrupt 1
{
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	D2 = ~D2;
}

 

四、实验结果

 

五、实验总结

       通过这次实验对CH549的系统时钟、定时器T0、GPIO配置、定时器中断等有了更进一步的认识和了解,算是为CH549其它强大资源的实验学习进行了热身准备。


此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处

 

最新回复

感谢用心测评我司产品,请问您测评过程中有何疑惑或对产品有何建议呢。在以后的资源应用中保持密切联系呢!   详情 回复 发表于 2019-7-2 16:33
点赞 关注
 

回复
举报

46

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

感谢用心测评我司产品,请问您测评过程中有何疑惑或对产品有何建议呢。在以后的资源应用中保持密切联系呢!

 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表