;The Num of Instruction(Size):159. The Max Address(Begin with 0):167 

                MCU  ES7P169C

A    equ    0
R    equ    1
HRAM_0X6  equ  0X6
HRAM_0X80  equ  0X80
HRAM_0X81  equ  0X81
HRAM_0X82  equ  0X82
HRAM_0X83  equ  0X83
HRAM_0X84  equ  0X84
HRAM_0X88  equ  0X88
HRAM_0X89  equ  0X89
HRAM_0X9D  equ  0X9d
HRAM_0X9E  equ  0X9e
HRAM_0XD9  equ  0Xd9
HRAM_0XDA  equ  0Xda
HRAM_0XDB  equ  0Xdb
HRAM_0XDC  equ  0Xdc
HRAM_0XDD  equ  0Xdd
HRAM_0XDE  equ  0Xde
HRAM_0XDF  equ  0Xdf

                ORG             0X00
HADR_0X0:
:0X0  c70ff000                  AJMP            HADR_0XF
                                ORG             0X2
:0X2  6800                      GOTO            HADR_0X0
                                ORG             0Xc
:0Xc  c180                      PUSH
:0Xd  c742f000                  AJMP            HADR_0X42
                                ORG             0Xf
HADR_0XF:
;
;
;/*********************************************************
;函数名: void main()
;描  述: 主函数
;输入值: 无
;输出值: 无 
;返回值: 无  
;**********************************************************/
;void main(void)
;{
;	clear_ram();
:0Xf  e783                      CLR             HRAM_0X83
:0X10  ec00                     PAGE            (_clear_ram)>>11
:0X11  601b                     CALL            HADR_0X1B
:0X12  ec00                     PAGE            (_2)>>11
;    Init_i2c();
:0X13  ec00                     PAGE            (_Init_i2c)>>11
:0X14  6026                     CALL            HADR_0X26
:0X15  ec00                     PAGE            (_3)>>11
;	INTG = 0b11000111;    //使能全局中断，设置向量中断
:0X16  e5c7                     MOVI            0XC7
:0X17  e696                     MOVA            _INTG_0                              ;_INTG_0: Bank 511    Addr: 65430    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;	INTP = 0b01000000;	  //中断优先级设置,IG6最高
:0X18  e540                     MOVI            0X40
:0X19  e697                     MOVA            _INTP_0                              ;_INTP_0: Bank 511    Addr: 65431    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
HADR_0X1A:
;	
;    while(1)
:0X1a  681a                     GOTO            HADR_0X1A
HADR_0X1B:
;/*********************************************************
;*Copyright (C), 2021, Shanghai Eastsoft Microelectronics Co., Ltd.
;*文件名:    siic.c
;*作  者:    AE Team
;*版  本:    v1.0，编译于iDesigner(v4.2.3.177) + 工具链HRCC(v1.2.0.119)
;*日  期:    2021/3/18
;*描  述:    I2C从机高速传输例程
;            1.本例程使用编译器优化的方法来实现I2C的高速传输，例程中主机写一个数据给
;			从机，再读回两个数据，从机将接收到的数据以原码和反码的形式发回给主机。
;			2.使用这种方法实现I2C传输时需要做到：
;				A.使用向量中断，尽可能将I2C的中断优先级放在最高位；
;				B.编译之前需要设置编译器，在“项目”菜单->“编译”->“IIC slave high speed mode”选择“true”，
;										  在“项目”菜单->“编译”->“Support interrupt vectors”选择“true”；
;				C.用户在处理完数据，写数据到I2CTB寄存器里面后需要软件释放SCL，即“I2CTE = 1”，主机才能读数据；
;				D.当用户传输速度大于400KHz时，建议除能I2C滤波功能，且系统时钟不低于32MHz。
;*备  注:   本软件仅供学习和演示使用，对用户直接引用代码所带来的风险或后果不承担任何法律责任。
;**********************************************************/
;#include <HIC.h>
;
;sbit  I2C_Restart;
;unsigned char I2CRB_REG;
;unsigned char I2CTB_REG;
;
;/*********************************************************
;函数名: void clear_ram(void)
;描  述: RAM中数据全部清零
;输入值: 无
;输出值: 无
;返回值: 无 
;**********************************************************/  
;void clear_ram(void) 
;{
;    __asm 
:0X1b  e783                     CLR             HRAM_0X83
;    { 
;         CLR   IAAL;
:0X1c  e781                     CLR             HRAM_0X81
;         CLR   IAAH;
:0X1d  e782                     CLR             HRAM_0X82
HADR_0X1E:
;         CLR   IAD;
:0X1e  e780                     CLR             HRAM_0X80
;         INC   IAAL,1;
:0X1f  5581                     INC             HRAM_0X81,      R
;         JBS   PSW,C
:0X20  9084                     JBS             HRAM_0X84,      0
;         GOTO  $-3;
:0X21  681e                     GOTO            HADR_0X1E
;         INC   IAAH,1;
:0X22  5582                     INC             HRAM_0X82,      R
;         JBS   IAAH,2
:0X23  9282                     JBS             HRAM_0X82,      2
;         GOTO  $-6;
:0X24  681e                     GOTO            HADR_0X1E
;    } 
:0X25  c183                     RET
HADR_0X26:
;
;/*********************************************************
;函数名: void delay(void)
;描  述: 简单延时函数delay
;输入值: 无
;输出值: 无
;返回值: 无 
;**********************************************************/
;void delay(void)
;{
;	unsigned char i = 50;
;	while(i--);
;}
;
;/*********************************************************
;函数名: void Init_i2c(void)
;描  述:  I2CS模块初始化
;输入值: 无
;输出值: 无
;返回值: 无 
;**********************************************************/
;void Init_i2c(void)        
;{
;	{
;		ANSL = 0xFF;        //选择对应端口为数字IO功能
:0X26  e783                     CLR             HRAM_0X83
:0X27  e5ff                     MOVI            0XFF
:0X28  e6bc                     MOVA            _ANSL_0                              ;_ANSL_0: Bank 511    Addr: 65468    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		ANSH = 0xFF;
:0X29  e5ff                     MOVI            0XFF
:0X2a  e68d                     MOVA            _ANSH_0                              ;_ANSH_0: Bank 511    Addr: 65421    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		PAT = 0x00;         //所有IO设为输出低电平
:0X2b  e7ad                     CLR             _PAT_0                               ;_PAT_0: Bank 511    Addr: 65453    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		PBT = 0x00;
:0X2c  e7ae                     CLR             _PBT_0                               ;_PBT_0: Bank 511    Addr: 65454    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		PCT = 0x00;
:0X2d  e7af                     CLR             _PCT_0                               ;_PCT_0: Bank 511    Addr: 65455    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		PA = 0x00;
:0X2e  e7a8                     CLR             _PA_0                                ;_PA_0: Bank 511    Addr: 65448    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		PB = 0x00;
:0X2f  e7a9                     CLR             _PB_0                                ;_PB_0: Bank 511    Addr: 65449    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		PC = 0x00;
:0X30  e7aa                     CLR             _PC_0                                ;_PC_0: Bank 511    Addr: 65450    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;
;		PBT0 = 1;					//I2C_SDA,输入
:0X31  a0ae                     BSS             (_PBT0_0)>>3,   0                    ;(_PBT0_0)>>3: Bank 511    Addr: 65454    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;		PBT1 = 0;					//I2C_SCL,输出
:0X32  a9ae                     BCC             (_PBT1_0)>>3,   1                    ;(_PBT1_0)>>3: Bank 511    Addr: 65454    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;	}
;
;	I2C_Restart = 0;		//发送源码或反码标志
:0X33  a806                     BCC             ((_I2C_Restart)>>3)&7f,         0    ;((_I2C_Restart)>>3)&7f: Bank 0    Addr: 6     
;	I2CRST = 1;				//复位I2C
:0X34  a483                     BSS             HRAM_0X83,      4
:0X35  a1da                     BSS             HRAM_0XDA,      1
HADR_0X36:
;	while(I2CRST);
:0X36  99da                     JBC             HRAM_0XDA,      1
:0X37  6836                     GOTO            HADR_0X36
;	I2CX16 = 0x0;				//采样滤波，当传输速度大于400KHz时，建议关闭采样滤波
:0X38  e7d9                     CLR             HRAM_0XD9
;	I2CSA = 0x2D<<1;			//从机地址0x2D
:0X39  e55a                     MOVI            0X5A
:0X3a  e6db                     MOVA            HRAM_0XDB
;	I2CC = 0xE1;		//使能I2C端口，开漏，内部弱上拉
:0X3b  e5e1                     MOVI            0XE1
:0X3c  e6da                     MOVA            HRAM_0XDA
;	I2CIEC = 0x0B;	//使能“起始位+从地址匹配+发送应答”中断使能，结束位中断使能
:0X3d  e50b                     MOVI            0XB
:0X3e  e6de                     MOVA            HRAM_0XDE
;	I2CIE = 1;				//开启I2C总中断
:0X3f  a69d                     BSS             (_I2CIE_0)>>3,  6                    ;(_I2CIE_0)>>3: Bank 511    Addr: 65437    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;}
:0X40  ac83                     BCC             HRAM_0X83,      4
:0X41  c183                     RET
HADR_0X42:
:0X42  a483                     BSS             HRAM_0X83,      4
:0X43  90df                     JBS             HRAM_0XDF,      0
:0X44  c74af000                 AJMP            HADR_0X4A
                                ORG             0X46
:0X46  90db                     JBS             HRAM_0XDB,      0
:0X47  c74af000                 AJMP            HADR_0X4A
                                ORG             0X49
:0X49  afda                     BCC             HRAM_0XDA,      7
HADR_0X4A:
:0X4a  ec00                     PAGE            (_4)>>11
:0X4b  e783                     CLR             HRAM_0X83
:0X4c  5081                     MOV             HRAM_0X81,      A
:0X4d  e600                     MOVA            (SAVED_FSR_INT2)&7f                  ;(SAVED_FSR_INT2)&7f: Bank 0    Addr: 0     
:0X4e  5082                     MOV             HRAM_0X82,      A
:0X4f  e601                     MOVA            (SAVED_FSR_INT2+1)&7f                ;(SAVED_FSR_INT2+1)&7f: Bank 0    Addr: 1     
:0X50  5002                     MOV             (MUL_TEMP)&7f,  A                    ;(MUL_TEMP)&7f: Bank 0    Addr: 2     
:0X51  e604                     MOVA            (MUL_TEMP_INT2)&7f                   ;(MUL_TEMP_INT2)&7f: Bank 0    Addr: 4     
:0X52  5003                     MOV             (MUL_TEMP+1)&7f,                A    ;(MUL_TEMP+1)&7f: Bank 0    Addr: 3     
:0X53  e605                     MOVA            (MUL_TEMP_INT2+1)&7f                 ;(MUL_TEMP_INT2+1)&7f: Bank 0    Addr: 5     
;}
;
;/*********************************************************
;函数名: void IG6_INT(void) interrupt_high  0x000C
;描  述: IIC中断服务程序
;输入值: 无
;输出值: 无
;返回值: 无 
;**********************************************************/ 
;void IG6_INT(void) interrupt_high  0x000C
;{
;	if(I2CIF && I2CIE) 
:0X54  969e                     JBS             HRAM_0X9E,      6
:0X55  6898                     GOTO            HADR_0X98
:0X56  969d                     JBS             HRAM_0X9D,      6
:0X57  6898                     GOTO            HADR_0X98
;    {
;        if(I2CSRIE && I2CSRIF)/*收到起始位+地址匹配+发送应答位中断*/
:0X58  a483                     BSS             HRAM_0X83,      4
:0X59  90de                     JBS             HRAM_0XDE,      0
:0X5a  6865                     GOTO            HADR_0X65
:0X5b  90df                     JBS             HRAM_0XDF,      0
:0X5c  6865                     GOTO            HADR_0X65
;        {
;            I2CSRIF = 0;               //清I2C起始位+地址匹配+发送应答位标志位            
:0X5d  a8df                     BCC             HRAM_0XDF,      0
;            if(I2CRW) /*主机读*/
:0X5e  90db                     JBS             HRAM_0XDB,      0
:0X5f  6863                     GOTO            HADR_0X63
;            {		
;                //I2CRBIE = 0;           //I2C接收中断禁止
;                I2CTBIE = 1;           //I2C发送中断使能
:0X60  a2de                     BSS             HRAM_0XDE,      2
;                I2C_Restart = 1;
:0X61  a006                     BSS             ((_I2C_Restart)>>3)&7f,         0    ;((_I2C_Restart)>>3)&7f: Bank 0    Addr: 6     
;            }
:0X62  6898                     GOTO            HADR_0X98
HADR_0X63:
;            else /*主机写*/
:0X63  aade                     BCC             HRAM_0XDE,      2
;            }     
;        }
:0X64  6898                     GOTO            HADR_0X98
HADR_0X65:
;		
;        else if(I2CRBIE && I2CRBIF)/*I2C接收缓冲器有接收数据*/
:0X65  93de                     JBS             HRAM_0XDE,      3
:0X66  686d                     GOTO            HADR_0X6D
:0X67  93df                     JBS             HRAM_0XDF,      3
:0X68  686d                     GOTO            HADR_0X6D
;        {
;            I2CRB_REG = I2CRB;        //读接收缓冲器，硬件清接收中断标志     
:0X69  50dd                     MOV             HRAM_0XDD,      A
:0X6a  ea01                     SECTION         0X1
:0X6b  e600                     MOVA            (_I2CRB_REG)&7f                      ;(_I2CRB_REG)&7f: Bank 0    Addr: 0     
;        }
:0X6c  6898                     GOTO            HADR_0X98
HADR_0X6D:
;		
;        else if(I2CTBIE && I2CTBIF)/*I2C发送缓冲器未满中断*/
:0X6d  92de                     JBS             HRAM_0XDE,      2
:0X6e  6882                     GOTO            HADR_0X82
:0X6f  92df                     JBS             HRAM_0XDF,      2
:0X70  6882                     GOTO            HADR_0X82
;        {
;			I2CTBIF = 0;
:0X71  aadf                     BCC             HRAM_0XDF,      2
;            if(I2C_Restart)
:0X72  9006                     JBS             HRAM_0X6,       0
:0X73  687b                     GOTO            HADR_0X7B
;            {	                       
;                I2CTB = I2CRB_REG;   //写原码至发送缓冲器
:0X74  ea01                     SECTION         0X1
:0X75  5000                     MOV             (_I2CRB_REG)&7f,                A    ;(_I2CRB_REG)&7f: Bank 0    Addr: 0     
:0X76  e6dc                     MOVA            HRAM_0XDC
;				I2CTE = 1; 
:0X77  a7da                     BSS             HRAM_0XDA,      7
;                I2C_Restart = 0;
:0X78  ea00                     SECTION         0X0
:0X79  a806                     BCC             ((_I2C_Restart)>>3)&7f,         0    ;((_I2C_Restart)>>3)&7f: Bank 0    Addr: 6     
;            }
:0X7a  6898                     GOTO            HADR_0X98
HADR_0X7B:
;            else
:0X7b  ea01                     SECTION         0X1
:0X7c  5200                     COM             (_I2CRB_REG)&7f,                A    ;(_I2CRB_REG)&7f: Bank 0    Addr: 0     
:0X7d  e601                     MOVA            (_I2CTB_REG)&7f                      ;(_I2CTB_REG)&7f: Bank 0    Addr: 1     
;                I2CTB = I2CTB_REG;   //写反码至发送缓冲器 
:0X7e  5001                     MOV             (_I2CTB_REG)&7f,                A    ;(_I2CTB_REG)&7f: Bank 0    Addr: 1     
:0X7f  e6dc                     MOVA            HRAM_0XDC
;				I2CTE = 1; 
:0X80  a7da                     BSS             HRAM_0XDA,      7
;            } 
;        }
:0X81  6898                     GOTO            HADR_0X98
HADR_0X82:
;		
;		else if((I2CNAIE && I2CNAIF)||(I2CSPIE && I2CSPIF))/*接收NACK和停止位中断*/
:0X82  96de                     JBS             HRAM_0XDE,      6
:0X83  6886                     GOTO            HADR_0X86
:0X84  9edf                     JBC             HRAM_0XDF,      6
:0X85  688a                     GOTO            HADR_0X8A
HADR_0X86:
:0X86  91de                     JBS             HRAM_0XDE,      1
:0X87  6898                     GOTO            HADR_0X98
:0X88  91df                     JBS             HRAM_0XDF,      1
:0X89  6898                     GOTO            HADR_0X98
HADR_0X8A:
;        {
;			PCT1 = 0;
:0X8a  a9af                     BCC             (_PCT1_0)>>3,   1                    ;(_PCT1_0)>>3: Bank 511    Addr: 65455    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;			PC1 = 0;
:0X8b  a9aa                     BCC             (_PC1_0)>>3,    1                    ;(_PC1_0)>>3: Bank 511    Addr: 65450    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
;			
;			I2C_Restart = 0;	    //发送原码或反码标志
:0X8c  a806                     BCC             ((_I2C_Restart)>>3)&7f,         0    ;((_I2C_Restart)>>3)&7f: Bank 0    Addr: 6     
;            I2CRST = 1;				//I2C模块复位使能
:0X8d  a1da                     BSS             HRAM_0XDA,      1
HADR_0X8E:
;            while(I2CRST);          //I2C模块复位完成
:0X8e  99da                     JBC             HRAM_0XDA,      1
:0X8f  688e                     GOTO            HADR_0X8E
;            I2CX16 = 0x0;				//采样滤波，速度大于400KHz时建议关闭
:0X90  e7d9                     CLR             HRAM_0XD9
;			I2CSA = 0x2D<<1;			//重置从机地址
:0X91  e55a                     MOVI            0X5A
:0X92  e6db                     MOVA            HRAM_0XDB
;			I2CC = 0xE1;      //使能I2C端口，开漏，内部弱上拉
:0X93  e5e1                     MOVI            0XE1
:0X94  e6da                     MOVA            HRAM_0XDA
;			I2CIEC = 0x0B;    //使能“起始位+从地址匹配+发送应答”中断使能，结束位中断使能
:0X95  e50b                     MOVI            0XB
:0X96  e6de                     MOVA            HRAM_0XDE
;			I2CIE = 1;              //开启I2C总中断
:0X97  a69d                     BSS             (_I2CIE_0)>>3,  6                    ;(_I2CIE_0)>>3: Bank 511    Addr: 65437    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
HADR_0X98:
;        }
;	}
:0X98  ae9e                     BCC             (_I2CIF_0)>>3,  6                    ;(_I2CIF_0)>>3: Bank 511    Addr: 65438    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\IIC\iic_slave_highspeed\c_siic\debug\siic.obj 
; }
:0X99  ea00                     SECTION         0X0
:0X9a  ac83                     BCC             HRAM_0X83,      4
:0X9b  689c                     GOTO            HADR_0X9C
HADR_0X9C:
:0X9c  5004                     MOV             (MUL_TEMP_INT2)&7f,             A    ;(MUL_TEMP_INT2)&7f: Bank 0    Addr: 4     
:0X9d  e602                     MOVA            (MUL_TEMP)&7f                        ;(MUL_TEMP)&7f: Bank 0    Addr: 2     
:0X9e  e688                     MOVA            HRAM_0X88
:0X9f  5005                     MOV             (MUL_TEMP_INT2+1)&7f,           A    ;(MUL_TEMP_INT2+1)&7f: Bank 0    Addr: 5     
:0Xa0  e603                     MOVA            (MUL_TEMP+1)&7f                      ;(MUL_TEMP+1)&7f: Bank 0    Addr: 3     
:0Xa1  e689                     MOVA            HRAM_0X89
:0Xa2  5001                     MOV             (SAVED_FSR_INT2+1)&7f,          A    ;(SAVED_FSR_INT2+1)&7f: Bank 0    Addr: 1     
:0Xa3  e682                     MOVA            HRAM_0X82
:0Xa4  5000                     MOV             (SAVED_FSR_INT2)&7f,            A    ;(SAVED_FSR_INT2)&7f: Bank 0    Addr: 0     
:0Xa5  e681                     MOVA            HRAM_0X81
:0Xa6  c181                     POP
:0Xa7  c189                     RETIE

                                END
