/**********************************************************************
**********************************************************************/
//加载头文件
#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转换结果也不对,最后发现主频都不对!神奇!
|
@shenxiaolin :没有结果 问题依然存在 只能按这个比例系数先搞样品了
@henangongda123 :相当于现在还没有找到解决方案?我看楼下评论很多的,可以考虑一下
@shenxiaolin :我是每次ISP都勾选修改硬件选项,一般选择12M和24M这2个频率,然后程序内部就一句话,就是修改选择内部时钟的那个寄存器。之前的案子需要精确延时、串口通信的,我会选择外部晶振,程序里面,然后没遇到问题;简单的案子用内部12M RC,也没仔细看主频多少,这次是用外部晶振频率也对不上,导致红外遥控等以前调试过的程序用不了。。。
话说,你不会用的内部时钟吧?