Advertisement
Guest User

labo4 final

a guest
Nov 15th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.23 KB | None | 0 0
  1. #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)
  2. #pragma config PWRT = ON // Power-up Timer Enable bit (PWRT enabled)
  3. #pragma config BOR = OFF // Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software)
  4. #pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
  5. #pragma config PBADEN = OFF // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
  6. #pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
  7. #include <xc.h>
  8.  
  9. #define Data_Out LATAbits.LA0 /* assign Port pin for data*/
  10. #define Data_In PORTAbits.RA0 /* read data from Port pin*/
  11. #define Data_Dir TRISAbits.RA0 /* Port direction */
  12. #define _XTAL_FREQ 48000000UL
  13.  
  14. char cadena1[] = {"Microcontroladores"};
  15. char cadena2[] = {"Bienvenidos al LB4"};
  16. char cadena3[] = {"La final de finales"};
  17. char cadena4[] = {"Opciones del menu"};
  18. char cadena5[] = {"(A) - Visualizar en consola la temperatura"};
  19. char cadena6[] = {"(B) - Visualizar en consola la humedad"};
  20. char cadena7[] = {"(C) - Visualizar en servo la temperatura"};
  21. char cadena8[] = {"(D) - Visualizar en servo la humedad"};
  22. char cadena9[] = {"(E) - (Opcional) Mover el servo como limpiaparabrisas de auto"};
  23. char cadenatemperatura[]= {"Temperatura: "};
  24. char cadenahumedad[]= {"Humedad: "};
  25. void DHT11_Start();
  26. void DHT11_CheckResponse();
  27. char DHT11_ReadData();
  28. unsigned int cuentaon = 0;
  29. char envio;
  30.  
  31. void main(void) {
  32. char Temp;
  33. char Hum;
  34. char Temp_dec;
  35. char Hum_dec;
  36.  
  37. TRISEbits.RE0 = 0; //SERVO
  38. ADCON1=0x0F; /* this makes all pins as a digital I/O pins */
  39.  
  40. config_serial();
  41. config_interrupciones();
  42. menu();
  43.  
  44. DHT11_Start(); /* send start pulse to DHT11 module */
  45. DHT11_CheckResponse(); /* wait for response from DHT11 module */
  46. Hum = DHT11_ReadData(); /* read Relative Humidity's integral value */
  47. Hum_dec = DHT11_ReadData(); /* read Relative Humidity's decimal value */
  48. Temp = DHT11_ReadData(); /* read Temperature's integral value */
  49. Temp_dec = DHT11_ReadData(); /* read Relative Temperature's decimal value */
  50. while (1)
  51. {
  52. switch(envio){
  53. case 1:
  54. for (char c=0;c<13;c++){
  55. TXREG = cadenatemperatura[c];
  56. while(TXSTAbits.TRMT == 0);}
  57. TXREG = ((Temp%100)/10+'0');
  58. TXREG = ((Temp%100)%10+'0');
  59. while(TXSTAbits.TRMT == 0);
  60. TXREG = 0x20;
  61. while(TXSTAbits.TRMT == 0);
  62. TXREG = 0xA7;
  63. while(TXSTAbits.TRMT == 0);
  64. TXREG = 0x43;
  65. while(TXSTAbits.TRMT == 0);
  66. TXREG = 0x0A;
  67. while(TXSTAbits.TRMT == 0);
  68. TXREG = 0x0D;
  69. while(TXSTAbits.TRMT == 0);
  70. __delay_ms(100);
  71.  
  72. break;
  73. case 2:
  74.  
  75. for (char c=0;c<9;c++) {
  76. TXREG = cadenahumedad[c];
  77. while(TXSTAbits.TRMT == 0);}
  78. TXREG = ((Hum%100)/10+'0');
  79. TXREG = ((Hum%100)%10+'0');
  80. while(TXSTAbits.TRMT == 0);
  81. TXREG = 0x20;
  82. while(TXSTAbits.TRMT == 0);
  83. TXREG = 0x25;
  84. while(TXSTAbits.TRMT == 0);
  85.  
  86. while(TXSTAbits.TRMT == 0);
  87. TXREG = 0x0A;
  88. while(TXSTAbits.TRMT == 0);
  89. TXREG = 0x0D;
  90. while(TXSTAbits.TRMT == 0);
  91. __delay_ms(100);
  92. break;
  93.  
  94. case 3:
  95. if(Temp>=0 && Temp<40){cuentaon = (699/4)*Temp+56348;}
  96. else{ cuentaon=63338;}
  97. break;
  98.  
  99. case 4:
  100. if(Hum>=10 && Hum<90){ cuentaon = (699/8)*(Hum-10)+56348;}
  101. else{ cuentaon=63338;}
  102. break;
  103. case 5:
  104.  
  105. cuentaon=56348;
  106. __delay_ms(2000);
  107. cuentaon=63338;
  108. __delay_ms(2000);
  109. break;
  110.  
  111. }}
  112. }
  113.  
  114. char DHT11_ReadData(){
  115. char i,data = 0;
  116. for(i=0;i<8;i++){
  117. while(!(Data_In & 1)); /* wait till 0 pulse, this is start of data pulse */
  118. __delay_us(30);
  119. if(Data_In & 1) /* check whether data is 1 or 0 */
  120. data = ((data<<1) | 1);
  121. else
  122. data = (data<<1);
  123. while(Data_In & 1);
  124. }
  125. return data;
  126. }
  127.  
  128. void DHT11_Start(){
  129. Data_Dir = 0; /* set as output port */
  130. Data_Out = 0; /* send low pulse of min. 18 ms width */
  131. __delay_ms(18);
  132. Data_Out = 1; /* pull data bus high */
  133. __delay_us(20);
  134. Data_Dir = 1; /* set as input port */
  135. }
  136.  
  137. void DHT11_CheckResponse(){
  138. while(Data_In & 1); /* wait till bus is High */
  139. while(!(Data_In & 1)); /* wait till bus is Low */
  140. while(Data_In & 1); /* wait till bus is High */
  141. }
  142.  
  143. config_interrupciones(){
  144. T0CON = 0x81; //Timer0 en FOsc/4, PSC 1:4, 16bits
  145. RCONbits.IPEN = 1; //Habilitamos las prioridades en la interrupción
  146. INTCONbits.GIEH = 1; //Habilita Prioridades Altas
  147. INTCONbits.GIEL = 1; //Habilita Prioridades Bajas
  148. INTCONbits.TMR0IE=1; //Habilita el Timer0
  149. INTCON2bits.TMR0IP=0; //Interrupcion de timer0 en baja prioridad
  150. PIE1bits.RC1IE = 1;
  151. IPR1bits.RCIP = 1;
  152. }
  153.  
  154.  
  155. config_serial(){
  156. TRISCbits.RC6 = 0; //Ponemos el RC6 como salida
  157. TRISCbits.RC7 = 1; //Ponemos el RC7 como entrada
  158.  
  159. BAUDCONbits.BRG16 = 0; //Para trabajar el SPBRG en 8 bits
  160. TXSTAbits.SYNC = 0; //Para configurar la velocidad de transmisión
  161. TXSTAbits.BRGH = 0; //Para configurar la velocidad de transmisión
  162. SPBRG = 38; //Para configurar baudios a 19200
  163. SPBRGH = 0; //Para configurar la velocidad de transmisión
  164. RCSTAbits.SPEN = 1; //Para habilitar el funcionamiento del EUSART
  165. RCSTAbits.CREN = 1;
  166. TXSTAbits.TXEN = 1; //Habilitamos la tranmisión en el EUSART
  167. }
  168.  
  169.  
  170. menu(){
  171. for (int c=0;c<18;c++) {
  172. TXREG = cadena1[c];
  173. while(TXSTAbits.TRMT == 0);}
  174. TXREG = 0x0A;
  175. while(TXSTAbits.TRMT == 0);
  176. TXREG = 0x0D;
  177. while(TXSTAbits.TRMT == 0);
  178. __delay_ms(100);
  179.  
  180. for (int c=0;c<18;c++) {
  181. TXREG = cadena2[c];
  182. while(TXSTAbits.TRMT == 0);}
  183. TXREG = 0x0A;
  184. while(TXSTAbits.TRMT == 0);
  185. TXREG = 0x0D;
  186. while(TXSTAbits.TRMT == 0);
  187. __delay_ms(100);
  188.  
  189. for (int c=0;c<19;c++) {
  190. TXREG = cadena3[c];
  191. while(TXSTAbits.TRMT == 0);}
  192. TXREG = 0x0A;
  193. while(TXSTAbits.TRMT == 0);
  194. TXREG = 0x0D;
  195. while(TXSTAbits.TRMT == 0);
  196. __delay_ms(100);
  197.  
  198. for (int c=0;c<17;c++) {
  199. TXREG = cadena4[c];
  200. while(TXSTAbits.TRMT == 0);}
  201. TXREG = 0x0A;
  202. while(TXSTAbits.TRMT == 0);
  203. TXREG = 0x0D;
  204. while(TXSTAbits.TRMT == 0);
  205. __delay_ms(100);
  206.  
  207. for (int c=0;c<42;c++) {
  208. TXREG = cadena5[c];
  209. while(TXSTAbits.TRMT == 0);
  210. }
  211. TXREG = 0x0A;
  212. while(TXSTAbits.TRMT == 0);
  213. TXREG = 0x0D;
  214. while(TXSTAbits.TRMT == 0);
  215. __delay_ms(100);
  216.  
  217. for (int c=0;c<38;c++) {
  218. TXREG = cadena6[c];
  219. while(TXSTAbits.TRMT == 0);}
  220. TXREG = 0x0A;
  221. while(TXSTAbits.TRMT == 0);
  222. TXREG = 0x0D;
  223. while(TXSTAbits.TRMT == 0);
  224. __delay_ms(100);
  225.  
  226. for (int c=0;c<40;c++) {
  227. TXREG = cadena7[c];
  228. while(TXSTAbits.TRMT == 0);}
  229. TXREG = 0x0A;
  230. while(TXSTAbits.TRMT == 0);
  231. TXREG = 0x0D;
  232. while(TXSTAbits.TRMT == 0);
  233. __delay_ms(100);
  234.  
  235. for (int c=0;c<36;c++) {
  236. TXREG = cadena8[c];
  237. while(TXSTAbits.TRMT == 0);}
  238. TXREG = 0x0A;
  239. while(TXSTAbits.TRMT == 0);
  240. TXREG = 0x0D;
  241. while(TXSTAbits.TRMT == 0);
  242. __delay_ms(100);
  243.  
  244. for (int c=0;c<61;c++) {
  245. TXREG = cadena9[c];
  246. while(TXSTAbits.TRMT == 0);}
  247. TXREG = 0x0A;
  248. while(TXSTAbits.TRMT == 0);
  249. TXREG = 0x0D;
  250. while(TXSTAbits.TRMT == 0);
  251. __delay_ms(100);
  252. }
  253.  
  254.  
  255. void __interrupt(high_priority)RCIsr(void){
  256. PIR1bits.RC1IF = 0;
  257. if (RCREG == 0x61){envio=1;}
  258. else if (RCREG == 0x62){envio=2;}
  259. else if (RCREG == 0x63){envio=3;}
  260. else if (RCREG == 0x64){envio=4;}
  261. else if (RCREG == 0x65){envio=5;}
  262. else {envio=0;}
  263. }
  264.  
  265. void __interrupt(low_priority) Tmr0(void){
  266.  
  267. if (PORTEbits.RE0 == 1){
  268. LATEbits.LE0 = 0;
  269. TMR0 = cuentaon;}
  270. else{
  271. LATEbits.LE0 = 1;
  272. TMR0 = 70832-cuentaon;}
  273. INTCONbits.TMR0IF = 0;
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement