【STC8H】STC8H 相较与STC15 STC8A/G 编程的注意点

引言

推荐看论坛《STC8H8K64U与STC8A8K64D4与STC15W4K48S4的一些区别》

链接:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5709
(出处: 国芯技术交流网站)

 

 

正文

一、主要的不同点(区别很大)

IO 口(区别很大):

默认为高阻输入态,和原来默认的双向IO不同,需要注意初始化配置。

复位引脚(区别很大):

STC8H 复位引脚低电平时为复位状态,与STC15、STC8A、STC8G等单片机不同。

ADC(单独相较于STC15)(区别很大):

新增加了两个寄存器 ADC_CFG,ADC_TIM. 原来STC15 ADC的配置寄存器 ADC_CONTR, CLK_DIV 的一些位放在了 ADC_CFG寄存器.

ADC这里STC15W的区别可就太大了,大跨步的大。

图 STC15的ADC相关寄存器

STC15W 是10位精度8个通道加一个内部通道的ADC;而STC8AD4与STC8H均是12位精度15个通道加一个内部通道的ADC

在对ADC的操作上也有很大区别,所以再写这部分代码的时候,就分开写的两边不再混用。

STC15W单片机的ADC在配置时还需要配置一个P1口模拟功能控制寄存器,在配置时需要置位对应通道的P1ASF位。不仅如此ADC转换结果调整寄存器位还塞到了CLK_DIV寄存器里,在使用的时候需要注意一下赋值方式.千万别一不小心把这个寄存器的其他位置的数据给改了..

图 STC8H的ADC相关寄存器

到了STC8AD4与STC8H的时候就没有那么多的事儿了,只需要配置正确的IO工作模式就可以。其次,ADC功能相关的寄存器也没有东塞一个西塞一个了。而且,还可以使用PWM触发ADC的采集。再而且增加了ADC的时序控制和硬件自动求平均的功能。实际体验自动求平均确实再一定程度上抑制了ADC结果的波动。这东西有就用上..

而对于相同功能的寄存器位在不同单片机上的位置不同的问题,直接使用宏定义替换掉就OK了。实际上在代码开发的时候也推荐使用宏定义的方式替换掉魔法数字。

 

定时器(区别很大)

STC8新增了分频器,可以用定时器定更长的时间,从而减少单片机进入中断的次数。

图 STC15 定时器相关的寄存器

从STC15W开始到STC8H T0 与 T1定时器使用上完全一样,应该是从8051传下来的传统。

图 STC8H 定时器相关的寄存器

而到了T2 T3 T4这里出现了区别。最大的区别,在STC8系列单片机上,这里增加了8位预分频,这样就可以用定时器定更长的时间,从而减少单片机进入中断的次数。而之前的STC15W单片机没有这个预分频寄存器,如果想要定更长的时间就需要使用软件变量累加计数的方式来定时需求的时间。
其次就是定时器中断标志在STC8系列上可以软件读取,清除。但实际使用中这些标志是在中断服务函数中,由硬件自动清除。代码上完全不用处理。

(PS:由于定时器1 2 3 4都有可能要作为串口1 2 3 4的波特率发生器,所以自己在写代码的时候为了更好的代码可移植性和易维护性,都是尽量避免使用定时器1 2 3 4来定时。选择其他的可以用来作为定时器功能的外设。例如:STC15W和STC8AD4上的PCA,STC8H上的PWM(还是16位的哦!),当然这个是和我自身工作的需求相关。)

一、其他不同点(不关注也没事)

EEPROM:

参考文章:

1. 

《STC8H8K64U与STC8A8K64D4与STC15W4K48S4的一些区别》
链接:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5709
出处: 国芯技术交流网站

posted @ 2024-10-11 00:20  FBshark  阅读(207)  评论(0编辑  收藏  举报