|
|
Publié sur 25/11/2014 22:12:09
|
|
|

[mw_shl_code=c,true]#include<pic.h> // Utiliser un oscillateur à cristal 12M #include"12864.h » #define uint unsigned int #define uchar non signé __CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF) ; uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, vérifié ; uint delay_time ; void timer0_init()
{ TMR0=0 ; Première valeur T0CS=0 ; Sélectionnez la source d’horloge, qui correspond à un quart de l’oscillateur à cristal ; T0SE=1 ; Bits de sélection des bords de la source d’horloge PSA=0 ; Bits d’allocation du prédiviseur PS0=0 ; PS1=0 ; PS2=0 ; Bits de sélection avant division TMR0IF=0 ; Le drapeau du minuteur est clair 0 GIE=1 ; Ouvrir l’interruption globale TMR0IE=0 ; Minuterie 0 activée TMR0=236 ; La première valeur du poème
} Minuteur d’interruption du vide 0()
{ if (TMR0IF) { TMR0IF=0 ; TMR0=235 ; delay_time-- ; }
} Void timer0_delay(uint delay_value)
{ delay_time=delay_value ; TMR0IE=1 ; tandis que (delay_time) ; TMR0IE=0 ;
} Uchar Read_byte()
{ uchar i, temp, hum ; pour(i=0 ; i<8 ; i++) { pendant que ( ! RC1) ; timer0_delay(2) ; Delay 20us temp=0 ; if(RC1){temp=1 ; tandis que (RC1) ; } else{temp=0 ; } hum<<=1 ; hum|=temp ; } retour (hum) ;
} void Read_data()
{ Uchar ckeck_value ; RC1=0 ; timer0_delay(2500) ; Le bus est tiré vers le bas par au moins 18 MS RC1=1 ; timer0_delay(2) ; Le bus est tiré vers le haut par la résistance de tirage et le délai de l’hôte est de 20us TRISC1=1 ; L’hôte est configuré pour entrer afin de juger le signal de réponse de l’esclave RC1=1 ; if( ! RC1) { pendant que ( ! RC1)) // Déterminer si l’esclave émet un signal de faible réponse de 80 US ou non { NOP() ; } while(RC1) // Déterminer si l’esclave émet un niveau élevé de 80us, et si oui, il entre dans l’état de réception des données { NOP() ; } temp_valueH=Read_byte() ; temp_valueL=Read_byte() ; hum_valueH=Read_byte() ; hum_valueL=Read_byte() ; check=Read_byte() ; ckeck_value=hum_valueL+hum_valueH+temp_valueL+temp_valueH ; if(check==ckeck_value) { Proce_num(0x84 temp_valueH) ; Proce_num(0x94 hum_valueH) ; } } TRISC1=0 ; RC1=1 ;
} Main() du vide
{ TRISB=0X00 ; lcdinit() ; timer0_init() ; tandis que (1) { Read_data() ; } }[/mw_shl_code]
|
Précédent:Pensée et programmation nue [Sérialisé]Prochain:Aides sociales, règles de dénomination en langue C, des choses très pratiques
|