FwLib_STC8 is a lite firmware library for STC8G/STC8H series MCU.
# GitHub
git clone https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
# or Giteee (for Chinese users)
git clone https://gitee.com/iosetting/fw-lib_-stc8.git FwLib_STC8
Change according to your MCU part
## STC8H1K08 STC8H8K64U
MCU ?= STC8H1K08
MCU_IRAM ?= 256
# 1024, 2048, 3072, 4096, 8192
MCU_XRAM ?= 1024
# 8192, 16384, 32768, 65536
MCU_CODE_SIZE ?= 8192
And the SDCC path
TOOCHAIN_PREFIX ?= /opt/sdcc/sdcc-4.3.0/bin/
And the compile flags
## STC8H1K08 36.864MHz
LIB_FLAGS := __CONF_FOSC=36864000UL \
__CONF_MCU_MODEL=MCU_MODEL_STC8H1K08 \
__CONF_CLKDIV=0x00 \
__CONF_IRCBAND=0x01 \
__CONF_VRTRIM=0x1F \
__CONF_IRTRIM=0xB5 \
__CONF_LIRTRIM=0x00
make clean; make
# GitHub
git clone https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
# or Giteee (for Chinese users)
git clone https://gitee.com/iosetting/fw-lib_-stc8.git FwLib_STC8
├── include
├── lib
│ └── FwLib_STC8
│ ├── demo
│ ├── include
│ └── src
├── src
└── test
build_flags =
-D__CONF_FOSC=36864000UL ;The osc/irc frequency you MCU will be running on
-D__CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2 ;change this to your MCU type
-D__CONF_CLKDIV=0x02 ;frequency trimming
-D__CONF_IRCBAND=0x03
-D__CONF_VRTRIM=0x19
-D__CONF_IRTRIM=0x28
-D__CONF_LIRTRIM=0x00
fw_hal.h
in your code
#include "fw_hal.h"
then it's ready to go.
VS Code doesn't support some of SDCC syntax for Intel 8051 (issue 7146), if you want to eliminate syntax errors in code editor, add a separate env for code editing and add __SDCC_SYNTAX_FIX
in build_flags:
build_flags =
-D__SDCC_SYNTAX_FIX
-D__CONF_FOSC=36864000UL
-D__CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2
...
This special env is for code editing only, building and uploading should use the normal env.
# GitHub
git clone https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
# or Giteee (for Chinese users)
git clone https://gitee.com/iosetting/fw-lib_-stc8.git FwLib_STC8
__CX51__, __CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2,__CONF_FOSC=36864000UL
The explanation of these arguments
__CX51__ This will tell the macros to switch to Keil C51 keywords
__CONF_MCU_MODEL, change this to your MCU type, please look into FwLib_STC8/include/fw_conf.h for all available types.
__CONF_FOSC The osc/irc frequency you MCU will be running on. It equals to the frequency this MCU will be trimmed to in STC-ISP.
fw_hal.h
in your code
#include "fw_hal.h"
then it's ready to go.
Some macros were introduced for code compatibility with Keil C51 and SDCC.
The naming is from sdcc compiler.h. If you want your code to work with both compilers, you need to stick to these macros instead of the compiler specific keywords:
Here is a list of the macros:
Macro | Keil C51 | SDCC |
---|---|---|
__BIT | bit | __bit |
__DATA | data | __data |
__IDATA | idata | __idata |
__PDATA | pdata | __pdata |
__XDATA | xdata | __xdata |
__CODE | code | __code |
SBIT(name, addr, bit) | sbit name = addr^bit | sbit at(addr+bit) name |
SFR(name, addr) | sfr name = addr | sfr at(addr) name |
SFRX(addr) | ((unsigned char volatile xdata )(addr)) | ((unsigned char volatile __xdata )(addr)) |
SFR16X(addr) | ((unsigned int volatile xdata )(addr)) | ((unsigned int volatile __xdata )(addr)) |
INTERRUPT(name, vector) | void name (void) interrupt vector | void name (void) __interrupt (vector) |
INTERRUPT_USING(name, vector, regnum) | void name (void) interrupt vector using regnum | void name (void) interrupt (vector) using (regnum) |
NOP() | nop() | asm NOP endasm |
The definition of these macros can be found in include/fw_reg_base.h
Copyright (c) 2021-present IOsetting iosetting@outlook.com
The FwLib_STC8 is licensed under the permissive Apache 2.0 license, you can use it in both commercial and personal projects with confidence.