- 打卡等级:偶尔看看I
- 打卡总天数:15
- 最近打卡:2025-03-26 09:09:59
中级会员
- 积分
- 351
|
发表于 2024-9-26 16:01:28
|
显示全部楼层
梁工您好,我想请假下,为什么我自己定义的内部时钟源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();
}
}
|
|