Curso Parte 1

    Este curso foi elaborado para iniciantes no mundo dos Microcontroladores, em especial da família PIC. Contando com  um farto material didático e prático. Todos os esquemas e programas foram testados em nosso laboratório, evitando assim problemas para o usuário. Os módulos foram elaborados por uma equipe de forma a tornar estes práticos para desenvolvimento de projetos pessoais dos usuários(ou seja, além de uso didático e aplicável a projetos diversos), e ainda conta com a tradução em Português do Datasheet do PIC utilizado neste curso(exclusivo do Gênios do Futuro) tornando muito simples o aprendizado. O que torna o curso diferenciado e inovador, sem concorrentes no mercado atual.

   Nesta primeira pate do curso iniciamos com o PIC16F628a, por ser de fácil entendimento e poderoso como microcontrolador.

Tendo em vista que nosso método de ensino é para você iniciante no mundo dos PIC, e não tem um domínio sobre qualquer tipo de linguagem de programação, não se desespere, e mesmo os mais adiantados que já conhecem as formas de programação Assembly e C, ficaram mais avontade durante o decorrer do curso.


Todo material pode adquirido separadamente,  apostilas,  módulos e componentes.

Vendas através do Mercado Livre :http://www.plataformaheytec.com.br/ 
Maiores informações: henryartesrobotica@gmail.com 

   Bons estudos e até a próxima...
Equipe Gnios d Futuro 




É muito importante o iniciante executar todos os exercícios propostos na apostila junto ao material didático e prático, pois os comandos e programações serão apresentados nestes. Os temas serão abordados inicialmente de uma forma geral e posteriormente entraremos em detalhes , sendo importante ter o domínio completo do assunto do capitulo para seguir adiante no curso.


CAPITULO1

Um microcontrolador difere de um microprocessador em vários aspectos. Primeiro e o mais importante, é a sua funcionalidade. Para que um microprocessador possa ser usado, outros componentes devem-lhe ser adicionados, tais como memória, HD, placa mãe, e componentes para receber e enviar dados.

Em resumo, isso significa que o microprocessador é o verdadeiro coração do computador. Por outro lado, o microcontrolador foi projetado para ter tudo num só. Nenhum outro componente externo é necessários nas aplicações, uma vez que todos os periféricos necessários já estão contidos nele. Assim, nós poupamos tempo e espaço na construção dos dispositivos.

1.1 Unidade de Memória
 
A memória é a parte do microcontrolador cuja função é guardar dados.A maneira mais fácil de explicar é descrevê-la como uma grande prateleira cheia degavetas. Se supusermos que marcamos as gavetas de modo a elas não se confundirem umas com as outras, então o seu conteúdo será facilmente acessível. Basta saber a designação da gaveta e o seu conteúdo será conhecido.


Os componentes de memória são exatamente a mesma coisa. Para um determinado endereço, nós obtemos o conteúdo desse endereço. Dois novos conceitos foram apresentados: endereçamento e memória. A memória é o conjunto de todos os locais de memória (gavetas) e endereçamento nada mais é que selecionar um deles. Isto significa que precisamos selecionar o endereço desejado (gaveta) e esperar que o conteúdo desse endereço nos seja apresentado (abrir a gaveta). Além de ler de um local da memória (ler o conteúdo da gaveta), também é possível escrever num endereço da memória (introduzir um conteúdo na gaveta). Isto é feito utilizando uma linha adicional chamada linha de controle. Nós iremos designar esta linha por R/W (read/write) – ler/escrever.

A linha de controle é usada do seguinte modo: se R/W = 1, é executada um operação de leitura, caso contrário é executada uma operação de escrita no endereço de memória. A memória é o primeiro elemento, mas precisamos de mais alguns para que o nosso microcontrolador possa trabalhar.

1.2 Unidade Central de Processamento

Vamos agora adicionar mais 3 locais de memória a um bloco específico para que possamos ter as capacidades de multiplicar, dividir, subtrair e mover o seus conteúdos de um local de memória para outro. A parte que vamos acrescentar é chamada "central processing unit" (CPU) ou Unidade Central de Processamento. Os locais de memória nela contidos chamam-se registros. Os registros são, portanto, locais de memória cujo papel é ajudar a executar várias operações matemáticas ou quaisquer outras operações com dados, quaisquer que sejam os locais em que estes se encontrar.

Vamos olhar para a situação atual. Nós temos duas entidades independentes (memória e CPU) que estão interligadas, deste modo, qualquer troca de dados é retardada bem como a funcionalidade do sistema é diminuída. Se, por exemplo, nós desejarmos adicionar os conteúdos de dois locais de memória e tornar a guardar o resultado na memória, nós necessitamos de uma ligação entre a memória e o CPU. Dito mais simplesmente, nós precisamos de obter um "caminho" através do qual os dados possam passar de um bloco para outro.


1.3 Bus

Este "caminho" designa-se por "bus" . Fisicamente ele corresponde a um grupo de 8, 16 ou mais fios.

Existem dois tipos de bus: bus de dados e de endereço. O número de linhas do primeiro depende da quantidade de memória que desejamos endereçar e o número de linhas do outro depende da largura da palavra de dados, no nosso caso é igual a oito. O primeiro bus serve para transmitir endereços do CPU para a memória e o segundo para ligar todos os blocos dentro do microcontrolador.

Neste momento, a funcionalidade já aumentou mas um novo problema apareceu: nós temos uma unidade capaz de trabalhar sozinha, mas que não possui nenhum contato com o mundo exterior, ou seja, conosco! De modo a remover esta deficiência, vamos adicionar um bloco que contém várias localizações de memória e que, de um lado, está ligado ao bus de dados e do outro às linhas de saída do microcontrolador que coincidem com pinos do circuito integrado e que, portanto, nós podemos ver com os nossos próprios olhos.

1.4 Comunicação série

Anteriormente, acrescentamos à unidade já existente a possibilidade de comunicar com o mundo exterior. Contudo, esta maneira de comunicar tem os seus inconvenientes. Um dos inconvenientes básicos é o número de linhas que é necessário usarmos para transferir dados. E se for necessário transferi-los a uma distância de vários Quilômetros? O número de linhas vezes o número de quilômetros não atesta a economia do projeto. Isto leva-nos a ter que reduzir o número de linhas de modo a que a funcionalidade se mantenha.

Suponha que estamos a trabalhar apenas com três linhas e que uma linha é usada para enviar dados, outra para os receber e a terceira é usada como linha de referência tanto do lado de entrada como do lado da saída. Para que isto trabalhe nós precisamos definir as regras para a troca de dados. A este conjunto de regras chama-se protocolo. Este protocolo deve ser definido com antecedência de modo que não haja mal entendidos entre as partes que estão a comunicar entre si. Por exemplo, se um homem está a falar em francês e o outro em inglês, é altamente improvável que efetivamente e rapidamente, ambos se entendam. Vamos supor que temos o seguinte protocolo. A unidade lógica "1" é colocada na linha de transmissão até que a transferência se inicie. Assim que isto acontece, a linha passa para nível lógico '0' durante um certo período de tempo (que vamos designar por T), assim, do lado da recepção ficamos a saber que existem dados para receber e, o mecanismo de recepção, vai ativar-se. Regressemos agora ao lado da emissão e comecemos a pôr zeros e uns lógicos na linha de transmissão correspondentes aos bits, primeiro o menos significativo e finalmente o mais significativo. Vamos esperar que cada bit permaneça na linha durante um período de tempo igual a T, e, finalmente, depois do oitavo bit, vamos pôr novamente na linha o nível lógico "1" , o que assinala a transmissão de um dado. O protocolo que acabamos de descrever é designado na literatura profissional por NRZ (Não Retorno a Zero).

Como nós temos linhas separadas para receber e enviar, é possível receber e enviar dados (informação) simultaneamente. O bloco que possibilita este tipo de comunicação é designado por bloco de comunicação série. Ao contrário da transmissão em paralelo, aqui os dados movem-se bit após bit em série, daqui provém o nome de comunicação série. Depois de receber dados nós precisamos ler e guardar na memória, no caso da transmissão de dados o processo é inverso. Os dados vêm da memória através do bus para o local de transmissão e dali para a unidade de recepção de acordo com o protocolo.

1.5 Unidade de temporização

Agora que já temos a unidade de comunicação série implementada, nós podemos receber, enviar e processar dados.
Contudo, para sermos capazes de utilizar isto na indústria precisamos ainda de mais alguns blocos. Um deles é o bloco de temporização que nos interessa bastante porque pode dar-nos informações acerca da hora, duração, protocolo, etc. A unidade básica do temporizador é um contador que é na realidade um registro cujo conteúdo aumenta de uma unidade num intervalo de tempo fixo, assim, anotando o seu valor durante os instantes de tempo T1 e T2 e calculando a sua diferença, nós ficamos a saber a quantidade de tempo decorrida. Esta é uma parte muito importante do microcontrolador, cujo domínio vai requerer muita da nossa atenção. E será estudado mais adiante.

1.6 Watchdog

Uma outra coisa que nos vai interessar é a fluência da execução do programa pelo microcontrolador durante a sua utilização. Suponha que como resultado de qualquer interferência (que ocorre frequentemente num ambiente industrial), o nosso microcontrolador pára de executar o programa ou, ainda pior, desata a trabalhar incorretamente.

Claro que, quando isto acontece com um computador, nós simplesmente carregamos no botão de reset e continuamos a trabalhar. Contudo, no caso do microcontrolador nós não podemos resolver o nosso problema deste modo, porque não temos botão. Para ultrapassar este obstáculo, precisamos introduzir no nosso modelo um novo bloco chamado watchdog (cão de guarda). Este bloco é de fato outro contador que está continuamente a contar e que o nosso programa põe a zero sempre que é executado corretamente todo o ciclo do programa. No caso do programa "encravar", o zero não vai ser escrito e o contador, por si só, encarregar-se-á de fazer o reset do microcontrolador quando alcançar o seu valor máximo. Isto vai fazer com que o programa corra de novo e desta vez corretamente. Este é um elemento importante para que qualquer programa se execute fiavelmente, sem precisar da intervenção do ser humano.

1.7 Conversor analógico - digital

Como os sinais dos periféricos são substancialmente diferentes daqueles que o microcontrolador pode entender (zero e um), eles devem ser convertidos num formato que possa ser compreendido pelo microcontrolador. Esta tarefa é executada por intermédio de um bloco destinado à conversão analógica-digital ou com um conversor A/D. Este bloco vai ser responsável pela conversão de uma informação de valor analógico para um número binário e pelo seu trajeto através do bloco do CPU, de modo a que este o possa processar de imediato.

Neste momento, a configuração do microcontrolador está já terminada, tudo o que falta é introduzi-la dentro de um aparelho eletrônico que poderá aceder aos blocos internos através dos pinos deste componente. O gráfico que se segue representa a parte principal de um microcontrolador. Este tipo de esquema é encontrado junto ao Data Sheet da maioria dos fabricantes de microcontroladores, acrescidos de maiores detalhes, então por esta introdução acredito ficar mais simples descifrar tais figuras ao se deparar com uma nos Data Sheets(folha de Dados).

Numa aplicação real, um microcontrolador, por si só, não é suficiente. Além dele, nós necessitamos do programa que vai ser executado e de mais alguns elementos que constituirão um interface lógica para outros elementos (que vamos discutir em capítulos mais à frente).



1.8 Programa

Escrever um programa é uma parte especial do trabalho com microcontroladores e é designado por "programação". Vamos tentar escrever um pequeno programa numa linguagem que seremos nós a criar e que toda a gente será capaz de compreender.

INICIO
REGISTO1=LOCAL_DE_ MEMORIA_A
REGISTO2=LOCAL_DE_ MEMORIA_B
PORT_A=REGISTO1+REGISTO2
FIM

O programa adiciona os conteúdos de dois locais de memória e coloca a soma destes conteúdos no porto A (saída nos pinos do componente). A primeira linha do programa manda mover o conteúdo do local de memória "A" para um dos registos da unidade central de processamento. Como necessitamos também de outra parcela, vamos colocar o outro conteúdo noutro registro da unidade central de processamento (CPU). A instrução seguinte pede ao CPU para adicionar os conteúdos dos dois registros e enviar o resultado obtido para o porto A, de modo a que o resultado desta adição seja visível para o mundo exterior. Para um problema mais complexo, naturalmente o programa que o resolve será maior.

A tarefa de programação pode ser executada em várias linguagens tais como o Assembly, C, Pascal, Basic que são as linguagens normalmente mais usadas. O Assembly pertence ao grupo das linguagens de baixo nível que implicam um trabalho de programação lento, mas que oferece os melhores resultados quando se pretende poupar espaço de memória e aumentar a velocidade de execução do programa. Como se trata da linguagem mais frequentemente usada na programação de microcontroladores, ela será discutida num capítulo mais adiantado. Os programas na linguagem C são mais fáceis de se escrever e compreender, mas, também, são mais lentos a serem executados que os programas assembly, Basic é a mais fácil de todas para se aprender e as suas instruções são semelhantes à maneira de um ser humano se exprimir, mas tal como a
linguagem C, é também de execução mais lenta que o assembly.

Em qualquer caso, antes que escolha entre uma destas linguagens, precisa examinar cuidadosamente os requisitos de velocidade de execução, de espaço de memória a ocupar e o tempo que vai demorar a fazer o programa em assembly. Depois do programa escrito, nós necessitamos introduzi-lo no microcontrolador num dispositivo e pô-lo a trabalhar. Para que isto aconteça, nós precisamos de adicionar mais alguns componentes externos. Primeiro temos que dar vida ao microcontrolador fornecendo-lhe a tensão (a tensão eléctrica é necessária para que qualquer instrumento eletrônico funcione) e o oscilador cujo papel é análogo ao do coração que bate no ser humano. A execução das instruções do programa é regulada pelas pulsações do oscilador. Logo que lhe é aplicada a tensão, o microcontrolador executa uma verificação dele próprio, vai para o princípio do programa e começa a executá-lo.

O modo como o dispositivo vai trabalhar depende de muitos parâmetros, os mais importantes dos quais são a competência da pessoa que desenvolve o hardware e do programador que, com o seu programa, deve tirar o máximo do dispositivo.

Exercicios:

Faça um resumo das principais unidades necessárias para o microcontrolador funcionar.

PIC 16F628A

A família PIC de microcontroladores é largamente usada no mercado. Atualmente, é a mais vendida, passando grandes fabricantes até então lideres nesse tipo de mescado mercado. A família PIC, possui vários recursos que possibilitam através de um chip relativamente pequeno, conseguir soluções em projetos relativamente grandes. Estes chips muito usados nos dias atuais em automação, instrumentação, automóveis e equipamentos diversos...

2.0 Principais Características

• Microcontrolador de 18 pinos
• Possui 15 portas de entrada e saída (I/O) e uma somente de entrada
• Memória Flash com 2048 words
• Memória EEPROM com 128 bytes
• Memória de Dados com 224 bytes
• Duas fontes osciladoras internas (4MHz e 37KHz)
• Usuart
• Comparador Modulo CCP
• Fontes de interrupção
• 35 instruções de programação

O PIC 16F628A pertence a uma classe de microcontroladores de 8 bits, com uma arquitetura RISC. A estrutura genérica é a do mapa que se segue, que nos mostra os seus blocos básicos. Memória de programa (FLASH) - para armazenar o programa que se escreveu. Como a memória fabricada com tecnologia FLASH pode ser programa e limpa mais que uma vez, ela torna-se adequada para o desenvolvimento de dispositivos.

EEPROM - memória dos dados que necessitam ser salvaguardados quando a alimentação é desligada. Normalmente é usada para guardar dados importantes que não se podem perder quando a alimentação, de repente, “vai abaixo”. Um exemplo deste tipo de dados é a temperatura fixada para os reguladores de temperatura. Se, durante uma quebra de alimentação, se perdessem dados, nós precisaríamos de proceder a um novo ajustamento quando a alimentação fosse restabelecida. Assim, o nosso dispositivo, perderia eficácia.

RAM - memória de dados usada por um programa, durante a sua execução. Na RAM, são guardados todos os resultados intermédios ou dados temporários durante a execução do programa e que não são cruciais para o dispositivo, depois de ocorrer uma falha na alimentação.

PORT A e PORT B são ligações físicas entre o microcontrolador e o mundo exterior. O port A  e o port B tem oito pinos.

CONTADOR/TEMPORIZADOR é um registo de 8 bits no interior do microcontrolador que trabalha independentemente do programa. No fim de cada conjunto de quatro ciclos de relógio do oscilador, ele incrementa o valor armazenado, até atingir o valor máximo (255), nesta altura recomeça a contagem a partir de zero. Como nós sabemos o tempo exato entre dois incrementos sucessivos do conteúdo do temporizador, podemos utilizar este para medir intervalos de tempo, o que o torna muito útil em vários dispositivos.

UNIDADE DE PROCESSAMENTO CENTRAL faz a conexão com todos os outros blocos do microcontrolador. Ele coordena o trabalho dos outros blocos e executa o programa do utilizador.

2.1CISC, RISC

Já foi dito que o PIC16F84 tem uma arquitetura RISC. Este termo é encontrado, muitas vezes, na literatura sobre computadores e necessita de ser explicada aqui, mais detalhadamente.

A arquitetura de Harvard é um conceito mais recente que a de von-Neumann. Ela adveio da necessidade de pôr o microcontrolador a trabalhar mais rapidamente. Na arquitetura de Harvard, a memória de dados está separada da memória de programa. Assim, é possível uma maior fluência de dados através da unidade central de processamento e, claro, uma maior velocidade de funcionamento. A separação da memória de dados da memória de programa, faz com que as instruções possam ser representadas por palavras de mais que 8 bits. O PIC16F84, usa 14 bits para cada instrução, o que permite que que todas as instruções ocupem uma só palavra de instrução. É também típico da arquitetura Harvard ter um reportório com menos instruções que a de von-Neumann's, instruções essas, geralmente executadas apenas num único ciclo de relógio.

Os microcontroladores com a arquitetura Harvard, são também designados por "microcontroladores RISC". RISC provém de Computador com um Conjunto Reduzido de Instruções (Reduced Instruction Set Computer). Os microcontroladores com uma arquitetura von-Neumann são designados por 'microcontroladores CISC'. O nome CISC deriva de Computador com um Conjunto Complexo de Instruções (Complex Instruction Set Computer).

Como o PIC16F84 é um microcontrolador RISC, disso resulta que possui um número reduzido de instruções, mais precisamente 35 (por exemplo, os microcontroladores da Intel e da Motorola têm mais de cem instruções). Todas estas instruções são executadas num único ciclo, excepto no caso de instruções de salto e de ramificação. De acordo com o que o seu fabricante refere, o PIC16F628 geralmente atinge resultados de 2 para 1 na compressão de código e 4 para 1 na velocidade, em relação aos outros microcontroladores de 8 bits da sua classe.

2.2 Relógio / ciclo de instrução

O relógio (clock), é quem dá o sinal de partida para o microcontrolador e é obtido a partir de um componente externo chamado “oscilador”. Se considerasse-mos que um microcontrolador era um relógio de sala, o nosso clock corresponderia ao pêndulo e emitiria um ruído correspondente ao deslocar do pêndulo. Também, a força usada para dar corda ao relógio, podia comparar-se à alimentação eléctrica.

O clock do oscilador, é ligado ao microcontrolador através do pino OSC1, aqui, o circuit interno do microcontrolador divide o sinal de clock em quatro fases, Q1, Q2, Q3 e Q4 que não se sobrepõem. Estas quatro pulsações perfazem um ciclo de instrução (também chamado ciclo de máquina) e durante o qual uma instrução é executada.

A execução de uma instrução, é antecedida pela extração da instrução que está na linha seguinte. O código da instrução é extraído da memória de programa em Q1 e é escrito no registo de instrução em Q4. A descodificação e execução dessa mesma instrução, faz-se entre as fases Q1 e Q4 seguintes. No diagrama abaixo, podemos observar a relação entre o ciclo de instrução e o clock do oscilador (OSC1) assim como as fase Q4.  O contador de programa (Program Counter ou PC) guarda o endereço da próxima instrução
a ser executada.



2.3 Pipelining

Cada ciclo de instrução inclui as fases Q1, Q2, Q3 e Q4. A extração do código de uma instrução da memória de programa, é feita num ciclo de instrução, enquanto que a sua descodificação e execução, são feitos no ciclo de instrução seguinte. Contudo, devido á sobreposição – pipelining (o microcontrolador ao mesmo tempo que executa uma instrução extrai simultaneamente da memória o código da instrução seguinte), podemos considerar que, para efeitos práticos, cada instrução demora um ciclo de instrução a ser executada. No entanto, se a instrução provocar uma mudança no conteúdo do contador de programa (PC), ou seja, se o PC não tiver que apontar para o endereço seguinte na memória de programa, mas sim para outro (como no caso de saltos ou de chamadas de subrotinas), então deverá considerar-se que a execução desta instrução demora dois ciclos. Isto acontece, porque a instrução vai ter que ser processada de novo, mas, desta vez, a partir do endereço correto. O ciclo de chamada começa na fase Q1, escrevendo a instrução no registo de instrução (Instruction Register – IR). A descodificação e execução continua nas fases Q2, Q3 e Q4 do clock.



TCY0 é lido da memória o código da instrução MOVLW 55h (não nos interessa a instrução que foi executada, por isso não está representada por rectângulo).
TCY1 é executada a instrução MOVLW 55h e é lida da memória a instrução MOVWF PORTB.
TCY2 é executada a instrução MOVWF PORTB e lida a instrução CALL SUB_1.
TCY3 é executada a chamada (call) de um subprograma CALL SUB_1 e é lida a instrução BSF PORTA,BIT3. Como esta instrução não é a que nos interessa, ou seja, não é a primeira instrução do subprograma SUB_1, cuja execução é o que vem a seguir, a leitura de uma instrução tem que ser feita de novo. Este é um bom exemplo de uma instrução a precisar de mais que um ciclo.
TCY4 este ciclo de instrução é totalmente usado para ler a primeira instrução do subprograma no
endereço SUB_1.
TCY5 é executada a primeira instrução do subprograma SUB_1 e lida a instrução seguinte.

2.4 Significado dos pinos

O PIC16F628A tem total de 18 pinos. É mais frequentemente encontrado num tipo de encapsulamento DIP18, mas, também pode ser encontrado numa cápsula SMD de menores dimensões que a DIP. DIP é uma abreviatura para Dual In Package (Empacotamento em duas linhas). SMD é uma abreviatura para Surface Mount Devices (Dispositivos de Montagem em Superfície), o que sugere que os pinos não precisam de passar pelos orifícios da placa em que são inseridos, quando se solda este tipo de componente.


A princípio, vamos pensar nos pinos do PIC16F628A como sendo portas de entradas e saídas (I/O), as quais são comumente chamadas como PORT, e podemos observar também que temos 2 PORT'S, PORTA com 8 canais e o PORTB com 8 canais, o qual o programador tem total acesso, podemos ver também que o pino 5 é usado para alimentação negativa ou terra, e o pino 14 para alimentação positiva que pode ser de 2V a 5,5V. Diferente dos chips lógicos que normalmente seus pinos já estão definidos com entradas e saídas, (ex: CD 4081 4 BLOCOS de porta NAND com 2 entradas e uma saída para cada BLOCO), Nos MICROCONTROLADORES seus pinos são programaveis e alguns pinos tem mais de uma função além de serem apenas portas de I/O, como veremos mais adiante.

Até o momento já sabemos como alimentar o Pic16F628A, porem como visto anteriormente, esse é apenas um dos parâmetros para o funcionamento do PIC, precisamos agora de um 'coração' ou seja um sinal de clock, ou seja precisamos de um oscilador.

Podemos então ligar o oscilador externo no PORTA pinos RA7 e RA6, CLKIN e CLKOUT .Mais adiante estudaremos com detalhes os tipos de osciladores da máquina. Ou tambem através da configuração optar por um modo de oscilação interno do pròprio Pic.

É muito importante no desenvolvimento do projeto, definir as tarefas que o MICROCONTROLADOR (máquina) ira executar no mundo externo, ou seja para atuar sobre os periféricos ligados ao mesmo é preciso saber em detalhes a tarefa que cada pino é capaz de executar. 

Já dissemos que um microcontrolador não é como qualquer outro circuito integrado. Quando saem da cadeia de produção, a maioria dos circuitos integrados, estão prontos para serem introduzidos nos dispositivos, o que não é o caso dos microcontroladores. Para que um microcontrolador cumpra a sua tarefa, nós temos que lhe dizer exatamente o que fazer, ou, por outras palavras, nós temos que escrever o programa que o microcontrolador vai executar.

O conjunto completo compreende 35 instruções. Uma razão para este pequeno número de instruções resulta principalmente do facto de estarmos a falar de um microcontrolador RISC cujas instruções foram optimizadas tendo em vista a rapidez de funcionamento, simplicidade de arquitetura e compacidade de código. O único inconveniente, é que o programador tem que dominar a técnica “desconfortável” de fazer o programa com apenas 35 instruções.

Para programar os PIC's é necessário um compilador, ou seja um programa para efetuar a interface entre o programador e a máquina, esse programa transforma os comandos de uma linguagem de fácil entendimento para nós em uma linguagem de fácil entendimento para o PIC, existem vários tipos de compiladores, tanto para plataforma Windows como para Linux.

A linguagem para programação das instruções do PIC é em Assembly, para aqueles que dominam tal tipo de programação não terá problemas nem será uma novidade os capítulos seguintes. Para os novatos não se desespere! Vamos conduzir o curso de uma maneira o mais simples possível para que o aluno possa dominar e aprender os comandos e instruções para desenvolvimento dos projetos.
   
Estudaremos mais adiante os pinos e as instruções em detalhes ... Até lá...


E terminamos assim a primeira parte do nosso curso, dando uma visão geral do funcionamento do PIC.