- /**********************************************************************
- **********************************************************************/
- //加载头文件
- #include "STC8G.h" //加载MCU头文件
- #include "intrins.h" //加载nop指令头文件
- //宏定义
- #define uchar unsigned char
- #define uint unsigned int
- #define ushort unsigned short
- #define ulong unsigned long
- //引脚定义
- sbit DO = P3^3; //定义信号输出DO
- //全局标志位
- //全局变量
- /********* 端口初始化操作 **********/
- /***********************************************************
- 函数名: Port_Init()
- 功 能: 端口初始化配置
- 参 数: 无
- 返回值: 无
- /**********************************************************/
- void Port_Init(void)
- {
- //SPI信号输出(P3.3)
- P3M1 &= (~0x08); //配置P3.3端口为输出方式
- P3M0 |= 0x08; //配置端口推挽输出
- }
- /***********************************************************
- 函数名: T0_Init()
- 功 能: 定时器0初始化,用于测量红外脉冲宽度
- 参 数: 无
- 返回值: 无
- /**********************************************************/
- void T0_Init(void)
- {
- AUXR &= 0x7F; //T0选择12T模式(系统时钟12分频),时钟频率为:12MHz/12=1MHz
- TMOD &= 0xF0; //T0选择模式0(自动重装载模式)
- TL0 = 0x18;
- TH0 = 0xFC; //从0开始计时,计数一次耗时:(65535-64535=1000)*1us=1ms
- TR0 = 1; //开启定时器0
- ET0 = 1; //使能定时器0溢出中断
- EA = 1; //使能全局中断
- }
- void TM0_Isr(void) interrupt 1
- {
- DO = ~DO;
- }
- /******************** 主函数 **************************/
- void main(void)
- {
- Port_Init(); //端口初始化
- T0_Init(); //T0定时器初始化
- while(1);
- }
试过,改成外部12M晶振也是这样的结果,反正就是主频不对,这种问题之前从来没有遇到过,用STC8G芯片做过红外遥控控制、串口通信等案子,都量产过,这次调试发现硬件PWM输出频率不对、之前的红外遥控程序也不用了,AD转换结果也不对,最后发现主频都不对!神奇!
|