STC12C5A60S2
/*------------------------------------定时器1可编程时钟输出
-----------------------------------*/
#include<reg52.h>
#define FOSC 18432000L//波特率 软件编程实现时钟输出,L说明是一个LONG型的define(常量也有数据类型)
/*定义常量*/
//#define MODE 1T
#ifdef MODE 1T
#define F38_4kHz (256-FOSC/2/38400)//T1工作在1T模式时 fosc=11.0592MHz 括号表达式算得112
#else
#define F38_4kHz (256-FOSC/2/12/38400)//T1工作在12T模式
#endif
/*定义特殊功能寄存器*/
sfr AUXR = 0X8E;
sfr WAKE_CLKO = 0X8F;
sbit T0CLKO = P3^5;
void main ()
{
#ifdef MODE 1T
AUXR = 0X40;
#endif
TMOD = 0X20;//设置定时器1为工作模式二,八位自动重装初值
TL1 = F38_4kHz;
TH1 = F38_4kHz;//TH1=112照数据手册公式算出刚好对应输出38.4KHz
TR1 = 1;
WAKE_CLKO = 0X02;
while(1);
}
最近学习这款STC12C5A60S2单片机,这代码是照它数据手册敲的,实现的功能是可以在单片机的P3^5口输出38.4KHz的时钟脉冲,可我用示波器测只有23KHz而已,比它手册说明输出远远差了15KHz左右,难道是我硬件问题吗?我是把这块单片机插到我的最小系统板用的晶振也是11.0592MHz。想不明白啊,误差这么大! 你没看代码里用的晶振是18.432M的吗? #define FOSC 18432000L
后面的注释确实是在乱写,看仔细点应该能看出来 晶振设置一下就好了 qllaoda1 发表于 2013-11-15 15:38 static/image/common/back.gif
你没看代码里用的晶振是18.432M的吗?
但是我照它手册公式计算是用11.0592M的晶振,TH1=112输出是38.4MKHz呢?18.432M我没代进去算过 qllaoda1 发表于 2013-11-15 15:41 static/image/common/back.gif
#define FOSC 18432000L
后面的注释确实是在乱写,看仔细点应该能看出来
它的注释是英文的,这些注释是我写的 #define FOSC 18432000L//波特率 软件编程实现时钟输出,L说明是一个LONG型的define(常量也有数据类型)
楼主,你定义的时钟是多少。。。。 ruan18278816371 发表于 2013-11-15 16:00 static/image/common/back.gif
它的注释是英文的,这些注释是我写的
恭喜你打败了你自己,你成功地骗过了自己。 qllaoda1 发表于 2013-11-15 16:04 static/image/common/back.gif
恭喜你打败了你自己,你成功地骗过了自己。
谢谢仁兄的指教。 傻傻分不清楚
页:
[1]