/*--------------------------------------------------------------------------
SC92F5X5X_ASM.H

C Header file for SC92F5X5X microcontroller.
Copyright (c) 2025 Shenzhen SinOne Microelectronics Co., Ltd.
All rights reserved.
深圳市赛元微电子股份有限公司
版本号:  V1.0    
日期:  2025/7/28
--------------------------------------------------------------------------*/
#ifndef _SC92F5X5X_ASM_H_
#define _SC92F5X5X_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;  //定时器频率控制寄存器
T2CON   EQU 0XC8;  //定时器2控制寄存器
T2MOD   EQU 0XC9;  //定时器2工作模式寄存器
RCAP2L  EQU 0XCA;  //定时器2重载/捕捉低8位
RCAP2H  EQU 0XCB;  //定时器2重载/捕捉高8位
TL2     EQU 0XCC;  //定时器2低8位
TH2     EQU 0XCD;  //定时器2高8位

/*ADC*/
ADCCFG2 EQU 0XAA;  //ADC设置寄存器2
ADCCFG0 EQU 0XAB;  //ADC设置寄存器0
ADCCON  EQU 0XAD;  //ADC控制寄存器
ADCVL   EQU 0XAE;  //ADC结果寄存器
ADCVH   EQU 0XAF;  //ADC结果寄存器

/*PWM*/
PWMCFG   EQU 0XD1;  //PWM设置寄存器
PWMCON   EQU 0XD2;  //PWM控制寄存器
PWMPRD   EQU 0XD3;  //PWM周期设置寄存器
PWMDTYA  EQU 0XD4;  //PWM占空比设置寄存器A
PWMDTY0  EQU 0XD5;  //PWM0占空比设置寄存器
PWMDTY1  EQU 0XD6;  //PWM1占空比设置寄存器
PWMDTY2  EQU 0XD7;  //PWM2占空比设置寄存器
PWMDTYB  EQU 0XDC;  //PWM占空比设置寄存器B
PWMDTY3  EQU 0XDD;  //PWM3占空比设置寄存器
PWMDTY4  EQU 0XDE;  //PWM4占空比设置寄存器
PWMDTY5  EQU 0XDF;  //PWM5占空比设置寄存器

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

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

/*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的个数为奇数

/*T2CON*/
TF2   EQU T2CON .7;  //定时器2溢出标志位
EXF2  EQU T2CON .6;  //TnE2引脚外部事件输入(下降沿)被检测到的标志位
RCLK  EQU T2CON .5;  //UART0接收时钟控制位    0: 定时器1产生接收波特率	1: 定时器2产生接收波特率
TCLK  EQU T2CON .4;  //UART0发送时钟控制位    0: 定时器1产生发送波特率	1: 定时器2产生发送波特率
EXEN2 EQU T2CON .3;  //TnE2引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制
TR2   EQU T2CON .2;  //定时器2开始/停止控制位 0: 停止定时器2             1: 开始定时器2
T2    EQU T2CON .1;  //定时器2定时器/计数器方式选定位2
CP    EQU T2CON .0;  //捕获/重载方式选定位

/*IP*/
IPADC  EQU IP .6;  //ADC中断优先权选择         0:设定 ADC的中断优先权是 “低”      1:设定 ADC的中断优先权是 “高”
IPT2   EQU IP .5;  //Timer2中断优先权选择      0:设定 Timer 2的中断优先权是 “低”	 1:设定 Timer 2的中断优先权是 “高”
IPUART EQU IP .4;  //UART中断优先权选择        0:设定 UART的中断优先权是 “低”     1:设定 UART的中断优先权是 “高”
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:打开所有的中断
EADC  EQU IE .6;  //ADC中断使能控制        0:关闭ADC中断         1:打开ADC中断
ET2   EQU IE .5;  //Timer2中断使能控制     0:关闭TIMER2中断      1:打开TIMER2中断
EUART EQU IE .4;  //UART中断使能控制       0:关闭SIF中断         1:打开SIF中断
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 ***************************
*SC92F5251/SC92F5351未引出引脚：P02/P03/P04/P06/P07
*SC92F5250/SC92F5350未引出引脚：P00/P01/P02/P03/P04/P05/P06/P07
***************************************************/
P07 EQU P0 .7;
P06 EQU P0 .6;
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 ***************************
*SC92F5251/SC92F5351未引出引脚：P14/P15
*SC92F5250/SC92F5350未引出引脚：P10/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 ***************************
*SC92F5251/SC92F5351未引出引脚：P27
*SC92F5250/SC92F5350未引出引脚：P22/P23/P24/P27
***************************************************/
P27 EQU P2 .7;
P26 EQU P2 .6;
P25 EQU P2 .5;
P24 EQU P2 .4;
P23 EQU P2 .3;
P22 EQU P2 .2;
P21 EQU P2 .1;
P20 EQU P2 .0;

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

SC92F5X50_NIO_Init  MACRO IO        //SC92F5250/SC92F5350的未引出来的IO口配置  
                    ORL  P0CON,#0xFF
                    ORL  P1CON,#0x33
                    ORL  P2CON,#0x9C
                    ENDM    

#endif
