Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma config FOSC = XTPLL_XT // Oscillator Selection bits (XT oscillator, PLL enabled (XTPLL)) #pragma config PWRT = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config BOR = OFF // Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software) #pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit)) #pragma config PBADEN = OFF // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset) #pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
- #include <xc.h>
- #define Data_Out LATAbits.LA0 /* assign Port pin for data*/
- #define Data_In PORTAbits.RA0 /* read data from Port pin*/
- #define Data_Dir TRISAbits.RA0 /* Port direction */
- #define _XTAL_FREQ 48000000UL
- char cadena1[] = {"Microcontroladores"};
- char cadena2[] = {"Bienvenidos al LB4"};
- char cadena3[] = {"La final de finales"};
- char cadena4[] = {"Opciones del menu"};
- char cadena5[] = {"(A) - Visualizar en consola la temperatura"};
- char cadena6[] = {"(B) - Visualizar en consola la humedad"};
- char cadena7[] = {"(C) - Visualizar en servo la temperatura"};
- char cadena8[] = {"(D) - Visualizar en servo la humedad"};
- char cadena9[] = {"(E) - (Opcional) Mover el servo como limpiaparabrisas de auto"}; char cad_temp[]= {"Temperatura: "};
- char cad_hume[]= {"Humedad: "};
- void DHT11_Start();
- void DHT11_CheckResponse();
- char DHT11_ReadData();
- unsigned int cta_on = 0;
- char envio;
- void main(void) {
- char Temp;
- char Hum;
- char Temp_dec;
- char Hum_dec;
- TRISEbits.RE0 = 0; //Puerto RE0 como salida (para el servo)
- ADCON1=0x0F; /* this makes all pins as a digital I/O pins */
- config_serial();
- config_interrupciones();
- menus();
- DHT11_Start(); /* send start pulse to DHT11 module */
- DHT11_CheckResponse(); /* wait for response from DHT11 module */
- Hum = DHT11_ReadData(); /* read Relative Humidity's integral value */
- Hum_dec = DHT11_ReadData(); /* read Relative Humidity's decimal value */
- Temp = DHT11_ReadData(); /* read Temperature's integral value */
- Temp_dec = DHT11_ReadData(); /* read Relative Temperature's decimal value */
- //INTCONbits.GIE = 1;
- //INTCONbits.PEIE = 1;
- //PIE1bits.RC1IE = 1;
- while (1)
- {
- switch(envio){
- case 1:
- for (char c=0;c<13;c++){
- TXREG = cad_temp[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = ((Temp%100)/10+'0');
- TXREG = ((Temp%100)%10+'0');
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x20;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0xA7;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x43;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- break;
- case 2:
- for (char c=0;c<9;c++) {
- TXREG = cad_hume[c];
- while(TXSTAbits.TRMT == 0);}
- TXREG = ((Hum%100)/10+'0');
- TXREG = ((Hum%100)%10+'0');
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x20;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x25;
- while(TXSTAbits.TRMT == 0);
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- break;
- case 3:
- if(Temp>=0 && Temp<40){cta_on = (4821/40)*Temp+58607;}
- else{ cta_on=63428;}
- break;
- case 4:
- if(Hum>=0 && Hum<90){ cta_on = (1607/30)*(Hum)+58607;}
- else{ cta_on=63428;}
- break;
- case 5:
- cta_on=58607;
- __delay_ms(2000);
- cta_on=63428;
- __delay_ms(2000);
- break;
- }}
- }
- char DHT11_ReadData(){
- char i,data = 0;
- for(i=0;i<8;i++)
- {
- while(!(Data_In & 1)); /* wait till 0 pulse, this is start of data pulse */
- __delay_us(30);
- if(Data_In & 1) /* check whether data is 1 or 0 */
- data = ((data<<1) | 1);
- else
- data = (data<<1);
- while(Data_In & 1);
- }
- return data;
- }
- void DHT11_Start()
- {
- Data_Dir = 0; /* set as output port */
- Data_Out = 0; /* send low pulse of min. 18 ms width */
- __delay_ms(18);
- Data_Out = 1; /* pull data bus high */
- __delay_us(20);
- Data_Dir = 1; /* set as input port */
- }
- void DHT11_CheckResponse()
- {
- while(Data_In & 1); /* wait till bus is High */
- while(!(Data_In & 1)); /* wait till bus is Low */
- while(Data_In & 1); /* wait till bus is High */
- }
- config_interrupciones(){
- T0CON = 0x81; //Timer0 en FOsc/4, PSC 1:4, 16bits
- RCONbits.IPEN = 1; //Habilitamos las prioridades en la interrupción
- INTCONbits.GIEH = 1; //Habilita Prioridades Altas
- INTCONbits.GIEL = 1; //Habilita Prioridades Bajas
- INTCONbits.TMR0IE=1; //Habilita el Timer0
- INTCON2bits.TMR0IP=0; //Interrupcion de timer0 en baja prioridad
- PIE1bits.RC1IE = 1;
- IPR1bits.RCIP = 1;
- }
- config_serial()
- {
- TRISCbits.RC6 = 0; //Ponemos el RC6 como salida
- TRISCbits.RC7 = 1; //Ponemos el RC7 como entrada
- BAUDCONbits.BRG16 = 0; //Para trabajar el SPBRG en 8 bits
- TXSTAbits.SYNC = 0; //Para configurar la velocidad de transmisión
- TXSTAbits.BRGH = 0; //Para configurar la velocidad de transmisión
- SPBRG = 77; //Para configurar baudios a 19200
- SPBRGH = 0; //Para configurar la velocidad de transmisión
- RCSTAbits.SPEN = 1; //Para habilitar el funcionamiento del EUSART
- RCSTAbits.CREN = 1;
- TXSTAbits.TXEN = 1; //Habilitamos la tranmisión en el EUSART
- }
- menus()
- {
- for (int c=0;c<18;c++) {
- TXREG = cadena1[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<18;c++) {
- TXREG = cadena2[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<19;c++) {
- TXREG = cadena3[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<17;c++) {
- TXREG = cadena4[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<42;c++) {
- TXREG = cadena5[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<38;c++) {
- TXREG = cadena6[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<40;c++) {
- TXREG = cadena7[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<36;c++) {
- TXREG = cadena8[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- for (int c=0;c<61;c++) {
- TXREG = cadena9[c];
- while(TXSTAbits.TRMT == 0);
- }
- TXREG = 0x0A;
- while(TXSTAbits.TRMT == 0);
- TXREG = 0x0D;
- while(TXSTAbits.TRMT == 0);
- __delay_ms(100);
- }
- void interrupt high_priority RCIsr(void){
- PIR1bits.RC1IF = 0;
- if (RCREG == 0x61){
- envio=1;
- }
- else if (RCREG == 0x62){
- envio=2;
- }
- else if (RCREG == 0x63){
- envio=3;
- }
- else if (RCREG == 0x64){
- envio=4;
- }
- else if (RCREG == 0x65){
- envio=5;
- }
- else {
- envio=0;
- }
- }
- void interrupt low_priority Tmr0(void){
- if (PORTEbits.RE0 == 1){
- LATEbits.LE0 = 0;
- TMR0 = cta_on;
- }
- else{
- LATEbits.LE0 = 1;
- TMR0 = 70832-cta_on;
- }
- INTCONbits.TMR0IF = 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement