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

📄 iic.src

📁 TSL256源程序驱动!通过其IIC口采集环境光光强
💻 SRC
📖 第 1 页 / 共 3 页
字号:
	MOV  	R7,AR5
	MOV  	A,R4
	JNZ  	?C0050
	MOV  	A,R7
	DEC  	A
	JZ   	?C0049
	INC  	A
	JNZ  	?C0050
; 	{
			; SOURCE LINE # 383
; 		case 0: // 13.7 msec
			; SOURCE LINE # 384
?C0048:
; 			chScale = CHSCALE_TINT0;
			; SOURCE LINE # 385
	CLR  	A
	MOV  	chScale?865+03H,#017H
	MOV  	chScale?865+02H,#075H
	MOV  	chScale?865+01H,A
	MOV  	chScale?865,A
; 			break;
			; SOURCE LINE # 386
	SJMP 	?C0047
; 		case 1: // 101 msec
			; SOURCE LINE # 387
?C0049:
; 			chScale = CHSCALE_TINT1;
			; SOURCE LINE # 388
	CLR  	A
	MOV  	chScale?865+03H,#0E7H
	MOV  	chScale?865+02H,#0FH
	MOV  	chScale?865+01H,A
	MOV  	chScale?865,A
; 			break;
			; SOURCE LINE # 389
	SJMP 	?C0047
; 		default: // assume no scaling
			; SOURCE LINE # 390
?C0050:
; 			chScale = (1 << CH_SCALE);
			; SOURCE LINE # 391
	CLR  	A
	MOV  	chScale?865+03H,A
	MOV  	chScale?865+02H,#04H
	MOV  	chScale?865+01H,A
	MOV  	chScale?865,A
; 			break;
			; SOURCE LINE # 392
; 	}
			; SOURCE LINE # 393
?C0047:
; 	// scale if gain is NOT 16X
; 	if (!iGain) chScale = chScale << 4; // scale 1X to 16X
			; SOURCE LINE # 395
	MOV  	A,iGain?856+01H
	ORL  	A,iGain?856
	JNZ  	?C0051
	MOV  	R7,chScale?865+03H
	MOV  	R6,chScale?865+02H
	MOV  	R5,chScale?865+01H
	MOV  	R4,chScale?865
	MOV  	R0,#04H
	LCALL	?C?LSHL
	MOV  	chScale?865+03H,R7
	MOV  	chScale?865+02H,R6
	MOV  	chScale?865+01H,R5
	MOV  	chScale?865,R4
?C0051:
; 	// scale the channel values
; 	channel0 = (ch0 * chScale) >> CH_SCALE;
			; SOURCE LINE # 397
	MOV  	R6,AR2
	MOV  	R7,AR3
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R3,chScale?865+03H
	MOV  	R2,chScale?865+02H
	MOV  	R1,chScale?865+01H
	MOV  	R0,chScale?865
	LCALL	?C?LMUL
	MOV  	R0,#0AH
	LCALL	?C?ULSHR
	MOV  	channel0?867+03H,R7
	MOV  	channel0?867+02H,R6
	MOV  	channel0?867+01H,R5
	MOV  	channel0?867,R4
; 	channel1 = (ch1 * chScale) >> CH_SCALE;
			; SOURCE LINE # 398
	MOV  	R6,ch1?859
	MOV  	R7,ch1?859+01H
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R3,chScale?865+03H
	MOV  	R2,chScale?865+02H
	MOV  	R1,chScale?865+01H
	MOV  	R0,chScale?865
	LCALL	?C?LMUL
	MOV  	R0,#0AH
	LCALL	?C?ULSHR
	MOV  	channel1?866+03H,R7
	MOV  	channel1?866+02H,R6
	MOV  	channel1?866+01H,R5
	MOV  	channel1?866,R4
; 	//........................................................................
; 	// find the ratio of the channel values (Channel1/Channel0)
; 	// protect against divide by zero
; 	ratio1 = 0;
			; SOURCE LINE # 402
	CLR  	A
	MOV  	ratio1?861+03H,A
	MOV  	ratio1?861+02H,A
	MOV  	ratio1?861+01H,A
	MOV  	ratio1?861,A
; 	if (channel0 != 0) ratio1 = (channel1 << (RATIO_SCALE+1)) / channel0;
			; SOURCE LINE # 403
	MOV  	R7,A
	MOV  	R6,A
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,channel0?867+03H
	MOV  	R2,channel0?867+02H
	MOV  	R1,channel0?867+01H
	MOV  	R0,channel0?867
	CLR  	C
	LCALL	?C?ULCMP
	JZ   	?C0052
	MOV  	R7,channel1?866+03H
	MOV  	R6,channel1?866+02H
	MOV  	R5,channel1?866+01H
	MOV  	R4,channel1?866
	MOV  	R0,#0AH
	LCALL	?C?LSHL
	MOV  	R0,channel0?867
	LCALL	?C?ULDIV
	MOV  	ratio1?861+03H,R7
	MOV  	ratio1?861+02H,R6
	MOV  	ratio1?861+01H,R5
	MOV  	ratio1?861,R4
?C0052:
; 	// round the ratio value
; 	ratio = (ratio1 + 1) >> 1;
			; SOURCE LINE # 405
	MOV  	A,ratio1?861+03H
	ADD  	A,#01H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,ratio1?861+02H
	MOV  	R6,A
	CLR  	A
	ADDC 	A,ratio1?861+01H
	MOV  	R5,A
	CLR  	A
	ADDC 	A,ratio1?861
	MOV  	R4,A
	MOV  	R0,#01H
	LCALL	?C?ULSHR
	MOV  	ratio?862+03H,R7
	MOV  	ratio?862+02H,R6
	MOV  	ratio?862+01H,R5
	MOV  	ratio?862,R4
; 	// is ratio <= eachBreak ?
; 	switch (iType)
			; SOURCE LINE # 407
	MOV  	A,iType?860+01H
	JZ   	$ + 4H
	AJMP 	?C0053
	MOV  	A,iType?860
	JZ   	$ + 4H
	AJMP 	?C0053
; 	{
			; SOURCE LINE # 408
; 		case 0: // T package
			; SOURCE LINE # 409
?C0054:
; 			if ((ratio >= 0) && (ratio <= K1T))
			; SOURCE LINE # 410
	CLR  	A
	MOV  	R7,A
	MOV  	R6,A
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	CLR  	C
	LCALL	?C?ULCMP
	JC   	?C0055
	CLR  	A
	MOV  	R7,#040H
	MOV  	R6,A
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JNC  	?C0055
; 				{b=B1T; m=M1T;}
			; SOURCE LINE # 411
	MOV  	b?868,#01H
	MOV  	b?868+01H,#0F2H
	MOV  	m?869,#01H
	MOV  	m?869+01H,#0BEH
	AJMP 	?C0053
?C0055:
; 			else if (ratio <= K2T)
			; SOURCE LINE # 412
	CLR  	A
	MOV  	R7,#080H
	MOV  	R6,A
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JNC  	?C0057
; 				{b=B2T; m=M2T;}
			; SOURCE LINE # 413
	MOV  	b?868,#02H
	MOV  	b?868+01H,#014H
	MOV  	m?869,#02H
	MOV  	m?869+01H,#0D1H
	AJMP 	?C0053
?C0057:
; 			else if (ratio <= K3T)
			; SOURCE LINE # 414
	CLR  	A
	MOV  	R7,#0C0H
	MOV  	R6,A
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JNC  	?C0059
; 				{b=B3T; m=M3T;}
			; SOURCE LINE # 415
	MOV  	b?868,#02H
	MOV  	b?868+01H,#03FH
	MOV  	m?869,#03H
	MOV  	m?869+01H,#07BH
	AJMP 	?C0053
?C0059:
; 			else if (ratio <= K4T)
			; SOURCE LINE # 416
	CLR  	A
	MOV  	R7,A
	MOV  	R6,#01H
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JNC  	?C0061
; 				{b=B4T; m=M4T;}
			; SOURCE LINE # 417
	MOV  	b?868,#02H
	MOV  	b?868+01H,#070H
	MOV  	m?869,#03H
	MOV  	m?869+01H,#0FEH
	AJMP 	?C0053
?C0061:
; 			else if (ratio <= K5T)
			; SOURCE LINE # 418
	CLR  	A
	MOV  	R7,#038H
	MOV  	R6,#01H
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JNC  	?C0063
; 				{b=B5T; m=M5T;}
			; SOURCE LINE # 419
	MOV  	b?868,#01H
	MOV  	b?868+01H,#06FH
	MOV  	m?869,#01H
	MOV  	m?869+01H,#0FCH
	SJMP 	?C0053
?C0063:
; 			else if (ratio <= K6T)
			; SOURCE LINE # 420
	CLR  	A
	MOV  	R7,#09AH
	MOV  	R6,#01H
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JNC  	?C0065
; 				{b=B6T; m=M6T;}
			; SOURCE LINE # 421
	MOV  	b?868,#00H
	MOV  	b?868+01H,#0D2H
	MOV  	m?869,#00H
	MOV  	m?869+01H,#0FBH
	SJMP 	?C0053
?C0065:
; 			else if (ratio <= K7T)
			; SOURCE LINE # 422
	CLR  	A
	MOV  	R7,#09AH
	MOV  	R6,#02H
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JNC  	?C0067
; 				{b=B7T; m=M7T;}
			; SOURCE LINE # 423
	MOV  	b?868,#00H
	MOV  	b?868+01H,#018H
	MOV  	m?869,#00H
	MOV  	m?869+01H,#012H
	SJMP 	?C0053
?C0067:
; 			else if (ratio > K8T)
			; SOURCE LINE # 424
	CLR  	A
	MOV  	R7,#09AH
	MOV  	R6,#02H
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,ratio?862+03H
	MOV  	R2,ratio?862+02H
	MOV  	R1,ratio?862+01H
	MOV  	R0,ratio?862
	SETB 	C
	LCALL	?C?ULCMP
	JC   	?C0053
; 				{b=B8T; m=M8T;}
			; SOURCE LINE # 425
	CLR  	A
	MOV  	b?868,A
	MOV  	b?868+01H,A
	MOV  	m?869,A
	MOV  	m?869+01H,A
; 			break;
			; SOURCE LINE # 426
; 		case 1:// CS package
			; SOURCE LINE # 427
; /*
; 			if ((ratio >= 0) && (ratio <= K1C))
; 			{b=B1C; m=M1C;}
; 			else if (ratio <= K2C)
; 			{b=B2C; m=M2C;}
; 			else if (ratio <= K3C)
; 			{b=B3C; m=M3C;}
; 			else if (ratio <= K4C)
; 			{b=B4C; m=M4C;}
; 			else if (ratio <= K5C)
; 			{b=B5C; m=M5C;}
; 			else if (ratio <= K6C)
; 			{b=B6C; m=M6C;}
; 			else if (ratio <= K7C)
; 			{b=B7C; m=M7C;}
; 			else if (ratio > K8C)
; 			{b=B8C; m=M8C;}
; */
; 			break;
			; SOURCE LINE # 446
; 	}
			; SOURCE LINE # 447
?C0053:
; 
; 	temp = ((channel0 * b)- (channel1 * m));
			; SOURCE LINE # 449
	MOV  	R6,m?869
	MOV  	R7,m?869+01H
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R3,channel1?866+03H
	MOV  	R2,channel1?866+02H
	MOV  	R1,channel1?866+01H
	MOV  	R0,channel1?866
	LCALL	?C?LMUL
	PUSH 	AR4
	PUSH 	AR5
	PUSH 	AR6
	PUSH 	AR7
	MOV  	R6,b?868
	MOV  	R7,b?868+01H
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R3,channel0?867+03H
	MOV  	R2,channel0?867+02H
	MOV  	R1,channel0?867+01H
	MOV  	R0,channel0?867
	LCALL	?C?LMUL
	POP  	AR3
	POP  	AR2
	POP  	AR1
	POP  	AR0
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R3
	MOV  	temp?863+03H,A
	MOV  	A,R6
	SUBB 	A,R2
	MOV  	temp?863+02H,A
	MOV  	A,R5
	SUBB 	A,R1
	MOV  	temp?863+01H,A
	MOV  	A,R4
	SUBB 	A,R0
	MOV  	temp?863,A
; 	// do not allow negative lux value
; 	if (temp < 0) temp = 0;
			; SOURCE LINE # 451
	CLR  	A
	MOV  	R7,A
	MOV  	R6,A
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,temp?863+03H
	MOV  	R2,temp?863+02H
	MOV  	R1,temp?863+01H
	MOV  	R0,temp?863
	CLR  	C
	LCALL	?C?ULCMP
	JNC  	?C0071
	CLR  	A
	MOV  	temp?863+03H,A
	MOV  	temp?863+02H,A
	MOV  	temp?863+01H,A
	MOV  	temp?863,A
?C0071:
; 	// round lsb (2^(LUX_SCALE.1))
; 	temp += (1 << (LUX_SCALE-1));
			; SOURCE LINE # 453
	CLR  	A
	ADD  	A,temp?863+03H
	MOV  	temp?863+03H,A
	MOV  	A,temp?863+02H
	ADDC 	A,#020H
	MOV  	temp?863+02H,A
	CLR  	A
	ADDC 	A,temp?863+01H
	MOV  	temp?863+01H,A
	CLR  	A
	ADDC 	A,temp?863
	MOV  	temp?863,A
; 	// strip off fractional portion
; 	lux = temp >> LUX_SCALE;
			; SOURCE LINE # 455
	MOV  	R7,temp?863+03H
	MOV  	R6,temp?863+02H
	MOV  	R5,temp?863+01H
	MOV  	R4,A
	MOV  	R0,#0EH
	LCALL	?C?ULSHR
	MOV  	lux?864+03H,R7
	MOV  	lux?864+02H,R6
	MOV  	lux?864+01H,R5
	MOV  	lux?864,R4
; 	return(lux);
			; SOURCE LINE # 456
; }
			; SOURCE LINE # 457
?C0072:
	RET  	
; END OF _CalculateLux

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

	RSEG  ?PR?GetLux?IIC
GetLux:
	USING	0
			; SOURCE LINE # 465
; {
			; SOURCE LINE # 466
; 	INT i;
; 	i=0;	
			; SOURCE LINE # 468
	CLR  	A
	MOV  	i?970,A
	MOV  	i?970+01H,A
; 	CH0=TSL2561_read_byte(REG_CH0_L);
			; SOURCE LINE # 469
	MOV  	R7,#0CH
	LCALL	_TSL2561_read_byte
	MOV  	CH0,#00H
	MOV  	CH0+01H,R7
; 	CH0=CH0+TSL2561_read_byte(REG_CH0_H)*256;
			; SOURCE LINE # 470
	MOV  	R7,#0DH
	LCALL	_TSL2561_read_byte
	MOV  	A,R7
	MOV  	R6,A
	CLR  	A
	ADD  	A,CH0+01H
	MOV  	CH0+01H,A
	MOV  	A,R6
	ADDC 	A,CH0
	MOV  	CH0,A
; 	
; 	CH1=TSL2561_read_byte(REG_CH1_L);
			; SOURCE LINE # 472
	MOV  	R7,#0EH
	LCALL	_TSL2561_read_byte
	MOV  	CH1,#00H
	MOV  	CH1+01H,R7
; 	CH1=CH1+TSL2561_read_byte(REG_CH1_H)*256;
			; SOURCE LINE # 473
	MOV  	R7,#0FH
	LCALL	_TSL2561_read_byte
	MOV  	A,R7
	MOV  	R6,A
	CLR  	A
	ADD  	A,CH1+01H
	MOV  	CH1+01H,A
	MOV  	A,R6
	ADDC 	A,CH1
	MOV  	CH1,A
; 
; 	i=CalculateLux(GAIN_16X,ITIME_400MS,CH0,CH1,FootType_T);
			; SOURCE LINE # 475
	MOV  	?_CalculateLux?BYTE+06H,A
	MOV  	?_CalculateLux?BYTE+07H,CH1+01H
	CLR  	A
	MOV  	?_CalculateLux?BYTE+08H,A
	MOV  	?_CalculateLux?BYTE+09H,A
	MOV  	R3,CH0+01H
	MOV  	R2,CH0
	MOV  	R5,#02H
	MOV  	R4,A
	MOV  	R7,#01H
	MOV  	R6,A
	LCALL	_CalculateLux
	MOV  	i?970,R6
	MOV  	i?970+01H,R7
; 	return (i);
			; SOURCE LINE # 476
; }			; SOURCE LINE # 477
?C0073:
	RET  	
; END OF GetLux

	END

⌨️ 快捷键说明

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