;---Инициализация чипа ccs811---
INSTccs811:;maxsentcounter- макс. кол-во передаваемых байт
;maxreccounter- макс. кол-во принимаемых байт
;TARGET- Адрес ведомого чипа
;SMB_DATA_OUT- Буфер передаваемых данных
;SMB_DATA_IN- Буфер принимаемых данных
;---
mov R0,#TARGET;- Адрес ведомого чипа
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x20;- адрес регистра "ID" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL SMB_Write
CALL SMB_Read
mov R0,#SMB_DATA_IN
mov A,@R0
cjne A,#0x81,INSTccs811m3
jmp INSTccs811m4
INSTccs811m3:clr bit_ccs811;- =0- чип ccs811 не обнаружен;=1- чип ccs811 подключен
jmp INSTccs811m9
INSTccs811m4:setb bit_ccs811;- =0- чип ccs811 не обнаружен;=1- чип ccs811 подключен
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x00;- адрес регистра "STATUS" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL SMB_Write
CALL SMB_Read
mov R0,#SMB_DATA_IN
mov A,@R0
;APP_VALID=1?
jnb ACC.4,INSTccs811m3;переход при APP_VALID=0
;APP_VALID=1- Valid application firmware loaded
;--
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0xF4;- адрес регистра "APP_START" чипа ccs811
CALL SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT+1
mov @R0,#0x00
mov R0,#SMB_DATA_OUT+2
mov @R0,#0x00
CALL SMB_Write
;-
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x00;- адрес регистра "STATUS" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL SMB_Write
CALL SMB_Read
mov R0,#SMB_DATA_IN;- Буфер принимаемых данных
mov A,@R0
;FW_MODE=1?
jnb ACC.7,INSTccs811m3;переход при FW_MODE=0
;FW_MODE=1- Firmware is in application mode. CCS811 is ready to take ADC measurements
;--
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x01;- адрес регистра "MEAS_MODE" чипа ccs811
CALL SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
mov R0,#SMB_DATA_OUT+1
mov @R0,#0x10
mov R0,#SMB_DATA_OUT+2
mov @R0,#0x00
CALL SMB_Write
;--
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x01;- макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0xE0;- адрес регистра "ERROR_ID" чипа ccs811
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL SMB_Write
CALL SMB_Read
;--
;---считываем через 1сек.
;eCO2=[400,8192]
;TVOC=[0,1187]
mov R0,#TARGET
mov @R0,#0xB4;- Адрес ведомого чипа ccs811(ADDR=GND=0x5A;ADDR=Vdd=0x5B)
mov maxreccounter,#0x08; макс. кол-во принимаемых байт
mov R0,#SMB_DATA_OUT
mov @R0,#0x02;- адрес регистра ALG_RESULT_DATA
mov maxsentcounter,#0x02;- макс. кол-во передаваемых байт
CALL SMB_Write
mov maxsentcounter,#0x01;- макс. кол-во передаваемых байт
CALL SMB_Write
CALL SMB_Read
mov R0,#SMB_DATA_IN
mov DPTR,#BufCompCcs811HL;- данные из ccs811 [BufCompTsl2561HL,BufCompTsl2561HL+0x07]
mov R1,#0x08
INSTccs811m55:mov A,@R0
movx @DPTR,A
inc R0
inc DPTR
djnz R1,INSTccs811m55
;---
INSTccs811m9:
;---END---