找回密码
 立即注册
查看: 1756|回复: 9

8H8K64U怎么在程序中自己修改内部给CPU用的高速IRC频率

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2025-04-30 08:40:45
已绑定手机

12

主题

164

回帖

1629

积分

超级版主

积分
1629
发表于 2022-11-25 15:43:15 | 显示全部楼层 |阅读模式
8H8K64U怎么在程序中自己修改内部给CPU用的高速IRC频率
QQ:2768446529  手机:19952605150(微信同号)
www.STCAI.com
回复

使用道具 举报 送花

0

主题

8

回帖

26

积分

新手上路

积分
26
发表于 2022-11-25 15:48:25 | 显示全部楼层
参考如下
9_`RY)LB5E%5QEE4C9@U4~Q.jpg
H9`IF0BR_)VN(TRZ@5A8MKM.jpg
E6_NJ_1{7Q8LF@[1{UUVT1X.jpg
}UBH]MOVYMY9_[HW{DFEH)6.jpg
SFIAI2B6XOPE]]})@P0JD87.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15632
发表于 2022-11-25 16:16:52 | 显示全部楼层
这个高级功能,动态修改时钟,自己在自己的用户程序中修改 主时钟频率必须会
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2022-12-15 11:47:44 | 显示全部楼层
选择系统时钟源,STC ISP的范例程序有源码。

    P_SW2 = 0x80;
    CLKSEL = 0x00;   //选择内部IRC ( 默认 )
    P_SW2 = 0x00;

/*
    P_SW2 = 0x80;
    XOSCCR = 0xc0;                              //启动外部晶振
    while (!(XOSCCR & 1));                      //等待时钟稳定
    CLKDIV = 0x00;                              //时钟不分频
    CLKSEL = 0x01;                              //选择外部晶振
    P_SW2 = 0x00;
*/

/*
    P_SW2 = 0x80;
    IRC32KCR = 0x80;                            //启动内部32K IRC
    while (!(IRC32KCR & 1));                    //等待时钟稳定
    CLKDIV = 0x00;                              //时钟不分频
    CLKSEL = 0x03;                              //选择内部32K
    P_SW2 = 0x00;
*/

0

主题

1

回帖

24

积分

新手上路

积分
24
发表于 2023-8-10 14:34:00 | 显示全部楼层
梁*** 发表于 2022-12-15 11:47
选择系统时钟源,STC ISP的范例程序有源码。

    P_SW2 = 0x80;

1.png

STC8H3K64S4调频的时候,VRTRIM这个寄存器为什么没有呢,是不是早就取消了,技术手册上没改;我实测不需要VRTRIM这行代码也行

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

积分
5214
发表于 2023-12-7 15:39:45 | 显示全部楼层
如果在运行过程中动态修改IRC频率,“等待时钟稳定”大约用多久?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2025-03-26 09:09:59

6

主题

104

回帖

351

积分

中级会员

积分
351
发表于 2024-9-26 16:01:28 | 显示全部楼层
梁*** 发表于 2022-12-15 11:47
选择系统时钟源,STC ISP的范例程序有源码。

    P_SW2 = 0x80;

梁工您好,我想请假下,为什么我自己定义的内部时钟源24M 一直不准
#include "STC8Hxxx.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
#include "test.h"

#define     MAIN_Fosc       24000000L   //定义主时钟

/*************  功能说明    **************
程序使用
AIN1-P1.1
AIN2-P1.2
BIN1-P1.5
BIN2-P3.4
驱动步进电机
******************************************/
#include "intrins.h"

sfr     VRTRIM  =   0xA6;

#define CKSEL           (*(unsigned char volatile xdata *)0xfe00)
#define CKDIV           (*(unsigned char volatile xdata *)0xfe01)
#define IRC24MCR        (*(unsigned char volatile xdata *)0xfe02)
#define XOSCCR          (*(unsigned char volatile xdata *)0xfe03)
#define IRC32KCR        (*(unsigned char volatile xdata *)0xfe04)

#define USBCHIPID
#define CPUIDBASE   0xfde0

#define T22M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0b))   //22.1184MHz
#define T24M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0c))   //24MHz
#ifdef  USBCHIPID
#define T27M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0d))   //27MHz
#define T30M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0e))   //30MHz
#define T33M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0f))   //33.1776MHz
#define T35M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x10))   //35MHz
#define T36M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x11))   //36.864MHz
#define T40M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x12))   //40MHz
#define T44M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x13))   //44.2368MHz
#define T48M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x14))   //48MHz
#else
#define T20M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0d))   //20MHz
#define T27M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0e))   //27MHz
#define T30M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x0f))   //30MHz
#define T33M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x10))   //33.1776MHz
#define T35M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x11))   //35MHz
#define T36M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x12))   //36.864MHz
#define T40M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x13))   //40MHz
#define T45M_ADDR   (*(unsigned char volatile xdata *)(CPUIDBASE + 0x14))   //45MHz
#endif
#define VRT6M_ADDR  (*(unsigned char volatile xdata *)(CPUIDBASE + 0x15))   //VRTRIM_6M
#define VRT10M_ADDR (*(unsigned char volatile xdata *)(CPUIDBASE + 0x16))   //VRTRIM_10M
#define VRT27M_ADDR (*(unsigned char volatile xdata *)(CPUIDBASE + 0x17))   //VRTRIM_27M
#define VRT44M_ADDR (*(unsigned char volatile xdata *)(CPUIDBASE + 0x18))   //VRTRIM_44M
//========================================================================
// 函数: void delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-3-9
// 备注:
//========================================================================
void delay_ms(unsigned int ms)
{
     unsigned int i;
     do{
          i = MAIN_Fosc / 10000;
          while(--i);   //10T per loop
     }while(--ms);
}
void Delay1ms(void)        //@24.000MHz
{
        unsigned char data i, j;

        i = 24;
        j = 85;
        do
        {
                while (--j);
        } while (--i);
}
void Delay10ms(void)        //@24.000MHz
{
        unsigned char data i, j;

        i = 234;
        j = 115;
        do
        {
                while (--j);
        } while (--i);
}
/******************** 主函数 **************************/
void main(void)
{

        P_SW2 = 0x80;
        CKSEL = 0x00;                               //选择内部IRC ( 默认 )
        P_SW2 = 0x00;
   P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能
   P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;
    //选择24MHz
    CLKDIV = 0x04;
    IRTRIM = T24M_ADDR;
    VRTRIM = VRT27M_ADDR;
    IRCBAND &= ~0x03;
        IRCBAND |= 0x02;
        CLKDIV = 0x00;

//        Timer0_Init();
        //Timer0_Config(0, MAIN_Fosc / 1000);        //t=0: reload值是主时钟周期数,  t=1: reload值是时间(单位us)
        ET0 = 1;
        EA = 1;
        while(1)  
        {
          delay_ms(1);
          delay_ms(1);
          Delay1ms();
          Delay1ms();

        }

     
}

点评

实际频率多少?你从P5.4输出时钟的10分频看看其频率。  详情 回复 发表于 2024-9-26 18:40
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-9-26 18:40:19 | 显示全部楼层
huatl*** 发表于 2024-9-26 16:01
梁工您好,我想请假下,为什么我自己定义的内部时钟源24M 一直不准
#include "STC8Hxxx.h"       //包含 ...

实际频率多少?你从P5.4输出时钟的10分频看看其频率。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2025-03-26 09:09:59

6

主题

104

回帖

351

积分

中级会员

积分
351
发表于 2024-9-27 08:39:10 | 显示全部楼层
梁*** 发表于 2024-9-26 18:40
实际频率多少?你从P5.4输出时钟的10分频看看其频率。

梁工,刚刚测量P5.4引脚实际频率480k左右。

点评

多少分频?如果是10分频,主频为4.8MHz。  详情 回复 发表于 2024-9-27 09:47
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-9-27 09:47:49 | 显示全部楼层
huatl*** 发表于 2024-9-27 08:39
梁工,刚刚测量P5.4引脚实际频率480k左右。

多少分频?如果是10分频,主频为4.8MHz。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 05:31 , Processed in 0.279732 second(s), 121 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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