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