ruan18278816371 发表于 2013-11-15 15:34:31

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。想不明白啊,误差这么大!

qllaoda1 发表于 2013-11-15 15:38:32

你没看代码里用的晶振是18.432M的吗?

qllaoda1 发表于 2013-11-15 15:41:54

#define   FOSC 18432000L
后面的注释确实是在乱写,看仔细点应该能看出来

lgg88 发表于 2013-11-15 15:51:03

晶振设置一下就好了      

ruan18278816371 发表于 2013-11-15 15:58:08

qllaoda1 发表于 2013-11-15 15:38 static/image/common/back.gif
你没看代码里用的晶振是18.432M的吗?

但是我照它手册公式计算是用11.0592M的晶振,TH1=112输出是38.4MKHz呢?18.432M我没代进去算过

ruan18278816371 发表于 2013-11-15 16:00:17

qllaoda1 发表于 2013-11-15 15:41 static/image/common/back.gif
#define   FOSC 18432000L
后面的注释确实是在乱写,看仔细点应该能看出来

它的注释是英文的,这些注释是我写的

LearningASM 发表于 2013-11-15 16:02:55

#define   FOSC 18432000L//波特率 软件编程实现时钟输出,L说明是一个LONG型的define(常量也有数据类型)
楼主,你定义的时钟是多少。。。。

qllaoda1 发表于 2013-11-15 16:04:33

ruan18278816371 发表于 2013-11-15 16:00 static/image/common/back.gif
它的注释是英文的,这些注释是我写的

恭喜你打败了你自己,你成功地骗过了自己。

ruan18278816371 发表于 2013-11-15 19:57:11

qllaoda1 发表于 2013-11-15 16:04 static/image/common/back.gif
恭喜你打败了你自己,你成功地骗过了自己。

谢谢仁兄的指教。

饭桶 发表于 2013-11-15 20:13:20

傻傻分不清楚               
页: [1]
查看完整版本: STC12C5A60S2