{"id":1,"date":"2015-09-27T22:57:14","date_gmt":"2015-09-27T22:57:14","guid":{"rendered":"http:\/\/leandroip.com\/?p=1"},"modified":"2016-08-23T18:36:54","modified_gmt":"2016-08-23T18:36:54","slug":"hello-world","status":"publish","type":"post","link":"https:\/\/www.leandroip.com\/?p=1","title":{"rendered":"Utilizando SDCC com Microcontrolador PIC 18F4550 (48Mhz)"},"content":{"rendered":"<p>Ol\u00e1,<\/p>\n<p style=\"text-align: justify;\">Nesse post vou escrever um pouco sobre\u00a0como programar microcontroladores PIC, especificamente o PIC18F4550, com o compilador <a href=\"http:\/\/sdcc.sourceforge.net\/\" target=\"_blank\">SDCC<\/a>\u00a0(<em>Small Device C Compiler<\/em>).<\/p>\n<p style=\"text-align: justify;\">Aqui faremos uso apenas da linha de comando, se voc\u00ea procura algo como uma IDE, veja este POST:\u00a0<a href=\"http:\/\/leandroip.com\/index.php\/2016\/08\/23\/utilizando-a-ide-codeblocks-com-sdcc\/\">utilizando-a-ide-codeblocks-com-sdcc<\/a><\/p>\n<blockquote>\n<p style=\"text-align: justify;\">Primeiro, a utiliza\u00e7\u00e3o de um <em>bootloader<\/em> \u00e9 interessante. Veja esse\u00a0<a href=\"http:\/\/leandroip.com\/index.php\/2015\/11\/10\/utilizando-o-tiny-multi-bootloader-com-microcontrolador-pic18f4550-a-48mhz\/\">Post<\/a>\u00a0para gravar um <em>bootloader<\/em> compat\u00edvel com esse programa.<\/p>\n<\/blockquote>\n<p style=\"text-align: justify;\">O primeiro passo \u00e9 instalar o compilador\u00a0<a href=\"http:\/\/sdcc.sourceforge.net\/\">SDCC<\/a> e o <a href=\"http:\/\/gputils.sourceforge.net\/\">GPUTILS<\/a>.<\/p>\n<p style=\"text-align: justify;\">Em seguida, crie uma pasta para trabalhar em algum local de seu computador. Vamos come\u00e7ar com um pequeno programa exemplo, mas o qual j\u00e1 vai nos dar a estrutura para trabalhar com qualquer projeto posterior. Essa \u00e9 apenas uma forma de trabalhar, existem muitas outras.<\/p>\n<p style=\"text-align: justify;\">Crie um arquivo chamado &#8220;config.h&#8221; e coloque nele o seguinte c\u00f3digo:<\/p>\n<pre class=\"lang:c decode:true\" title=\"config.h\">#include &lt;pic18fregs.h&gt;\r\n#define LED PORTBbits.RB0\r\n<\/pre>\n<p style=\"text-align: justify;\">Esse ser\u00e1 o \u00fanico local no qual o processador ser\u00e1 especificado. Assim, quando precisar mudar de processador, basta alterar esse arquivo. Aqui tamb\u00e9m ser\u00e3o colocadas configura\u00e7\u00f5es globais do c\u00f3digo,\u00a0como a pinagem do microcontrolador, assim pode-se alterar os pinos facilmente. No nosso exemplo, um led foi colocado no pino B0.<\/p>\n<p style=\"text-align: justify;\">Num outro arquivo, agora chamado &#8220;picconfig.h&#8221;, coloque o seguinte:<\/p>\n<pre class=\"lang:c decode:true \" title=\"picconfig.h\">#ifndef _CONFIG_H_\r\n#define _CONFIG_H_ 1\r\n\r\n#include \"config.h\"\r\n\r\n#pragma config FOSC = HSPLL_HS\r\n#pragma config PWRT = OFF, BOR = OFF\r\n#pragma config WDT = OFF\r\n#pragma config DEBUG = OFF\r\n#pragma config XINST = OFF\r\n#pragma config PLLDIV = 5\r\n#pragma config USBDIV = 1\r\n#pragma config CPUDIV = OSC1_PLL2\r\n\r\n#endif<\/pre>\n<p style=\"text-align: justify;\">Aqui v\u00e3o as configura\u00e7\u00f5es do microcontrolador. Nesse arquivo alteramos as configura\u00e7\u00f5es dos chamados &#8220;fus\u00edveis&#8221; do pic. Seria muito extenso explicar cada um deles aqui, esse trabalho j\u00e1 est\u00e1 feito no datasheet. Mas, qualquer coisa voc\u00ea pode perguntar aqui.<\/p>\n<p>Agora, vamos criar o arquivo principal desse mini projeto, esse arquivo chama-se main.c:<\/p>\n<pre class=\"lang:c decode:true \" title=\"main.c\">#include \"picconfig.h\"\r\n\r\nvoid hdw_setup(){\r\n\tADCON1= 0x06;\r\n\tTRISA = 0b00000011;\r\n\tTRISB = 0b00000000; \/\/0b00001000;\r\n\tTRISC = 0b10000000; \/\/0b10000000;\r\n\tTRISD = 0b00000000;\r\n\tTRISE = 0b00000000;\r\n}\r\n\r\nvoid main(){\r\n\thdw_setup();\r\n\tLED = 1;\r\n\twhile(1){\r\n\r\n\t}\r\n}\r\n<\/pre>\n<p style=\"text-align: justify;\">A ideia \u00e9 muito simples. Criamos a fun\u00e7\u00e3o <em>hdw_setup()<\/em> para inicializar o hardware e, na fun\u00e7\u00e3o <em>main()<\/em>, fazemos com que o led acenda. A inicializa\u00e7\u00e3o consiste em configurar os pinos do PIC como sa\u00edda.<\/p>\n<p style=\"text-align: justify;\">Agora vamos compilar esse c\u00f3digo. Crie uma pasta chamada &#8220;obj&#8221; na sua pasta de trabalho. Essa nova pasta servir\u00e1 apenas para organizarmos melhor os arquivos compilados do projeto.<\/p>\n<p style=\"text-align: justify;\">Na sua pasta de trabalho, crie o arquivo &#8220;COMPILAR.bat&#8221; com o seguinte conte\u00fado:<\/p>\n<pre class=\"lang:sh decode:true \" title=\"COMPILAR.bat\">@echo off\r\ndel obj\/*.o\r\ndel obj\/*.asm\r\ndel obj\/*.lst\r\ndel *.hex\r\nsdcc --use-non-free -mpic16 -p18f4550 main.c\r\ndel *.o\r\ndel *.asm\r\ndel *.lst\r\ndel *.cod\r\nPAUSE<\/pre>\n<p style=\"text-align: justify;\">Execute esse arquivo para executar a compila\u00e7\u00e3o (pode simplesmente clicar duas vezes sobre ele). Como resultado voc\u00ea ver\u00e1 o arquivo <em>main.hex<\/em> na sua pasta de trabalho.<\/p>\n<p style=\"text-align: justify;\">Agora plugue o seu circuito e baixe o arquivo <em>main.hex<\/em> nele. A princ\u00edpio, o LED deve acender.<\/p>\n<p style=\"text-align: justify;\">Se voc\u00ea n\u00e3o conseguiu criar todos os arquivos ou n\u00e3o entendeu alguns passos, segue um zip com todos esses arquivos:\u00a0<a href=\"http:\/\/leandroip.com\/wp-content\/uploads\/2015\/09\/blog1.zip\">blog1<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1, Nesse post vou escrever um pouco sobre\u00a0como programar microcontroladores PIC, especificamente o PIC18F4550, com [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":139,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","entry","grid"],"_links":{"self":[{"href":"https:\/\/www.leandroip.com\/index.php?rest_route=\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.leandroip.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leandroip.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leandroip.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leandroip.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1"}],"version-history":[{"count":14,"href":"https:\/\/www.leandroip.com\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":295,"href":"https:\/\/www.leandroip.com\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions\/295"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.leandroip.com\/index.php?rest_route=\/wp\/v2\/media\/139"}],"wp:attachment":[{"href":"https:\/\/www.leandroip.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leandroip.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leandroip.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}