397 lines
13 KiB
C
397 lines
13 KiB
C
/*-------------------------------------------------------------------------
|
|
STC8_SDCC.H - Register definitions for STC8H1K08 series (SDCC compatible)
|
|
Based on STC8.H (Keil) converted to __sfr/__sbit syntax for SDCC
|
|
-------------------------------------------------------------------------*/
|
|
#ifndef __STC8_SDCC_H__
|
|
#define __STC8_SDCC_H__
|
|
|
|
/* ===== 内核 SFR ===== */
|
|
__sfr __at(0xE0) ACC;
|
|
__sfr __at(0xF0) B;
|
|
__sfr __at(0xD0) PSW;
|
|
__sbit __at(0xD7) CY;
|
|
__sbit __at(0xD6) AC;
|
|
__sbit __at(0xD5) F0;
|
|
__sbit __at(0xD4) RS1;
|
|
__sbit __at(0xD3) RS0;
|
|
__sbit __at(0xD2) OV;
|
|
__sbit __at(0xD0) P;
|
|
__sfr __at(0x81) SP;
|
|
__sfr __at(0x82) DPL;
|
|
__sfr __at(0x83) DPH;
|
|
__sfr __at(0xAE) TA; /* 时序控制 (IAP 解锁) */
|
|
__sfr __at(0xE3) DPS;
|
|
__sfr __at(0xE4) DPL1;
|
|
__sfr __at(0xE5) DPH1;
|
|
|
|
/* ===== I/O 口 SFR ===== */
|
|
__sfr __at(0x80) P0;
|
|
__sfr __at(0x90) P1;
|
|
__sfr __at(0xA0) P2;
|
|
__sfr __at(0xB0) P3;
|
|
__sfr __at(0xC0) P4;
|
|
__sfr __at(0xC8) P5;
|
|
__sfr __at(0xE8) P6;
|
|
__sfr __at(0xF8) P7;
|
|
|
|
/* I/O 口模式寄存器 */
|
|
__sfr __at(0x94) P0M0;
|
|
__sfr __at(0x93) P0M1;
|
|
__sfr __at(0x92) P1M0;
|
|
__sfr __at(0x91) P1M1;
|
|
__sfr __at(0x96) P2M0;
|
|
__sfr __at(0x95) P2M1;
|
|
__sfr __at(0xB2) P3M0;
|
|
__sfr __at(0xB1) P3M1;
|
|
__sfr __at(0xB4) P4M0;
|
|
__sfr __at(0xB3) P4M1;
|
|
__sfr __at(0xCA) P5M0;
|
|
__sfr __at(0xC9) P5M1;
|
|
__sfr __at(0xCC) P6M0;
|
|
__sfr __at(0xCB) P6M1;
|
|
__sfr __at(0xE2) P7M0;
|
|
__sfr __at(0xE1) P7M1;
|
|
|
|
/* I/O 口位定义 */
|
|
__sbit __at(0x80) P00; __sbit __at(0x81) P01; __sbit __at(0x82) P02; __sbit __at(0x83) P03;
|
|
__sbit __at(0x84) P04; __sbit __at(0x85) P05; __sbit __at(0x86) P06; __sbit __at(0x87) P07;
|
|
__sbit __at(0x90) P10; __sbit __at(0x91) P11; __sbit __at(0x92) P12; __sbit __at(0x93) P13;
|
|
__sbit __at(0x94) P14; __sbit __at(0x95) P15; __sbit __at(0x96) P16; __sbit __at(0x97) P17;
|
|
__sbit __at(0xA0) P20; __sbit __at(0xA1) P21; __sbit __at(0xA2) P22; __sbit __at(0xA3) P23;
|
|
__sbit __at(0xA4) P24; __sbit __at(0xA5) P25; __sbit __at(0xA6) P26; __sbit __at(0xA7) P27;
|
|
__sbit __at(0xB0) P30; __sbit __at(0xB1) P31; __sbit __at(0xB2) P32; __sbit __at(0xB3) P33;
|
|
__sbit __at(0xB4) P34; __sbit __at(0xB5) P35; __sbit __at(0xB6) P36; __sbit __at(0xB7) P37;
|
|
__sbit __at(0xC0) P40; __sbit __at(0xC1) P41; __sbit __at(0xC2) P42; __sbit __at(0xC3) P43;
|
|
__sbit __at(0xC4) P44; __sbit __at(0xC5) P45; __sbit __at(0xC6) P46; __sbit __at(0xC7) P47;
|
|
__sbit __at(0xC8) P50; __sbit __at(0xC9) P51; __sbit __at(0xCA) P52; __sbit __at(0xCB) P53;
|
|
__sbit __at(0xCC) P54; __sbit __at(0xCD) P55; __sbit __at(0xCE) P56; __sbit __at(0xCF) P57;
|
|
|
|
/* ===== 系统管理 ===== */
|
|
__sfr __at(0x87) PCON;
|
|
#define SMOD 0x80
|
|
#define SMOD0 0x40
|
|
#define LVDF 0x20
|
|
#define POF 0x10
|
|
#define PD 0x02
|
|
#define IDL 0x01
|
|
|
|
__sfr __at(0x8E) AUXR;
|
|
#define T0x12 0x80
|
|
#define T1x12 0x40
|
|
#define UART_M0x6 0x20
|
|
#define T2R 0x10
|
|
#define T2_CT 0x08
|
|
#define T2x12 0x04
|
|
#define EXTRAM 0x02
|
|
#define S1ST2 0x01
|
|
|
|
__sfr __at(0x97) AUXR2;
|
|
#define TXLNRX 0x10
|
|
|
|
__sfr __at(0xA1) BUS_SPEED;
|
|
__sfr __at(0xA2) P_SW1; /* 外设切换 1 */
|
|
__sfr __at(0xBA) P_SW2; /* 外设切换 2 */
|
|
#define EAXFR 0x80
|
|
__sfr __at(0xBB) VOCTRL;
|
|
__sfr __at(0xFF) RSTCFG;
|
|
|
|
/* 扩展 RAM 寄存器 (需 EAXFR=1) */
|
|
#define CKSEL (*(volatile unsigned char __xdata *)0xFE00)
|
|
#define CLKDIV (*(volatile unsigned char __xdata *)0xFE01)
|
|
#define IRC24MCR (*(volatile unsigned char __xdata *)0xFE02)
|
|
#define XOSCCR (*(volatile unsigned char __xdata *)0xFE03)
|
|
#define IRC32KCR (*(volatile unsigned char __xdata *)0xFE04)
|
|
|
|
/* ===== 中断 ===== */
|
|
__sfr __at(0xA8) IE;
|
|
__sbit __at(0xAF) EA;
|
|
__sbit __at(0xAE) ELVD;
|
|
__sbit __at(0xAD) EADC;
|
|
__sbit __at(0xAC) ES;
|
|
__sbit __at(0xAB) ET1;
|
|
__sbit __at(0xAA) EX1;
|
|
__sbit __at(0xA9) ET0;
|
|
__sbit __at(0xA8) EX0;
|
|
|
|
__sfr __at(0xAF) IE2;
|
|
#define ET4 0x40
|
|
#define ET3 0x20
|
|
#define ES4 0x10
|
|
#define ES3 0x08
|
|
#define ET2 0x04
|
|
#define ESPI 0x02
|
|
#define ES2 0x01
|
|
|
|
__sfr __at(0xB8) IP;
|
|
__sfr __at(0xB5) IP2;
|
|
__sfr __at(0xB7) IPH;
|
|
__sfr __at(0xB6) IP2H;
|
|
|
|
__sfr __at(0x8F) INTCLKO;
|
|
__sfr __at(0xEF) AUXINTIF;
|
|
|
|
/* ===== 定时器 ===== */
|
|
__sfr __at(0x88) TCON;
|
|
__sbit __at(0x8F) TF1;
|
|
__sbit __at(0x8E) TR1;
|
|
__sbit __at(0x8D) TF0;
|
|
__sbit __at(0x8C) TR0;
|
|
__sbit __at(0x8B) IE1;
|
|
__sbit __at(0x8A) IT1;
|
|
__sbit __at(0x89) IE0;
|
|
__sbit __at(0x88) IT0;
|
|
|
|
__sfr __at(0x89) TMOD;
|
|
#define T1_GATE 0x80
|
|
#define T1_CT 0x40
|
|
#define T1_M1 0x20
|
|
#define T1_M0 0x10
|
|
#define T0_GATE 0x08
|
|
#define T0_CT 0x04
|
|
#define T0_M1 0x02
|
|
#define T0_M0 0x01
|
|
|
|
__sfr __at(0x8A) TL0;
|
|
__sfr __at(0x8B) TL1;
|
|
__sfr __at(0x8C) TH0;
|
|
__sfr __at(0x8D) TH1;
|
|
|
|
__sfr __at(0xD1) T4T3M;
|
|
__sfr __at(0xD2) T4H;
|
|
__sfr __at(0xD3) T4L;
|
|
__sfr __at(0xD4) T3H;
|
|
__sfr __at(0xD5) T3L;
|
|
__sfr __at(0xD6) T2H;
|
|
__sfr __at(0xD7) T2L;
|
|
|
|
__sfr __at(0xAA) WKTCL;
|
|
__sfr __at(0xAB) WKTCH;
|
|
#define WKTEN 0x80
|
|
|
|
__sfr __at(0xC1) WDT_CONTR;
|
|
#define WDT_FLAG 0x80
|
|
#define EN_WDT 0x20
|
|
#define CLR_WDT 0x10
|
|
#define IDL_WDT 0x08
|
|
|
|
/* ===== 串口 ===== */
|
|
__sfr __at(0x98) SCON;
|
|
__sbit __at(0x9F) SM0;
|
|
__sbit __at(0x9E) SM1;
|
|
__sbit __at(0x9D) SM2;
|
|
__sbit __at(0x9C) REN;
|
|
__sbit __at(0x9B) TB8;
|
|
__sbit __at(0x9A) RB8;
|
|
__sbit __at(0x99) TI;
|
|
__sbit __at(0x98) RI;
|
|
__sfr __at(0x99) SBUF;
|
|
|
|
__sfr __at(0x9A) S2CON;
|
|
__sfr __at(0x9B) S2BUF;
|
|
__sfr __at(0xAC) S3CON;
|
|
__sfr __at(0xAD) S3BUF;
|
|
__sfr __at(0x84) S4CON;
|
|
__sfr __at(0x85) S4BUF;
|
|
|
|
__sfr __at(0xA9) SADDR;
|
|
__sfr __at(0xB9) SADEN;
|
|
|
|
/* ===== ADC ===== */
|
|
__sfr __at(0xBC) ADC_CONTR;
|
|
#define ADC_POWER 0x80
|
|
#define ADC_START 0x40
|
|
#define ADC_FLAG 0x20
|
|
|
|
__sfr __at(0xBD) ADC_RES;
|
|
__sfr __at(0xBE) ADC_RESL;
|
|
__sfr __at(0xDE) ADCCFG;
|
|
#define ADC_RESFMT 0x20
|
|
|
|
/* ===== SPI ===== */
|
|
__sfr __at(0xCD) SPSTAT;
|
|
#define SPIF 0x80
|
|
#define WCOL 0x40
|
|
__sfr __at(0xCE) SPCTL;
|
|
#define SSIG 0x80
|
|
#define SPEN 0x40
|
|
#define DORD 0x20
|
|
#define MSTR 0x10
|
|
#define CPOL 0x08
|
|
#define CPHA 0x04
|
|
__sfr __at(0xCF) SPDAT;
|
|
|
|
/* ===== IAP/ISP ===== */
|
|
__sfr __at(0xC2) IAP_DATA;
|
|
__sfr __at(0xC3) IAP_ADDRH;
|
|
__sfr __at(0xC4) IAP_ADDRL;
|
|
__sfr __at(0xC5) IAP_CMD;
|
|
#define IAP_IDL 0x00
|
|
#define IAP_READ 0x01
|
|
#define IAP_WRITE 0x02
|
|
#define IAP_ERASE 0x03
|
|
__sfr __at(0xC6) IAP_TRIG;
|
|
__sfr __at(0xC7) IAP_CONTR;
|
|
#define IAPEN 0x80
|
|
#define SWBS 0x40
|
|
#define SWRST 0x20
|
|
#define CMD_FAIL 0x10
|
|
|
|
/* ===== PCA/PWM ===== */
|
|
__sfr __at(0xD8) CCON;
|
|
__sbit __at(0xDF) CF;
|
|
__sbit __at(0xDE) CR;
|
|
__sbit __at(0xDB) CCF3;
|
|
__sbit __at(0xDA) CCF2;
|
|
__sbit __at(0xD9) CCF1;
|
|
__sbit __at(0xD8) CCF0;
|
|
|
|
__sfr __at(0xD9) CMOD;
|
|
#define CIDL 0x80
|
|
#define ECF 0x01
|
|
|
|
__sfr __at(0xE9) CL;
|
|
__sfr __at(0xF9) CH;
|
|
__sfr __at(0xDA) CCAPM0;
|
|
__sfr __at(0xDB) CCAPM1;
|
|
__sfr __at(0xDC) CCAPM2;
|
|
__sfr __at(0xDD) CCAPM3;
|
|
__sfr __at(0xEA) CCAP0L;
|
|
__sfr __at(0xEB) CCAP1L;
|
|
__sfr __at(0xEC) CCAP2L;
|
|
__sfr __at(0xED) CCAP3L;
|
|
__sfr __at(0xFA) CCAP0H;
|
|
__sfr __at(0xFB) CCAP1H;
|
|
__sfr __at(0xFC) CCAP2H;
|
|
__sfr __at(0xFD) CCAP3H;
|
|
__sfr __at(0xF2) PCA_PWM0;
|
|
__sfr __at(0xF3) PCA_PWM1;
|
|
__sfr __at(0xF4) PCA_PWM2;
|
|
__sfr __at(0xF5) PCA_PWM3;
|
|
|
|
/* ===== 高级 PWM ===== */
|
|
__sfr __at(0xF1) PWMCFG;
|
|
#define CBIF 0x80
|
|
#define ETADC 0x40
|
|
__sfr __at(0xF6) PWMIF;
|
|
__sfr __at(0xF7) PWMFDCR;
|
|
__sfr __at(0xFE) PWMCR;
|
|
#define ENPWM 0x80
|
|
#define ECBI 0x40
|
|
|
|
/* 高级 PWM 扩展寄存器 (需 EAXFR=1) */
|
|
#define PWMC (*(volatile unsigned int __xdata *)0xFFF0)
|
|
#define PWMCH (*(volatile unsigned char __xdata *)0xFFF0)
|
|
#define PWMCL (*(volatile unsigned char __xdata *)0xFFF1)
|
|
#define PWMCKS (*(volatile unsigned char __xdata *)0xFFF2)
|
|
|
|
#define PWM0T1 (*(volatile unsigned int __xdata *)0xFF00)
|
|
#define PWM0T1H (*(volatile unsigned char __xdata *)0xFF00)
|
|
#define PWM0T1L (*(volatile unsigned char __xdata *)0xFF01)
|
|
#define PWM0T2 (*(volatile unsigned int __xdata *)0xFF02)
|
|
#define PWM0T2H (*(volatile unsigned char __xdata *)0xFF02)
|
|
#define PWM0T2L (*(volatile unsigned char __xdata *)0xFF03)
|
|
#define PWM0CR (*(volatile unsigned char __xdata *)0xFF04)
|
|
#define PWM0HLD (*(volatile unsigned char __xdata *)0xFF05)
|
|
|
|
#define PWM1T1 (*(volatile unsigned int __xdata *)0xFF10)
|
|
#define PWM1T1H (*(volatile unsigned char __xdata *)0xFF10)
|
|
#define PWM1T1L (*(volatile unsigned char __xdata *)0xFF11)
|
|
#define PWM1T2 (*(volatile unsigned int __xdata *)0xFF12)
|
|
#define PWM1T2H (*(volatile unsigned char __xdata *)0xFF12)
|
|
#define PWM1T2L (*(volatile unsigned char __xdata *)0xFF13)
|
|
#define PWM1CR (*(volatile unsigned char __xdata *)0xFF14)
|
|
#define PWM1HLD (*(volatile unsigned char __xdata *)0xFF15)
|
|
|
|
#define PWM2T1 (*(volatile unsigned int __xdata *)0xFF20)
|
|
#define PWM2T1H (*(volatile unsigned char __xdata *)0xFF20)
|
|
#define PWM2T1L (*(volatile unsigned char __xdata *)0xFF21)
|
|
#define PWM2T2 (*(volatile unsigned int __xdata *)0xFF22)
|
|
#define PWM2T2H (*(volatile unsigned char __xdata *)0xFF22)
|
|
#define PWM2T2L (*(volatile unsigned char __xdata *)0xFF23)
|
|
#define PWM2CR (*(volatile unsigned char __xdata *)0xFF24)
|
|
#define PWM2HLD (*(volatile unsigned char __xdata *)0xFF25)
|
|
|
|
#define PWM3T1 (*(volatile unsigned int __xdata *)0xFF30)
|
|
#define PWM3T1H (*(volatile unsigned char __xdata *)0xFF30)
|
|
#define PWM3T1L (*(volatile unsigned char __xdata *)0xFF31)
|
|
#define PWM3T2 (*(volatile unsigned int __xdata *)0xFF32)
|
|
#define PWM3T2H (*(volatile unsigned char __xdata *)0xFF32)
|
|
#define PWM3T2L (*(volatile unsigned char __xdata *)0xFF33)
|
|
#define PWM3CR (*(volatile unsigned char __xdata *)0xFF34)
|
|
#define PWM3HLD (*(volatile unsigned char __xdata *)0xFF35)
|
|
|
|
#define PWM4T1 (*(volatile unsigned int __xdata *)0xFF40)
|
|
#define PWM4T1H (*(volatile unsigned char __xdata *)0xFF40)
|
|
#define PWM4T1L (*(volatile unsigned char __xdata *)0xFF41)
|
|
#define PWM4T2 (*(volatile unsigned int __xdata *)0xFF42)
|
|
#define PWM4T2H (*(volatile unsigned char __xdata *)0xFF42)
|
|
#define PWM4T2L (*(volatile unsigned char __xdata *)0xFF43)
|
|
#define PWM4CR (*(volatile unsigned char __xdata *)0xFF44)
|
|
#define PWM4HLD (*(volatile unsigned char __xdata *)0xFF45)
|
|
|
|
#define PWM5T1 (*(volatile unsigned int __xdata *)0xFF50)
|
|
#define PWM5T1H (*(volatile unsigned char __xdata *)0xFF50)
|
|
#define PWM5T1L (*(volatile unsigned char __xdata *)0xFF51)
|
|
#define PWM5T2 (*(volatile unsigned int __xdata *)0xFF52)
|
|
#define PWM5T2H (*(volatile unsigned char __xdata *)0xFF52)
|
|
#define PWM5T2L (*(volatile unsigned char __xdata *)0xFF53)
|
|
#define PWM5CR (*(volatile unsigned char __xdata *)0xFF54)
|
|
#define PWM5HLD (*(volatile unsigned char __xdata *)0xFF55)
|
|
|
|
#define PWM6T1 (*(volatile unsigned int __xdata *)0xFF60)
|
|
#define PWM6T1H (*(volatile unsigned char __xdata *)0xFF60)
|
|
#define PWM6T1L (*(volatile unsigned char __xdata *)0xFF61)
|
|
#define PWM6T2 (*(volatile unsigned int __xdata *)0xFF62)
|
|
#define PWM6T2H (*(volatile unsigned char __xdata *)0xFF62)
|
|
#define PWM6T2L (*(volatile unsigned char __xdata *)0xFF63)
|
|
#define PWM6CR (*(volatile unsigned char __xdata *)0xFF64)
|
|
#define PWM6HLD (*(volatile unsigned char __xdata *)0xFF65)
|
|
|
|
#define PWM7T1 (*(volatile unsigned int __xdata *)0xFF70)
|
|
#define PWM7T1H (*(volatile unsigned char __xdata *)0xFF70)
|
|
#define PWM7T1L (*(volatile unsigned char __xdata *)0xFF71)
|
|
#define PWM7T2 (*(volatile unsigned int __xdata *)0xFF72)
|
|
#define PWM7T2H (*(volatile unsigned char __xdata *)0xFF72)
|
|
#define PWM7T2L (*(volatile unsigned char __xdata *)0xFF73)
|
|
#define PWM7CR (*(volatile unsigned char __xdata *)0xFF74)
|
|
#define PWM7HLD (*(volatile unsigned char __xdata *)0xFF75)
|
|
|
|
/* ===== 高级 PWM 端口切换 (扩展寄存器) ===== */
|
|
#define PWMx_PS (*(volatile unsigned char __xdata *)0xFFF5)
|
|
#define PWMx_ETRPS (*(volatile unsigned char __xdata *)0xFFF6)
|
|
|
|
/* ===== I2C ===== */
|
|
#define I2CCFG (*(volatile unsigned char __xdata *)0xFE80)
|
|
#define I2CMSCR (*(volatile unsigned char __xdata *)0xFE81)
|
|
#define I2CMSST (*(volatile unsigned char __xdata *)0xFE82)
|
|
#define I2CSLCR (*(volatile unsigned char __xdata *)0xFE83)
|
|
#define I2CSLST (*(volatile unsigned char __xdata *)0xFE84)
|
|
#define I2CSLADR (*(volatile unsigned char __xdata *)0xFE85)
|
|
#define I2CTXD (*(volatile unsigned char __xdata *)0xFE86)
|
|
#define I2CRXD (*(volatile unsigned char __xdata *)0xFE87)
|
|
|
|
/* ===== 扩展 I/O 上拉/下拉 ===== */
|
|
#define P0PU (*(volatile unsigned char __xdata *)0xFE10)
|
|
#define P1PU (*(volatile unsigned char __xdata *)0xFE11)
|
|
#define P2PU (*(volatile unsigned char __xdata *)0xFE12)
|
|
#define P3PU (*(volatile unsigned char __xdata *)0xFE13)
|
|
#define P4PU (*(volatile unsigned char __xdata *)0xFE14)
|
|
#define P5PU (*(volatile unsigned char __xdata *)0xFE15)
|
|
#define P6PU (*(volatile unsigned char __xdata *)0xFE16)
|
|
#define P7PU (*(volatile unsigned char __xdata *)0xFE17)
|
|
|
|
#define P0NCS (*(volatile unsigned char __xdata *)0xFE18)
|
|
#define P1NCS (*(volatile unsigned char __xdata *)0xFE19)
|
|
#define P2NCS (*(volatile unsigned char __xdata *)0xFE1A)
|
|
#define P3NCS (*(volatile unsigned char __xdata *)0xFE1B)
|
|
#define P4NCS (*(volatile unsigned char __xdata *)0xFE1C)
|
|
#define P5NCS (*(volatile unsigned char __xdata *)0xFE1D)
|
|
#define P6NCS (*(volatile unsigned char __xdata *)0xFE1E)
|
|
#define P7NCS (*(volatile unsigned char __xdata *)0xFE1F)
|
|
|
|
/* ===== 比较器 ===== */
|
|
__sfr __at(0xE6) CMPCR1;
|
|
__sfr __at(0xE7) CMPCR2;
|
|
|
|
#endif /* __STC8_SDCC_H__ */
|