找回密码
 立即注册
查看: 1272|回复: 19

STC8H8K64U內部晶振精度 | 已解决

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-03 21:42:55

8

主题

87

回帖

134

积分

注册会员

积分
134
发表于 2024-1-19 11:59:50 | 显示全部楼层 |阅读模式
各位同学,我用T0定时器,设置2us中断一次,计数位加1,中断250次后计数位清零再次开始计数,内部晶振产生24M时针。想以此方法产生2KHz的信号,怎么产生出来的信号是1.5KHz左右的?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15662
发表于 2024-1-19 12:37:04 | 显示全部楼层
截图202401191236021587.jpg

截图202401191236339230.jpg


不可能,一定是你程序错,方法错
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15662
发表于 2024-1-19 12:40:18 | 显示全部楼层
截图202401191237573654.jpg

截图202401191238249103.jpg

看懂这个 T0在P3.5/T0CLKO,
直接对 CPU时钟分频输出,不需要允许 T0中断
截图202401191239035532.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15662
发表于 2024-1-19 12:43:01 | 显示全部楼层
不除 12, 重装数如下,无需中断,实际测试下
用中断是严重的不看权威数据手册


截图202401191242145698.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15662
发表于 2024-1-19 12:44:59 | 显示全部楼层
截图202401191243398257.jpg

截图202401191244144555.jpg

截图202401191244542068.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-05-04 12:50:41

21

主题

564

回帖

2682

积分

金牌会员

积分
2682
发表于 2024-1-19 13:35:56 | 显示全部楼层
用5楼程序试试,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-03 21:42:55

8

主题

87

回帖

134

积分

注册会员

积分
134
发表于 2024-1-19 13:50:10 | 显示全部楼层

谢谢管理员百忙中回复这么多,主要代码见下面,完整代码见附件。以前用同一块板,基本上相同的代码是可以产生2KHz信号的,但现在编译过后,24MHz设置下载后就是在Ptest脚得不到2Khz信号。我也呐闷了,我现在就想着,会不会是电脑或者单片机出问题了



        AUXR |= 0x80;                        //?????1T??
        TMOD &= 0xF0;                        //???????
        TL0 = 0xD0;                                //???????
        TH0 = 0xFF;                                //???????
        TF0 = 0;
        ET0 = 1;
        EA = 1;
        TR0 = 1;




void T0_Isr() interrupt 1
{
        us2count++;
       
        if(us2count == 250)        //us2count back to 1 per 500us(2us x 250)
        {
                us2count = 0;               
        }

        if (us2count < 246)
        {               
                off_cur(3);
                Ptest = 0;
//                P0M0 &= 0xdf;        //high_resistor mode, no current output
//                DIS1 = 1;
        }
        else        //get current charging pulse
        {       
                out_cur(3);
                Ptest = 1;
//                DIS1 = 0;
//                P0M0 |= 0x20;        //open_drain mode, continue current                       
        }       
}



main.c

2.97 KB, 下载次数: 109

全部代码

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-03 21:42:55

8

主题

87

回帖

134

积分

注册会员

积分
134
发表于 2024-1-19 14:47:11 | 显示全部楼层

对,怀疑时钟变了,可以想个办法测量时钟。有空试下,谢谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15662
发表于 2024-1-19 21:41:58 | 显示全部楼层
直接在P3.5,  T0 对系统时钟分频输出 T0CLKO,看系统时钟是多少
截图202401192142229969.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-03 21:42:55

8

主题

87

回帖

134

积分

注册会员

积分
134
发表于 2024-1-20 20:33:48 | 显示全部楼层
神*** 发表于 2024-1-19 21:41
直接在P3.5,  T0 对系统时钟分频输出 T0CLKO,看系统时钟是多少

按照您提供的方法,在T0CLKO可以得到250K(TH0:0xff,TL0: 0xd0,1T模式,24M时针)的频率,说明了系统时针频率正常。
最后经过分析发现是,T0中断程序中代码过多,可能出现一个中断服务程序还未完成时,下一个中断又来了,从而出现此现象。
最后谢谢您的指导。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 17:46 , Processed in 0.246255 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表