标题: STC8H单片机关于外部时钟选择的疑惑(已解决) [打印本页]

作者: shendu0900    时间: 2022-10-12 14:39
标题: STC8H单片机关于外部时钟选择的疑惑(已解决)
各位大佬,小弟最近跳转过来研究STC8H这款芯片,根据手册说明配置了外部晶振,但是下载后发现运行始终还是使用的内部晶振,请帮忙看下是哪里出了问题,谢谢。

  P_SW2 |= 0x80;

        CLKSEL |= 0x01;
        CLKDIV = 0x01;
        //HIRCCR &= 0x7f;   关闭内部IRC
        
        XOSCCR = 0xc0;   
        while(!(XOSCCR & 0x01));  
        P_SW2 &=0x7f;


根据手册上写的时钟源选择应该是CKSEL,但是写这个会报错,看了下头文件里CLKSEL的地址和CKSEL是一样的,就直接用的这个。

我板子用的是24M无源晶振,代码如上,但是只要关闭内部IRC设置的定时就无法运行,请赐教。

作者: xxxevery    时间: 2022-10-12 16:00
我是先启动外部晶振,待外部时钟稳定后再选择外部时钟,程序如下请参考:
    P_SW2 |= 0x80;
    XOSCCR = 0xC0;                     //启动外部晶振
    while(!(XOSCCR&1));                //等待时钟稳定
    CLKDIV = 0X00;                     //时钟不分频
    CLKSEL = 0X01;                     //选择外部晶振
作者: yzwzfyz    时间: 2022-10-12 17:04
设置成先用外部晶振就可以了。
如果设置报错,可以直接对它的地址进行操作,而不用寄存器符号(怀疑寄存器符号未被定义)。
作者: wufa1986    时间: 2022-10-12 17:21
直接官方代码不可能有问题
作者: dalaoshi    时间: 2022-10-12 17:50
我用过了,可以的:

OSC:
MOV P_SW2, #80H
MOV A, #11000000B  ;使能外时钟,无源晶振
MOV DPTR, #0FE03H  ;XOSCCR
MOVX @DPTR, A
OSC1:              ;等待稳定
MOVX A, @DPTR
ANL A, #00000001B
JZ OSC1

CLR P2.0

MOV A, #01H        ;切换到外部晶振
MOV DPTR, #0FE00H  ;CLSEL
MOVX @DPTR, A
MOV P_SW2, #00H
RET
作者: hhh402    时间: 2022-10-12 21:01
我好奇的是楼主为什么要使用外部晶振?嫌弃内部晶振不准吗?
作者: shendu0900    时间: 2022-10-13 09:51
感谢各位大佬回答,xxxevery的方法是可行的,看来确实要等待时钟稳定后才能操作。

我用外部晶振是因为最近尝试画了块开发板,预留有外部晶振借口方便以后测试用,在调试的时候发现这个问题所以来请教一下。
作者: shendu0900    时间: 2022-10-13 09:53
感谢各位大佬解答, xxxevery提供的方法经过测试可行
作者: shendu0900    时间: 2022-10-13 09:54
dalaoshi 发表于 2022-10-12 17:50
我用过了,可以的:

OSC:

感谢大佬回复,可惜小弟我还没有能力掌控汇编语言
作者: shendu0900    时间: 2022-10-13 09:58
wufa1986 发表于 2022-10-12 17:21
直接官方代码不可能有问题

我实机测试过,使用STC-ISP生成STC8H的头文件里确实调用不了 CKSEL寄存器,官方生成的头文件里使用的是CLKSEL,映射的地址也是 CKSEL的地址,之前翻查过的资料又都是使用的 CKSEL,所以我也搞不清楚到底是哪里的问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1