uchar COM() { uchar i,comdata; for(i=0;i<8;i++) { FLAG=2; while((!(P1IN&BIT5))&&FLAG++); delay_40us(); TEMP=0; if(P1IN&BIT5) { TEMP=1; } FLAG=2; while((P1IN&BIT5)&&FLAG++); if(FLAG==1) { return 255; } comdata<<=1; comdata|=TEMP; } return comdata; }
void readdht11() { uchar TEMP; DSET; CLR; delay_20ms(); SET; delay_40us(); SET; DCLR; if(!(P1IN&BIT5)); { FLAG=2; while((!(P1IN&BIT5))&&FLAG++); FLAG=2; while((P1IN&BIT5)&&FLAG++); RH_DATA_H_TEMP=COM(); RH_DATA_L_TEMP=COM(); T_DATA_H_TEMP=COM(); T_DATA_L_TEMP=COM(); CHECKDATA=COM(); TEMP=(T_DATA_H_TEMP+T_DATA_L_TEMP+RH_DATA_H_TEMP+RH_DATA_L_TEMP); if(TEMP==CHECKDATA) { RH_DATA_H=RH_DATA_H_TEMP; RH_DATA_L=RH_DATA_L_TEMP; T_DATA_H=T_DATA_H_TEMP; T_DATA_L=T_DATA_L_TEMP; } } }
/* * Initialisiert den Takt auf die maximale Frequenz, beim C8051F340 sind dies * 48MHz. * */ void sysclk_init(void) { OSCICN |= (1 << 1) | (1 << 0); /* Siehe C8051F340 Datenblatt, Seite 138 */ CLKMUL = 0x00; CLKMUL |= (1 << 7); delay_40us(); CLKMUL |= (1 << 6); while(!(CLKMUL & (1 << 5))); CLKSEL |= (1 << 1) | (1 << 0); }
/* * Initialisiert den Takt auf die maximale Frequenz, beim C8051F340 sind dies * 48MHz. * */ void sysclk_init(void) { OSCICN |= (1 << _IFCN1) | (1 << _IFCN0); /* Siehe C8051F340 Datenblatt, Seite 138 */ CLKMUL = 0x00; CLKMUL |= (1 << _MULEN); delay_40us(); CLKMUL |= (1 << _MULINIT); while(!(CLKMUL & (1 << _MULRDY))); CLKSEL |= (1 << _CLKSL1) | (1 << _CLKSL0); FLSCL |= (1 << _FLRT); }