Advertisement
Guest User

labo4 sin config

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