Advertisement
Guest User

Untitled

a guest
Aug 15th, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.14 KB | None | 0 0
  1. #include <p18f4550.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <usart.h>
  5. #include <string.h>
  6.  
  7. /*-------------------------------------
  8. * Bits de configuração do PIC18F4550
  9. *--------------------------------------*/
  10. // Oscilador e outras definicoes de registradores
  11. #pragma config FOSC = HS // (8 MHz)
  12. #pragma config IESO = OFF
  13. #pragma config PWRT = OFF
  14. #pragma config BORV = 3
  15. #pragma config WDT = OFF
  16. #pragma config WDTPS = 32768
  17. #pragma config MCLRE = OFF
  18. #pragma config LPT1OSC = OFF
  19. #pragma config PBADEN = OFF
  20. #pragma config STVREN = ON
  21. #pragma config LVP = OFF
  22.  
  23. /** Definação das Constantes:
  24. * TAMANHO = Nº DE ELEMENTOS NO VETOR
  25. * CABECA_DA_FILA = REFERE-SE AO PONTO DE PARTIDA DO ALGORITMO
  26. * ULTIMO_DA_FILA = REFERE-SE AO PONTO FINAL DO ALGORITMO
  27. **/
  28. #define TAMANHO 11
  29. #define CABECA_DA_FILA 50
  30. #define ULTIMO_DA_FILA 199
  31.  
  32. //Variáveis globais
  33. char mensagem[40];
  34. char *numero;
  35. char opcao[1];
  36.  
  37. //#pragma romdata DATAX
  38. // VETOR COM 1000 ELEMENTOS
  39. //rom int vetor[TAMANHO] =
  40. //{1105,1645,636,58,1014,1136,1507,1917,1981,1020,1646,1537,1382,1873,1906,553,1742,1589,1586,89,1324,187,1827,608,1759,1855,1228,875,1201,590,1400,599,1964,262,682,1884,120,462,731,1058,1008,1960,1208,973,1154,131,279,393,1534,1189,1148,1532,1679,567,1346,1366,578,1294,1985,783,841,709,703,197,1104,358,523,692,141,414,1332,299,646,468,1205,1515,1158,1032,1300,628,1096,597,534,1968,381,1600,755,667,1597,1120,1644,16,1178,675,1046,29,575,1946,973,291,884,1775,1968,692,893,285,1079,140,1020,459,1137,1848,123,31,1571,286,625,1023,1480,1390,1953,776,166,127,729,824,863,11,713,444,1874,1651,1937,233,1832,1941,1026,1555,309,1978,1148,203,1487,298,587,1112,1118,531,1391,1476,1476,1069,66,110,1542,827,793,1400,117,1716,131,677,102,895,668,381,646,410,1607,830,401,318,731,1960,1582,1878,746,868,1065,1906,1438,507,1233,1893,1637,1378,1797,1981,1451,551,306,373,1727,876,1561,1302,228,1721,662,1115,476,1068,894,604,1740,1332,183,146,1136,1733,334,767,1306,571,1768,710,1649,1239,984,1611,1562,332,455,868,677,680,1191,1309,1548,661,667,1732,758,1632,1359,435,926,1827,1583,316,574,1548,878,631,1318,1027,634,1022,364,762,1189,1896,769,707,1124,1743,442,1131,959,509,1341,512,1976,591,855,294,1396,1570,1823,860,1605,1257,161,1560,1682,167,1577,141,1911,988,1327,1419,529,1170,1496,1541,401,1195,759,679,1864,1650,100,1494,437,680,454,1229,638,1919,745,1752,1606,1496,1277,421,760,1202,1967,1086,213,1423,1365,1090,1152,1925,948,611,1908,1079,1651,1181,1938,638,100,734,429,1642,520,1020,750,1554,786,1731,470,1215,1584,192,1159,720,155,1941,684,1799,584,61,1238,807,1111,1595,797,904,1421,1900,244,533,1399,264,861,1776,1302,656,1425,698,1824,1930,617,252,1025,338,957,859,1587,1691,999,243,374,1024,997,621,751,81,1752,1839,651,1503,874,1553,1834,1020,1174,38,329,1533,391,1733,517,1389,1995,103,1824,1730,1263,916,1491,228,1366,1540,1402,1077,672,326,1419,1562,985,706,208,66,954,1073,1023,849,1341,41,410,1452,1405,1198,304,1054,84,1918,486,646,217,1343,878,349,522,1128,1622,1726,535,1037,1443,1437,245,1984,1236,1070,639,1621,367,500,1866,52,1638,620,256,1787,1405,1777,1895,505,1800,772,992,1747,537,1758,1737,1106,264,881,891,28,1934,1010,807,1809,1164,1402,1116,885,1047,1631,1783,997,1385,1653,763,349,822,317,1973,328,833,1197,1790,893,1041,1064,811,225,1842,858,75,726,785,1495,1480,1973,1701,1356,605,1706,26,805,659,455,305,1569,779,1892,338,1338,389,1507,933,418,1845,702,743,1785,75,1894,151,383,455,716,670,9,604,1922,836,633,355,84,47,1492,591,664,334,1796,186,1577,518,1412,751,1816,1733,339,1422,251,1778,343,394,179,266,583,429,1739,1043,1575,50,763,841,338,646,1174,1637,66,208,518,688,167,897,725,706,1016,193,690,1143,269,1818,1772,61,67,1161,1801,546,996,426,1693,141,1125,1219,1255,268,984,792,1286,1101,1810,669,1566,1865,919,857,811,1030,534,1384,1217,1358,923,1362,655,1290,1192,302,138,628,1562,907,631,980,1495,1045,1815,1950,489,1136,1889,526,913,1666,13,1644,700,44,1466,397,254,524,141,850,423,1412,1446,942,859,274,1224,1431,632,364,762,1360,1427,1992,515,1004,179,1052,1607,1783,469,1421,722,1086,559,464,478,496,374,1341,1863,376,297,358,1847,278,1116,64,1749,1158,958,1319,453,1859,1573,57,1086,824,784,946,218,520,478,689,1211,531,1955,157,1791,1799,996,1098,441,973,1480,1622,716,337,916,1192,1058,1290,1703,329,226,1840,485,766,913,1090,442,256,660,170,1848,753,1655,1603,753,1191,1505,1557,127,587,1589,1959,312,1658,67,1943,121,1708,1156,590,433,1977,759,1445,627,1179,1037,1758,697,1451,1025,1944,391,1430,884,1205,1221,1670,1878,1802,1684,132,677,933,540,1949,1071,1698,1496,195,701,1104,1121,882,887,1597,366,1884,157,1070,499,29,562,838,828,1067,386,1524,37,1725,1322,1349,1486,1589,729,1776,1317,1010,54,1986,713,1765,1008,157,148,1690,1601,1,1976,1002,626,1547,203,523,1676,1625,784,543,303,25,284,1520,405,1793,1262,344,430,649,1203,388,501,974,353,63,48,356,299,1083,48,1142,1638,185,455,1990,1574,493,1927,864,790,1268,1436,1457,1450,1250,1854,1512,644,1314,118,1996,162,662,1050,609,1899,1263,450,1590,766,1770,1532,290,1439,617,1312,1485,1778,534,35,890,286,1184,1240,1848,1431,1142,550,1663,1174,949,1786,542,1567,1440,1497,619,1743,74,1497,1028,1149,493,1512,1491,1371,1013,518,1395,1391,271,1872,1823,1616,762,1827,508,527,1453,1531,184,295,1229,1088,1291,196,1362,794,513,1183,1733,1129,1122,1450,26,1605,1576,1333,1617,1054,1367,394,360,468,1563,30,1006,1966,30,1448,472,1991,1798,1362,1666,1329,1530,233,101,1049,1582,423,8,1943,1603,81,1173,1582,156,1131,208,1554,1329,175,487,10,1792,1685,1451,1081};
  41. //#pragma romdata
  42.  
  43. //#pragma romdata DATAX
  44. //VETOR COM 250 ELEMENTOS
  45. //rom int vetor[] = {1105,1645,636,58,1014,1136,1507,1917,1981,1020,1646,1537,1382,1873,1906,553,1742,1589,1586,89,1324,187,1827,608,1759,1855,1228,875,1201,590,1400,599,1964,262,682,1884,120,462,731,1058,1008,1960,1208,973,1154,131,279,393,1534,1189,1148,1532,1679,567,1346,1366,578,1294,1985,783,841,709,703,197,1104,358,523,692,141,414,1332,299,646,468,1205,1515,1158,1032,1300,628,1096,597,534,1968,381,1600,755,667,1597,1120,1644,16,1178,675,1046,29,575,1946,973,291,884,1775,1968,692,893,285,1079,140,1020,459,1137,1848,123,31,1571,286,625,1023,1480,1390,1953,776,166,127,729,824,863,11,713,444,1874,1651,1937,233,1832,1941,1026,1555,309,1978,1148,203,1487,298,587,1112,1118,531,1391,1476,1476,1069,66,110,1542,827,793,1400,117,1716,131,677,102,895,668,381,646,410,1607,830,401,318,731,1960,1582,1878,746,868,1065,1906,1438,507,1233,1893,1637,1378,1797,1981,1451,551,306,373,1727,876,1561,1302,228,1721,662,1115,476,1068,894,604,1740,1332,183,146,1136,1733,334,767,1306,571,1768,710,1649,1239,984,1611,1562,332,455,868,677,680,1191,1309,1548,661,667,1732,758,1632,1359,435,926,1827,1583,316,574,1548,878,631,1318,1027,634,1022,364,9999};
  46. //#pragma romdata
  47.  
  48. rom int vetor[] = {0, 11, 34, 50, 62, 64, 95, 119, 123, 180, 199};
  49. #pragma udata bigdata
  50. int vetorAuxiliar[TAMANHO+1];
  51. #pragma udata
  52.  
  53.  
  54. /*Configura e habilita a comunicação serial*/
  55. void inicializarSerial()
  56. {
  57. OpenUSART( USART_TX_INT_ON &
  58. USART_RX_INT_ON &
  59. USART_ASYNCH_MODE &
  60. USART_EIGHT_BIT &
  61. USART_CONT_RX &
  62. USART_BRGH_HIGH,51);
  63. //putrsUSART("HELLO! ");
  64. }
  65.  
  66. void imprime(){
  67. int i;
  68. for(i= 0; i < TAMANHO;i ++){
  69. itoa(vetorAuxiliar[i], numero);
  70. putsUSART(numero);
  71. putrsUSART(" ");
  72.  
  73. }
  74. putrsUSART("|\n ");
  75.  
  76. }
  77.  
  78. /*void scan(int tam, int pi){
  79.  
  80. int i,j, na = tam;
  81. int disk=pi; //loc da posição inicial
  82. int temp,max;
  83. int dloc=0; //loc do acesso no array
  84.  
  85. for(i=0;i<na;i++){
  86. a[i]=vetor[i];
  87. }
  88.  
  89. a[na]=disk;
  90. na=na+1;
  91.  
  92. for(i=0;i<na;i++){ // Ordenação das entradas
  93.  
  94. for(j=i;j<na;j++){
  95. if(a[i]>a[j]){
  96. temp=a[i];
  97. a[i]=a[j];
  98. a[j]=temp;
  99. }
  100. }
  101. }
  102.  
  103. max=a[na];
  104.  
  105. for(i=0;i<na;i++){ // acha a localização da posição inicial no array
  106. if(disk==a[i]) { dloc=i; break; }
  107. }
  108. putrsUSART("Terminou");
  109.  
  110. }*/
  111.  
  112. void ssf(int tamanhoVetor, int cabecaDaFila){
  113.  
  114. int deslocamento=0;
  115. int auxiliaSwap=0;
  116. int menorDeslocamento=0;
  117. int posicaoDeMenorDeslocamento=0;
  118. int totalDescolamentos=0;
  119.  
  120. int i = 0;
  121. int j = 0;
  122.  
  123. /**
  124. * Insere a cabeca da fila na primeira posicao do vetor auxiliar
  125. **/
  126. vetorAuxiliar[0]=cabecaDaFila;
  127.  
  128. /**
  129. * Copia o vetor principal em um vetor auxilia, garantindo que o vetor original
  130. * não seja modificado.
  131. **/
  132. for(i=1;i<=tamanhoVetor;i++)
  133. vetorAuxiliar[i]=vetor[i-1];
  134.  
  135. /**
  136. * Remove do vetor auxiliar a duplicidade da cabeca
  137. **/
  138. i = 1;
  139. while (vetorAuxiliar[i] != ULTIMO_DA_FILA)
  140. {
  141. if (vetorAuxiliar[i] == CABECA_DA_FILA)
  142. {
  143. vetorAuxiliar[i] = vetorAuxiliar[i + 1];
  144. if (vetorAuxiliar[i] != ULTIMO_DA_FILA)
  145. vetorAuxiliar[i + 1] = CABECA_DA_FILA;
  146. }
  147. i++;
  148. }
  149.  
  150.  
  151. /**
  152. * A partir da cabeca do vetor, faz comparacao buscando o menor deslocamento,
  153. * ao encontrar, leva-o para o inicio do vetor.
  154. **/
  155. for(i = 0; i < tamanhoVetor; i++){
  156. menorDeslocamento = 10000;
  157. for(j = i+1; j <= tamanhoVetor; j++){
  158. if(vetorAuxiliar[i] > vetorAuxiliar[j])
  159. deslocamento = vetorAuxiliar[i] - vetorAuxiliar[j];
  160. else
  161. deslocamento = vetorAuxiliar[j] - vetorAuxiliar[i];
  162. if(deslocamento < menorDeslocamento){
  163. menorDeslocamento = deslocamento;
  164. posicaoDeMenorDeslocamento = j;
  165. }
  166. }
  167.  
  168. totalDescolamentos += menorDeslocamento;
  169.  
  170. // SWAP
  171. auxiliaSwap = vetorAuxiliar[i+1];
  172. vetorAuxiliar[i+1] = vetorAuxiliar[posicaoDeMenorDeslocamento];
  173. vetorAuxiliar[posicaoDeMenorDeslocamento] = auxiliaSwap;
  174.  
  175. }
  176. putrsUSART("Terminou");
  177. //imprime vetor saida
  178. imprime();
  179. }
  180.  
  181. void menuInicial(){
  182. sprintf(mensagem, "1 - Imprimir SSF\n\r");
  183. putsUSART(mensagem);
  184. sprintf(mensagem, "2 - Imprimir SCAN \n\r");
  185. sprintf(mensagem, "0 - Reset\n\r");
  186. putsUSART(mensagem);
  187. }
  188.  
  189.  
  190. void main() {
  191. inicializarSerial();
  192.  
  193. menuInicial();
  194. //Limpar sujeira no buffer da serial.
  195. sprintf(opcao,"\r\r\r");
  196.  
  197. getsUSART( opcao, 1 );
  198. putrsUSART("\ry \n");
  199.  
  200. if(opcao[0]=='1') {
  201. ssf(TAMANHO, CABECA_DA_FILA);
  202. }
  203. //if(escolha[0]=='2')
  204. //scan(tam,pi);
  205.  
  206. //getsUSART( fim, 2 );
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement