/*------------------------------------------------------------------------- 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__ */