Você está na página 1de 39

1.

INTRODUO
A estrutura bsica de um microcontrolador a seguinte:

Microcontroladores PIC 16F

A electrnica nos dias de hoje no pode ser imaginada sem os microcontroladores. Tudo aquilo que no passado, ainda no muito distante, era projectadocom lgica combinatria ou sequencial hoje realizado com um nico circuito integrado, que executa um programa, que faz exactamente aquilo que se pretende. Os microcontroladores so circuitos integrados que possuem num nico dispositivo todos os circuitos necessrios para realizar um completo sistema programvel, logo, para serem utilizados, necessitam de ser programados. Diferenciam uns -se dos outros, essencialmente, pela capacidade e tipo de memria (programa e dados), velocidade de processamento, nmer de pinos de entrada/sada (I/O) e o perifricos. Existem diferentes fabricantes de microcontroladores, como: Microchip, Motorola, Atmel, Holtek, Cypress, Intel, etc. Os microcontroladores PIC so produzidos pela Microchip Technology Inc. (www.microchip.co m) e esto disponveis numa ampla gama de modelos para melhor se adaptarem s necessidades dos projectos. Uma descrio detalhada da tipologia dos PICs est disponvel nositeda Microchip, onde tambm se encontra abundante informao tcnica, ferramentas d software, e exemplos de aplicaes, entre outras, de utilizao livre. Os microcontroladores mais recentes deste fabricante podem ser programados sem serem retirados do circuito onde esto aplicados (In-Circuit Serial Programming - ICSP). Utilizando-se microcontroladores possvel em pouco tempo e com poucos componentes projectar de simples a complexos sistemas com a vantagem de os mesmo serem programveis.Os microcontroladores PIC tm como perifricos: timers,watchdog, contadores, mdulo CCP (Capture, Compare e PWM), ADCs, comparadores analgicos, oscilador interno, entre outros. Notas: Nos exemplos que se seguem utiliza -se o PIC16F690, microcontrolador com um conjunto alargados de caractersticas e de baixo custo Feitas as devidas . ressalvas, o documento pode ser aplicado a uma grande variedade de microcontroladores PIC de uso corrente. Tambm, a utilizao deste documento, deve ser complementada com a consulta do datasheet do referido micro, cujo download pode ser feito a partir do site do fabricante. Nosite do autor:

http://amsfrancisco.planetaclix.pt, esto disponveis, para download,programas didcticos para PICs. 2

2.PINOUT
Encapsulamento DIP

Descrio do Pinout

3.MEMRIA

Microcontroladores PIC 16F

Os PIC tm dois blocos de memria separados; um para o programa e outro para os dados. 3

3.1.MEMRIA DE PROGRAMA

Microcontroladores PIC 16F

A memria de programa implementada usando tecnologia FLASH (EEPROM), o que torna possvel programar o microcontrolador muitos milhares de vezes. A capacidade da memria de programa depende da referncia do microcontrolador. Esta memria no perde os dados aps se desligar a tenso de alime ntao do microcontrolador. Nos microcontroladores da famlia 16F do fabricante Microchip, os endereos 00h e 04h desta memria esto geralmente reservados, respectivamente, para o vector de reset e para o vector de interrupo. Assim, o microcontrolador, logo que alimentado ou aps sofrer um reset, comea a funcionar a partir do endereo 00h. Existindo o vector das interrupes no endereo 04h conveniente que o programa salte este endereo e continue num endereo acima de 04h. A pilha (Stack) um local reservado na memria, onde guardado o endereo de retorno das subrotinas. capaz de armazenar at 8 endereos.

3.2.MEMRIA DE DADOSConstituda por memria RAM e memria EEPROM. A

memria RAM est organizada por bancos (blocos). Estes contm os regisos de t funes especiais (SFR- SpecialFunctionRegisters) e os registos de uso geral (GPR General PurposeRegisters). Estes registos so formados por palavras de 8 bits e distribuem-se pelos diferentes bancos. O nmero de bancos e a sua distribuio depende do tipo de PIC. (Um registo um local na memria do PIC, que pode ser lido e escrito). A memria de dados EEPROM, cujo contedo no se perde durante uma falha da alimentao, acedida indirectamente atravs dos registos EEADR e EEDATA. Como a memria EEPROM serve usualmente para guardar parmetros importantes (por exemplo, uma temperatura), existe um procedimento prprio para escrever na EEPROM que tem que ser seguido de modo a evitar se uma escrita acidental. 4

ORGANIZAO DOS BANCOS DE MEMRIA DE DADOS

SELECO DO BANCO DE MEMRIA1

Microcontroladores PIC 16F


1 Nos PIC18, trabalhando com os bytes iniciais do banco 0 (endereos dos GPR) e os bytes finais do banco 15 (endereos dos SFR) no necessrio mudar de banco (accessbankseleccionado, a=0). 5

4.REGISTOS SFR MAIS UTILIZADOS


Os registos mais utilizados em programao bsica dos microcontroladores PIC so: PORTA(05h e 105h) PORTB(06h e 106h) PORTC(07h e 107h)

Registos Endereos PORTA05h e 105h PORTB06h e 106h PORTC07h e 107h TRISA85h e 185h TRISB86h e 186h TRISC87h e 187h STATUS 03h, 83h, 103h e 183h OPTION81h e 181h INCON0Bh, 8Bh, 10Bh e 18Bh TIMER 0 01h e 101h
- - RA5 RA4 RA3 RA2 RA1 RA0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RB7 RB6 RB5 RB4 - - - - Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

Microcontroladores PIC 16F

Alguns registos mais importantes esto em todos os bancos, permitem o acesso sem sair do banco onde se est. Tanto faz alterar num como noutro banco, pois so sempre cpias.

4.1.REGISTOWWORKING REGISTER(WREG)(ACUMULADOR)O Acumulador o

registo mais solicitado do microcontrolador. Neste registo so colocados os resultados das operaes efectuadas pelo programa, sendo portanto um registo cujo contedo est permanentemente a ser alterado. Caso se pretenda utilizar o contedo do acumulador no programa, este deve ser imediatamente copiado para um registo especfico. O acumulador pode ser acedido a partir de qualquer banco de memria.

4.2.REGISTOS PORTS(portos)PORTA, PORTB e PORTC so grupo de pinos do


microcontrolador que podem ser acedidos individualmente ou simultaneamente e no qual podemos colocar valores lgicos ou ler deles o estado existente. Fisicamente, porto um registo dentro do microcontrolador que est ligado por condutores aos terminais do integrado, pod endo-se assim aceder ao seu contedo ou nele colocar valores lgicos. 6

TRISA (85h e 185h) TRISB (86h e 186h) TRISC (87h e 187h)

4.4.REGISTOSTATUS (03h, 83h, 103h e 183h)

- - TRIS5 TRIS4 TRIS3TRIS2TRIS1TRIS0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TRIS7 TRIS6 TRIS5 TRIS4 - - - - Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TRIS7 TRIS6 TRIS5 TRIS4 TRIS3 TRIS2 TRIS1 TRIS0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Microcontroladores PIC 16F

Os portos so a conexo fsica do microcontrolador com o mundo exterior. O micro utiliza-os para observar ou comandar outros componentes ou dispositivos. Os pinos do PORTA e do PORTB, quando configurados como entradas, podem ser ligados internamente ao positivo da alimentao atravs de resistncia de pull-up. Estas resistncias so activadas pondo a 0 o bit RABPU (bit 7 do registo OPTION). Estas resistncias so automaticamente desligadas quando os pinos do porto so configurados como sadas. Para aumentar a sua funcionalidade, os mesmos pinos de um porto podem ter aplicaes distintas, por exemplo, o pino 16 do PIC16F690 pode ser configurado como: RCO/AN4/C2IN+. Pode ser o bit 0 do porto C, a entrada analgica n. 4 ou a entrada + do comparador C2. A escolha da funo feita nos registos de configurao.

4.3.REGISTOS TRIS Os pinos dos portos A, B e C podem ser definidos como

entrada ou como sadas (excepto RA3 que pode ser apenas entrada), de acordo com as necessidades do projecto (por defeito esto programados como entrada).

Para definir um pino como entrada ou como sada, preciso, em primeiro lugar, escrever no registo TRIS respectivo o valor lgico 0 ou 1. Se num bit do registo TRIS for escrito o valor lgico 1, ento o correspondente pino do porto definido como entrada (1Input), se for escrito o valor 0, ento o pino definido como sada (0Output). Por exemplo, se no registo TRISA for colocada a seguinte palavra: 00001111, os pinos RA0 a RA3 funcionam entradas e os pinos RA4 e RA5 como sadas. O registo de estado (STATUS) contm o estado da ALU (bits: C, DC, Z), estado de RESET (bits: TO e PD) e os bits para seleco do banco de memria (IRP, RP1, RP0). Sendo a seleco do banco de memria controlada por este registo, eleest presente em todos os bancos. Se o registo STATUS for o registo de destino para instrues que afectem os bits Z, DC ou C, no possvel escrever nestes trs bits. 7

R <> bit que s pode ser lido W <> bit que s pode ser escrito U <> bit no implementado n <> valor para reset ao ligar x <> pode ser 0 ou 1 u <> sem alterao q <> depende da condio actual Microcontroladores PIC 16F

bit 0 - C (Carry) Transporte Este bit afectado pelas operaes de adio, subtraco e deslocamento. Toma o valor 1 quando um valor mais pequeno subtrado de um valor maior e toma o valor 0 quando um valor maior subtrado de um menor. 1= Ocorreu um transporte no bit mais significativo 0= No ocorreu transporte no bit mais significativo O bit C afectado pelas instrues ADDWF, ADDLW, SUBLW, SUBWF RLF e RRF bit 1 - DC (DigitCarry) Transporte de dgito Este bit afectado pelas operaes de adio e subtraco. Ao contrrio do anterior, DC assinala um transporte do bit 3 para o bit 4 do resultado. Este bit toma o valor 1, quando um valor mais pequeno subtrado de um valor maior e toma o valor 0 quando um valor maior subtrado de um menor. 1= Ocorreu um transporte no quarto bit mais significativo 0= No ocorreu transporte nesse bit O bit DC afectado pelas instrues ADDWF, ADDLW, SUBLW e SUBWF. bit 2 - Z (bit Zero) Indicao de resultado igual a zero. Este bit toma o valor 1 quando o resultado da operao lgica ou aritmtica executada igual a 0. 1= resultado igual a zero 0= resultado diferente de zero bit 3 - PD (bit de baixa de tenso Power Down) Este bit posto a 1 quando o microcontrolador alimentado e comea a trabalhar, depois de um reset normal e depois da execuo da instruo CLRWDT. A instruo SLEEP peeste bit a 0 ou seja, quando o microcontrolador entra no regime de baixo consumo / pouco trabalho. Este bit pode tambm ser posto a 1, no caso de ocorrer um impulso no pino RB0/INT, uma variao nos quatro bits mais significativos do porto B, ou quando completada uma operao de escrita na DATA EEPROM ou ainda pelo watchdog(WDT). 1 = depois de ter sido ligada a alimentao 0 = depois da execuo de uma instruo SLEEP bit 4 - TO Time-Out; transbordo do watchdogEste bit posto a 1, depois de a alimentao ser ligada e depois da execuo das instrues CLRWDT e SLEEP. O bit posto a 0 quando o watchdog consegue chegar ao fim da sua contagem (overflow = transbordar), o que indica que qualquer coisa no esteve bem. 1 = no ocorreu transbordo 0 = ocorreu transbordo 8

bit 7 - IRP (Bit de seleco de banco de registos) Este bit utilizado no endereamento indirecto da RAM interna, como oitavo bit. 1 = bancos 2 e 3 (endereos de 100h a 1FFh) 0 = bancos 0 e 1 (endereos de 00h a FFh)

bsf STATUS,RP0 ;coloca bit RP0 do registo Status a 1 bcf STATUS,RP1 ;coloca bit RP1 do registo Status a 0 ;foi seleccionado o banco 1* para se aceder ao registo TRISC movlw b'00001111' ;Move o literal (b'00001111) para o registo W movwf TRISC ;Move o conted o do registo W para o registo TRISC. ;Configura os pinos 0 a 3 do PORTC como entradas e os ;restantes como sadas bcf STATUS,RP0 ;coloca bit RP0 do registo Status a 0 bcf STATUS,RP1 ;coloca bit RP1 do registo Status a 0 ;regressa ao banco 0

4.5.REGISTOOPTION - OPTION_REG(81h e 181h)


Registo que contm bits que se destinam a configurar o funcionamento do micro.
Microcontroladores PIC 16F

bits 5 e 6 - RP1 e RP0 (bits de seleco de banco de registos) Estes dois bits so a parte mais significativa do endereo utilizado para endereamento directo. Como as instrues que endeream directamentea memria, dispem somente de sete bits para este efeito, preciso mais um bit para poder enderear todos os 256 registos do PIC. 00 = banco de registos 0 10 = banco de registos 2 01 = banco de registos 1 11 = banco de registos 3 No exemplo seguinte est escrito o programa para configurar os pinos 0, 1, 2 e 3 do porto C como entradas e os pinos 4, 5, 6 e 7 como sadas.
* Quando o PIC arranca vai para o Banco 0, como TRISA, TRISB e TRISC esto no banco 1 ou no banco 3, para se aceder a estes registos tem que se configurar o registo STATUS para seleccionar o banco 1 ou o banco 3.

bit 0, bit 1 e bit 2: PS0, PS1 e PS2: Bits de seleco do divisor prescalerOprescaler e como estes bits afectam o funcionamento do microcontrolador, so abordados na seco que trata do registo TMR0. 9

bit 5 - T0CS: Este bit permite seleccionar a fonte de clock do TMR0. 1 = impulsos externos aplicados ao pino RA2/T0CKI 0 = impulsos do clock interno (Fosc/4)

4.6.REGISTOINTCON (0Bh, 8Bh, 10Bh e 18Bh)

Microcontroladores PIC 16F

bit 3 - PSA: Bit que atribui o prescaler ao temporizador TMR0 ou ao temporizador do watchdog1 = o prescaler atribudo ao temporizador do watchdog.0 = o prescaler atribudo ao temporizador TMR0. bit 4 - T0SE: Com o timer0 configurado para contar impulsos externos, aplicados ao pino RA2/T0CKI, este bit vai determinar quando a contagem ir incidir sobre os impulsos ascendentes ou descendentes do sinal. 1 = incrementa nos impulsos de flanco descendente no pino RA2/T0CKI 0 = incrementa nos impulsos de flanco ascendente no pino RA2/T0CKI bit 6 INTEDG: Se a ocorrncia de interrupes estiver habilitada, este bit vai determinar qual o bordo em que a interrupo no pino RA2/INT vai ocorrer. 1 = flanco ascendente 0 = flanco descendente bit 7 RABPU: Este bit introduz ou retira as resistncias de pull-up internas, do Porto A e do Porto B, ligadas ao + da alimentao. 1 = resistncias de pull up desligadas 0 = resistncias de pull-up ligadas o registo que controla as interrupes. O papel do INTCON permitir ou impedir as interrupes e, mesmo no caso de elas no serem permitidas, ele toma nota dos pedidos, alterando o nvel lgico de alguns dos seus bits. As interrupes so um mecanismo que o microcontrolador possui e que torna possvel responder a acontecimentos no momento em que eles oc rrem, qualquer o que seja a tarefa que o microcontrolador esteja a executar. Esta uma parte importante do funcionamento dos micros, permite reagir aos acontecimentos na hora. Geralmente, cada interrupo muda a direco de execuo do programa, suspendendo a sua execuo, enquanto o microcontrolador corre um subprograma que a rotina de atendimento da interrupo. Depois de este subprograma ter sido executado, o microcontrolador continua no programa principal, a partir do local em que o tinha abandonado.

bit 0 - RABIF: Bit que informa que houve mudana nos nveis lgicos nos pinos do porto A ou do porto B; 0 para 1 ou 1 para 0: 1= Pelo menos um destes pinos mudou de nvel lgico. 0= No ocorreu nenhuma variao nestes pinos. Para que estes pinos detectem as variaes, eles devem ser definidos como entradas. Se 10

bit 4 - INTE: Bit de habilitao da interrupo externa no pino RA2/INT. 1=Interrupo externa habilitada. 0= Interrupo externa impedida. bit 5 T0IE: Bit de habilitao de interrupo por transbordo do contador TMR0. 1= Interrupo autorizada. 0= Interrupo impedida.

bit 6 - PEIE: Bit que habilita as interrupo dos perifricos 1= Interrupes habilitada. 0= Interrupes desabilitadas.

Microcontroladores PIC 16F

qualquer deles for definido como sada, nenhuma interrupo ser gerada quando surgir uma variao do nvel lgico. Se estes pinos forem definidos como entradas, o seu valor actual comparado com o valor anterior, que foi guardado quando se fez a leitura anterior ao porto. bit 1 - INTF: Bit que informa que houve interrupo externa no pinoRA2/INT1= Ocorreu uma interrupo externa (depois, colocar a 0 na rotina da interrupo para que a mesma possa ocorrer de novo) 0= No ocorreu uma interrup o externa Se um impulso ascendente ou descendente for detectado no pino RA2/INT, o bit INTF posto a 1 (o tipo de sensibilidade, ascendente ou descendente, definida atravs do bit INTEDG do registo OPTION). O subprograma de atendimento desta interrupo deve repor este bit a 0, afim de que a prxima interrupo possa ser detectada. bit 2 T0IF: Bit que informa que houve interrupo por transbordo do contador de TMR0:1= Contador mudou a contagem de FFh para 00h (overflow) (depois, colocar a 0 na rotina da interrupo o bit T0IF para que a interrupo possa ocorrer de novo). 0= No ocorreu overflow. bit 3 - RABIE: Bit de habilitao de interrupo no PORTA/PORTB. Permite que a interrupo por variao dos nveis lgicos nos pinos ocorra. 1= Habilita a interrupo. 0= Inibe a interrupo.

bit 7 - GIE: Bit que permite ou impede todas as interrupes. 1= Permite a execuo de todas as interrupes cujos bits de permisso individual estejam activados. 0= Todas as interrupes impedidas. De um modo geral, cada fonte de interrupo tem dois bits associados. Um habilita a interrupo e o outro assinala quando a interrupo ocorre. Existe um outro bit comum a todas as interrupes GIE- que pode ser usado para impedir ou habilitar todas as interrupes simultaneamente. A utilizao deste bit pode ser til, por exemplo, numa parte do programa que no possa ser interrompida. Quando as interrupes esto desabilitadas, atravs do bit GIE ou do prprio bit que as desabilita, se eventualmente a condio de interrupo ocorrer, a interrupo fica pendente e ser processada quando habilitada. Quando uma interrupo atendida, o bit GIE posto a 0, de tal modo que, quaisquer interrupes adicionais so inibidas, o endereo de retorno guardado napilha e, no contador de programa, escrito 04h. Somente depois disso, que a resposta a uma interrupo comea. 11

4.7.REGISTOANSEL E ANSELH
ANSEL ANSEH

4.8.MDULO TIMER0

Microcontroladores PIC 16F

Depois da interrupo ser processada, o bit que por ter sido posto a 1 permitiu a interrupo, ter agora, por software, de ser reposto a 0 seno, a rotina de interrupo ir ser novamente processada, mal se efectue o regresso ao programa principal. Guardar os contedos de registos importantes A nica coisa que guardada na pilha durante uma interrupo o valor de retorno do contador de programa (por valor de retorno do contador de programa entende o endereo da instruo -se que estava para ser executada, mas que no foi, por causa de ter ocorido a r interrupo). Guardar apenas o valor do contador de programa no , muitas vezes, suficiente. Alguns registos que j foram usados no programa principal, podem tambm vir a ser usados na rotina de interrupo. Se no salvaguardamos

os seus valores, quando acontecer o regresso da subrotina para o programa principal, os contedos dos registos podem ser diferentes, o que provoca erro no programa. Um exemplo para este caso o contedo do registo de trabalho W. Se, por exemplo, o programa principal estive a usar este registo e o seu contedo seja r necessrio instruo seguinte ento, se a interrupo ocorrer, antes dessa instruo, o contedo de W alterado e o programa quando regressar da rotina de interrupo, o valor de W est alterado, o que provocaerro de programao. O procedimento para a gravao de registos importantes, antes do programa ir para a subrotina de interrupo, designa -se por PUSH, enquanto o procedimento que recupera esses valores chamado POP. O regresso de uma rotina de interru po efectuado com instruo RETFI. Esta instruo coloca automaticamente o bit GIE a 1, permitindo assim que novas interrupes possam ocorrer. Registos que determinam o funcionamento de alguns pinos do microcontrolador como I/O digitais ou entradas analgicas (ADC). Nalguns tipos de PICs, por exemplo PIC16F688, esta configurao efectuada no registoCMCON0. O micro PIC16F690 possui vrios registos TIMER. Destes, o TIMER0 com o registo TMR0, o mais utilizado. Trata-se de um contador/temporizador de 8 bits, da o seu contedo poder serincrementado at 255, independentemente da execuo do resto do programa.Funcionando o TIMER0 em modo temporizador, os impulsos so obtidos internamente a partir do sinal de relgio do micro. Em modo contador os impulsos provm do exterior atravs do pino T0CKI do micro. TIMER0 configurado atravs do registo OPTION_REG e possui o seguinte diagrama de blocos: 12

Bit T0CS=0 e bit PSA=1, o percurso do sinal o seguinte:

Microcontroladores PIC 16F

Uma vez atingido o valor 255 o registo TMR0 volta automaticamente a zero, iniciando nova contagem. Esta inicia -se em zero e no no valor em que TMR0 tivesse sido originalmente programado.A contagem do registo directamente proporcional frequncia do sinal aplicado entrada, sendo, no entanto, possvel efectuar a diviso da frequncia de entrada atravs de umprescaler, conforme se pode verificar, de forma simplificada, nos diagramas de blocos seguintes: 13

Bit T0CS=0 e bit PSA=0, o percurso do sinal ser:

Microcontroladores PIC 16F

Fosc/4 e T0CKI representam as duas possveis fontes de sinal para o contador TMR0. Fosc/4 um sinal gerado internamente no PIC pelo circuito declock. a frequncia de clockdividida por quatro. T0CKI o pino do PIC onde podeser aplicado um sinal de um circuito externo.Os blocos T0CS e PSA so comutadores que permitem seleccionar as entradas do sinal. So programados no registo OPTION com o valor 0 ou 1. O bloco Prescaler a designao para a parte do microcontrolador que divide a frequncia de oscilao do clock antes que os respectivos impulsos possam incrementar o temporizador. O nmero pelo qual a frequncia de clock dividida est definido nos trs primeiros bits do registo

OPTION: PS0, PS1 e PS2. A maior diviso possvel 256. Neste caso, significa que s aps 256 impulsos de clock que o contedo do temporizador incrementado de uma unidade. Isto permite-nos medir grandes intervalos de tempo. Com o PIC a funcionar com um clock de 4 MHz, o prescaler=256 e o TMR0 a contar o valor mximo (256), o overflow de TMR0 acontece a cada 65,53ms (4/fosc x 256 x 256 = 65,54ms).Se a interrupo de TMR0 estiver habilitada, sempre que ocorrer o overflow de TMR0 (transio de 255 para 0), o bit T0IF do registo INTCON colocado a 1. Cabe ao programador voltar a colocar a 0 o bit T0IF, na rotina de interrupo, para que uma nova interrupo possa ser detectada. O prescaler pode ser atribudo ao temporizador TMR0, ou ao temporizador dowatchdog(WDT), isso feito atravs do bit PSA no registo OPTION. A mudana do prescaler est completamente sob o controle do programador e pode ser executada enquanto o programa est a correr. O"bloqueios" do programa. Como qualquer circuito elctrico, tambm os microcontroladores podem ter uma falha ou algum percalo no seu funcionamento. Infelizmente, o microcontrolador tambm pode ter problemas com o seu programa. Quando isto acontece, o microcontroladorpra de trabalhar e mantm nesse -se estado at que algum faa o reset.Por causa disso, foi introduzido o mecanismo de watchdog (co de guarda). Depois de um certo perodo de tempo, owatchdog faz o reset do microcontrolador (o que realmente acontece, que o microcontrolador executa o reset de si prprio). Owatchdog trabalha na base de um princpio simples: se o seu temporizador transbordar, feito o reset do microcontrolador e este comea a executar o programa a partir do princpio. Deste modo, oreset poder ocorrer tanto no caso de funcionamento correcto como nocaso de funcionamento incorrecto. Para que ele no ocorra, no caso de funcionamento correcto, o registo WDT ter de ser colocado a 0 (instruo CLRWDT) sempre que este est prximo de transbordar. Assim, o programa ir evitar umreset enquanto est a funcionar correctamente. Se ocorrer o "bloqueio" do programa, este zero no ser escrito, haver transbordo do temporizador WDT, o que far ocorrer oreset que vai fazer com que o microcontrolador comece de novo a trabalhar correctamente. watchdog um mecanismo que o microcontrolador usa para se defender contra 14

4.9.MDULO TIMER1 4.9.1.REGISTO T1CON

Microcontroladores PIC 16F

O TIMER1 possui os registos TMR1L (Low e TMR1H (High) e, semelhana de ) TIMER0, tambm pode funcionar em modo temporizador e contador. Em modo temporizador os impulsos tm origem no relgio do micro e em modo contador provm do exterior atravs dos pinos T1CHI ou T1G. TIMER1 possui 16 bits e por , isso, pode efectuar contagens at 65.535. Tal como TIMER0, TIMER1 funciona independentemente da execuo do resto do programa. Com o PIC a funcionar com um clock de 4 MHz, o prescaler=8 e o TMR1 a contar o valor mximo (65.536), o overflow de TMR1 acontece a cada 524,288ms (4/fosc x 8 x 65.536 = 524,288ms).TIMER1 configurado atravs do registo T1CON. 15

4.10.MDULO TIMER2 4.10.1.REGISTO T2CON

Microcontroladores PIC 16F

O TIMER2 possui um funcionamento diferente de TIMER0 e TIMER1; funciona apenas no modo temporizador e a activao da suaflag (TMR2IF) no est associada ao overflow do contador, ocorre quando o contedo do registo de TIMER2 (TMR2) igualar o do registo PR2. TMR2 e PR2 so registos dei 8 bits e, por isso, podem efectua contagens at 255. Tal como TIMER0 e TIMER1, TIMER2 tambm funciona independentemente da execuo do resto do programa. TIMER2 configurado atravs do registo T2CON. A seguir mostra-se um programa que faz piscar um led, ligado no pino RC0, por interrupo devida ao overflow de TMR0. 16

Microcontroladores PIC 16F org 00 ;incio do programa goto configuracao_SFR ;para saltar o vector da interrupo org 04 ;endereo para onde o programa vem quando ocorrer a ;interrupo goto int_TMR0 ;interrupo por transbordo de TMR0, T0IF=1 e faz GIE=0 configuracao_SFR ;Banco 1: RP0=1 e RP1=0 bsf STATUS,RP0 ;coloca o bit RP0 do registo STATUS a "1" bcf STATUS,RP1 ;coloca o bit RP1 do registo STATUS a "0" clrf TRISC ;0=sada, 1=entrada movlw b'00000010' movwf OPTION_REG ;<2:0> configura prescaler 1:8 ;Banco 2: RP0=0 e RP1=1 bcf STATUS,RP0 ;coloca o bit RP0 do registo STATUS a "0" bsf STATUS,RP1 ;coloca o bit RP1 do registo STATUS a "1" clrf ANSEL ;0 = I/O digital clrf ANSELH ;0 = I/O digital ;Banco 0: RP0=0 e RP1=0 bcf STATUS,RP0 ;coloca o bit RP0 do registo STATUS a "0" bcf STATUS,RP1 ;coloca o bit RP1 do registo STATUS a "0" movlw b'10100000' ;interrupes permitidas b it ( 7-GIE) e interrupo por ;transbordo de TMR0 (bit 5 -T0IE) movwf INTCON clrf PORTC ;garante sada PORTC a zero ;********************************************************************** PROGRAMA ;********************************************************************* * movlw d'13' ;coloca em W o valor 13. AJUSTAR A OSCILAO AQUI (0,5s ;ON, 0,5s OFF) movwfmemo ;guarda o valor em memomovwf TMR0 ;carrega TMR0 com o valor goto $ ;fica em ciclo nesta linha, sendo incrementado TMR0 a partir do ;valor de "memo". Qua ndo TMR0 transita de 255>0 -> T0IF=1, ;indo, neste caso, o programa para org 04 ;----------------------------------------------------------------------------------------------------- ;Rotina de Servio da Interrupo (RSI) ;----------------------------------------------------------------------------------------------------- int_TMR0 decfszcontador,f ;1 vez toma o valor 255, quando contador=0, ignora linha ;seguinte goto salto2 ;se contador>0 faz esta linha btfscled ;se led=0, ignora linha seguinte goto salto1 bsfled ;acende led goto salto2 salto1 bcfled ;apaga led salto2 movfmemo,W ;move o contedo de memo (f) para W movwf TMR0 ;volta a carrega TMR0 com o mesmo valor bcf INTCON,T0IF ;coloca novamente T0IF (bit 2) do registo INTCON a 0 para que ;a interrupo em TMR0 possa voltar a ocorrer retfie ;retorna ao programa do ponto em que foi interrompido pela ;interrupo e faz GIE=1 ; ----------------------------------------------------------------------------------------------------- end

17

4.11.MDULO CAPTURE/COMPARE/PWM
Para activar o mdulo PWM necessrio configurar os seguintes registos: CCP1CON, T2CON, CCPR1L e PR2

4.11.1.REGISTO CCP1CON
Registo de controlo de CCP1.

Microcontroladores PIC 16F

O mdulo Captura, Comparao e PWM um perifri o que permite controlar c diferentes eventos. A programao deste mdulo implica a configurao de vrios SFR. No modo Captura, possvel contar eventos que ocorram num pino do micro. No modo Comparao possvel comparar o valor de uma contagem com o val or de registos do micro. No modo PWM - Pulse WidthModulation(Modulao por largura de impulso) e possvel gerar sinais cuja frequncia edutycycle podem ser configurados. A resoluo do sinal PWM de 10 bits. A tcnica PWM bastante utilizada, nomeadamente no controlo de velocidade de motores DC. Com esta tcnica controla-se o tempo que um sinal digital, num perodo, est a 1 e a 0 (dutycycle), conseguindo-se assim controlar a energia fornecida ao motor e consequentemente a sua velocidade. O valor 1 corresponde ao tempo durante o qual o motor alimentado, e o valor 0 ao tempo em que o motor no alimentado. 18

4.11.2.REGISTO CCPR1L 4.11.3.REGISTO PR2

Registo de 8 bits que carregado com valor que vai afectar oPWM Period.

PWM Period= [(PR2)+ 1]4TOSC(TMR2 Prescale Value) O tempo que o impulso est no estado 1 TON, dado pela seguinte expresso:
Microcontroladores PIC 16F

Registo que, em conjunto com dois bits do registo CCP1CON, vo determinar o TON (Pulse Width). O perodo do PWM depende do valor do registo PR2 e do valor seleccionado em TMR2PrescaleValue. calculado pela seguinte frmula: Pulse Width = (CCPR1L<7:0>:CCP1CON<5:4>) TOSC (TMR2 PrescaleValue) Obs.:Para habilitar o sinal PWM, colocar a 1 o bit TMR2ON do registo T2CON; Configurar o pino de sada do sinal PWM (RC5), no respectivo registo TRIS, como sada.

De seguida cdigo de um programa que permite gerar um sinal, no pino RC5, com uma frequncia de 4 kHz e com um dutycycle varivel entre 0 e 100%, por alterao do
valor do registo CCPR1L. banksel TRISC ;muda para o banco 1 bcf TRISC,5 ;RC5/CCP1 = sada digital PWM movlw d'249' ;d'249' <> T=250us <> f=4kHz movwf PR2 ;PWM Period =[(PR2)+ 1] 4 TOSC (TMR2 PrescaleValue) ;[(PR2)+ 1]=250, TOSC=1/4MHz, PrescaleValue=1 banksel PORTC ;muda para o banco 0 movlw b'00001100' movwf CCP1CON ;<7:6> 00 = single output (sada em P1A) ;<5:4> 00 = 2 bits LSB de PWM dutycycle (podem ficar a 0, erro ;mnimo) ;<3:0> 1100 = sada P1A active-high movlw d'125' ;ALTERAR AQUI (valores entre 0 e 250 para controlo do dutycycle) movwf CCPR1L ;TON = (CCPR1L<7:0>:CCP1CON<5:4>) TOSC (TMR2 Prescale ;Value) ;d'250' (mximo)<>dutycycle 100%, 0 (mnimo)<>dutycycle 0%, ;d'125'<>dutycycle 50% ;Ateno! no se considerou os dois bits LSB do PWM dutycyclemovlw b'00000100' movwf T2CON ;<2> =1, liga o timer 2 ;<1:0> = 00 <> TMR2 PrescalerValue=1 goto $ ;ciclo indefinido, continuando o PWM a funcionar

19

4.12.MDULO CONVERSOR A-D(ADC) 4.12.1.REGISTO ADCON0

Microcontroladores PIC 16F

A converso analgico-digital (ADC) uma funo vulgar nos microcontroladores PIC. Este mdulo permite a converso de um sinal analgico externo para digital, com 10 bits de resoluo. Os registos que configuram o funcionamento do ADC so: ADCON0 e ADCON1, sendo o resultado da converso, com 10 bits, guardado nos registos ADRESH e ADRESL. Note-se que o resultado da converso fica em dois registos porque 10 bits no cabem num s registo. Assim 8 bits ficam num registo e 2 bits noutro registo, ver bit ADFM do registo ADCON0. Segue-se um cdigo que permite a converso de um sinal ana lgico, aplicado na entrada RA2, num valor digital.

20

banksel TRISA ;muda para o banco 1 movlw b'00000001' ;1=entrada, 0=sada movwf TRISA ;<0>=RA0=entrada movlw b'00010000' movwf ADCON1 ;<6:4>=010, frequncia da converso: Fosc/8 ;(para 4MHz perodo do clock do ADC TAD=2us) banksel ANSEL ;muda para o banco 2 bsf ANSEL,0 ;1=Analog input, 0=I/O digital banksel ADCON0 ;muda para o banco 0 movlw b'00000001' ;<7>=justificado esquerda; <6>=Vref=Vdd; movwf ADCON0 ;<5:2>=seleccionado CANAL0 (AN0); <0>=ADC ligado call tempo ;delay necessrio para carregar o condensador do ;conversor (>11xTAD >22us) bsf ADCON0,GO ;inicio da converso (GO=1) btfsc ADCON0,GO ;testa se converso est completa (GO=0) goto $ -1 ;no, testa novamente linha anterior (-1) bcf ADCON0,ADON ;converso completa, desliga conversor movf ADRESH,W ;move bits da converso <9:2> de ADRESH para W movwf resultado ;guarda bits mais significativos no registo resultado ;Nota: no se consideraram os 2 bits menos ;significativos de ADRES

4.13.MEMRIA DE DADOS EEPROM(256 bytes no PIC16F690)


REGISTOS UTILIZADOS PARA A ESCRITA/LEITURA DA EEPROM 4.13.1.REGISTO DE ENDEREOS EEADR 4.13.2.REGISTO DE DADOS EEDAT

Microcontroladores PIC 16F

A EEPROM de DADOS uma rea especfica da memria que se destina, na maioria dos casos, a guardar dados que no se podem perder em caso de falha da tenso de alimentao do microcontrolador. Por exemplo, num sistema de alarme, o cdigo de acesso no se pode perder, mesmo em caso de falta de energia A memria EEPROM escrita e lida em condies normais de alimentao e sem ter que recorrer a programadores suplementares. Todavia, necessita de uma srie de procedimentos prprios para se evitar a eventualidad de se perder dados em e condies de funcionamento anormal do microcontrolador. Registo utilizado para enderear as diferentes localizaes de memria EEPROM em que se deseja efectuar a escrita ou a leitura de dados. Registo onde colocado o valor a gua rdar na EEPROM na operao de escrita ou o valor lido na EEPROM na operao de leitura. 21

4.13.3.REGISTO DE CONTROLO EECON1

Bit 7 - EEPGD 1 = Acesso memria de programa 0 = Acesso a memria de dados EEPPROM

4.13.4.REGISTO EECON2

Microcontroladores PIC 16F

Registo que possui os bits de controlo do processo de leitura e de escrita na memria de dados EEPROM. O registo contm uma srie deflags com as quais possvel controlar as operaes efectuadas na EEPROM. Bit 0 - RD:ReadControl bitEste bit serve para activar o ciclo de leitura da EEPROM. 1 = Comanda o incio da leitura da EEPROM (o bit colocado da a 0 por hardware no fim da leitura). Pode ser activada a 1 no programa mas no a 0. 0 = No inicia a leitura da EEPROM Bit 1 - WR:WriteControl bitEste bit serve para activar o ciclo de escrita na EEPROM. Para activar a escrita coloca -se a 1 este bit. O bit ser automaticamente colocado a 0 pelo hardware do PIC uma vez completada a escrita na clula. Para

ser possvel escrever na EEPROM o bit EEPGD=0.1 = Comanda o incio da escrita na EEPROM (o bit colocado a 0 por hardware no fim da escrita). Pode ser colocado a 1 no programa mas no a 0. 0 = Ciclo de escrita completo Bit 2 - WREN: EEPROM Write Enable bitEste bit habilita as sucessivas operaes de escrita numa clula da EEPROM. Deve ser activado previamente ao incio de uma qualquer operao de escrita na EEPROM. Se for colocado a zero a EEPROM comporta-se como uma memria s de leitura. 1 = Escrita na EEPROM habilitada 0 = Escrita na EEPROM desabilitada Bit 3 - WRERR: EEPROM ErrorFlag bitEste bit indica se a operao de escrita foi prematuramente interrompida, por exemplo, por causa de um reset do PIC ou do Watchdog Timer. 1 = Operao de escrita interrompida prematuramente0 = Operao de escrita completada correctamente EECON2 no um registo fsico. Destina -se exclusivamente, na operao de escrita, a escrever uma sequncia especfica com a finalidade de se evitarem erros na gravao da EEPROM. Lido o seu valor est a 0 . 22

4.13.5.ESCRITA DE DADOS NA EEPROM

movfvalor,W ;guarda valor em W ;(escrever na EEPROM) banksel EEDAT ;muda para o banco 2 movwf EEDAT ;valor colocado no registo de dados EEDAT movlw 0 ;0 endereo escolhido para escrita na memria EEPROM movwf EEADR ;coloca no registo de endereos EEADR o endereo para ;escrita banksel EECON1 ;muda para o banco 3 bcf EECON1,EEPGD ;permite aceder memria de dados EEPROM bsf EECON1,WREN ;habilita aescrita (WREN=WRiteENable) na EEPROM ;(sequncia obrigatria) movlw d85 movwf EECON2 ;(55h=d85) registo que fisicamente no existe movlw d170 movwf EECON2 ;(AAh=d170) ;(fim da sequncia)bsf EECON1,WR ;inicia a escrita (WR=1) na EEPROM btfsc EECON1,WR ;testa final da escrita (WR=0) goto $-1 ;ciclo de espera pelo final da escrita bcf EECON1,WREN ;desabilita a escrita ;(fim da escrita) banksel 0 ;muda para o banco 0

4.13.6.LEITURA DE DADOS NA EEPROM


banksel EEADR ;muda para o banco 2 movlw 0 ;"0" endereo da memria EEPROM a ler movwf EEADR ;coloca em EEADR o endereo banksel EECON1 ;muda para o banco 3 bcf EECON1,EEPGD ;permite aceder memria de dados EEPROM bsf EECON1,RD ;l a EEPROM e coloca o resultado em EEDAT banksel EEDAT movf EEDA T,W ;coloca o contedo de EEDAT em W banksel 0 ;muda para o banco 0 movwfvalor_lido ;coloca contedo de W no registo valor_lido Microcontroladores PIC 16F

Notas: A sequncia obrigatria representa uma espcie de cdigo de acesso EEPROM e serve para evitar a escrita acidental em caso de funcionamento anormal do PIC, por exemplo, em caos de baixa de tenso ou erros de programao. Na prtica, escrevem-se os dois valores hexadecimais 55h e AAh sequencialmente no registo EECON2 O ciclo de espera criado por goto $-1 tambm possvel de programar com interrupo. Para escrever um novo valor na mesma clula da EEPROM, basta repetir o processo de escrita. Para se efectuar a leitura do dado localizado num determinado endereo da memria EEPROM, ter de ser programado o seguinte cdigo: 23

5.CDIGOSUTILIZADOS NOS SISTEMAS DE NUMERAO

Decimal: d'100'ou .100 Hexadecimal: h'64' ou 0x64 Binrio: b'01101100'ASCII: a'6' ou '6' A numerao utilizada no MPLAB, por defeito, a hexadecimal.

6.DESCRIES DE CAMPOS DE OPCODE


Microcontroladores PIC 16F f endereo do registo. Wregisto de trabalho (Workingregister), similar ao acumulador. bposio de um bit de um registo. krepresenta uma constante de 8 bits. dbit que selecciona o destino onde se guarda o resultado de uma operao. Se d=0, o destino W, se d=1 o destino f (default). l literal (as constantes so designadas por literais. A palavra literal significa nmero. a bit de acesso RAM (s para PICs 18F): a=0 (valor por defeito): Access Bank*; a=1: Acesso via BSR**.

Access Bank (a=0): utilizando, por exemplo no PIC18F2550, os 96 bytes iniciais do banco 0 (endereos 00h a 5Fh dos GPR) e os 160 bytes finais do banco 15 (endereos 60h a FFh dos SFR) no necessrio mu dar de banco; ** BSR: Registo de Seleco de Banco. 24

7.SET DE INSTRUES(1)

Microcontroladores PIC 16F

25

SET DE INSTRUES(2)

12 3

8.ESCRITA DE UM PROGRAMA EM ASSEMBLY

Microcontroladores PIC 16F Se o porto de entrada/sada for o operando origem, lido o estado dos pinos do microcontrolador. Se esta instruo for executada no registo TMR0 e se d=1, o prescaler atribudo a esse temporizador automaticamente limpo. Se o PC for modificado ou se resultado do teste for verdadeiro, a instruo executada em dois ciclos.

Assembly uma linguagem de programao de baixo nvel, ou seja, uma linguagem prxima daquela que as mquinas "entendem". Para utiliz necessrio conhecer no s -la a prpria linguagem como tambm as caractersticas de funcionamento da mquina. A

escrita do programa em linguagem assembly no obedece a uma estrutura rgida, no entanto, existem algumas regras que devem ser observadas para facilitar o entendimento e compreenso do mes mo. Assim, como elementos fundamentais dessa linguagem temos: 26

8.1.DIRECTIVAS
list p=PIC16F690 Idntica a processor PIC16F690, identifica o microcontrolador utilizado.

Microcontroladores PIC 16F

As directivas no so instrues que o compilador traduza no respectivoopcode. Trata-se de informaes enviadas ao compilador, para executar determinados procedimentos, durante a compilao. As mais utilizadas so as seguintes: processor PIC16F690Trata-se de uma directiva para o compilador assembler que informa para que tipo de PIC o programa escrito. #include P16F690 Esta directiva faz com que um ficheiro com os endereos dos registos SFR e o nome dos bits do PIC utilizado possa ser utilizado pelo compilador, evitando-se assim a escrita dessa informao no programa. __configEsta directiva permite configurar os Configuration Bits do PIC. Trata-se de bits que definem o comportamento do microcontrolador, por exemplo, tipo de oscilador, watchdog, etc. Oscillator permite escolher o tipo de clock com que o micro funciona Power Up Timer quando o micro ligado fica em estado de reset vrios msMaster ClearEnable - pino do micro utilizado como entrada de reset ou de inputBrown Out Detect se ocorrer uma queda de tens o micro reseta o Watchdog Timer co de guarda, destina-se a evitar a paragem do programa LowVoltageProgram gravao sem necessidade de tenso >5V no pino VppCodeProtect no permite ler o cdigo de programa gravado no microData EE ReadProtect proteco contra leitura na memria EEPROM InternalExternal Switch Over Mode condies de funcionamento, na inicializao, do clock interno/externo Monitor ClockFail-Safe - caso haja uma falha do clock externo, liga automaticamente oclock interno. OsConfiguration Bits esto mapeados na memria programa, endereo 2007h, fora do programa do utilizador, e s so acedidos durante a programao do micro. radixdecDirectiva que informa o compilador que a numerao utilizada no programa seria, no caso, decimal. Caso a directiva radix no seja utilizada, a numerao, por defeito, hexadecimal.

equDirectiva que normalmente utilizada para atribuir nomes, facilmente identificveis, a variveis utilizadas no programa. #define Directiva usada, nomeadamente, para atribuir nomes, facilmente identificveis a bits utilizados no programa. Utilizando -se as directivas equ e #define, o programa torna-se mais legvel, facilitando a sua compreenso e entendimento. Tambm, por alterao destas, numa nica linha do pr grama, se o afecta todo o programa. orgorg significa origem, sendo esta directiva utilizada para definir o endereo da memria de programa onde a linha de cdigo que lhe est aps escrita. 27

9.ORGANIZAO DE UM PROGRAMA EM ASSEMBLY

Microcontroladores PIC 16F

bankselDirectiva que possibilita a seleco do banco de memria. Afecta os bits RP1 e RP0 atribuindo-lhe valores que permitem seleccionar o banco de memria em que se encontra o registo indicado por banksel.endNo fim do programa necessrio colocar a directiva end para que o tradutorassemblysaiba que no existem mais instrues no programa.

8.2.INSTRUESSo as ordens que o microcontrolador recebe para realizar uma

determinada tarefa. So escritas com recur a um conjunto de palavras so reservadas (mnemnicas) e a operandos. Cada famlia de microcontroladores tem o seu prprio conjunto de instrues.

8.3.ETIQUETAS(LABELS)So constitudas por um conjunto de caracteres

alfanumricos, sendo estas palavras coloca das no programa com a finalidade de aceder a partes do cdigo atravs de instrues de salto ou de subrotinas.

8.4.COMENTRIOSTexto que o programador escreve no programa com a

finalidade de informar sobre o funcionamento do mesmo. Os comentriosiniciamse com ponto e vrgula ";", no fazendo os mesmos parte do cdigo do programa.

Informao do projectoNa escrita de um programa deve existir um cabealho com informao que se destina a identificar o projecto em causa. Note que esta -se informao se encontram em comentrio, no sendo por isso interpreta como cdigo do programa. DirectivasAps a informao sobre o projecto, deve colocar se, nomeadamente, as directivas com a informao relativa ao microcontrolador, aos bits de configurao e s variv eis utilizadas no programa.Esta informao destina-se ao compilador, no fazendo parte do set de instrues do PIC. Inicializao do microcontroladorAo ligar-se o microcontrolador energia ou aps um reset, o programa comea a funcionar na linha 0 (org 0) pois esta a , linha do vector de reset do micro. Na estrutura do programa e se no existirem interrupes, deve-se, aps org0, configurar os registos SFR do PIC que

controlam as opes de funcionamento do microcontrolador.Cdigo do programaLinhas com o cdigo (instrues) do programa, tendo em conta oset de instrues do microcontrolador utilizado. O programa inicia -se na linha zero (org0) e termina, obrigatoriamente, com a directiva end. Como na linha zero e seguintes est o cdigo referente conf igurao dos SFR, se essa parte do cdigo no necessitar de ser novamente acedida, o programa no necessita de correr segunda vez esse cdigo. SubrotinasAs subrotinas so partes de programa que, embora guardados num nico local da memria, podem ser util izadas mais do que uma vez no programa, terminam obrigatoriamente com a instruo Return. A sua utilizao possibilita a escrita de programas mais pequenos e, consequentemente, evitam o gasto desnecessrio de memria. 28

10.MPLABIDE (Editor, Compilador e Simulador)


10.1.EDITOR

Microcontroladores PIC 16F

O MPLAB IDE um programa que funciona em ambiente de desenvolvimento integrado (IDEIntegratedDevelopmentEnvironment). Destina ao -se desenvolvimento de projectos com microcontroladores PIC e distribudo gratuitamente pela Microchip (www.microchip.com), fabricante dos PICs. O MPLAB integra num nico ambiente de desenvolvimento, o editor de programa fonte, o assemblador, o simulador (debugger) e, quando conectado s fe rramentas de gravao da Microchip, tambm o gravador de PICs. Para podermos escrever (gravar) num microcontrolador precisamos de umeditor para escrever o programa, um assemblador/compilador e um gravador/programador.De entre os vrios PICs existem diferenas ao nvel da escrita do programa, para se evitarem erros, deve-se consultar o datasheet do PIC para o qual o programa vai ser escrito. No esquecer tambm de configurar os Configuration Bits. Utilizando-se o MPLAB IDE faz-se uso do seu prprio editor para escrever o programa. Este escrito em linguagem Assembly (atravs de mnemnicas), dando origem a um ficheiro com extenso *.asm (ficheiro fonte). O ficheiro fonte um programa constitudo por um conjunto de instrues, organizadas de acordo com regras prprias e com uma determinada ordem. Ou seja, uma sequncia de cdigo organizada de forma a resolver um determinado problema. O programa tambm pode ser escrito em linguagem Basic (linguagem semelhante ao ingls mas mais fcil de ler e escrever que a linguagem Assembly). Neste caso, cria-se um ficheiro

com extenso *.bas. Tambm, o programa pode ser escrito noutra linguagem, por exemplo, linguagem C. No MPLAB, e de um modo geral em aplicaes tcnicas, para se escrever um programa necessrio, em prime lugar, criar-se um projecto. Todos os ficheiros iro dum projecto esto dentro de um mesmo directrio. Project > New > Project NameBrowse> Escolher o directrio> Criar Nova Pasta Ateno! O caminho para esta pasta no pode possuir mais de 62 caracteres. Criado o projecto, o ficheiro de escrita do programa ser gravado do seguinte modo: File > New >Save As > gravar, com extenso .asm, dentro da pasta do projecto. Caso o ficheiro j exista fazer: Source Files>Add Files Configure >SelectDevice (seleccionar o tipo de PIC) Configure >Configuration Bits Notas: 1. A linguagem Basic de compreenso mais fcil que a linguagem Assembly, no entanto, gasta mais cdigo. A linguagem Assembly, mesmo utilizando mnemnicas, torna-se uma linguagem compreensvel por humano Caso se s. programasse em linguagem mquina, que utiliza apenas 0 e 1, a escrita e o entendimento do programa seria uma tarefa deveras difcil.2. Quando se liga a alimentao ou ocorre um reset, o contador de programa (PC) aponta direco 00h e o micro inicia-se a partir da. Por esta razo, no endereo 00h deve -se escrever tudo o que tenha a ver com a inicializao do programa (por ex. configurao dos SFRs).Se ocorrer uma interrupo, o contador do programa aponta direco 04h (nos PIC 16F) e inicia -se a partir desta direco. 29

10.2.ASSEMBLADOR (MONTADOR)

cone

, tecla F10 ou Project>Make


Microcontroladores PIC 16F

O Assemblador (Assembler) o programa que converte o ficheiro fonte (*.asm), escrito em linguagem Assembly, num ficheiro de execuo com extenso .hex (hexadecimal) que utilizado pelo gravador do microcontrolador. Se existirem erros os mesmos so indicados. Efectuando um duplo clique sobre o erro direcciona-se o programa para a linha onde se encontra o mesmo n ficheiro o .asm. Nota: O nome Compilador usado para os programas que traduzem o cdigo fonte, escrito numa linguagem de alto nvel (linguagemBasic, linguagem C ou outra), para uma linguagem de baixo nvel ( assembly ou cdigo mquina). Para alm do ficheiro com extenso .asm, o MPLAB necessita de um segundo ficheiro, com extenso .inc. O mesmo acedido atravs da instruo #include P16F690.INC do programa. Este ficheiro contm informaes relativas ao tipo de PIC utilizado. Caso no se fornea este ficheiro, ser necessrio indicar -se no programa os endereos dos registos e dos bits utilizados. Durante a assemblagem do programa, o assemblador gera um conjunto de arquivos com nome idntico ao programa fonte mas com extenses diferentes, destes s alientam-se os seguintes: Ficheiro de Execuo .hex o ficheiro que contm o programa em cdigo hexadecimal e que vai ser utilizado pelo gravador para gravar o micro.Ficheiro de Listagem .lst um ficheiro produzido pelo tradutor assembler, que contm todas as instrues do ficheiro fonte, o cdigo destino e os respectivos endereos e, ainda, os comentrios que o programador escreveu. um ficheiro muito til para detectar erros no programa. No utilizado pelo gravador do PIC mas til quando se pretende verificar o processo de compilao efectuado pelo compilador.Ficheiro de Erros .err contem uma lista de erro de compilao que mostra o nmero da linha do cdigo que possui erro no programa assembly. Os ficheiros .lst e .err destinam-se somente para controlo da compilao, sendo o ficheiro .hex utilizado realmente para gravar o PIC.

simulao do funcionamento dos programas. Permite correr as instrues uma a uma e localizar falhas. Nos PICs utiliza-se normalmente o MPLAB SIM que est integrado no MPLAB IDE. Para utilizar o MPLAB SIM efectuar os seguintes comandos: Debugger>Select Tools > MPLAB SIM Debugger> Settings >Osc/Trace > Escolher a frequncia de trabalho do PIC Debugger> Settings >Animation / RealtimeUpdates (0) velocidade da animao View>SpecialFunctionRegister - ver estados dos SFR View>Watch - permite ver o estado de registos seleccionadosDebugger>Stimulus> New Workbook>Asynch - permite simular entradas para o PIC.Criado o AsynchronousStimulus, associado a um pino de entrada do PIC, cada vez que dermos um clique com o cursor do rato em Fire, o pino activa-se de acordo com a funo seleccionada em Action.Debugger>StopWatch (cronmetro) permite calcular o tempo de execuo do programa entre dois Breakpoints. 30

10.3.SIMULADOR/DEPURADOR(DEBUGGER)Odebugger utilizado para a

Para simular utilizar os seguintes cones:

Reset:coneInicializa o programa.

ou tecla F9 Halt (parar):conePra a execuo do programa. ou tecla F7 ou tecla F8

10.4.GRAVADOR /PROGRAMMER
Nota: Os PICkit2/3 no gravam os micros PIC mais antigos.
Microcontroladores PIC 16F

Run:coneComando que executa as instrues do programa a uma velocidade que depende da velocidade de funcionamento do PC. Esta velocidade elevada mas mais lenta do que a velocidade do clock do PIC. Sendo as instrues executadas muito rapidamente, o cone fica parado. Animate: coneExecuta as instrues do programa de forma visvel. A velocidade de execuo seleccionada em Debugger> Settings >Animatio A gama de 0 a n. 20.000 ms.

StepInto: coneEste comando executa passo -a-passo as instrues do programa, incluindo as subrotinas. Step Over: coneEste comando executa as instrues do programa, incluindo as subrotinas. Nestas, pra a execuo no endere de retorno. o Step Out: cone S funciona quando entra numa subrotina. Aqui, este comando executa automaticamente o resto do cdigo, parando no endereo de retorno. Dispositivo que permite escrever o programa na memria do microcontrolador, possibilitando, assim, que o micro funcione autonomamente. Converte a informao hexadecimal contida no ficheiro .hex em informao binria (linguagem de 0 e 1, tambm chamada linguagem mquina) e transfere para memria do -a microcontrolador. O micro no utiliza as instrues tal como foram escritas no programa, mas sim os respectivos cdigos operativos (do inglsoperationcode ou abreviadamente opcode). Existem no mercado vrios gravadores para microcontroladores PIC, fabricados pela Microchip e outras empresas. Deses, t destacamos o PICkit2 e PICkit3 da Microchip, so de baixo custo, de fcil utilizao e permitem a gravao dos microcontroladores sem se retirar os mesmos do circuito (ICSP - In-Circuit Serial Programmer). Os PICKit2/3 funcionam integrados no ambiente de desenvolvimento MPLAB e so ligados ao PC atravs da porta USB. 31

Depois, seleccionar

Gravador PICkit2

O software para a utilizao do PICkit2/3 distribudo gratuitamente pela Microchip.

10.5.CPIA DO PROGRAMA DE UM MICROCONTROLADOR


View ->DisassemblyListing Ou, para a cpia em cdigo hexadecimal, seleccionar: View ->ProgramMemory

Você também pode gostar