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
- 51单片机时钟输出
- 51单片机时钟程序
- 51单片机可调时钟
- 51单片机时钟
- 51单片机实现时钟
- 51单片机—串口时钟
- 51单片机—实时时钟
- 51单片机控制的电子时钟系统
- 51单片机(AT89C52)DS1302时钟芯片程序
- 利用51单片机制作的电子时钟
- 51单片机DS1302实时时钟驱动程序
- 51单片机—定时器显示时钟
- 51单片机DS1302时钟芯片简单程序
- 51单片机完成时钟形式显示
- 51单片机(计时器+时钟应用)
- 51单片机-1602液晶显示的时钟代码
- 基于51单片机的电子时钟
- 【单片机】51单片机时钟——利用中断
- Heritrix
- 获取全局描述符表GDT的内容
- tolua++实现分析
- hdu1022
- ubuntu安装graphite
- 51单片机时钟输出
- enum
- oracle学习笔记 二
- 实验室第八周工作报告
- 第三章 内核对象
- sql的count的反过程
- POJ3061 Subsequence(双指针)
- Uncompressing Linux... done, booting the kernel (问题集锦)
- 工作周报八