void readHumidTimerHandler(void *T) { I2C001_DataType data1; data1.Data1.TDF_Type = I2C_TDF_MRStart; data1.Data1.Data = ((HTDU21D_ADDRESS << 1) | I2C_READ); I2C001_WriteData(&I2C001_Handle1,&data1); delay11(DELAY); if(I2C001_GetFlagStatus(&I2C001_Handle1,I2C001_FLAG_NACK_RECEIVED) == I2C001_SET) { I2C001_ClearFlag(&I2C001_Handle1,I2C001_FLAG_NACK_RECEIVED); errorCounter++; } else { uint8_t msb = 0x00; uint8_t lsb = 0x00; uint8_t checksum = 0x00; USIC_CH_TypeDef* I2CRegs = I2C001_Handle1.I2CRegs; I2C001_DataType data2; data2.Data1.TDF_Type = I2C_TDF_MRxAck0; data2.Data1.Data = ubyteFF; I2C001_WriteData(&I2C001_Handle1,&data2); delay11(DELAY); if(!USIC_ubIsRxFIFOempty(I2CRegs)) { msb = (uint8_t)I2CRegs->OUTR; //Result = (bool)TRUE; } I2C001_DataType data3; data3.Data1.TDF_Type = I2C_TDF_MRxAck0; data3.Data1.Data = ubyteFF; I2C001_WriteData(&I2C001_Handle1,&data3); delay11(DELAY); if(!USIC_ubIsRxFIFOempty(I2CRegs)) { lsb = (uint8_t)I2CRegs->OUTR; //Result = (bool)TRUE; } I2C001_DataType data4; data4.Data1.TDF_Type = I2C_TDF_MRxAck1; data4.Data1.Data = ubyteFF; I2C001_WriteData(&I2C001_Handle1,&data4); delay11(DELAY); I2C001_DataType data5; data5.Data1.TDF_Type = I2C_TDF_MStop; data5.Data1.Data = ubyteFF; I2C001_WriteData(&I2C001_Handle1,&data5); delay11(DELAY); int d = USIC_GetRxFIFOFillingLevel(I2CRegs); // Read receive buffer, put the data in DataReceive1 if(!USIC_ubIsRxFIFOempty(I2CRegs)) { checksum = (uint8_t)I2CRegs->OUTR; //Result = (bool)TRUE; } unsigned int rawHumid = ((unsigned int) msb << 8) | (unsigned int) lsb; if(check_crc(rawHumid, checksum) != 0) { wrong_checksum = 1; } rawHumid &= 0xFFFC; //Zero out the status bits but keep them in place //Given the raw temperature data, calculate the actual temperature float tempRH = rawHumid / (float)65536; //2^16 = 65536 rh = -6 + (125 * tempRH); //From page 14 readHumid = 1; } }
//#pragma vector=RESET_VECTOR //#define PROGRAMDEBUG 1 int main(void) { INT16U i,temp,second; INT16U count,oldDI; INT8U RUN; //RUNRECORD runlog; unsigned char old__second; unsigned char old__minute; unsigned char old__hour; unsigned char old__day; unsigned char minute_counter=0; //unsigned char hour_counter=0; unsigned int DI_Convert=0; char checkcode[6]="vh11+\0"; char DI_C[4]="DI=\0"; char d[5]; unsigned int Prog_Circle=0; //unsigned char cps[]="DataTime=\0"; INT8U DI_Alter=0; INT8U Save_Hourdata=0; INT8U Save_Daydata=0; //INT8U a[16]="123456789ABCDEF"; //INT8U b[17]; // INT8U c[3]={0xf8,0x10,0x10}; INT8U checknum[7]; /*********************************************** device initializing ************************************************/ CPU_init(); P4OUT |=BIT0; //flash rst GPRS_POWERON; RealData.R_D.DO=0; DIInput(); DOOutput(RealData.R_D.DO); init_lcd (); clrram(); LCD_light_ON; disp_img(0x01e0+960,30,64,zimo240128); //MemoryClear(Modbustore,sizeof(Modbustore)); Modbustore =0; MemoryClear(local_mma_H,sizeof(local_mma_H)); MemoryClear(local_mma_D,sizeof(local_mma_D)); MemoryClear(local_mma_M,sizeof(local_mma_M));//100504 MemoryClear(dev_mma_D,sizeof(dev_mma_D)); MemoryClear(dev_mma_H,sizeof(dev_mma_H)); MemoryClear(dev_mma_M,sizeof(dev_mma_M)); //100504 MemoryClear(Hour_COD_avg,sizeof(Hour_COD_avg)); MemoryClear(Hour_B01_avg,sizeof(Hour_B01_avg)); delay11(3200); //GPRS_POWEROFF; //test #ifdef PROGRAMDEBUG char c[3]={0x00,0,0}; char aa='A'; FlashBufferWrite(c,"abcdefg",7,0); //c[0]=0xf0; //FlashBuffertoMemory(c,0); Delay_N_mS(20000); c[0]=0; FlashBufferRead(c,checknum,5,0); checknum[0]=0; c[0]=0xf0; FlashMemorytoBuffer(c,0); c[0]=0; FlashBufferRead(c,checknum,5,0); checknum[0]=0; c[0]=0xf0; FlashMemoryRead(c,checknum,5); //FlashMemoryWrite(c,checkcode,5,0); Delay_N_mS(20000); //c[2]=0x05; //FlashMemoryWrite(c,&aa,1,0); Delay_N_mS(20000); c[2]=0; FlashMemoryRead(c,checknum,5); #endif //--------------------------- /**************************************************** system initializing ****************************************************/ AT24C64_RS(checknum,0x00,6); Delay_N_mS(2000); AT24C64_RS(checknum,0x00,6); if(strcmp(checknum,checkcode)!=0) { v_charge1302(); v_Set1302(); for(count=0;count<6;count++) SPARA.pw[count]=(count+1)|0x30; //初始密码123456 for(count=0;count<9;count++) { SPARA.mn[count]=(count+1)|0x30; //mn 12345678901234 ml_mn[count]=parameter.sys_parameter.mn[count]; } for(count=0;count<5;count++) { SPARA.mn[count+9]=count|0x30; ml_mn[count+9]=parameter.sys_parameter.mn[count+9]; } SPARA.st[0]='3'; //st 32 SPARA.st[1]='2'; ml_st[0]='3'; ml_st[1]='2'; for(count=0;count<9;count++) SPARA.sim[count]=(count+1)|0x30; //sim 123456789 SPARA.rd_interval[0]='3'; //实时数据上报时间 60秒 SPARA.rd_interval[1]='0'; SPARA.rd_interval[2]='0'; for(count=0;count<5;count++) SPARA.overtime[count]='0'; //超时时间 5秒 SPARA.overtime[4]='5'; SPARA.resendtime[0]='0'; //重发次数 3次 SPARA.resendtime[1]='3'; for(count=0;count<5;count++) SPARA.warntime[count]='0'; //报警时间 5 SPARA.warntime[4]='5'; for(count=0;count<4;count++) SPARA.reporttime[count]='0'; //上报时间 5 SPARA.reporttime[3]='5'; for(count=0;count<2;count++) SPARA.alarmtarge[count]=0x30+count; //仪表污染物编号 SPARA.alarmtarge[2]='\0'; SPARA.alarmtarge[3]='\0'; for(count=0;count<8;count++) { //ADPARA(count).po_id[0]='P'; //ADPARA(count).po_id[1]=0x31+count; //ADPARA(count).po_id[2]='\0'; ADPARA(count).po_id[0]='0'; ADPARA(count).po_id[1]='0'; ADPARA(count).po_id[2]='0'; ADPARA(count).ADUV.b=16.0; ADPARA(count).ADLV.b=0.0; ADPARA(count).U_Alarmlimt.b=10.0; ADPARA(count).L_Alarmlimt.b=0.0; ADPARA(count).rate.b=(16.0-0.0)/0x666; ADPARA(count).AI_Type=2; } for(count=0;count<6;count++) SPARA.Serial_Baud[count]=0; //LCD_Baud=0; for(checknum[0]=0;checknum[0]<6;checknum[0]++) for(count=0;count<16;count++) SPARA.PO_SerialNum[checknum[0]][count]=0xff; SPARA.PO_SerialNum[0][0]=0x05; for(count=0;count<6;count++) { SPARA.PO_Type[count]=0; Channel_Num[count]=0; } SPARA.PO_Type[0]=1; //水,哈希 Channel_Num[0]=1; SPARA.alarmtarge[10]=0;//baud rate SPARA.LCD_Backtime=1; AT24C64_W(parameter.sys_setting,0x10,sizeof(PARAMETER)); /*初始化历史数据标志组结构体,存储于Flash第一页(页地址0x00)*/ INT8U Rdaddr[3]={0,0,0}; INT16U pageaddr=0; HISDATAFLAGS Sighisdata; MemoryClear(&Sighisdata,sizeof(Sighisdata)); for(count=0;count<7;) { Sighisdata.page =0x10+count*31*24; Rdaddr[1]=(INT8U)(pageaddr>>8); Rdaddr[2]=(INT8U)(pageaddr); FlashBufferWrite(Rdaddr,&Sighisdata,sizeof(Sighisdata),FLASHBUFFER1); FlashBufferWrite(Rdaddr,&Sighisdata,sizeof(Sighisdata),FLASHBUFFER1); count++; pageaddr=count*120; } Rdaddr[0]=0; Rdaddr[1]=0; Rdaddr[2]=0; FlashBuffertoMemory(Rdaddr,FLASHBUFFER1); HISDATAFLAGS_D sig_d; pageaddr=0; MemoryClear(&sig_d,sizeof(sig_d)); for(count=0;count<13;) { sig_d.page =5400+count*31; Rdaddr[0]=0; Rdaddr[1]=((INT8U)(pageaddr>>8))|0x28; //page 5 Rdaddr[2]=(INT8U)(pageaddr); FlashBufferWrite(Rdaddr,&sig_d,sizeof(sig_d),FLASHBUFFER1); count++; pageaddr=count*80; } Rdaddr[0]=0; Rdaddr[1]=0x28; Rdaddr[2]=0; FlashBuffertoMemory(Rdaddr,FLASHBUFFER1); HISDATAFLAGS_R sig_r; MemoryClear(&sig_r,sizeof(sig_r)); pageaddr=0; for(count=0;count<3;) { sig_r.page =6000+count*24*12; Rdaddr[0]=0; Rdaddr[1]=((INT8U)(pageaddr>>8))|0x50; Rdaddr[2]=(INT8U)(pageaddr); FlashBufferWrite(Rdaddr,&sig_r,sizeof(sig_r),FLASHBUFFER1); count++; pageaddr=count*200; } Rdaddr[0]=0; Rdaddr[1]=0x50; // page 10 Rdaddr[2]=0; FlashBuffertoMemory(Rdaddr,FLASHBUFFER1); //运行日志存储于8190页(1FFE) RUNRECORD runlog; MemoryClear(&runlog,sizeof(runlog)); pageaddr=0; for(count=0;count<10;count++) { pageaddr=count*64; Rdaddr[0]=0xff; Rdaddr[1]=((INT8U)(pageaddr>>8))|0xf0; Rdaddr[2]=(INT8U)(pageaddr); FlashBufferWrite(Rdaddr,&runlog,sizeof(runlog),FLASHBUFFER1); } Rdaddr[0]=0xff; Rdaddr[1]=0xf0; Rdaddr[2]=0; FlashBuffertoMemory(Rdaddr,FLASHBUFFER1); //Sighisdata.page =0; //FlashBufferWrite(Rdaddr,&Sighisdata,sizeof(Sighisdata),FLASHBUFFER1); AT24C64_W(checkcode,0x00,6); }
float readHumidity(void) { if(canH) { canH = 0; I2C001_DataType data1; data1.Data1.TDF_Type = I2C_TDF_MStart; data1.Data1.Data = ((HTDU21D_ADDRESS << 1) | I2C_WRITE); I2C001_WriteData(&I2C001_Handle1,&data1); delay11(DELAY); I2C001_DataType data2; data2.Data1.TDF_Type = I2C_TDF_MTxData; data2.Data1.Data = TRIGGER_HUMD_MEASURE_NOHOLD; I2C001_WriteData(&I2C001_Handle1,&data2); delay11(DELAY); if(timerHumidOn == 0) { TimerRdHumid = SYSTM001_CreateTimer(55, SYSTM001_PERIODIC, readHumidTimerHandler, NULL); SYSTM001_StartTimer(TimerRdHumid); timerHumidOn = 1; } while(TRUE) { if(errorCounter > 3) { errorCounter = 0; SYSTM001_StopTimer(TimerRdHumid); SYSTM001_DeleteTimer(TimerRdHumid); TimerRdHumid = 0; timerHumidOn = 0; canH = 1; return 998; } else if(1 == wrong_checksum) { wrong_checksum = 0; SYSTM001_StopTimer(TimerRdHumid); SYSTM001_DeleteTimer(TimerRdHumid); TimerRdHumid = 0; timerHumidOn = 0; canH = 1; return 999; } else if(1 == readHumid) { readHumid = 0; SYSTM001_StopTimer(TimerRdHumid); SYSTM001_DeleteTimer(TimerRdHumid); TimerRdHumid = 0; timerHumidOn = 0; canH = 1; break; } } } return rh; }