打印
[技术讨论]

STC8G官方例程T0定时1ms实测800us,悬赏30元找问题!

[复制链接]
2849|71
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近也是活见鬼了,用了这么久STC8G、8H的芯片,都量产过不少,这两天却发现主频不对问题,真的很郁闷!现在程序都改到官方给的例程这么简单了,TMD还是不行,就一个简单的T0定时器定时1ms翻转IO口,示波器怎么测都是800us左右!可以确定示波器没问题,STC芯片从淘宝和嘉立创两家买的,都一样的结果!程序代码如下,谁能帮忙找到问题所在,我这边付费3-50元!

使用特权

评论回复
评论
henangongda123 2022-11-11 18:20 回复TA
@shenxiaolin :没有结果 问题依然存在 只能按这个比例系数先搞样品了 
shenxiaolin 2022-11-11 13:30 回复TA
@henangongda123 :相当于现在还没有找到解决方案?我看楼下评论很多的,可以考虑一下 
henangongda123 2022-11-9 20:49 回复TA
@shenxiaolin :我是每次ISP都勾选修改硬件选项,一般选择12M和24M这2个频率,然后程序内部就一句话,就是修改选择内部时钟的那个寄存器。之前的案子需要精确延时、串口通信的,我会选择外部晶振,程序里面,然后没遇到问题;简单的案子用内部12M RC,也没仔细看主频多少,这次是用外部晶振频率也对不上,导致红外遥控等以前调试过的程序用不了。。。 
shenxiaolin 2022-11-8 10:37 回复TA
话说,你不会用的内部时钟吧? 

相关帖子

沙发
henangongda123|  楼主 | 2022-11-7 13:22 | 只看该作者
/**********************************************************************
**********************************************************************/
//加载头文件
#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转换结果也不对,最后发现主频都不对!神奇!

使用特权

评论回复
板凳
henangongda123|  楼主 | 2022-11-7 13:27 | 只看该作者

定时1ms翻转IO口得到的波形始终是800us左右,无论是内部12MRC振荡器还是外部12M晶振;硬件PWM频率也是,设置的是500Hz,实测是670Hz左右;P5.4直接输出PWM波形也是,设置是100KHz,实测是130KHz左右。。。

使用特权

评论回复
地板
henangongda123|  楼主 | 2022-11-7 13:33 | 只看该作者
手头上有STC8G、STC8H芯片的都可以试一下,我是真的不敢相信会遇到这样的问题!

使用特权

评论回复
5
henangongda123|  楼主 | 2022-11-7 13:45 | 只看该作者
有没有高手能解决的?能找到问题的,里面给50元

使用特权

评论回复
6
henangongda123|  楼主 | 2022-11-7 13:48 | 只看该作者
刚才有个朋友说,STC8可能不是12T,是15T,这怎么可能?
还有说头文件要换,已经换了最新的,还是一样结果。。。

使用特权

评论回复
7
一周一天班| | 2022-11-7 14:03 | 只看该作者
本帖最后由 一周一天班 于 2022-11-7 14:22 编辑

错了

使用特权

评论回复
8
一周一天班| | 2022-11-7 14:04 | 只看该作者
本帖最后由 一周一天班 于 2022-11-7 14:28 编辑

内部IRC选择的是多少?是不是没较准好。你重新下载个ISP软件试试

使用特权

评论回复
9
chongdongchen| | 2022-11-7 14:34 | 只看该作者
1、确认下载选项没问题
2、按照上面你自己的程序,新建一个工程,再试试

使用特权

评论回复
10
chongdongchen| | 2022-11-7 14:38 | 只看该作者
检查其他C里面,是否有void XXX(void) interrupt 1中断函数影响了定时器周期(因为编译也能通过

使用特权

评论回复
11
一周一天班| | 2022-11-7 14:44 | 只看该作者
你把ISP界面放出来。
CLKDIV肯定不能改。要改需要技巧。

使用特权

评论回复
12
henangongda123|  楼主 | 2022-11-7 14:48 | 只看该作者
一周一天班 发表于 2022-11-7 14:04
内部IRC选择的是多少?是不是没较准好。你重新下载个ISP软件试试

都试了,没用,一样的结果,不管是选内部12M RC还是外部晶振都一样

使用特权

评论回复
13
henangongda123|  楼主 | 2022-11-7 14:49 | 只看该作者
chongdongchen 发表于 2022-11-7 14:38
检查其他C里面,是否有void XXX(void) interrupt 1中断函数影响了定时器周期(因为编译也能通过) ...

没用其他程序啊,就这么几行代码

使用特权

评论回复
14
henangongda123|  楼主 | 2022-11-7 14:51 | 只看该作者

ISP界面

使用特权

评论回复
15
chongdongchen| | 2022-11-7 14:52 | 只看该作者
henangongda123 发表于 2022-11-7 14:49
没用其他程序啊,就这么几行代码

我刚好有块STC8H的板子,用你的程序试过了没问题,波形1ms翻转正确:建议你不要怕麻烦,新建工程再试试


使用特权

评论回复
16
一周一天班| | 2022-11-7 14:52 | 只看该作者
你启动ISP软件后啥也不改,默认11.0592,看看结果。外部晶振需要修改CLKSEL=1.
0.76这个值好像24M和30M的比值。

使用特权

评论回复
17
henangongda123|  楼主 | 2022-11-7 14:54 | 只看该作者
chongdongchen 发表于 2022-11-7 14:52
我刚好有块STC8H的板子,用你的程序试过了没问题,波形1ms翻转正确:建议你不要怕麻烦,新建工程再试试

...

卧槽 为毛我这两天都解决不了这个问题啊 感觉好神奇,都不可能存在的问题,因为之前一直在用,一直都没有这种低级错误,难道是我的Keil要换?用了一年多都没换,包括头文件

使用特权

评论回复
18
一周一天班| | 2022-11-7 14:57 | 只看该作者
确定烧录的型号就是界面中的STC8G?

使用特权

评论回复
19
henangongda123|  楼主 | 2022-11-7 15:01 | 只看该作者
一周一天班 发表于 2022-11-7 14:52
你启动ISP软件后啥也不改,默认11.0592,看看结果。外部晶振需要修改CLKSEL=1.
0.76这个值好像24M和30M的比 ...

确定是没有动 我现在都不用外部晶振测了,都是内部RC 12M测试,程序上屏蔽了所有其他功能,就这么简单的几行代码,但现在不管怎么搞,它就是存在这个0.76的比值,包括AD结果、PWM频率、T0定时周期等等,真的活见鬼,之前的案子都简单,不需要特别关注主频,之前调试红外遥控器的时候也没出问题,现在之前的程序用不了,我才发现是主频怎么搞都不对造成的。

使用特权

评论回复
20
henangongda123|  楼主 | 2022-11-7 15:09 | 只看该作者
一周一天班 发表于 2022-11-7 14:52
你启动ISP软件后啥也不改,默认11.0592,看看结果。外部晶振需要修改CLKSEL=1.
0.76这个值好像24M和30M的比 ...

如果不修改ISP软件,启动后就是11.0592M RC,是920us左右,好像还挺对!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

2116

帖子

19

粉丝