STC8G 8H时基快1.6倍
本帖最后由 xxdcq 于 2021-5-26 10:25 编辑11.0592M时钟频率1T下 T0 全时基(TH0=0,TL0=0)定时是3.6ms产生中断
而STC8A 8F是5.92ms, STC15系列也是5.92ms和STC8A 8F一致的
正确合理的应该是1T的时间是1/11.0592M=0.09us,全时基定时0.09*65536=5.92ms
STC8G 8H快了1.6倍左右,两种可能
1. STC8G 8H的时基并不是1T而是0.6T左右,十分怪异的数字!
2.烧进去的11.0592M并不是11.0592M而是18.204M,十分怪异的数字!
这就导致以时基为主要基调的实时控制程序和波特率串口通信全都崩溃!
不知道STC8G 8H为什么要这么设计?速度再快也得按标准来做呀!
另外测试中还发现,STC8A 8F指令运行速度是STC15系列的1.4倍,但定时器的时基是一致的
STC8G 8H指令运行速度又是STC8A 8F的1.6倍,定时器的时基也是STC8A 8F的1.6倍
感觉STC从12开始定时器时基和指令运行时基就不是统一的,感觉是分两条线走的
在STC8A 8F以及之前定时器的时基都是统一的,只有指令时基逐步加快了,但到了STC8G 8H连定时器时基都变了
STC12的程序可以不做修改直接在STC15上运行
STC15的程序只需要简单修改指令运行的延时参数而不需要改动庞杂的核心程序就可以在STC8A 8F上运行
到了STC8G 8H就全部失效了,EEPROM的访问均不正常,估计也与时基有关,核心程序因为时基问题走不下去间接导致EEPROM的访问不正常
现在还在摸索不知道里面要改些什么才能运行
8h没用过,8g的用过确定波特率正常。应该是楼主自己的问题 本帖最后由 xxdcq 于 2021-5-26 12:40 编辑
bb688 发表于 2021-5-26 12:13
8h没用过,8g的用过确定波特率正常。应该是楼主自己的问题
我并不是说8G的波特率有问题,他只是快了1.6倍,原本11.0592M的时钟频率要烧成6.59M才能得到和以前一样的波特率,你也许是按照8G规格书上的例程做的可能没问题,但你并没有经过8A 8F或15系列到8G的切换,肯定和8A 8F或15系列的设置有区别,同样的一个程序你再用8A 8F看看,自己验证罗 STC12\STC15\和STC8指令周期是不同的,有软件延时的话都要需改才行 lyjian 发表于 2021-5-26 13:45
STC12\STC15\和STC8指令周期是不同的,有软件延时的话都要需改才行
指令周期不同问题不大,通过调整软件延时参数就可以了,最要命的是定时器和波特率用到的时基不对 8G的例程和8A一样啊,设置一样,波特率也没变,再找找其他原因吧 这是定时器的功能,与指令基本没有关系
所以
要么定时器可能功能不一样,要么是输入的时钟搞错了,时钟搞错的可能大 15系列和8g1k08a都用过十几万片了,完全没问题,串口操作是一致的,没有任何特殊的地方。 楼主仔细查下程序吧,或者用官方的例程测试。
STC15、STC8G、STC8H系列的计数器和串口都是兼容的。
这些计数器是可以设置12T(默认)或1T的,不会出现0.6T的情况。 我在使用STC8G没有遇到这个问题。想问下楼主,你是在ISP里设置11.0592M,在程序里有没有设置系统时钟分频? 本帖最后由 xxdcq 于 2021-5-27 09:59 编辑
coody 发表于 2021-5-26 23:42
楼主仔细查下程序吧,或者用官方的例程测试。
STC15、STC8G、STC8H系列的计数器和串口都是兼容的。
这些计 ...
难道我拿到的片子不对。
这个是南通总部申请的样品哟,具体型号是STC8G2K64S4,LQFP48封装的
8F也是以前在本部申请的样品,只是LQFP32封装的,具体型号是STC8F8K64S4
同样一个程序为什么在两个型号单片机上产生不同的结果,一个3.6ms。一个5.92ms
STC8F8K64S4又能得到和STC15一样的结果,5.92ms
按照你说的全兼容的话应该得到一样的结果
求解释
另外我看资料STC8F8K64S4的LQFP48封装和STC8G2K64S4-LQFP48引脚顺序也不兼容,同属8系列为什么就要别出心裁搞个不一样的顺序出来
资料里列出了错误的引脚图和正确的引脚图,分不清哪是哪!
jackhwang 发表于 2021-5-27 08:27
我在使用STC8G没有遇到这个问题。想问下楼主,你是在ISP里设置11.0592M,在程序里有没有设置系统时钟分频? ...
AUXR里设置的1T给T0 xxdcq 发表于 2021-5-27 09:53
AUXR里设置的1T给T0
我使用的就是这颗料 - STC8G2K64S4-LQFP48。定时器中断周期,串口的波特率设置都正常。我问的是,在程序里面有没有CPU时钟分频操作。我以前使用STC的芯片时,因为对CPU时钟分频操作,导致定时器的中断周期不是计算的值。这是因为STC通过ISP设置IRC频率,是通过先选频段(有两个频段)后再分频而得到的,如果在程序里有分频操作,会引起工作频率变化。这部分可以看下数据手册的第六章内容。希望对你有所帮助。 jackhwang 发表于 2021-5-27 10:50
我使用的就是这颗料 - STC8G2K64S4-LQFP48。定时器中断周期,串口的波特率设置都正常。我问的是,在程序 ...
我已经找到问题的端倪了,你说到点子上了,我正在确认 本帖最后由 xxdcq 于 2021-5-27 13:33 编辑
jackhwang 发表于 2021-5-27 10:50
我使用的就是这颗料 - STC8G2K64S4-LQFP48。定时器中断周期,串口的波特率设置都正常。我问的是,在程序 ...
找到问题症结了
STC12或STC15里9DH寄存器是这样定义的
而在STC8G里这个寄存器有不同的定义
我因为要用到p1.0 p1.1做AD转换,所以把9DH寄存器最低两位置1了,到了STC8G里就是选择了33M频段
导致了工作频率发生了变化
STC8F 8A里根本就没有这个寄存器,所以自然不会受影响
这个问题只有从STC15切换到STC8G并且使用了p1.0做AD转换的情况下才会遇到
从最开始就一直使用STC8G作开发不会遇到这个问题
哎!这坑真深!
xxdcq 发表于 2021-5-27 13:30
找到问题症结了
STC12或STC15里9DH寄存器是这样定义的
给楼主点赞,解决问题了贴出来。大家跟着一起学习。
使用STC提供的头文件,能不能避免这个问题。 本帖最后由 xxdcq 于 2021-5-27 14:09 编辑
jackhwang 发表于 2021-5-27 13:49
给楼主点赞,解决问题了贴出来。大家跟着一起学习。
使用STC提供的头文件,能不能避免这个问题。 ...
肯定会遇上,你把头文件混用多半也会出这样的问题
而且C里面更隐蔽,时间不对根本觉察不到,我用的汇编,每条指令运行时间和延时程序都可以通过示波器观察到
虽然掉进了深坑,能爬出就好。
通过楼主的案例,以后这类MCU 出现主频与设置值差异太大,首先要考虑 频率设定、分频 部分相关的程序 通过ISP设置好了频率,就不要修改相关寄存器了 xxdcq 发表于 2021-5-27 13:30
找到问题症结了
STC12或STC15里9DH寄存器是这样定义的
难道不用头文件吗,直接汇编的吗,或者没有更换头文件
页:
[1]
2