📄 iic.src
字号:
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 + -