多路可编程时钟输出。
例3.8 假设R/C时钟频率Fosc=11.0592MHz,设计程序实现6路时钟输出口输出100Hz~11.0592MHz频率范围的信号。实验代码如下: // 功能:输出P5.4(MCLKO)——11.0592MHz // 输出P3.5(T0_CLKO)——5M // 输出P3.4(T1_CLKO)——38.4KHz // 输出P3.0(T2_CLKO)——500Hz // 输出P0.4(T3_CLKO)——200Hz // 输出P0.6(T4_CLKO)——100Hz #include"STC15W4K.H" // 包含 "STC15W4K.H"寄存器定义头文件 #defineFOSC 11059200L // 假设振荡时钟为11.0592MHz #defineF5MHz (65536-11059200/2/5000000) //5MHz #defineF38_4KHz (65536-11059200/2/38400) //38.4KHz #defineF500Hz (65536-11059200/2/500) //500Hz #defineF200Hz (65536-11059200/2/200) //200Hz #defineF100Hz (65536-11059200/2/100) //100Hz voidmain(void) { port_mode(); // 所有IO口设为准双向弱上拉方式。 //***************** 设置主时钟输出,不分频***************** CLK_DIV = 0x40; // 当使用内部R/C时钟时,R/C时钟频率要求不大于12MHz。 //*****************设置T0和T1时钟输出 ************************* TMOD = 0x00; // T0和T1工作在方式0,16位自动重装计数器 AUXR = AUXR | 0x80; // T0工作在1T模式(建议使用1T模式,高低频率都方便输出) AUXR = AUXR | 0x40; // T1工作在1T模式(建议使用1T模式,高低频率都方便输出) // 设置T0的8位自动重装计数初值,输出频率=11059200/2/74约为1MHz TL0 = F5MHz; TH0 = F5MHz>>8; // 设置T1的8位自动重装计数初值,输出时钟频率18432000/2/240= 38400Hz TL1 = F38_4KHz; TH1 = F38_4KHz>>8; TR0 = 1; // 启动T0开始计数,对系统时钟进行分频输出 TR1 = 1; // 启动T1开始计数,对系统时钟进行分频输出 INT_CLKO =INT_CLKO|0x03; //允许T0与T1时钟输出 //*****************设置T2时钟输出************************* AUXR = AUXR | 0x04; // T2工作在1T模式(建议使用1T模式,高低频率都方便输出) T2L = F500Hz; // 设置T2重装时间常数的低字节 T2H = F500Hz>>8; // 设置T2重装时间常数的高字节 AUXR = AUXR |0x10; // 启动定时器T2 INT_CLKO |= 0x04; // 允许T2时钟输出 //*****************设置T3、T4时钟输出 ************************* T3L = F200Hz; // 设置T3重装时间常数的低字节 T3H = F200Hz>>8; // 设置T3重装时间常数的高字节 T4L = F100Hz; // 设置T4重装时间常数的低字节 T4H = F100Hz>>8; // 设置T4重装时间常数的高字节 T4T3M=0xbb; // T3、T4工作在1T模式并立即运行(建议使用1T模式,高低频率都方便输出) // 至此时钟已经输出,用户可以通过示波器观看到输出的时钟频率 while(1); } 使用VC97万用表测量输出,结果如下:P5.4(MCLKO)=11.07MHz, P3.5(T0_CLKO)=5.535MHz,P3.4(T1_CLKO)=38.44KHz,P3.0(T2_CLKO)=501Hz,P0.4(T3_CLKO)=201Hz,P0.6(T4_CLKO)=100.1Hz
|