Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso de Microcontroladores Microchip TCC PIC PRONTO
Curso de Microcontroladores Microchip TCC PIC PRONTO
ndice
(1) Histria dos Microcontroladores............................................................................. 8 1.1. Histria dos Microcontroladores........................................................................ 9 1.2. Arquitectura de um microcontrolador.............................................................. 13 1.3. Caractersticas dos microcontroladores PIC .................................................... 15 1.3.1. Famlias dos microcontroladores PIC....................................................... 15 1.3.2. Core de 12 bits .......................................................................................... 15 1.3.3. Core de 14 bits .......................................................................................... 16 1.3.4. Core de 16 bits .......................................................................................... 17 1.3.5. Core de 16 bits avanado.......................................................................... 17 1.3.6. Tipos de Memria de programa................................................................ 18 1.3.6.1. OTP .................................................................................................... 18 1.3.6.2. EPROM.............................................................................................. 19 1.3.6.3. FLASH............................................................................................... 19 1.3.7. Vantagens do PIC16F628A sobre o PIC16F84 ........................................ 19 1.3.7.1. Pinos multiuso.................................................................................... 20 1.3.7.2. Bancos de memria............................................................................ 20 1.3.7.3. Vantagens do PIC16F628A ............................................................... 20 (2) Comear com os PICs.......................................................................................... 22 2.1. A arquitectura PICMicro.................................................................................. 23 2.2. Perifricos ........................................................................................................ 25 (3) Famlia 16F6xxA................................................................................................... 26 3.1. A arquitectura interna ...................................................................................... 27 3.2. Organizao da memria ................................................................................. 27 3.2.1. Memria de programa............................................................................... 27 3.2.2. Memria de dados..................................................................................... 29 3.2.2.1. Memria de uso geral RAM ........................................................... 32 3.2.2.2. Registos com funes especiais ......................................................... 32 3.2.2.2.1. Registo STATUS ........................................................................ 35 3.2.2.2.2. Registo OPTION......................................................................... 37 3.2.2.2.3. Registo INTCON ........................................................................ 38
-1-
3.2.2.2.4. Registo PIE1 ............................................................................... 39 3.2.2.2.5. Registo PIR1 ............................................................................... 40 3.2.2.2.6. Registo PCON............................................................................. 41 3.3. Contador de programa...................................................................................... 41 3.4. Stack ................................................................................................................. 43 3.5. Modos de endereamento ................................................................................ 45 3.5.1 Inerente ...................................................................................................... 45 3.5.2. Registo Directo ......................................................................................... 45 (4) Assembler PIC16................................................................................................... 48 4.1. Definies de assembler PIC16 ....................................................................... 49 4.1.1. Movimento de dados................................................................................. 51 4.1.2. Modificao do contedo de registos ....................................................... 52 4.1.3. Controlo do fluxo de programa................................................................. 52 4.1.4. Nenhuma operao.................................................................................... 53 (5) MPLab IDE da Microchip..................................................................................... 55 5.1. Projecto em MPLab ......................................................................................... 56 5.2. Compilao do cdigo fonte ............................................................................ 59 5.3. Simulador ( Debugger ) ................................................................................... 60 5.4. Programao do circuito-integrado.................................................................. 61 (6) Funes e registos internos ................................................................................... 62 6.1. Temporizadores e divisores temporais............................................................. 63 6.1.1. Timer 0...................................................................................................... 63 6.1.2. Divisores ....................................................................................................... 64 6.1.3. Timer 1.......................................................................................................... 65 6.1.4. Timer1 em modo de Temporizador............................................................... 67 6.1.5. Timer1 em modo de Contador ...................................................................... 67 6.1.6. Timer2 ........................................................................................................... 68 6.2. Mdulo de captura/comparadores/PWM ......................................................... 71 6.2.1. Mdulo de Captura ................................................................................... 72 6.2.2. Mdulo de Comparao............................................................................ 73 6.2.3. Mdulo de PWM....................................................................................... 78 6.2.3.1. Duty Cycle do PWM.......................................................................... 79 6.3. Mdulo de comunicaes USART .................................................................. 82 6.3.1. USART em modo assncrono ................................................................... 88 -2 2005 Primetec Engenharia de Sistemas, Lda.
6.4. Memria de dados EEPROM........................................................................... 91 6.4.1. Ler a EEPROM ......................................................................................... 92 6.4.2. Escrever na EEPROM............................................................................... 92 (7) Funes especiais .................................................................................................. 93 7.1. Bits de configurao ........................................................................................ 94 7.2. Configuraes do Oscilador............................................................................. 95 7.2.1. Oscilador a Cristal/Ressoador................................................................... 96 7.2.2. Entrada de relgio externo ........................................................................ 96 7.2.3. Oscilador RC - verses 16F6xxA ............................................................ 97 7.2.4. Oscilador ER - verses 16F62x ............................................................... 97 7.2.5. Modo de Dupla Velocidade de oscilador.................................................. 98 7.3. Reset................................................................................................................. 98 7.4. Interrupes.................................................................................................... 100 7.5. Temporizador Watchdog - WDT ................................................................... 101 7.6. Modo SLEEP Power Down ........................................................................ 102 7.6.1. Acordar do modo SLEEP........................................................................ 102 (8) Utilizao das portas ........................................................................................... 103 8.1. Direco das portas ........................................................................................ 104 8.2. Escrita/leitura das portas ................................................................................ 104 8.3. FLAGS........................................................................................................... 105 8.4. Transferncias de dados................................................................................. 105 (9) Comparao, manipulao de bits e sequncias.................................................. 107 9.1. Comparaes.................................................................................................. 108 9.2. Manipulao de bits usando instrues de manipulao de bit ..................... 110 9.2.1. BIT Set/Clear .......................................................................................... 110 9.2.2. Teste de BIT............................................................................................ 110 9.3. Manipulao de bits, usando instrues lgicas ............................................ 110 9.3.1. Mudar bit especfico para 1.................................................................. 111 9.3.2. Mudar bit especfico para 0.................................................................. 111 9.3.3. Mudar bit especfico para o seu complemento ....................................... 111 9.3.4. Comparao testa para byte especfico ................................................ 111 9.3.5. Testa para 0 .......................................................................................... 111 9.4. Sequncias...................................................................................................... 112 (10) Tabelas .............................................................................................................. 113 -3 2005 Primetec Engenharia de Sistemas, Lda.
(11) Interrupes....................................................................................................... 115 11.1. Interrupo RB0/INT ................................................................................... 116 11.2. Interrupo TMR0 ....................................................................................... 117 11.3. Interrupo PORTB ..................................................................................... 117 11.4. GIE Bit de activao geral de interrupes............................................... 117 11.5. Gravao de valores de registos, quando das interrupes.......................... 118 11.6. Atraso de interrupo................................................................................... 118
-4-
ndice de figuras
Fig. 1 - Transstor antigo................................................................................................9 Fig. 2 Vista interna do Intel 4004 ...............................................................................9 Fig. 3 Diagrama de acesso s memrias ...................................................................10 Fig. 4 Microcontrolador PIC 16F84A.......................................................................10 Fig. 5 Arquitectura do PIC 16F628A........................................................................11 Fig. 6 Encapsulamento do PIC da famlia 16F62x ...................................................12 Fig. 7 Arquitectura de um computador .....................................................................13 Fig. 8 Arquitectura Von Neumann............................................................................13 Fig. 9 Arquitectura Harvard......................................................................................14 Fig. 10 Microcontrolador da famlia 12Fxxx com core de 12 bits ...........................16 Fig. 11 Microcontrolador da famlia 16F6xxA com core de 14 bits ........................16 Fig. 12 Microcontrolador da famlia 17C4xA com core de 16 bits..........................17 Fig. 13 Microcontrolador da famlia 18Fxx2 com core de 16 bits melhorado .........18 Fig. 14 Registos ........................................................................................................23 Fig. 15 - Opcode ..........................................................................................................24 Fig. 16 Exemplo de Pipelining .................................................................................24 Fig. 17 Oscilador.......................................................................................................24 Fig. 18 - Mapa da memria de Programa e da Stack ...................................................28 Fig. 19 - Distribuio da RAM pelos Bancos de memoria ..........................................29 Fig. 20 - Acesso aos Bancos de Memria....................................................................29 Fig. 21 Mapa de memria de dados do PIC16F628A...............................................30 Fig. 22 - Mapa da memria de Dados do PIC16F648A ..............................................31 Fig. 23 - Registos de Funo Especial, Banco 0..........................................................32 Fig. 24 - Registos de Funo Especial, Banco 1..........................................................33 Fig. 25 - Registos de Funo Especial, Banco 2..........................................................34 Fig. 26 - Registos de Funo Especial, Banco 3..........................................................35 Fig. 27 Registo STATUS (endereo: 03h, 83h, 103h, 183h)....................................36 Fig. 28 - Registo OPTION (endereo: 81h, 181h).......................................................37 Fig. 29 - Registo INTCON (endereo: 0Bh, 8Bh, 10Bh, 181h) ..................................38 Fig. 30 - Registo PIE1 (endereo: 8Ch).......................................................................39 Fig. 31 - Registo PIR1 (endereo: 0Ch).......................................................................40
-5-
Fig. 32 - Registo PCON (endereo: 8Eh) ....................................................................41 Fig. 33 - Carregamento do Contador de programa em diferentes situaes ................43 Fig. 34 - Utilizao da Stack para guardar os endereos de retorno............................44 Fig. 35 - Comportamento da Stack quando de execuo de Subrotinas ......................45 Fig. 36 - Mapa de memria de armazenamento de dados............................................47 Fig. 37 Lista de configuraes do microcontrolador PIC16F628A ..........................50 Fig. 38 Lista de instrues Assembler.......................................................................54 Fig. 39 Criao de um novo projecto........................................................................56 Fig. 40 Janela de ficheiros agregados ao projecto ....................................................56 Fig. 41 Introduo do nome do ficheiro principal de cdigo fonte ..........................57 Fig. 42 Ficheiro principal adicionado ao projecto ....................................................58 Fig. 43 Escolha do micro-controlador ......................................................................58 Fig. 44 Janela de Bits de Configurao do microcontrolador 16F628A...................59 Fig. 45 Janela de Output da compilao ..................................................................60 Fig. 46 Janela de observao de variveis ................................................................60 Fig. 47 Janela do Simulator Trace ............................................................................61 Fig. 48 Mdulo Timer 0 ............................................................................................63 Fig. 49 Tabela de valores e correspondncias do prescaler .....................................64 Fig. 50 - Programao do valor do divisor (prescaler)................................................64 Fig. 51 Registos associados ao mdulo Timer0 ........................................................65 Fig. 52 Mdulo Timer1.............................................................................................65 Fig. 53 Registo TCON1 do mdulo Timer1 .............................................................66 Fig. 54 Utilizao do Timer1 em modo de temporizador .........................................67 Fig. 55 Registos associados ao mdulo Timer1 ........................................................68 Fig. 56 Mdulo Timer2 .............................................................................................68 Fig. 57 Registos associados ao mdulo Timer2 ........................................................69 Fig. 58 - Registo CCP1 de temporizadores..................................................................71 Fig. 59 Registo CCP1CON .......................................................................................71 Fig. 60 Modo de Captura ..........................................................................................72 Fig. 61 Registo CMCON ..........................................................................................73 Fig. 62 Modos de operao do mdulo de comparao............................................74 Fig. 63 Esquema de ligao de circuitos externos ao mdulo de comparao .........76 Fig. 64 Registos associados ao mdulo de comparao ...........................................76 Fig. 65 Diagrama de blocos do mdulo comparador................................................77 Fig. 66 Registos associados aos mdulos de captura/comparao e Timer1 ............77
-6-
Fig. 67 Esquema de blocos do mdulo de PWM......................................................78 Fig. 68 Forma de onde de sada do gerador PWM ....................................................79 Fig. 69 Registos associados ao mdulo de PWM e Timer2 .....................................81 Fig. 70 Registo TXSTA ............................................................................................83 Fig. 71 Registo RCSTA ............................................................................................84 Fig. 72 Clculo do valor SPBRG..............................................................................85 Fig. 73 Valores de SPBRG possveis, para diferentes baud rates, em modo sncrono ..........................................................................................................................86 Fig. 74 - Valores de SPBRG possveis, para diferentes baud rates, em modo assncrono ........................................................................................................87 Fig. 75 Mdulo de emisso da USART ....................................................................88 Fig. 76 Mdulo de recepo da USART...................................................................89 Fig. 77 Registos associados ao mdulo de comunicaes USART..........................91 Fig. 78 Registo EEDATA .........................................................................................91 Fig. 79 Lista de Bits de configurao do microcontrolador PIC16F628A ...............94 Fig. 80 - Registo de Configurao ...............................................................................95 Fig. 81 Oscilador a cristal .........................................................................................96 Fig. 82 Oscilador por relgio externo .......................................................................96 Fig. 83 Oscilador com malha Resistncia/condensador ...........................................97 Fig. 84 Oscilador interno ..........................................................................................97 Fig. 85 Diagrama de blocos simplificado dos circuitos de reset internos.................99 Fig. 86 Bits de estado e seu significado....................................................................99 Fig. 87 Registos associados ao Reset......................................................................100 Fig. 88 Diagrama de blocos do temporizador Watchdog ........................................101 Fig. 89 Registos associados ao temporizador Watchdog ........................................101 Fig. 90 - Inicializao da porta A...............................................................................104 Fig. 91 Exemplo de flags ........................................................................................105 Fig. 92 - Sequncia com RLF e RRF.........................................................................112 Fig. 93 Lgica dos circuitos de interrupes ..........................................................116 Fig. 94 Registos associados s interrupes ...........................................................117
-7-
Captulo 1
(1) Histria dos Microcontroladores
-8-
1.1. Histria dos Microcontroladores Muitas coisas houve j, s quais as pessoas chamaram computadores. Por isso mesmo, no existe uma definio concreta para o que de facto um computador. Os computadores tm, desde o seu aparecimento, ajudado o homem, na resoluo de operaes matemticas. Apesar da histria nos contar e mostrar inmeros dispositivos de computao matemtica, baseados em processos puramente mecnicos, hoje em dia as pessoas pensam em computadores, como dispositivos electrnicos. Um computador pode definir-se como uma mquina que aceita dados, excuta operaes lgicas e devolve resultados. Esta da definio vlida para qualquer dispositivo que funcione mediante um programa gravado em memria. Por volta de 1940, foi desenvolvido em Inglaterra o Colossus. Uma poderosa mquina que seria capaz de descodificar a cifra (Enigma) utilizada pelas tropas alems. Esta cifra era produzida por uma mquina de escrever electromecnica, que estava ligada a um computador composto por cerca de 1500 vlvulas. A base de codificao era assente em algoritmos de estatstica. S em 1950 que os computadores ficaram disponveis para aplicaes comerciais. Exemplo disso foi o Manchester Mk I (desenvolvido na universidade de Manchester). Estes computadores eram enormes, ocupando a superfcie de um edifcio por completo. As operaes executadas eram muito especficas e, por isso mesmo, associadas directamente ao hardware desenvolvido. Os programas tinham entre 100 a 1000 operaes. Em 1956, a inveno do transstor por John Bardeen, William Shockley, e Walter Brattain, valeu-lhes a conquista do prmio Nobel Fsica. Com esta inveno foi dado um grande passo no sentido da sucessiva reduo do tamanho e eficincia dos dispositivos electrnicos semicondutores.
Em 1969 a Hewlett Packard j comercializava imensas calculadoras de bolso, enquanto que a Fairchild e a Motorola so nessa altura dois grandes fabricantes de semicondutores. Tambm neste ano, um grupo de engenheiros Japoneses recm chegados aos Estados Unidos da Amrica, traziam a premissa de construir circuitos para calculadoras, baseados nos seus projectos. Em 1971 a Intel lana o 4004, um processador de 4 bits com 2300 transstores. J em Abril de 1972 a Intel lana o primeiro microcontrolador de 8 bits, com o nome de 8008. Tinha 16kb de memria e 45 instrues, com uma velocidade de 300000 operaes por segundo. -9-
Em 1976 a Intel apresenta ao mundo o microcontrolador de 8 bits, o MCS-48 e tambm o famoso microprocessador 8085. No mesmo ano a Zilog lana o famoso microprocessador Z80 que deu origem aos computadores ZX Spectrum. nesta altura que surge ento a distino entre microprocessador e microcontrolador. A diferena reside essencialmente no facto de um microcontrolador ter memria EEPROM e RAM internas.
Barramento de Endereamento
Memria
Barramento de Dados
Em 1980 a Intel lana o 8051, um microcontrolador que se tornou muito famoso. Actualmente existem imensos fabricantes, com solues de microcontroladores muito variadas, baseados nesta arquitectura. Mais tarde, no incio dos anos 90, fundada a Microchip que desenvolve o PIC (Peripheral Interface Controller). Tratava-se de conseguir um microcontrolador barato, pequeno e prtico. A grande vantagem do PIC era o seu baixo consumo energtico. O facto de no precisar de mais do que um oscilador RC externo ao microcontrolador, entre as outras caractersticas, levaram este microcontrolador ao sucesso a que hoje se assiste. Actualmente a Microchip tem vrias famlias de microcontroladores com diversas caractersticas.
A famlia mais utilizada por todo o mundo a famlia 16xxx com o popular 16F84. Um microcontrolador que tem sido utilizado nas mais diversas aplicaes electrnicas. - 10 2005 Primetec Engenharia de Sistemas, Lda.
Os PICs tm uma arquitectura de 8 bits, com memria FLASH e EEPROM internas, porta de I/O, mdulos de comunicao com o exterior, como mostra a seguinte figura:
Fig. 5 Arquitectura do PIC 16F628A O PIC tem diversos temporizadores para contagem temporal e interrupes internas e externas que permitem interromper a execuo do programa principal, quando um qualquer evento ocorre, com carcter prioritrio. A sua arquitectura de 35 instrues Assembler permite uma rpida aprendizagem, e tem-se revelado bastante adequada maioria das aplicaes para as quais, esta famlia de microcontroladores foi desenhada. A figura seguinte mostra como actualmente constitudo uma cpsula de um microcontrolador PIC, neste caso, qualquer um da famlia 16F62x.
- 11 -
- 12 -
1.2. Arquitectura de um microcontrolador A arquitectura da maioria dos computadores e microprocessadores da actualidade, que foi desenvolvida por Von Neumann, revolucionou a computao de dados, reconhecendo que o programa podia ser armazenado a par com os dados. Este mtodo oferece uma grande flexibilidade pois, para alterar o programa, basta carregar a rea de memria com os valores respectivos.
Entradas Sadas Armazenamento auxiliar
Entradas
Memria
Essencialmente, este tipo de arquitectura engloba um CPU1, memria e um barramento onde ambos vo ligar. Como o CPU dever poder comunicar com o exterior, interfaces de entrada e sada esto, tambm, ligados neste barramento.
Entradas
Sadas
Unidade Central de Processamento - A CPU consiste na ALU2, em conjunto com a lgica digital de controlo. As instrues do programa so puxadas da memria,
1 2
Central Processing Unit - Unidade Central de Processamento Arithmetic Logic Unit - Unidade Lgica e Aritmtica
- 13 -
descodificadas e executadas. Dados resultantes destas operaes, so, tambm, acedidos da mesma memria. Memria - A memria contm o programa a ser executado pelo CPU, e o mesmo vulgarmente conhecido por Software. Esta memria, tambm, contm os dados processados pelo programa. Interfaces - Para ser de algum uso, o computador dever poder interagir com o ambiente circundante. Qualquer tipo de dispositivo fsico poder ser controlado, para alm do teclado e monitor. Barramento - BUS - Todos os elementos de uma arquitectura Von Neumann esto interligados pelo BUS. Tendo o CPU como controlador principal de todo os sistema, toda a informao circula neste BUS. Podendo ser eficiente, apenas uma operao poder ocorrer de cada vez. Este fenmeno conhecido por Von Neumann bottleneck, ou por Estrangulamento de Von Neumann. A arquitectura Harvard, uma adaptao da Von Neumann, separando a memria de programa, da de dados. A figura mostra dois BUS distintos: um transportando o programa, e outro transportando os dados. Como tal, no existem interaco entre ambos.
Memria Dados
Entradas
Sadas
Memria Cdigo de Programa
- 14 -
1.3. Caractersticas dos microcontroladores PIC Os microcontroladores PIC esto disponveis em muitos e variados modelos e, a princpio, a quantidade disponvel pode parecer bastante confusa. Mas existe uma certa lgica nesta escolha pois, o mesmo CPU est disponvel com diversas opes internas diferentes.
1.3.1. Famlias dos microcontroladores PIC A Microchip divide os PICs em famlias, s quais chama Cores. Estas diferentes famlias representam mudanas significativas na arquitectura interna do PIC, e o lanamento no mercado foi cronolgico, assim como aparece nesta lista:
Um pouco confuso a princpio mas, o nmero de bits no se refere ao barramento. O barramento sempre de 8 bits, que o nmero de bits que uma posio de memria pode armazenar. Refere-se, sim, ao tamanho da memria de programa, onde cada instruo pode ter 12, 14 ou 16 bits de tamanho. Quanto maior o nmero de bits, maior a memria enderevel.
Core de 12 bits - PIC12x Core de 14 bits - PIC16x Core de 16 bits - PIC17x Core de 16 bit avanado - PIC18x
1.3.2. Core de 12 bits Os chips com core de 12 bits, foram os primeiros a ser lanados no mercado e so, provavelmente, os mais populares. Podem enderear 1Kbyte de memria de programa, e disponibilizam um mximo de 128 bytes de RAM. Este tipo de arquitectura suporta 35 instrues de programa, alm de, tambm, estarem disponveis em encapsulamentos de 8 pinos. Poder parecer limitativo um chip com to poucos pinos mas, para a maioria das aplicaes em que o mesmo proposto, a sua versatilidade, e o seu baixo preo, tornaram-no muito popular. A maioria das famlias de 12 bits foi apresentada com
- 15 -
memria OTP 3 e EPROM 4 apagvel por UV 5 . Este tipo de memrias tornou esta famlia pouco popular entre os amadores e hobistas. S recentemente a Microchip relanou para o mercado estas famlias com memria FLASH6, que possibilitam uma versatilidade quase imensurvel.
1.3.3. Core de 14 bits Os cores de 14 bits so os mais populares na indstria e entre os hobistas, no sendo to limitativos como a famlia de 12 bits. Podem enderear 8Kbyte de memria de programa, e disponibilizam at 368 bytes de RAM. Suportam as mesmas instrues que a famlia de 12 bits, mas algumas instrues podem enderear mais memria. Esto disponveis em encapsulamentos de 14, 18, 28 e 44 pinos, bem como em variadssimas verses de montagem em superfcie.
3 4
One Time Programable - Programvel Apenas Uma Vez Erasable Programable Read Only Memory - Memria Programvel e Apagvel 5 Ultra Violeta 6 Flash Erasable Programmable Read-Only Memory - EPROM Flash
- 16 -
1.3.4. Core de 16 bits A quase inexistncia de suporte, os preos elevados, e o aparecimento de novas famlias mais poderosas, fez com que esta famlia dos PIC17 se tornasse uma famlia pouco popular e cada vez mais em desuso. Podem enderear 32Kbyte de memria de programa, e disponibilizam at 902 bytes de RAM. A lista de instrues sofre alguns acrescentos, e partilhada com as famlias anteriores. S existem encapsulamentos disponveis acima de 40 pinos, e apenas 8 chips diferentes nesta famlia.
1.3.5. Core de 16 bits avanado As primeiras famlias de PICs no estavam desenhadas para suportar compiladores de linguagens modernas, tipo C. Apesar de haver uma boa quantidade de compiladores de C no mercado, estes so um pouco grosseiros no tratamento da linguagem e, no entanto, podendo parecer-se com esta linguagem, no suportam a maioria das funes C. A pequena quantidade de memria de cada PIC, e a curta Stack7, fez com que o uso de compiladores C se tornasse difcil. As famlias de 12 e 14 bits tm uma Stack com 8 nveis, enquanto que as de 16 bits j possuem Stack de 16 nveis. A falta de instrues que possam manipular a
7
Pilha de memria
- 17 -
Stack, leva o utilizador a implementar a Stack em software, aliada falta de RAM, que tornava o processo muito difcil, e a performance diminuda. A famlia de 16 bits avanada, implementa uma completa diferente arquitectura, focada no uso de compiladores, podendo suportar 64Kbytes de memria de programa e 3Kbytes de RAM. O nmero de instrues j ascende a um total de 75, e esto disponveis em variadssimos encapsulamentos acima dos 18 pinos. A disponibilidade de compiladores, a melhor lista de instrues e o seu baixo custo, fez com que esta famlia se popularizasse to depressa na indstria, bem como no mercado amador.
1.3.6. Tipos de Memria de programa A memria de programa dos PICs, implementada em uma de vrias tecnologias existentes. Estas so distinguidas por trs letras, no modelo do PIC: C, E ou F.
1.3.6.1. OTP Existe um grande nmero de modelos PIC que so implementados com memria ROM, que s pode ser gravada uma vez. Esta caracterstica faz com que estes PICs sejam muito populares na indstria devido ao seu baixo custo em largas quantidades. Contudo, o mercado amador tende a no usar estes PICs, devido necessidade de reprogramar a memria, medida que se corrige o software. Os PICs so identificados com a letra C, seguindo-se o nmero de famlia. - 18 2005 Primetec Engenharia de Sistemas, Lda.
1.3.6.2. EPROM Estes modelos foram introduzidos pois, a possibilidade de apagamento por UV, faz com que o PIC possa ser reprogramado as vezes necessrias, at finalizao do software. Distinguem-se pela letra C, e algumas que so apagveis electricamente, esto marcadas pela letra CE.
1.3.6.3. FLASH Trata-se de uma memria no voltil, que pode ser apagada e escrita electricamente. Todos os PICs mais recentes, incluem este tipo de memria, que se distingue pela letra F; tais como os 16F84 ou 16F628A. A vantagem da FLASH sobre as EEPROM, que com a primeira, o utilizador pode trocar tempo de escrita, por tempo de leitura. O tempo de escrita foi aumentado, havendo uma diminuio no tempo de leitura, trazendo bvias melhorias na execuo do programa. O PrimeProg PIC Programmer8 est habilitado a trabalhar com os PICs mais recentes, tambm como com os mais antigos. O software que acompanha este programador tem actualizaes constantes, e gratuitas, podendo ser usado para todos os dispositivos com que o PrimeProg PIC Programmer trabalha.
1.3.7. Vantagens do PIC16F628A sobre o PIC16F84 Embora o PIC16F84 possa parecer a melhor escolha para o incio da aprendizagem neste campo, as vrias vantagens que o PIC16F628A oferece, faz com que possamos deixar o PIC16F84 de lado. A simplicidade do uso entre o PIC16F628A e o PIC16F84, no mais do que um uso e leitura atenta dos manuais e folhas de dados do microcontrolador. Sendo o utilizador inexperiente no uso de microcontroladores, e com a "aproximao" que este manual tem ao tema, no haver qualquer dificuldade em inteirar-se da arquitectura do PIC16F628A.
- 19 -
1.3.7.1. Pinos multiuso No PIC16F628A, cada pino tem trs ou quatro funes acessveis. Apesar de parecer confusa a escolha, e a configurao, dos registos internos do microcontrolador, h que ter em ateno que o PIC tem os pinos pr definidos como Entradas e todos os perifricos desligados. Basta configur-los para Entradas/Sadas, e us-los normalmente. Quaisquer das funes especiais adicionais, disponveis no pino, s sero activadas atravs de configurao interna. Apesar de haver informao contraditria que diz que so necessrias mudanas elctricas no circuito, tal no verdade pois as funes adicionais de cada pino, so seleccionveis internamente, atravs da configurao dos registos.
1.3.7.2. Bancos de memria Devido a um aumento da memria de dados, a mesma foi distribuda pelos bancos disponveis no PIC, que tambm foram duplicados de maneira a acomodar os registos de cada perifrico disponvel. Sendo assim e, comparando os bancos dos dois PICs, pode observar-se que um programa escrito para o PIC16F84 9 pode ser facilmente portado para o PIC16F628A sem quaisquer alteraes significativas. Mais frente falar-se- nos cuidados a ter aquando da inicializao do PIC.
1.3.7.3. Vantagens do PIC16F628A Maior Memria Aumento de memria de programa de 1K a 2K Aumento de memria de dados de 68 para 224 bytes Aumento de memria EEPROM de 64 para 128 bytes Mais Hardware Interno USART por hardware Trs temporizadores, contra um do PIC16F84 PWM por hardware Captura, e comparao, por hardware Duplo comparador interno (AMPOPS) Tenso de referncia programvel Maior funcionalidade Oscilador interno de 4MHz/37kHz, para aplicaes no crticas Detector de abaixamento de tenso Passvel de programao em baixa tenso
- 20 -
Possvel de usar trs pinos adicionais, convertendo o pino de Reset, e os pinos do Oscilador, nos chips de 18 pinos
Compatibilidade entre Hardware/Software O PIC16F628A tem o mesmo pinout que o PIC16F84 O PIC16F628A corre software escrito para o PIC16F84, apenas com ligeiras modificaes O PIC16F628A pode ser programado com o mesmo programador do PIC16F84, mas o software de programao dever ser actualizado para suportar o PIC16F628A
- 21 -
Captulo 2
(2) Comear com os PICs
- 22 -
2.1. A arquitectura PICMicro A arquitectura dos microcontroladores PICMicro , tal como foi dito no captulo 1, uma arquitectura Harvard. Isto significa que a unidade central de processamento dispe de duas memrias distintas, uma contendo o cdigo de programa, carregado previamente no microcontrolador, e uma segunda memria de uso especfico onde esto contidos os registos internos, necessrios ao funcionamento do microcontrolador, e tambm uma rea reservada ao uso genrico do programa que est a correr (RAM). A famlia PIC16 tem 8bits de tamanho para toda a informao que circula internamente no barramento de dados. O barramento de endereamento da memria de programa tem um tamanho de 14bits, que permitem enderear 16384 instrues de programa. Esta famlia, dado a sua relao entre entradas/sadas e preo, fez dela a mais atractiva para os hobistas. O conceito de registo importante. A RAM um banco de memria que pode ser utilizado de forma genrica, bem como para funes especiais. Alm disso, as portas de entrada e sada so tambm registos. Desta forma, todas as instrues podem manipular qualquer registo, o que permite ao programador utilizar o microcontrolador de forma fcil, rpida e directa.
Memria de Dados
ALU
Registo W RAM
Fig. 14 Registos
A stack de 8 nveis permite guardar o valor do program counter, aquando de chamadas a subrotinas. Terminado o processo, os valores originais so recuperados, permitindo o seguimento do programa sem quaisquer problemas. Como a arquitectura PIC16 do tipo RISC (Reduced Instruction Set Code), a maioria demora apenas um ciclo de relgio. Esta particularidade permite que o utilizador possa contar de forma rpida o tempo que determinada funo demora a executar. Os microcontroladores PIC16 obtm resultados numa relao de 2:1 na compresso do cdigo de programa e 4:1 em velocidade, em relao a outro microcontroladores do mesmo tipo. Cada instruo de programa tem um determinado cdigo (OPCODE). O microcontrolador utiliza uma WORD para codificar as instrues. Dos 14 bits, os 8 bits
- 23 -
de menor peso servem para guardar informao de utilizao directa (Literal Instructions). Os restantes bits guardam o cdigo da instruo a executar.
Fig. 15 - Opcode
O sistema de pipeline, tambm presente nos PIC16, permite colocar os dados da instruo seguinte nos registos certos, enquanto a instruo actual executada. Este mtodo permite que se cumpra cada instruo em apenas um ciclo de relgio. No entanto, as instrues de saltos no Program Counter, precisam de mais um ciclo, para que o salto no endereo de destino do Program Counter possa ser executado.
A frequncia de relgio que injectada no microcontrolador chamada de Fosc. Essa frequncia dividida por 4, que d origem ao tempo de instruo. Por exemplo, se o microcontrolador tiver ligado aos seus terminais um cristal de 4 MHz, que corresponde a um perodo de 250ns, ento o tempo de instruo ser de 1s, que significa uma frequncia de 1 MHz.
Fig. 17 Oscilador
A memria do PIC divide-se em dois tipos: memria de programa (Program Memory) e memria de dados (RAM e EEPROM). A famlia PIC16 tem a memria
- 24 -
de programa organizada em pginas e a memria de dados organizada em bancos. Cada pgina de memria tem 2k words de tamanho. O tamanho de cada banco de memria RAM varia entre dispositivos. Na famlia PIC16 s possvel enderear um mximo de 128 bytes, pelo que o uso de bancos, torna possvel a utilizao de uma quantidade de RAM maior.
2.2. Perifricos A Microchip disponibiliza inmeros modelos na famlia PIC16. Os perifricos presentes em cada um deles, variam bastante, segundo diversos factores. Um projectista de electrnica deve fazer escolher de forma correcta, qual o modelo que mais se adequa ao seu projecto, para que este possa cumprir as funes para as quais foi escolhido. Os perifricos que podem ser encontrados dentro de um PIC16 so ento:
Temporizadores: 1, 2 ou mais consoante o modelo RS232 (USART): Porta Srie que permite os modos sncronos e assncronos PSP: Porta Paralela de 8bits EEPROM: Memria no voltil adicional para registo de dados Comparadores para sinais externos PWM: Modulao por largura de impulsos SPI (Serial Peripheral Interface): Porta de dados srie I2C: Porta de dados srie ADC: Conversores analgico/digital ICSP (In Circuit Serial Programming): Programao srie directa no circuito Watchdog Timer: Temporizador de guarda para o microcontrolador USB (Universal Serial Bus) CAN (Controller Area Network) LIN (Local Interconnect Network) LCD (Liquid Cristal Display): Controlo de ecrs de cristais lquidos rfPIC: Transmissor de ASK e FSK Controlador de motores DC BOR (Brown-Out RESET): Detector de limites inferiores de tenso de alimentao
Como no possvel incluir todos os perifricos num PIC, o projectista deve consultar os catlogos da Microchip, de modo a descobrir qual o modelo que inclui no seu interior, todos (se possvel) os perifricos que necessita para o seu projecto. Apesar da escolha poder parecer complicada, para a grande maioria dos projectos, os modelos que existem no mercado, adequam-se perfeitamente. Raras so as ocasies em que no se encontra um modelo medida das necessidades
- 25 -
Captulo 3
(3) Famlia 16F6xxA
- 26 -
3.1. A arquitectura interna A elevada performance da famlia PIC16F6xxA, pode ser atribuda a um sem nmero de razes caractersticas de microprocessadores RISC10. Esta famlia usa uma arquitectura Harvard, onde programa e dados so acedidos de memrias distintas. A separao destas duas memrias, possibilita que as instrues tenham tamanho diferente de 8 bits. As instrues tm 14 bits de tamanho, e executam-se num nico ciclo de relgio. Igualmente, esta famlia pode enderear directa, ou indirectamente, os seus registos e memria de programa. Todos os registos especiais, incluindo o contador de programa, esto mapeados na memria de dados. Possui uma ALU de trabalho geral de 8 bits, permitindo funes aritmticas e booleanas, e um registo de trabalho11. A ALU de 8 bits, permite fazer adio, subtraco, rotao e operaes lgicas, sendo as operaes aritmticas realizadas por complemento a dois. Nas instrues de dois operandos, um deles o registo de trabalho, e o outro um registo da memria de dados, ou uma constante directa. Em instrues de um operando, este o registo de trabalho ou o registo da memria de dados. O registo de trabalho um registo de 8 bits usado para operaes com a ALU, e no um registo enderevel. Dependendo da instruo executada, a ALU poder afectar os valores da Carry (C), Digit Carry (DC), e do Zero (Z) no registo de STATUS. Um diagrama simplificado da arquitectura interna do PIC16F6xxA, mostrada na figura 5, captulo 1. Dois tipos de memria de dados esto disponveis nesta famlia de microcontroladores. EEPROM no-voltil 12 usada para guardar dados por um largo perodo de tempo, tal como para guardar valores de calibrao do aparelho, tabelas de calibrao ou mesmo actualizaes feitas no local onde o aparelho est instalado. A outra memria de dados, RAM, temporariamente usada para guardar dados durante o funcionamento normal do micro-controlador. Nesta, os dados so perdidos quando se corta a energia. 3.2. Organizao da memria 3.2.1. Memria de programa A famlia PIC16F6xxA tem um contador de programa de 13 bits, e capaz de enderear 8Kbytes x 14 de memria de programa. Apenas os primeiros 1Kbyte x 14 (0000h - 03FFh) esto fisicamente implementadas no PIC16F627A, 2Kbyte x 14 (0000h - 07FFh) para o PIC16F628A e 4Kbyte x 14 (0000h - 0FFFh) para o PIC16F648A. O acesso a uma localizao acima destas regies, vai causar um retorno ao incio da memria do programa. O contedo de qualquer registo, desta memria, pode ser escrito, ou lido, para o registo de trabalho W. O endereo vector de RESET o 0000h, e o de Interrupo o 0004h.
10
Reduced Instruction Set Computer Identificado por W 12 Os dados permanecem, quando a energia retirada
11
- 27 -
- 28 -
3.2.2. Memria de dados A memria de dados, tabelas das figuras 21 (Mapa memoria Dados PIC16F627A/628A) e 21 (Mapa memoria Dados PIC16F648A), est distribuda em quatro bancos, que tambm contm os registos de uso geral 13 , e os registos com funes especiais14. Os SFRs esto presentes nas primeiras 32 posies de memria de cada Banco. Os GPRs, esto implementados como RAM esttica de uso geral. A tabela da figura 19 (Distribuio da RAM pelos Bancos de memoria) mostra os registos de uso geral disponveis em cada Banco. Banco 0 Banco 1 Banco 2 Banco 3 PIC16F627A/628A 20h - 7Fh A0h - FFh 120h - 14Fh, 170h - 17Fh 1F0h - 1FFh PIC16F648A 20h - 7Fh A0h - FFh 120h - 14Fh 1F0h - 1FFh
Endereos F0 - FFh, 170h - 17Fh e 1F0h - 1FFh esto implementados como RAM comum, e esto mapeados nos endereos 70h - 7Fh. A tabela da figura seguinte mostra como aceder aos registos de uso geral, via bits de registo de STATUS, RP1 e RP0. Banco 0 Banco 1 Banco 2 Banco 3 RP1 0 0 1 1 Fig. 20 - Acesso aos Bancos de Memria RP0 0 1 0 1
13 14
- 29 -
- 30 -
- 31 -
3.2.2.1. Memria de uso geral RAM A RAM est organizada em 224 x 8 bytes nos PIC16F627A/628A, e 256 x 8 bytes no PIC16F648A. Cada um destes pode ser acedido, directa ou indirectamente, atravs do Registo de Seleco de Registo FSR15.
3.2.2.2. Registos com funes especiais Os SFRs so registos usados pelo CPU e pelos perifricos, para informaes de estado e para controlar a operao destes. Estes registos so RAM esttica.
15
- 32 -
- 33 -
- 34 -
3.2.2.2.1. Registo STATUS O registo de STATUS contm o estado aritmtico da ALU, o estado do Reset, e os bits de escolha de banco de RAM da memria de dados. Este registo comporta-se como um registo normal, isto , pode ser escrito por qualquer instruo. Se o registo de STATUS for destino de instruo que afecta os bits Z, C ou DC, ento, a escrita para estes trs bits desactivada. Estes bits so activados/desactivados, de acordo com a lgica do chip. Por conseguinte, o resultado de uma instruo com o STATUS como destino, pode ser diferente do esperado.
- 35 -
Como exemplo, a instruo CLRF STATUS limpar os trs bits superiores, e activar o bit Z. Isto deixar o STATUS como 000uu1uu, onde u significa, sem alterao. Assim, recomendado que apenas as instrues BCF, BSF, SWAPF e MOVWF sejam usadas para alterar o registo STATUS, devido a estas instrues no alterarem nenhum bit do mesmo.
- 36 -
3.2.2.2.2. Registo OPTION O registo OPTION passvel de escrita/leitura, que contm os bits de controlo do divisor do TMR0/WDT, interrupo externa RB0/INT, e os pull-ups da porta B.
- 37 -
3.2.2.2.3. Registo INTCON O registo INTCON passvel de escrita/leitura, e contm os bits16 de controlo e monitorizao para algumas fontes de interrupo, excepto do comparador. Isto , so os bits que controlam a resposta do PIC, quando ocorrem interrupes. Os bits de Flag so activados quando ocorre uma interrupo, independentemente de os prprios bits de activao da interrupo estarem activados.
16
- 38 -
3.2.2.2.4. Registo PIE1 Este registo contm bits que activam/desactivam as interrupes. Isto , informam o CPU da resposta que este deve ter, quando ocorre uma interrupo, que foi habilitada por esse mesmo bit.
- 39 -
3.2.2.2.5. Registo PIR1 Este registo contm Flags de interrupes. Os bits de Flag so activados quando ocorre uma interrupo, independentemente do estado dos bits de activao da interrupo estarem activados, ou o do bit de activao geral, GIE (INTCON<7>). O software escrito pelo utilizador, dever ter em ateno que as Flags das interrupes devero ser limpas (desactivadas), antes de activar a interrupo respectiva.
- 40 -
3.2.2.2.6. Registo PCON Este registo contm Flags para distinguir entre um Reset de alimentao (Power-on), Reset externo MCLR', Reset por Watchdog, ou Reset de queda de tenso (Brown-out). neste registo, tambm, que se controla a dupla velocidade do oscilador interno INTOSC.
O BOR' desconhecido quando de RESET de POWER-ON. Dever ser activado e lido, via software, de cada vez que ocorre um RESET, para verificar se o BOR' foi limpo, indicando que ocorreu um RESET por Brown-Out17.
3.3. Contador de programa As instrues so, normalmente, gravadas sequencialmente na memria de programa, e o Contador de Programa18 um registo contador crescente, que tem o valor de actual instruo do programa. Este contador crescente , tambm, chamado de Ponteiro das Instrues. Como o PC est ligado memria de programa e ao barramento de dados do CPU, a ALU pode ser usada para manipular este registo e, romper com a ordem de
17 18
- 41 -
contagem sequencial do mesmo. Desta maneira, instrues GOTO e CALL podem ser utilizadas. O PC est localizado na memria de dados, registo 02h, e chamado de 19 PCL . Isto significa que pode ser acedido, e manipulado, pelo software, da mesma maneira que outro qualquer registo. Por exemplo, se o contedo do registo W for n, a instruo addwf 2, f vai escrever o PC com o seu valor original, adicionado do valor n. Esta uma instruo de Salto, disponvel nas instrues do PIC. Um GOTO computacional feito se se adicionar um offset20 ao PC (addwf PCL). Existe um problema neste exemplo, que acontece devido ao PC ser de 13 bits, e o registo 02h apenas contm os 8 bits menos significativos, PC[7..0]. Os 5 bits mais significativos, PC[12..8], esto contidos num registo que no directamente acessvel pelo utilizador. Na verdade, qualquer instruo que escreve directamente para o registo 02h, muda todos os 13 bits dos PC. No s os 8 bits provenientes da instruo addwf 2, f vo ser colocados no byte inferior do PC, mas os cinco bits menos significativos do registo 0Ah, chamado de PCLATH21, so automaticamente copiados para dentro do byte superior do PC. O registo PCLATH limpo de cada vez que ocorre um RESET, e uma instruo ADDWF como a do exemplo seguinte, vai resultar num endereo da primeira pgina de 256 bytes, da memria de programa, a no ser que o PCLATH tenha sido carregado com um valor diferente de 0. Sendo assim, necessrio cuidado quando da alterao do estado do PC desta maneira, especialmente se o resultado exceder o campo de 8 bits. Quando se faz uma leitura de tabela, usando o mtodo de GOTO computacional, dever haver o cuidado de fazer com que a mesma no ultrapasse a fronteira de memria do PCL22.
movlw 0x00 call tabela movlw 0x01 call tabela goto org $ 0x00fe ;carrega W com 0 ;chama a subrotina da tabela, para ; converter ;carrega W com 0 ;chama a subrotina da tabela, para ; converter ;endereco onde estah a TABELA ;adiciona W ao Program Counter - Contador ; de Programa ;caracter ASCII 'a'
tabela addwf pcl,f retlw retlw retlw retlw retlw 'a' 'e' 'i' 'o' 'u'
19 20
Program Counter Low byte positivo ou negativo 21 Program Counter LATch High byte 22 em blocos de 256 bytes
- 42 -
Instrues que, indirectamente, alterem o valor do PC, tais como GOTO, vo tambm usar parte do contedo do PCLATH quando actualizam o PC. Essas instrues tm um endereo de 11 bits, como parte do cdigo de instruo. Nesta situao, os bits PCLATH[4:3] so movidos para os bits correspondentes 11 e 12 do PC, para uma actualizao completa de 13 bits no mesmo.
3.4. Stack A famlia PIC com core de 14 bits tem uma Stack 23 de 13 bits, que exclusivamente usada para guardar endereos de retorno de subrotinas 24 . Esta estrutura, mostrada na figura 18, conhecida como Stack de Hardware. Esta Stack no pertence ao mapa de memria, por isso, o seu contedo no pode ser alterado. Associado a esta Stack, existe um contador de 3 bits, que aponta para o seguinte registo livre, da mesma. Este Ponteiro de Stack - SP25 no pode ser alterado por nenhuma instruo, mas automaticamente incrementado de cada vez que uma instruo CALL executada. CALL similar instruo GOTO, mas antes de o endereo de destino ser posto no PC, o valor actual do PC empurrado para a Stack. Este o endereo da instruo depois da instruo CALL, pois o PC j foi incrementado, e o PIC j est a ler a prxima instruo para o barramento, ao mesmo tempo que a instruo CALL executada ver figura 16 do captulo 2 (ciclos de relgio).
23 24
Pilha ou acumulador de endereos Os cores de 12 bits tm Stack de 11 bits, e os cores de 16 bits tm Stack de 16 nveis de profundidade 25 Stack Pointer
- 43 -
Na figura 34 a situao mostrada depois de uma chamada subrotina DELAY 100ms. A sequncia de execuo desta : 1. Empurra os 13 bits do PC, para o registo da Stack apontado pelo SP. Este endereo o da instruo a seguir CALL. 2. O SP incrementado. 3. O destino da subrotina DELAY 100ms, que o endereo de entrada na subrotina, apaga o valor original do PC. Na verdade, isto faz com que a execuo do programa salte para a subrotina. Aparte de empurrar o endereo de retorno para dentro da Stack, nos passos 1 e 2, o CALL comporta-se exactamente como um GOTO. Ento, o CALL necessita de dois ciclos de relgio, para executar a instruo, pois, o barramento tem de ser limpo, para remover a instruo seguinte que j est pronta a executar. O ponto de sada de uma subrotina, dever ser atravs da instruo RETURN. Isto inverte o processo de carregamento da Stack, feito pelo CALL, e move o endereo de retorno, que est na Stack, para o PC. A sequncia de execuo do RETURN ser a seguinte: 1. Decremento do SP. 2. Copia o endereo que est no registo de Stack, apontado pelo SP, para o PC.
- 44 -
3.5. Modos de endereamento Antes de se falar das instrues suportadas pelo PIC, devemos falar do conceito de Modo de Endereamento. A maioria das instrues actua directamente nos dados, que podem ser internos ao CPU ou na memria de dados. Ento, a localizao desses dados deve fazer parte da instruo. No seria suficiente escrever CLR 26 ? Mas limpar o qu? H diversas maneiras de especificar a localizao dos dados a trabalhar. Estas so conhecidas como Modos de Endereamento.
3.5.1 Inerente Das instrues listadas no Apndice 1 as CLRWDT, RETFIE, NOP, RETURN, e SLEEP no se referem a registo de dados na memria ou no W.
3.5.2. Registo Directo Neste modo, o endereo do registo de dados, tanto a origem como o destino, directamente especificado. Por exemplo:
clrf 20h ;Limpa o contedo do registo 20h
26
Clear - Limpar
- 45 -
ou ento:
incf 20h, w ;Pe o contedo do registo 20h, ; adiciona 1 e pe o resultado no
A caracterstica principal, deste modo de endereamento, o de que a localizao do operando fixa, como uma parte integral do programa, e no pode ser alterada durante a execuo. Especificar o seu endereo pode parecer a opo correcta, em algumas situaes esta tcnica extremamente desvantajosa.
- 46 -
- 47 -
Captulo 4
(4) Assembler PIC16
- 48 -
4.1. Definies de assembler PIC16 A linguagem assembler PIC16 tem 35 instrues divididas por tipos de operaes, que so elas: Movimento de dados Manipulao de registos Controlo de fluxo de programa Nenhuma operao Controlo do microcontrolador Operaes lgicas Operaes aritmticas
Num programa em Assembler, tal como numa qualquer linguagem de programao de alto nvel, existem vrias regras de sintaxe que tm de ser cumpridas. O Assembler , na verdade, a linguagem de programao do microcontrolador. Isto significa que existe uma ligao directa de cada instruo com a arquitectura interna do microcontrolador. Quando se inicia um programa, devem ser includos, em primeiro ligar, todos os ficheiros auxiliares onde constam funes necessrias ao funcionamento do programa principal. A directiva include serve para isso mesmo.
#include ou #include p16f628A.INC <p16f628A.INC> ;Se o ficheiro estiver na ; directoria pr-definida do ; MPLab ;Se o ficheiro estiver noutra
A directiva define serve para adicionar constantes ao programa. Esta funcionalidade que o assembler da Microchip nos d muito til para definir valores constantes que so utilizados vrias vezes durante todo o programa. O utilizador, em vez de escrever o valor, escreve o nome da constante. Assim, basta substituir no incio o valor uma vez, que o novo valor passa a vigorar em todo o programa.
#define #define #define #define #define #define #define #define #define #define #define #define JAN FEV MAR ABR MAI JUN JUL AGO SET OUT NOV DEZ 0x1F 0x1C 0x1F 0x1E 0x1F 0x1E 0x1F 0x1F 0x1E 0x1F 0x1E 0x1F ; ; ; ; ; ; ; ; ; ; ; ; O O O O O O O O O O O O ms ms ms ms ms ms ms ms ms ms ms ms de de de de de de de de de de de de Janeiro tem 31 dias Fevereiro tem 28 dias Maro tem 31 dias Abril tem 30 dias Maio tem 31 dias Junho tem 30 dias Julho tem 31 dias Agosto tem 31 dias Setembro tem 30 dias Outubro tem 31 dias Novembro tem 30 dias Dezembro tem 31 dias
- 49 -
A directiva __config serve para configurar os bits do microcontrolador. A palavra constituda por dois traos em baixo, seguida de config, sem espaos. As opes que se seguem, esto no ficheiro .INC tambm includo no programa.
__CONFIG _XT_OSC & _BODEN_OFF & _CP_OFF & _WDT_OFF
A directiva ORG serve para definir o endereo da memria de programa a partir do qual ficam registadas as instrues escritas desse ponto em diante.
ORG 0x0000 ;Endereo de arranque da memria de ;programa
A directiva EQU serve para definir variveis ou nomes de constantes. Para definir variveis, so necessrias duas coisas: nome da varivel e posio de memria que ir ocupar. - 50 2005 Primetec Engenharia de Sistemas, Lda.
0x20 TEMPO
;Varivel TEMPO que fica guardada na ;posio de memria 0x20 ;Carrega o valor 0x20 em W
TEMPO
A Directiva END obrigatria em todo e qualquer programa feito em Assembler. Esta directiva indica que terminou o cdigo do programa e deve ser colocada na linha imediatamente a seguir ltima instruo.
TEMPO equ ... movlw ... END 0x20 TEMPO ;Varivel TEMPO que fica guardada na ;posio de memria 0x20 ;Carrega o valor 0x20 em W
Para entender bem a mecnica das instrues de Assembler preciso perceber o tipo de parmetros que as constituem. As letras utilizadas nos parmetros so:
f - Registos d - Destino 0 - Registo W 1 - Registo normal k - Constante numrica k - Label b - Bit b - Binrio d - Decimal
4.1.1. Movimento de dados Estas instrues dizem respeito s operaes de transferncia de informao entre registos.
MOVLW MOVF MOVWF k f,d f
Carrega W com constante Copia contedo registo seleccionado para W ou f Copia contedo de W para registo seleccionado
- 51 -
4.1.2. Modificao do contedo de registos As instrues apresentadas na tabela seguinte permitem a alterao do contedo de registos. So operaes de incremento, decremento, manipulao de bits: set e clear, rotao.
CLRF CLRW COMF DECF INCF BCF BSF RLF RRF SWAPF f f,d f,d f,d f,b f,b f,d f,d f,d
Limpa registo seleccionado Limpa W Complementa registo seleccionado todos os 1's para 0, e todos os 0's para 1. Resultado em W ou f Decrementa registo. Resultado em W ou f Incrementa registo. Resultado em W ou f Limpa bit seleccionado, no registo seleccionado Activa bit seleccionado, no registo seleccionado Roda bits do registo seleccionado, uma posio para a esquerda, bits rodam pela Carry. Resultado em W ou f. Roda bits do registo seleccionado, uma posio para a direita, bits rodam pela Carry. Resultado em W ou f. Troca MSB e LSB do registo seleccionado. Resultado colocado em W ou f.
4.1.3. Controlo do fluxo de programa Estas instrues permitem tomar decises que interferem directamente no desenrolar do programa. Atravs de testes a bits com ou sem incrementos e decrementos, so tomadas as decises de salto de programa ou prosseguimento normal.
GOTO CALL RETURN RETLW RETFIE BTFSC BTFSS DECFSZ INCFSZ k k k f,b f,b f,d f,d
Vai para endereo ou label Chama subrotina Retorna de subrotina Retorna de subrotina, carrega W com constante Retorna de interrupo Testa bit especificado, no registo seleccionado, salta prxima instruo se bit testado for 0. Testa bit especificado, no registo seleccionado, salta prxima instruo se bit testado for 1. Decrementa registo, salta prxima instruo se registo for 0. Destino em W ou f Incrementa registo, salta prxima instruo se Registo for 0. Destino em W ou f
- 52 -
4.1.4. Nenhuma operao Esta a instruo que no faz nada. til em situaes onde o cumprimento de perodos temporais absolutamente fundamental.
NOP
4.1.5. Controlo de micro-controlador Estas instrues do ordens ao microcontrolador. possvel limpar o watchdog e o prescaler para impedir um reset, ou colocar o microcontrolador a dormir, para poupar energia.
CLRWDT SLEEP
Limpa temporizador watchdog, prescaler. Bits TO e PD do registo STATUS ficam a 1. Adormece o micro-controlador para reduzir consumo de energia. Acorda por Reset, timer de watchdog, ou estmulos externos.
AND do contedo de W com a constante. AND do contedo de W com o registo seleccionado OR do contedo de W com a constante OR do contedo de W com o registo seleccionado XOR do contedo de W com a constante XOR do contedo de W com o registo seleccionado
- 53 -
4.1.7. Operaes aritmticas Estas so as instrues que executam operaes aritmticas: somas e subtraces.
ADDWF ADDLW SUBLW SUBWF f,d k k f,d
Soma contedos de W e do registo seleccionado, resultado em W ou f Soma constante a W. Resultado em W Subtrai W da constante. Resultado em W Subtrai W ao registo seleccionado. Resultado em W ou f
A seguinte tabela mostra todos os comandos disponveis, a par com a sua descrio, nmero de ciclos de relgio, instrues em formato 14 bit, e bits do STATUS que so afectados aquando da sua execuo:
- 54 -
Captulo 5
(5) MPLab IDE da Microchip
- 55 -
O MPLab IDE da Microchip a ferramenta de desenvolvimento que o fabricante disponibiliza aos programadores. Este ambiente de desenvolvimento conta j com 6 geraes e muitos anos de experincias, aperfeioamentos, adio de novas tecnologias, que o tem mantido a par dos melhores IDE que existem, para inmeras linguagens de programao. Para criar um novo projecto no MPLab, abra o menu Project e carregue em New.... Vai aparecer uma janela como a que apresentada em seguida:
Fig. 39 Criao de um novo projecto Nesta janela introduza o nome do projecto que est a criar e escolha uma directoria para gravar todos os ficheiros relativos ao mesmo. Nesta altura, dever aparecer-lhe numa segunda janela, normalmente encostada ao canto superior esquerdo, toda a informao relativa aos ficheiros do projecto.
O ficheiro Display.mcp o ficheiro principal do projecto criado. Dentro deste, podero agora ser includos diversos ficheiros de source (cdigo fonte), header (cabealhos), object (objectos), library (bibliotecas) e linker scripts. O prximo passo ser agora abrir um novo ficheiro onde ser escrito o cdigo principal do programa. Para tal, abra o menu File e carregue em New. Uma nova janela vazia aparecer. Antes de comear a escrever cdigo, grave esta janela, mesmo vazia, de forma a escolher j o nome e tipo para o ficheiro. Como o ficheiro ser o principal, sugere-se o nome main.asm.
Depois de gravado, j temos o ficheiro em disco, mas ainda no o temos associado ao novo projecto. Para associar o ficheiro ao projecto v ao menu Project e carregue em Add Files to Project.... Na janela que se abre, seleccione o ficheiro main.asm que gravou mesmo h instantes. Se tudo correr bem, repare agora que o ficheiro main.asm j aparece na janela que contm todos os ficheiros associados ao projecto, como pode ver na Fig. 42 Ficheiro principal adicionado ao projecto.
- 57 -
Neste momento, e antes de comear a escrever cdigo fonte do seu programa, necessrio configurar no MPLab o microcontrolador que vai utilizar. Abra o menu Configure e carregue em Select Device. Na janela que se abre escolha ento o modelo de microcontrolador, como mostra a figura 43.
Tambm no menu de configurao pode abrir a janela de Configuration Bits que permite configurar todos os bits configurao do microcontrolador. Note que esta janela apresentar contedos diferentes, j que cada modelo de microcontrolador tem uma configurao especfica. A figura 44 mostra a janela de configurao de bits do 16F628A, o microcontrolador estudado neste manual.
5.2. Compilao do cdigo fonte Pode compilar o cdigo fonte do seu programa em qualquer altura. Mesmo que no tenha nada escrito, o processo de compilao efectuado mesma. Aps concluda a operao, a janela principal de compilao apresenta a lista de avisos e erros ocorridos. Os avisos apenas advertem o utilizador para possveis problemas que possam ocorrer no futuro, mas no originam falha de compilao. Os erros originam uma falha no processo de compilao e no deixam seguir em frente at que sejam corrigidos pelo utilizador. Para facilitar a busca e correco dos erros, possvel seleccionar um erro da lista, carregar nele com o boto do rato. A janela de edio do cdigo fonte salta para a frente e o cursor posicionado no local exacto onde ocorreu o erro. Para compilar o cdigo fonte do projecto em curso abra o menu Project e carregue em Build All. Se a compilao for concluda, fica disponvel ao utilizador um ficheiro geral de listagem ( Absolute Listing ) de ocupao da memria do microcontrolador, onde pode ser consultada a localizao de todas as instrues do programa, aps terem sido endereadas pelo compilador. Como por vezes h tabelas includas no cdigo que atravessam as pginas de memria, o programa deixa de funcionar correctamente. Este problema foi descrito no captulo 3. Nestes casos, a consulta da lista geral de programa importante para perceber onde poder ter ocorrido o problema. A figura 7 mostra a janela de compilao do programa.
- 59 -
Fig. 45 Janela de Output da compilao Para consultar a lista completa do cdigo abra o menu View e carregue em Program Memory.
5.3. Simulador ( Debugger ) O MPLab tem um simulador includo ( Debugger ) que permite executar o cdigo fonte, no computador. Para activar o debugger do MPLab abra o menu debugger e carregue em Select Tool.... Seleccione a posio MPLab SIM. Nesta altura aparecem novos botes na toolbar do MPLab e no menu debugger. Para executar o cdigo carregue em Run no menu debugger. Para parar a execuo de cdigo carregue em Halt. possvel observar variveis utilizadas no programa enquanto o simulador cumpre as instrues. Esta funo til para perceber o estado do contedo das variveis e verificar se o cdigo fonte escrito est correcto. Para observar uma varivel abra o menu View e carregue em Watch. Na janela que se abre escolha as funes, variveis de sistema ou variveis pessoais que pretende observar. A figura 46 mostra um exemplo de observao de smbolos, variveis de sistema e variveis pessoais.
- 60 -
Durante a simulao o utilizador tem acesso tambm janela Simulator Trace que permite visualizar todas as instrues em pormenor, registos afectos e outras informaes relevantes. A figura seguinte mostra a janela do Simulator Trace.
5.4. Programao do circuito-integrado O MPLab permite tambm programar o microcontrolador para o qual se est a desenvolver cdigo. A verso actual do MPLab apenas suporta os programadores da marca (Microchip). Para seleccionar um dos 3 programadores disponveis, abra o menu Programmer e carregue em Select Programmer. Nesta altura seleccione um dos modelos suportados. Por omisso, o MPLab no tem nenhum programador seleccionado. Para utilizar outro programador no suportado pelo MPLab, ter de utilizar um software prprio que normalmente acompanha o hardware.
- 61 -
Captulo 6
(6) Funes e registos internos
- 62 -
6.1. Temporizadores e divisores temporais Os temporizadores so dispositivos internos ao microcontrolador capazes de fazer contagens. Esta funo til quando queremos que o programa desenvolva uma aco, repetidas vezes com um tempo de espera entre elas, ou mesmo quando queremos efectuar uma pausa de um tempo determinado. Quando trabalhamos sinais de uma dada frequncia, que tem um perodo associado (T = 1/f), temos de utilizar um temporizador que nos faa a pausa certa, de modo que a frequncia gerada ou capturada, possa ser a mais correcta possvel. O PIC16F628A dispe de trs temporizadores. Cada um deles explicado em seguida.
6.1.1. Timer 0 O mdulo Timer0 contm um temporizador/contador de 8 bits com possibilidade de leitura e escrita do valor. Alm disso, existe a possibilidade de escolher qual a fonte de sinal de contagem, se interna ou externa. A figura seguinte mostra uma verso simplificada do mdulo.
Fig. 48 Mdulo Timer 0 No registo OPTION existe um bit, T0CS (OPTION<5>), que quando levado a 0, selecciona o modo de incrementao de temporizador. Neste modo, o valor do - 63 2005 Primetec Engenharia de Sistemas, Lda.
registo TMR0 do temporizador Timer0 incrementar a cada ciclo de relgio do microcontrolador. Se, num dado instante escrito algum valor no registo TMR0, ento a sua contagem (incremento) permanecer inalterada durante dois ciclos. S passado esse tempo retomada a incrementao do registo. O modo de contador seleccionado quando se coloca o bit T0CS (OPTION<5>) a 1. Neste modo, o registo TMR0 far incrementos sucessivos a cada flanco ascendente ou descendente do sinal aplicado no pino RA4/T0CKI do microcontrolador. O tipo de flanco ao qual o contador sensvel, seleccionado pelo BIT T0SE (OPTION<4>). Se este bit for colocado a 0, fica seleccionado o flanco ascendente para o incremento do registo TMR0 do contador.
6.1.2. Divisores Para utilizar com os temporizadores/contadores existe internamente no PIC16F628A um divisor (prescaler) que permite dividir as contagens por n vezes. O temporizador Timer0 dispe de um divisor de 8 bits, pelo que as contagens podem ser divididas at 256 vezes. Para configurar o divisor atribuem-se valores aos bits PS0PS2 (OPTION<2:0>), mediante a seguinte tabela:
Bits 000 001 010 011 100 101 110 111 TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128
BCF STATUS, RP0 CLRWDT CLRF TMR0 BSF STATUS, RP0 MOVLW '00101110b MOVWF OPTION_REG
;Pode ser ignorado ;se estivermos no ;Bank 0 ;Apagar WDT ;Apagar TMR0 e ;Prescaler ;Bank 1 ; ;PS<0:2> carregado ;com o valor 110
- 64 -
A tabela seguinte resume os registos do micro-controlador que esto associados ao funcionamento do temporizador Timer0. A sua consulta imprescindvel para que nenhuma configurao seja esquecida, quando se pretende utilizar este mdulo.
6.1.3. Timer 1 O mdulo Timer1 contm um temporizador/contador de 16 bits. Este temporizador tem dois registos, o TMR1H e o TMR1L, que em conjunto formam o registo TMR1. Este par de registos tem possibilidade de leitura e escrita do contedo e pode assumir valores entre 0000h e FFFFh. A figura seguinte apresenta o esquema simplificado do mdulo Timer1.
- 65 -
Quando se utiliza este temporizador com uma interrupo (Interrupes Capitulo 11), este gerada por ocorrncia de um overflow no registo TMR1. Nesta altura o bit TMR1IF (PIR1<0>) colocado no nvel lgico 1. Esta interrupo pode ser ligada/desligada configurando o bit TMR1IE (PIE1<0>). Tal como o mdulo Timer0, tambm o Timer1 pode ser utilizado como temporizador ou contador. O modo de operao escolhido, configurando o bit TMR1CS (T1CON<1>).
O temporizador pode ser activado colocando o bit TMR1ON no nvel lgico 1, ou desactivado, colocando o mesmo bit no nvel lgico 0. Existe adicionalmente um modo de reiniciar este temporizador a partir do mdulo de Captura/Comparadores/PWM do microcontrolador. Este mdulo tratado mais frente neste captulo. O mdulo Timer1 tem um oscilador interno que pode ser activado colocando bit T1OSCEN (T1CON<3>) no nvel lgico l. Neste caso os pinos RB6 e RB7 tornam-se inputs, sendo ignoradas as configuraes TRISB<7:6>. Este oscilador est preparado para receber um cristal de 32.768kHz nos pinos RB6 e RB7. Devem - 66 2005 Primetec Engenharia de Sistemas, Lda.
adicionalmente ser ligados dois condensadores cermicos de 15pF entre cada pino do cristal e a massa elctrica do circuito.
6.1.4. Timer1 em modo de Temporizador Para utilizar o mdulo Timer1 como temporizador, necessrio colocar o bit TMR1CS (T1CON<1>) no nvel lgico 0. Neste modo, o par de registos TMR1 incrementa a cada ciclo de relgio do micro-controlador (Fosc/4). Desta forma, o bit T1SYNC (T1CON<2>) no tem qualquer efeito j que o relgio interno est sempre em sincronismo. Em seguida apresenta-se um pedao de cdigo assembler que demonstra como programar o PIC16F628A para utilizarmos o Timer1 em modo de temporizador.
movlw b'00110101' ; ; ; ; ; ; movwf T1CON ; bsf PIE1, 0 ; bit 7-6: bit 5-4: bit 3: bit 2: bit 1; bit 0: Guarda o Activa a N/A 11 ->Prescale 1:8 Oscilador do Timer1 desligado No sincronizar relogio externo Relogio interno Fosc/4 Liga o Timer1 valor no registo T1CON interrupo TMR1IE
Fig. 54 Utilizao do Timer1 em modo de temporizador No cdigo apresentado, o Timer1 ir disparar a interrupo TMR1IF. No vector de interrupo poder ser adicionado cdigo de tratamento da funo que se pretende que seja executada.
6.1.5. Timer1 em modo de Contador Para utilizar o mdulo Timer1 como contador, necessrio colocar o bit TMR1CS (T1CON<1>) no nvel lgico 1. Em seguida existem duas hipteses para a contagem: - Pino RB7/T1OSI quando o bit T1OSCEN colocado no nvel lgico 1 - Pino RB6/T1OSO/T1CKI quando o bit T1OSCEN colocado no nvel lgico 0 Se o bit T1SYNC (T1CON<2>)est a 0, ento o relgio de entrada do contagem sincronizado com os impulsos internos. Este processo de sincronizao feito aps o estgio de prescaler. Neste modo, o registo TMR1 no incrementado se o PIC16F628A estiver em modo adormecido (Sleep Mode). No entanto, o prescaler continua a ser incrementado.
- 67 -
A tabela seguinte resume os registos do microcontrolador que esto associados ao funcionamento do temporizador Timer1. A sua consulta imprescindvel para que nenhuma configurao seja esquecida, quando se pretende utilizar este mdulo.
6.1.6. Timer2 O mdulo Timer2 um temporizador de 8 bits com prescaler e postscaler. Este temporizador tem a particularidade de poder ser utilizado como base de tempos para o mdulo de PWM, tambm descrito mais frente neste captulo. A figura seguinte apresenta o esquema simplificado do mdulo Timer2.
O registo TMR2 permite a leitura e escrita do valor e apagado na sequncia de um RESET do micro-controlador. Existe a possibilidade de fazer diviso de 1:1, 1:4 ou 1:16 ao relgio interno do micro-controlador, utilizando o prescaler do Timer2. Adicionalmente, este mdulo dispe de um registo de 8 bits, o PR2, cujo valor pode ser programado. O objectivo deste registo de parar a contagem, o valor do
- 68 -
registo TMR2 e PR2 se igualam. Neste altura, o valor de TMR2 volta a 00h na contagem seguinte. O registo PR2 inicializado com o valor FFh no arranque (RESET) do micro-controlador. A fase final da contagem do Timer2 o postscaler de 4 bits que controla as interrupes originadas por este temporizador. Os valores do postscaler vo de 1:1 at 1:16. Para desligar o Timer2, necessrio colocar o bit TMR2ON (T2CON<2>) no nvel lgico 0. Esta opo permite minimizar o consumo de energia. Os valores do prescaler e postscaler so apagados quando qualquer uma das situaes acontece: - Escrita de um valor no registo TMR2 - Escrita de um valor no registo T2CON O resultado do TMR2 injectado no mdulo USART, quando configurada para trabalhar em modo sncrono. Esta temporizao pode ser utilizada no processo de desvio de bits da SSP (shift clock). A tabela seguinte resume os registos do micro-controlador que esto associados ao funcionamento do temporizador Timer2. A sua consulta imprescindvel para que nenhuma configurao seja esquecida, quando se pretende utilizar este mdulo.