⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.src

📁 TSL256源程序驱动!通过其IIC口采集环境光光强
💻 SRC
📖 第 1 页 / 共 3 页
字号:
; 	SDA = 1;	
			; SOURCE LINE # 137
	SETB 	SDA
; 	_nop_ ();//jp
			; SOURCE LINE # 138
	NOP  	
; 	_nop_ ();//jp
			; SOURCE LINE # 139
	NOP  	
; 	_nop_ ();//jp
			; SOURCE LINE # 140
	NOP  	
; 	bSendOk = FALSE;
			; SOURCE LINE # 141
;---- Variable 'bSendOk?245' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
; 	for(i=0; i<10; i++)
			; SOURCE LINE # 142
	MOV  	R5,A
?C0026:
	MOV  	A,R5
	CLR  	C
	SUBB 	A,#0AH
	JNC  	?C0027
; 	{
			; SOURCE LINE # 143
; 		_nop_ ();	
			; SOURCE LINE # 144
	NOP  	
; 		if(!SDA) {bSendOk = TRUE;break;} //sda =0 应答信号
			; SOURCE LINE # 145
	JB   	SDA,?C0028
	MOV  	R7,#01H
	SJMP 	?C0027
; 	}
			; SOURCE LINE # 146
?C0028:
	INC  	R5
	SJMP 	?C0026
?C0027:
;  //   ACC = P1;
; /*
; 	if(SDA)   //sda =0 应答信号
; 	{
; 		bSendOk = FALSE;
; 	}
; 	else
; 	bSendOk = TRUE;*/
; 	SCL = 0;
			; SOURCE LINE # 155
	CLR  	SCL
; 	return bSendOk;
			; SOURCE LINE # 156
; }
			; SOURCE LINE # 157
?C0030:
	RET  	
; END OF _Send_Byte_I2C

; 
; 
; /*********************************************/
; /*  name:  Read_Byte_I2C_ACK                 */
; /*  input: none                              */
; /*  output:	BYTE tmData                         */
; /*  function: Send one tmData to 24256         */
; /*********************************************/
; BYTE Read_Byte_I2C_ACK()

	RSEG  ?PR?Read_Byte_I2C_ACK?IIC
Read_Byte_I2C_ACK:
	USING	0
			; SOURCE LINE # 166
; {
			; SOURCE LINE # 167
; 	BYTE i;
; 	BYTE tmData = 0;
			; SOURCE LINE # 169
;---- Variable 'tmData?347' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
; 
; 
; 	SDA=1;//
			; SOURCE LINE # 172
	SETB 	SDA
; 	_nop_ ();//jp
			; SOURCE LINE # 173
	NOP  	
; 	_nop_ ();//jp
			; SOURCE LINE # 174
	NOP  	
; 	_nop_ ();//jp
			; SOURCE LINE # 175
	NOP  	
; 	_nop_ ();//jp
			; SOURCE LINE # 176
	NOP  	
; 
; 	for(i=0; i<8; i++)
			; SOURCE LINE # 178
;---- Variable 'i?346' assigned to Register 'R6' ----
	MOV  	R6,A
?C0031:
	MOV  	A,R6
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0032
; 	{
			; SOURCE LINE # 179
; 		//tmData *= 2;
; 		tmData <<= 1;
			; SOURCE LINE # 181
	MOV  	A,R7
	ADD  	A,ACC
	MOV  	R7,A
; 		SCL = 1;
			; SOURCE LINE # 182
	SETB 	SCL
; 
; 		_nop_ ();
			; SOURCE LINE # 184
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 185
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 186
	NOP  	
; 		
; 		_nop_ ();//jk
			; SOURCE LINE # 188
	NOP  	
; 		_nop_ ();//jk
			; SOURCE LINE # 189
	NOP  	
; 		_nop_ ();//jk
			; SOURCE LINE # 190
	NOP  	
; 
; 		if(SDA)
			; SOURCE LINE # 192
	JNB  	SDA,?C0034
; 			tmData |= 0x01;
			; SOURCE LINE # 193
	ORL  	AR7,#01H
?C0034:
; 
; 		_nop_ ();//jk
			; SOURCE LINE # 195
	NOP  	
; 		_nop_ ();//jk
			; SOURCE LINE # 196
	NOP  	
; 		_nop_ ();//jk
			; SOURCE LINE # 197
	NOP  	
; 
; 		SCL = 0;
			; SOURCE LINE # 199
	CLR  	SCL
; 
; 		_nop_ ();
			; SOURCE LINE # 201
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 202
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 203
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 204
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 205
	NOP  	
; 	}
			; SOURCE LINE # 206
	INC  	R6
	SJMP 	?C0031
?C0032:
; 
; 
; 	SDA = 0;	
			; SOURCE LINE # 209
	CLR  	SDA
; 	_nop_ ();
			; SOURCE LINE # 210
	NOP  	
; 	_nop_ ();
			; SOURCE LINE # 211
	NOP  	
; 
; 	SCL = 1;
			; SOURCE LINE # 213
	SETB 	SCL
; 	for(i=0; i<8; i++)
			; SOURCE LINE # 214
	CLR  	A
	MOV  	R6,A
?C0035:
	MOV  	A,R6
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0036
; 	_nop_ ();
			; SOURCE LINE # 215
	NOP  	
	INC  	R6
	SJMP 	?C0035
?C0036:
; 	SCL=0;
			; SOURCE LINE # 216
	CLR  	SCL
; 
; 	SDA = 1;
			; SOURCE LINE # 218
	SETB 	SDA
;         
;  
; 	return tmData;
			; SOURCE LINE # 221
; }
			; SOURCE LINE # 222
?C0038:
	RET  	
; END OF Read_Byte_I2C_ACK

; 
; 
; /*******************************************************************************
; * 名    称: I2C_Start()
; * 功    能: 启动I2C操作
; * 入口参数: 无
; * 出口参数: 无
; *******************************************************************************/
; BYTE Read_Byte_I2C_NoACK()

	RSEG  ?PR?Read_Byte_I2C_NoACK?IIC
Read_Byte_I2C_NoACK:
	USING	0
			; SOURCE LINE # 231
; {
			; SOURCE LINE # 232
; 	BYTE i;
; 	BYTE tmData = 0;
			; SOURCE LINE # 234
;---- Variable 'tmData?449' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
; 	SDA=1;
			; SOURCE LINE # 235
	SETB 	SDA
; 	for(i=0; i<8; i++)
			; SOURCE LINE # 236
;---- Variable 'i?448' assigned to Register 'R6' ----
	MOV  	R6,A
?C0039:
	MOV  	A,R6
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0040
; 	{
			; SOURCE LINE # 237
; 		tmData *= 2;
			; SOURCE LINE # 238
	MOV  	A,R7
	ADD  	A,ACC
	MOV  	R7,A
; 		SCL = 1;
			; SOURCE LINE # 239
	SETB 	SCL
; 
; 		if(SDA)
			; SOURCE LINE # 241
	JNB  	SDA,?C0042
; 			tmData |= 0x01;
			; SOURCE LINE # 242
	ORL  	AR7,#01H
?C0042:
; 		SCL = 0;
			; SOURCE LINE # 243
	CLR  	SCL
; 
; 		_nop_ ();
			; SOURCE LINE # 245
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 246
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 247
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 248
	NOP  	
; 		_nop_ ();
			; SOURCE LINE # 249
	NOP  	
; 	}
			; SOURCE LINE # 250
	INC  	R6
	SJMP 	?C0039
?C0040:
; 
; /*	SCL = 0;*/
; 
; 	return tmData;
			; SOURCE LINE # 254
; }
			; SOURCE LINE # 255
?C0043:
	RET  	
; END OF Read_Byte_I2C_NoACK

; /*******************************************************************************
; * 名    称: TSL2561_write_byte()
; * 功    能: 启动I2C操作
; * 入口参数: 无
; * 出口参数: 无
; *******************************************************************************/
; uchar TSL2561_write_byte( unsigned char addr, unsigned char dat) 

	RSEG  ?PR?_TSL2561_write_byte?IIC
_TSL2561_write_byte:
	USING	0
			; SOURCE LINE # 262
;---- Variable 'dat?551' assigned to Register 'R4' ----
	MOV  	R4,AR5
;---- Variable 'addr?550' assigned to Register 'R3' ----
	MOV  	R3,AR7
; { 
			; SOURCE LINE # 263
; 
;     uchar status=0; 
			; SOURCE LINE # 265
;---- Variable 'status?552' assigned to Register 'R2' ----
	CLR  	A
	MOV  	R2,A
;     I2C_Start();                           		  //开始 
			; SOURCE LINE # 266
	LCALL	I2C_Start
;     status=Send_Byte_I2C(TSL2561_ADDR|TSL2561_WR);//写TSL2561地址 
			; SOURCE LINE # 267
	MOV  	R7,#072H
	LCALL	_Send_Byte_I2C
	MOV  	R2,AR7
;     status=Send_Byte_I2C(0x80|addr);              //写命令 
			; SOURCE LINE # 268
	MOV  	A,R3
	ORL  	A,#080H
	MOV  	R7,A
	LCALL	_Send_Byte_I2C
	MOV  	R2,AR7
;   //  status=Send_Byte_I2C(0x01);              	  //写Byte Count 
;     status=Send_Byte_I2C(dat);                    //写数据 
			; SOURCE LINE # 270
	MOV  	R7,AR4
	LCALL	_Send_Byte_I2C
	MOV  	R2,AR7
;     I2C_Stop( );                                  //停止 
			; SOURCE LINE # 271
	LCALL	I2C_Stop
;     delay_1ms(2);                                //延时2 ms 
			; SOURCE LINE # 272
	MOV  	R7,#02H
	LCALL	_delay_1ms
;     return 0; 
			; SOURCE LINE # 273
	MOV  	R7,#00H
; 
; } 
			; SOURCE LINE # 275
?C0044:
	RET  	
; END OF _TSL2561_write_byte

; /*******************************************************************************
; * 名    称: TSL2561_read_byte()
; * 功    能: 启动I2C操作
; * 入口参数: 无
; * 出口参数: 无
; *******************************************************************************/
; uchar TSL2561_read_byte( uchar addr) 

	RSEG  ?PR?_TSL2561_read_byte?IIC
_TSL2561_read_byte:
	USING	0
			; SOURCE LINE # 282
;---- Variable 'addr?653' assigned to Register 'R4' ----
	MOV  	R4,AR7
; { 
			; SOURCE LINE # 283
; 
;     uchar status=0; 
			; SOURCE LINE # 285
	CLR  	A
	MOV  	status?654,A
; 
;     I2C_Start();                           		  //开始 
			; SOURCE LINE # 287
	LCALL	I2C_Start
;     status=Send_Byte_I2C(TSL2561_ADDR|TSL2561_WR);//写TSL2561地址 
			; SOURCE LINE # 288
	MOV  	R7,#072H
	LCALL	_Send_Byte_I2C
	MOV  	status?654,R7
; 	status=Send_Byte_I2C(0x80|addr);              //写命令 
			; SOURCE LINE # 289
	MOV  	A,R4
	ORL  	A,#080H
	MOV  	R7,A
	LCALL	_Send_Byte_I2C
	MOV  	status?654,R7
; 
;     I2C_Start();                           			 //Re开始 
			; SOURCE LINE # 291
	LCALL	I2C_Start
;     status=Send_Byte_I2C(TSL2561_ADDR|TSL2561_RD);  //写TSL2561地址     
			; SOURCE LINE # 292
	MOV  	R7,#073H
	LCALL	_Send_Byte_I2C
	MOV  	status?654,R7
;     status=Read_Byte_I2C_ACK();                      //读数据 
			; SOURCE LINE # 293
	LCALL	Read_Byte_I2C_ACK
	MOV  	status?654,R7
; 	I2C_Stop( );                                     //停止 
			; SOURCE LINE # 294
	LCALL	I2C_Stop
; 
;     delay_1ms(10); 
			; SOURCE LINE # 296
	MOV  	R7,#0AH
	LCALL	_delay_1ms
; 
;     return status; 
			; SOURCE LINE # 298
	MOV  	R7,status?654
; 
; } 
			; SOURCE LINE # 300
?C0045:
	RET  	
; END OF _TSL2561_read_byte

; 
; /*******************************************************************************
; * 名    称: InitTsl256x()
; * 功    能: 启动I2C操作
; * 入口参数: 无
; * 出口参数: 无
; *******************************************************************************/
; void InitTsl256x(void)

	RSEG  ?PR?InitTsl256x?IIC
InitTsl256x:
	USING	0
			; SOURCE LINE # 308
; {
			; SOURCE LINE # 309
; 	uchar status;
; 	status=TSL2561_write_byte(0x00,PWUP);	  //寄存器00H
			; SOURCE LINE # 311
	MOV  	R5,#03H
	CLR  	A
	MOV  	R7,A
	LCALL	_TSL2561_write_byte
	MOV  	status?755,R7
; 	status=TSL2561_write_byte(0x01,0x12);	  //寄存器00H
			; SOURCE LINE # 312
	MOV  	R5,#012H
	MOV  	R7,#01H
	LCALL	_TSL2561_write_byte
	MOV  	status?755,R7
; //	status=TSL2561_write_byte(0x02,0x00);	  //寄存器00H
; //	status=TSL2561_write_byte(0x03,0x00);	  //寄存器00H
; //	status=TSL2561_write_byte(0x04,0x00);	  //寄存器00H
; //	status=TSL2561_write_byte(0x05,0x00);	  //寄存器00H
; 	status=TSL2561_write_byte(0x06,0x00);	  //寄存器00H
			; SOURCE LINE # 317
	CLR  	A
	MOV  	R5,A
	MOV  	R7,#06H
	LCALL	_TSL2561_write_byte
	MOV  	status?755,R7
;  /*
;     I2C_Start();                           		   //开始 
; 
;     status=Send_Byte_I2C(TSL2561_ADDR|TSL2561_WR); //写TSL2561地址 
; //jumpingtest
; while(!status)//test the Tsl2561 ack 
; LED=0;
; LED=1;
;     status=Send_Byte_I2C(0x90|REG_CTR);            //写命令 
; //    I2C_Start();                                   //开始 
; //    status=Send_Byte_I2C(TSL2561_ADDR|TSL2561_RD);//写TSL2561地址 
; 
;     status=Send_Byte_I2C(0x07);//写n ge ????????
; 
;     status=Send_Byte_I2C(PWUP);                    //寄存器00H
; 	status=Send_Byte_I2C(0x12);                    //寄存器01H  -the gain=1 16x -the timer=10 401ms
; 	
; 	status=Send_Byte_I2C(0x00);                    //寄存器02H
; 	status=Send_Byte_I2C(0x00);                    //寄存器03H
; 	status=Send_Byte_I2C(0x00);                    //寄存器04H
; 	status=Send_Byte_I2C(0x00);                    //寄存器05H
; 
; 	status=Send_Byte_I2C(0x00);                    //寄存器06H   no interrupt
;     I2C_Stop( );                                   //停止 */
;     delay_1ms(10);                                 //延时10 ms 
			; SOURCE LINE # 342
	MOV  	R7,#0AH
	LCALL	_delay_1ms
; 
; }
			; SOURCE LINE # 344
	RET  	
; END OF InitTsl256x

; 
; //****************************************************************************
; //
; // Copyright -Handson Jumping, Inc.
; //
; // lux equation approximation without floating point calculations
; //////////////////////////////////////////////////////////////////////////////
; // Routine: unsigned int CalculateLux(unsigned int ch0, unsigned int ch0, int iType)
; //
; // Description: Calculate the approximate illuminance (lux) given the raw
; // channel values of the TSL2560. The equation if implemented
; // as a piece.wise linear approximation.
; //
; // Arguments: unsigned int iGain . gain, where 0:1X, 1:16X
; // unsigned int tInt . integration time, where 0:13.7mS, 1:100mS, 2:402mS,
; // 3:Manual
; // unsigned int ch0 . raw channel value from channel 0 of TSL2560
; // unsigned int ch1 . raw channel value from channel 1 of TSL2560
; // unsigned int iType . package type (T or CS)
; //
; // Return: unsigned int . the approximate illuminance (lux)
; //
; //////////////////////////////////////////////////////////////////////////////
; unsigned int CalculateLux(unsigned int iGain, unsigned int tInt, unsigned int ch0, unsigned int ch1, int iType)

	RSEG  ?PR?_CalculateLux?IIC
_CalculateLux:
	USING	0
			; SOURCE LINE # 368
	MOV  	iGain?856,R6
	MOV  	iGain?856+01H,R7
;---- Variable 'ch0?858' assigned to Register 'R2/R3' ----
;---- Variable 'tInt?857' assigned to Register 'R4/R5' ----
; {
			; SOURCE LINE # 369
; 	unsigned long ratio1;
; 	unsigned long ratio;
; 	unsigned long temp;
; 	unsigned long lux;
; 	unsigned long chScale;    //TSL2561
; 	unsigned long channel1;   //TSL2561
; 	unsigned long channel0;   //TSL2561
; 	unsigned int b, m;
; 	//........................................................................
; 	// first, scale the channel values depending on the gain and integration time
; 	// 16X, 402mS is nominal.
; 	// scale if integration time is NOT 402 msec
; 	switch (tInt)
			; SOURCE LINE # 382
	MOV  	R6,AR4

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -