51单片机时钟输出

来源:互联网 发布:乐视 知乎 编辑:程序博客网 时间:2024/06/05 09:42

传统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工作在定时器输出时,只能工作在模式2MakeByte(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次时钟中断正好完成一个波形周期)
鉴于示波器比较简陋,就不上图了

0 0
原创粉丝点击