51单片机时钟输出

传统51MCU的定时器没有时钟输出功能,此处使用的是增强型51MCU,型号stc12c5a60。

寄存器功能介绍之类的就省略了,数据手册上写的足够明了。由于protues不支持stc增强型MCU,只能烧写到芯片中,再用示波器验证。这点对于个人用户而言还是挺不方便的

真心希望哪天stc能提供protues的仿真元件。

STC提供了3路时钟输出,可以运行在1T/12T(即,对系统时钟12分频)模式下,1T模式感觉都可以取代其PCA的高速输出模式。

下面罗列代码,T0工作在1T模式/T1工作在12T模式。

#include "STC/STC12C5A.H"

#define MakeByte(target, Hi,Lo) \
do{ \
	target |= (((Hi)<<4)|(Lo)); \	
}while(0); \

#define SetTH(n,val) \
do{ \
	TH##n = val; \
}while(0); \

#define SetTL(n,val)  \
do{ \
	TL##n = val; \
}while(0); \

#define StartTn(n) \
do{ \
	TR##n = 0x01; \
}while(0);	\

#define Enable1TMode(n) \
do{ \
	AUXR |= n; \	
}while(0); \

#define EnableClkOut(n) \
do{ \
	WAKE_CLKO |= n; \
}while(0); \

int main()
{
	//T1 T0工作在定时器输出时,只能工作在模式2
	MakeByte(TMOD,0x02,0x02);
	//允许T1(P3.5)脚输出溢出脉冲
	EnableClkOut(T1CLKOEN);
	//T1 12分频,输出时钟频率 = Fosc/(12*(256-TH1)*2)
	SetTL(1,0x38);
	SetTH(1,0x38);
	//开启1T模式
	Enable1TMode(T0x12);
	//允许T0(P3.4)脚输出溢出脉冲
	EnableClkOut(T0CLKOEN);
	//T0 1分频 输出时钟频率 = Fosc/((256-TH1)*2)
	SetTL(0,0xF4);
	SetTH(0,0xF4);

	StartTn(1);
	StartTn(0)
	while(1);
}
感觉时钟输出功能就是把本来应该在中断中翻转引脚的功能,拿到MCU内部由片上系统实现了,所以输出的时钟频率被减半了。(2次时钟中断正好完成一个波形周期)
鉴于示波器比较简陋,就不上图了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值