/*--------------------------------------------------------------------------
SC92F637X_ASM.H

C Header file for SC92F637X microcontroller.
Copyright (c) 2025 Shenzhen SinOne Microelectronics Co., Ltd.
All rights reserved.
深圳市赛元微电子股份有限公司
版本号:  V1.0    
日期:  2025/8/20
--------------------------------------------------------------------------*/
#ifndef _SC92F637X_ASM_H_
#define _SC92F637X_ASM_H_

///* ------------------- 字节寄存器-------------------- */
/*CPU*/
SP    EQU 0X81;  //堆栈指针
DPL   EQU 0X82;  //DPTR数据指针低位
DPH   EQU 0X83;  //DPTR数据指针高位
PSW   EQU 0XD0;  //程序状态字寄存器	
ACC   EQU 0XE0;  //累加器Ａ	
B     EQU 0XF0;  //B寄存器	

/*system*/
PCON  EQU 0X87;  //电源管理控制寄存器

/*Interrupt*/
IE   EQU 0XA8;  //中断控制寄存器
IE1  EQU 0XA9;  //中断控制寄存器1
IP   EQU 0XB8;  //中断优先权控制寄存器
IP1  EQU 0XB9;  //中断优先级控制寄存器1

/*PORT*/
P0      EQU 0X80;  //P0口数据寄存器
P1      EQU 0X90;  //P1口数据寄存器
P1CON   EQU 0X91;  //P1口输入/输出控制寄存器
P1PH    EQU 0X92;  //P1口上拉电阻控制寄存器	
P0CON   EQU 0X9A;  //P0口输入/输出控制寄存器	
P0PH	EQU 0X9B;  //P0口上拉电阻控制寄存器
P2      EQU 0XA0;  //P2口数据寄存器
P2CON   EQU 0XA1;  //P2口输入/输出控制寄存器	
P2PH    EQU 0XA2;  //P2口上拉电阻控制寄存器	

/*TIMER*/	
TCON    EQU 0X88;  //定时器控制寄存器
TMOD    EQU 0X89;  //定时器工作模式寄存器
TL0     EQU 0X8A;  //定时器0低8位
TL1     EQU 0X8B;  //定时器1低8位
TH0     EQU 0X8C;  //定时器0高8位
TH1     EQU 0X8D;  //定时器1高8位
TMCON   EQU 0X8E;  //定时器频率控制寄存器
TXINX    EQU 0XCE;  //定时器X控制寄存器指针
TXCON   EQU 0XC8;  //定时器X控制寄存器
TXMOD   EQU 0XC9;  //定时器X工作模式寄存器
RCAPXL  EQU 0XCA;  //定时器X重载/捕捉低8位
RCAPXH  EQU 0XCB;  //定时器X重载/捕捉高8位
TLX     EQU 0XCC;  //定时器X低8位
THX     EQU 0XCD;  //定时器X高8位

/*WatchDog*/
WDTCON  EQU 0XCF;  //WDT控制寄存器

/*BTM*/
BTMCON  EQU 0XFB;  //低频定时器控制寄存器

/*INT*/
INT0F  EQU 0XBA;  //INT0 下降沿中断控制寄存器
INT0R  EQU 0XBB;  //INT0 上降沿中断控制寄存器
INT1F  EQU 0XBC;  //INT1 下降沿中断控制寄存器
INT1R  EQU 0XBD;  //INT1 上降沿中断控制寄存器

/*IAP */
IAPKEY  EQU 0XF1;  //IAP保护寄存器
IAPAD    EQU 0XF2;  //IAP写入地址低位寄存器
IAPADE  EQU 0XF4;  //IAP扩展地址寄存器
IAPDAT  EQU 0XF5;  //IAP数据寄存器
IAPCTL  EQU 0XF6;  //IAP控制寄存器

/*三合一*/
OTCON  EQU 0X8F;  //输出控制寄存器
SSCON2  EQU 0X95;  //SSI控制寄存器2
SSCON0  EQU 0X9D;  //SSI控制寄存器0
SSCON1  EQU 0X9E;  //SSI控制寄存器1
SSDAT   EQU 0X9F;  //SSI数据寄存器

/*OPTION*/
OPINX  EQU 0XFE;  //Option指针 
OPREG  EQU 0XFF;  //Option寄存器

/*CHECKSUM*/
OPERCON    EQU 0XEF;  //运算控制寄存器
CHKSUML    EQU 0XFC;  //结果寄存器低位
CHKSUMH    EQU 0XFD;  //结果寄存器高位

///* ------------------- 位寄存器-------------------- */
/*PSW*/
CY  EQU PSW .7;  //标志位          0:加法运算最高位无进位，或者减法运算最高位无借位时	1:加法运算最高位有进位，或者减法运算最高位有借位时
AC  EQU PSW .6;  //进位辅助标志位  0:无借位、进位	1:加法运算时在bit3位有进位，或减法运算在bit3位有借位时
F0  EQU PSW .5;  //用户标志位
RS1 EQU PSW .4;  //工作寄存器组选择位
RS0 EQU PSW .3;  //工作寄存器组选择位
OV  EQU PSW .2;  //溢出标志位
F1  EQU PSW .1;  //F1标志
P   EQU PSW .0;  //奇偶标志位      0:ACC中1的个数为偶数（包括0个）		1:ACC中1的个数为奇数

/*TXCON*/
TFX   EQU T2CON .7;  //定时器2/3溢出标志位
EXFX  EQU T2CON .6;  //TnEX引脚外部事件输入(下降沿)被检测到的标志位
EXENX EQU T2CON .3;  //TnEX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制
TRX   EQU T2CON .2;  //定时器2/3开始/停止控制位 0: 停止定时器2/3             1: 开始定时器2/3
TX    EQU T2CON .1;  //定时器2/3定时器/计数器方式选定位2
CP    EQU T2CON .0;  //捕获/重载方式选定位

/*IP*/
IPT2   EQU IP .5;  //Timer2中断优先权选择      0:设定 Timer 2的中断优先权是 “低”	 1:设定 Timer 2的中断优先权是 “高”
IPT1   EQU IP .3;  //Timer1中断优先权选择      0:设定 Timer 1的中断优先权是 “低”	 1:设定 Timer 1的中断优先权是 “高”
IPINT1 EQU IP .2;  //INT1计数器中断优先权选择  0:设定 INT1的中断优先权是 “低”     1:设定 INT1的中断优先权是 “高”
IPT0   EQU IP .1;  //Timer0中断优先权选择      0:设定 Timer 0的中断优先权是 “低”	 1:设定 Timer 0的中断优先权是 “高”
IPINT0 EQU IP .0;  //INT0计数器中断优先权选择  0:设定 INT0的中断优先权为 “低”     1: INT0中断优先权为高

/*IE*/
EA    EQU IE .7;  //中断使能的总控制       0:关闭所有的中断      1:打开所有的中断
ET2   EQU IE .5;  //Timer2中断使能控制     0:关闭TIMER2中断      1:打开TIMER2中断
ET1   EQU IE .3;  //Timer1中断使能控制     0:关闭TIMER1中断      1:打开TIMER1中断
EINT1 EQU IE .2;  //外部中断1中断使能控制  0:关闭外部中断1中断   1:打开外部中断1中断	
ET0   EQU IE .1;  //Timer0中断使能控制     0:关闭TIMER0中断      1:打开TIMER0中断
EINT0 EQU IE .0;  //外部中断0中断使能控制  0:关闭外部中断0中断   1:打开外部中断0中断

/*TCON*/
TF1 EQU TCON .7;  //T1溢出中断请求标志位	T1产生溢出，发生中断时，硬件将TF1置为“1”，申请中断，CPU响应时，硬件清“0”。
TR1 EQU TCON .6;  //定时器T1的运行控制位	0:Timer1禁止计数		1:Timer1开始计数
TF0 EQU TCON .5;  //T0溢出中断请求标志位	T0产生溢出，发生中断时，硬件将TF0置为“1”，申请中断，CPU响应时，硬件清“0”。
TR0 EQU TCON .4;  //定时器T0的运行控制位	0:Timer0禁止计数		1:Timer0开始计数


/******************* P0 ***************************
*SC92F6372未引出引脚：无
*SC92F6371未引出引脚：P02/P03/P04
*SC92F6378未引出引脚：P00/P01/P04/P05
*SC92F6370未引出引脚：P00/P02/P03/P04/P05
***************************************************/
P05 EQU P0 .5;
P04 EQU P0 .4;
P03 EQU P0 .3;
P02 EQU P0 .2;
P01 EQU P0 .1;
P00 EQU P0 .0;

/******************* P1 ***************************
*SC92F6372未引出引脚：无
*SC92F6371未引出引脚：无
*SC92F6378未引出引脚：P11/P15
*SC92F6370未引出引脚：P11/P14/P15
***************************************************/
P15 EQU P1 .5;
P14 EQU P1 .4;
P13 EQU P1 .3;
P12 EQU P1 .2;
P11 EQU P1 .1;
P10 EQU P1 .0;

/******************* P2 ***************************
*SC92F6372未引出引脚：无
*SC92F6371未引出引脚：P27
*SC92F6378未引出引脚：P24/P25/P26/P27
*SC92F6370未引出引脚：P24/P25/P26/P27
***************************************************/
P27 EQU P2 .7;
P26 EQU P2 .6;
P25 EQU P2 .5;
P24 EQU P2 .4;
P21 EQU P2 .1;
P20 EQU P2 .0;

/****************************************************************************
*注意：封装未引出的管脚，需设置为强推挽输出模式
*IC选型：请根据所使用的IC型号,在初始化完IO口后，调用相对应的未引出管脚的IO口配置;
*****************************************************************************/ 
SC92F6371_NIO_Init  MACRO IO        //SC92F6371的未引出来的IO口配置  
                    ORL  P0CON,#0x1C
                    ORL  P2CON,#0x80
                    ENDM    

SC92F6378_NIO_Init  MACRO IO        //SC92F6378的未引出来的IO口配置  
                    ORL  P0CON,#0x33
                    ORL  P1CON,#0x22
                    ORL  P2CON,#0xF0
                    ENDM  

SC92F6370_NIO_Init  MACRO IO        //SC92F6370的未引出来的IO口配置  
                    ORL  P0CON,#0x3D
                    ORL  P1CON,#0x32
                    ORL  P2CON,#0xF0
                    ENDM     

#endif
