cjoint

Publicité


Publicité

Format du document : text/plain

Prévisualisation

//ICC-AVR application builder : 2008-4-28 9:22:37
// Target : M8
// Crystal: 8.0000Mhz
/*************************************************************************
Le d�veloppement logiciel: ICC-AVR
Fonction: 9600 bauds port s�rie pour envoyer les donn�es de temp�rature et d'humidit�
Format des donn�es: forte humidit� huit forte humidit� 8 8 8 ch�que � basse temp�rature et � basse temp�rature
���
����������Somme de contr�le = humidit� �lev�e 8 + 8 + faible taux d'humidit� temp�rature de temp�rature 8 + 8 inf�rieure

Soci�t�: DHT21
Chip: M8
Crystal: 8Mhz externes
Cr�� par:
Cr�ation: 09.07.03
Mise � jour par:
Mise � jour:
Modifiez les raisons suivantes:
**************************************************** **********************/


#include
#include
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable */
typedef signed char S8; /* defined for signed 8-bits integer variable */
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable */
typedef signed int S16; /* defined for signed 16-bits integer variable */
typedef unsigned long U32; /* defined for unsigned 32-bits integer variable */
typedef signed long S32; /* defined for signed 32-bits integer variable */
typedef float F32; /* single precision floating point variable (32bits) */
typedef double F64; /* double precision floating point variable (64bits) */


/**************************************************************************
D�finition des espace I/O
***************************************************************************/
// B0_IN DDRB &= ~(1 << PB0) /* entr�e de r�glage*/
// B0_OUT DDRB |= (1 << PB0) /*d�finir la sortie*/
// B0_CLR PORTB &= ~(1 << PB0) /* mettre bas*/
// B0_SET PORTB |= (1 << PB0) /* jeu de haut*/
// B0_R PINB & (1 <
#define C4_IN DDRC &= ~(1 << PC4) /*entr�e de r�glage*/
#define C4_OUT DDRC |= (1 << PC4) /*d�finir la sortie*/
#define C4_CLR PORTC &= ~(1 << PC4) /*mettre bas*/
#define C4_SET PORTC |= (1 << PC4) /*jeu de haut*/
#define C4_R PINC & (1 <

/**************************************************************************
Communications espace I / O d�finition
***************************************************************************/
#define COM_IN C4_IN
#define COM_OUT C4_OUT
#define COM_CLR C4_CLR
#define COM_SET C4_SET
#define COM_R C4_R


/**************************************************************************
�Les variables globales zone d�finie
***************************************************************************/
U8 i;
U8 U8FLAG,k;
U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U16 ReceiveHighByte;
U16 ReceiveLowByte;


/**************************************************************************
***************************************************************************/
void port_init(void)
{
PORTB = 0x00;
DDRB = 0xFF;
PORTC = 0x03;
DDRC = 0x0C;
PORTD = 0x00;
DDRD = 0xF0;
}

void watchdog_init(void)
{
//WDR(); //ce qui emp�che un timout sur l'activation
//WDTCR = 0x0F; //WATCHDOG ENABLED - n'oubliez pas d'�mettre RDM
}


void Delay(unsigned int i)
{
while(i--);
}

void DelaymS (U16 dly)
{
U16 i;
for ( ; dly>0; dly--)
{
WDR();
for (i=0; i<1119; i++);
}
}


void Delay_10us(void)
{
U8 i;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;
}
void COM(void)
{

U8 i;
for(i=0;i<8;i++)
{

U8FLAG=2;
while((!(COM_R))&&U8FLAG++);
if(U8FLAG==1)break;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(COM_R)U8temp=1;
U8FLAG=2;
while((COM_R)&&U8FLAG++);

//D�lai d'attente de la boucle for
if(U8FLAG==1)break;

//D�terminer le bit de donn�es est �gal � 0 ou 1

// Si le niveau �lev� HAUTE valeur 0 est sup�rieur � un bit pr�d�termin� de donn�es 1

U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof

}

//--------------------------------
//----- Routine l'ecture humidit�
//--------------------------------
//----Les variables suivantes sont des variables globales--------
//----Haute temp�rature 8== U8T_data_H------
//----Basse temp�rature 8== U8T_data_L------
//----Une forte humidit� 8== U8RH_data_H-----
//----Le faible taux d'humidit� 8== U8RH_data_L-----
//----Check 8 == U8checkdata-----
//----Sous-programmes d'appels----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------



void RH(void)
{

//Master en tirant 18ms
COM_OUT;
COM_CLR;
DelaymS(1);
COM_IN;
COM_SET;

//Bus r�sistance pull-up tir� 20us retard d'accueil
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();

//H�te est d�fini pour entrer signal de r�ponse jugement de la machine
//P2_0=1;

// D�terminer si l'esclave ne r�pond pas � un niveau bas en r�ponse � des signaux tels que vous sautez, d�labr� r�ponse
// if(!P2_0) //T !
if(COM_R)U8FLAG=1;
while(!(COM_R))
{
U8FLAG=2;

//D�terminer si le probl�me esclave 80US signal de faible niveau de r�ponse plus
//while((!P2_0)&&U8FLAG++);
while((!(COM_R))&&U8FLAG++);
if(U8FLAG==1)break;
U8FLAG=2;

//D�terminer s'il convient de d�livrer un esclave question 80US haut niveau tel est l'acc�s � la r�ception de donn�es d'�tat
//while((P2_0)&&U8FLAG++);
while((COM_R)&&U8FLAG++);
if(U8FLAG==1)break;

//Donn�es de r�ception d'�tat
COM();
if(U8FLAG==1)break;
U8T_data_H_temp=U8comdata;
COM();
if(U8FLAG==1)break;
U8T_data_L_temp=U8comdata;
COM();
if(U8FLAG==1)break;
U8RH_data_H_temp=U8comdata;
COM();
if(U8FLAG==1)break;
U8RH_data_L_temp=U8comdata;
COM();
if(U8FLAG==1)break;
U8checkdata_temp=U8comdata;
break;
}//while
//P2_0=1;
COM_IN;
COM_SET;

//Validation des donn�es

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8T_data_H_temp;
U8RH_data_L=U8T_data_L_temp;
U8T_data_H=U8RH_data_H_temp;
U8T_data_L=U8RH_data_L_temp;
U8checkdata=U8checkdata_temp;
}//fi


COM_IN;
COM_SET;

}

/ *initialisation du port
Fr�quence du syst�me: 2MHz
Bits d'arr�t: 1
Vitesse de transmission: 9600
Longueur des donn�es: 8 */

void Uart_Init(void) {
UCSRA = 0x02; /*2 vitesses */
UCSRB = 0x18; /*autoris� � recevoir et envoyer */
UCSRC = 0x06; /*donnee 8 bit */
UBRRH = 0x00;
//UBRRL = 47; /*9600 3.6864M */
//UBRRL = 95; /*9600 7.3728M */
UBRRL = 103; /*9600 8.0000M */
}

/ *
La transmission en s�rie de donn�es
Requ�te envoy�e
* /

void Uart_Transmit(unsigned char i) {

/* Attendre tampon de transmission vide*/
while (!(UCSRA & (1< /* Donn�es dans un buffer, envoie les donn�es*/
UDR = i;
}

/ *
Serial r�cepteur de donn�es
Renseignements recevoir
* /
unsigned char Uart_Receive( void ) {

/* Attendre de recevoir des donn�es*/
while (!(UCSRA & (1< /* �Obtenir et renvoyer les donn�es dans le tampon*/
// Uart_Transmit(UDR);
return UDR;
}

void init_devices(void)
{
unsigned char i;
CLI();
port_init();
watchdog_init();
Uart_Init();
MCUCR = 0x03;
GICR = 0x00; //d�sactiver l'interruption externe 0
TIMSK = 0x00; //Off Timer 1 d'interruption
SEI(); //re-activer les interruptions

}

/**************************************************************************
����������������������������La fonction principale
**************************************************************************/


void main(void)
{

init_devices() ;
COM_IN;
COM_SET;

while(1)
{

//Lire DHT21
RH();

//Depuis le port s�rie pour envoyer des donn�es
Uart_Transmit(U8RH_data_H);
Uart_Transmit(U8RH_data_L);
Uart_Transmit(U8T_data_H);
Uart_Transmit(U8T_data_L);
Uart_Transmit(U8checkdata);


Uart_Transmit(U8checkdata);
//retard 2S
for(U8temp=0;U8temp<200;U8temp++)
{
DelaymS(10);

}//rof

}

}

Publicité


Signaler le contenu de ce document

Publicité