microcontrolador – 16f84aseguidorsolar.com.br/obras/microcontrolador3.pdf · microcontrolador –...

36
AUTOR Maurício Madeira Oliveira Página pessoal (fonte): www.seguidorsolar.com.br Este curso pode ser usado e divulgado, sem fins comerciais, citar fonte e autor Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um só chip , são usados , pelos mais diversos equipamentos eletrônicos , como: Videocassetes, celulares, dvd, alarmes, eletrônica embarcada, televisores, controle-remoto, agendas eletrônicas, etc. Possuem em uma única pastilha (ci), memória de dados, temporizadores, canal serial, vários canais de I/O, eeprom, pwm e etc. Arquiteturas usadas em microcontroladores: Existe a tradicional Von Newman, baseada em um único barramento por onde trafegam dados e instruções (8051) e Harvard que prevê varias vias de comunicação entre CPU e periféricos permitindo a realização de várias operações simultâneas, os microcontroladores PIC da Microchip se baseiam nesta arquitetura. No PIC 16F84 os dados são de 8 bits e as instruçôes são de 14 bits. Com esta facilidade em uma palavra de 14 bits podemos ter código de instrução (opcode) , onde vai atuar e o eventual operando ou dado. Criou-se uma terminologia chamada RISC (reduced instruction set computer) que no PIC são aproximadamente 35 instruções. Pinagem do PIC 16F84A (18 pinos): RA0 – entrada ou saída PORTA (P17). RA1 – entrada ou saída PORTA (P18).

Upload: others

Post on 23-Jul-2020

25 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

AUTOR

Maurício Madeira Oliveira Página pessoal (fonte): www.seguidorsolar.com.br

Este curso pode ser usado e divulgado, sem fins comerciais, citar fonte e autor

Microcontrolador – 16F84A

Os microcontroladores (uC) podem ser chamados de microcomputadores de um só chip , são usados , pelos mais diversos equipamentos eletrônicos , como: Videocassetes, celulares, dvd, alarmes, eletrônica embarcada, televisores, controle-remoto, agendas eletrônicas, etc. Possuem em uma única pastilha (ci), memória de dados, temporizadores, canal serial, vários canais de I/O, eeprom, pwm e etc. Arquiteturas usadas em microcontroladores: Existe a tradicional Von Newman, baseada em um único barramento por onde trafegam dados e instruções (8051) e Harvard que prevê varias vias de comunicação entre CPU e periféricos permitindo a realização de várias operações simultâneas, os microcontroladores PIC da Microchip se baseiam nesta arquitetura. No PIC 16F84 os dados são de 8 bits e as instruçôes são de 14 bits. Com esta facilidade em uma palavra de 14 bits podemos ter código de instrução (opcode) , onde vai atuar e o eventual operando ou dado. Criou-se uma terminologia chamada RISC (reduced instruction set computer) que no PIC são aproximadamente 35 instruções. Pinagem do PIC 16F84A (18 pinos):

RA0 – entrada ou saída PORTA (P17). RA1 – entrada ou saída PORTA (P18).

Page 2: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

RA2 – entrada ou saída PORTA (P01). RA3 – entrada ou saída PORTA (P02). RA4 – entrada ou saída PORTA (P03), também é entrada do Timer zero. RB0 – entrada ou saída PORTB (P06), também é interrupção externa. RB1 – entrada ou saída PORTB (P07). RB2 – entrada ou saída PORTB (P08). RB3 – entrada ou saída PORTB (P09). RB4 – entrada ou saída PORTB (P10). RB5 – entrada ou saída PORTB (P11). RB6 – entrada ou saída PORTB (P12). RB7 – entrada ou saída PORTB (P13). RB4 a RB7 – também sinalizam interrupção por mudança de estado. VDD – alimentação ( 2V a 6V, típico 5V) (P14). VSS – referência de terra (P05). MCLR\ - entrada de reset (em nível 0) (P04). OSC1/CLKIN – cristal ou entrada de clock externo (P16). OSC2/CLKOUT – cristal ou saída do clock/4 quando usado sinal externo (P15). Principais características : 1 K (1024) palavras de 14 bits para programa. 68 bytes de uso geral. 64 bytes de EEPROM para dados. Stack com 8 níveis. 35 instruções . 15 registros especiais em RAM (SFR’s) para controle do chip e periféricos. Timer 8 bits e prescaler. 13 pinos entrada/saída (cfe.config.) PORTA e PORTB. Alta capacidade de corrente nos pinos. Capacidade de gerenciar até 4 interrupções. Watch Dog para recuperação e reset em caso de travamento de software. Memória de programa protegida contra cópias. Modo sleep , economia de energia. Várias opções de osciladores. O microcontrolador 16F84A pode operar de DC até 20 Mhz ( ou até 10 MHz no 16F84). Vamos usar em nossos estudos um clock de 4 MHz (a cristal), o que nos proporciona um ciclo de máquina de 1 uS. O PIC divide o sinal de clock por 4 internamente gerando as fase Q1, Q2, Q3 e Q4, que somadas formam 1 ciclo de máquina: Tc = 1/(Fosc/4) ou Tc = (1/Fosc) x 4 A característica de buscar a informação em um ciclo de e executa-la no ciclo seguinte chama-se PIPELINE, as instruções são executadas em 1uS, com exceção das instruções que alteram o PC (program counter) , que usam dois ciclos. Os circuitos de CLOCK :

Page 3: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

O PIC pode operar com 4 modos diferentes de osciladores, a saber: a) RC (resistor-capacitor) : modo simples e de baixo custo, mas que oferece instabilidade

na frequência, com variação do VCC e da temperatura, recomendado em aplicações onde a precisão do clock não é importante.

Nota: na saída osc2 colocar um ociloscópio ou frequencimetro, para ajustar a frequência de operação do sistema (por ex.: 4Mhz em osc1 terei 1Mhz em osc2). b) XT (modo cristal) : de 100Khz a 4Mhz.

Page 4: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

Nota : as ligações entre os pinos do ci, cristal e capacitor , devem ser as mais curtas possíveis. c) HS (modo cristal) : acima de 4Mhz.

Podemos usar cristal ou ressoador cerâmico. A ligação elétrica é idêntica a do modo XT.

d) LP (modo cristal) : baixa potência < 200 Khz .

OBS.: também podemos um circuito de clock externo , gerado por um oscilador qualquer que entrando por osc1 ira determinar a frequência de trabalho para um ou mais PIC . O circuito de Reset : a) O PIC pode ser resetado ao alimentar o mesmo, através do pino MCLR\ ligado em Vcc,

esta seria a forma mais básica :

OBS.: acima , temos o circuito mínimo de POR (power-on-reset). b) Um circuito mais elaborado, seria com uma chave para reset manual, quando

necessário.

Page 5: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

Nota : o pic possui ainda um sistema que gera 72 mS fixo, após o final do POR usado, ficando por mais este tempo em reset. Nota : quando utilizamos o modo XT, LP ou HS, o timer de partida do oscilador (OST) é automaticamente acionado por 1024 períodos do oscilador, para sair do reset; isto garante a estabilização do cristal ou resonador. As memórias do PIC : A família PIC possui em sua arquitetura, segmentos de memória separados para programas e dados, e inclusive com palavras de tamanho diferentes. O PC (programa counter) da família 16Cxxx tem 13 bits, permitindo memória de programa de até 8Kbytes (2 exp.13). O pic 16F84A possui apenas 1K (000 até 3FFh). Qualquer referência a outras posições de memória serão deslocadas para este bloco de 1K. No reset do PC ele aponta para o endereço 000 e ao atender uma interrupção o PC é carregado com o endereço 004h. a) Memória de programa – devido a estrutura Havard ela pode ter palavras de 12,14ou 16

bits, no caso do 16F84 o tamanho da palavra manipulada na memória é de 14 bits; esta área reservada do microcontrolador é onde será gravado o programa de controle do mesmo ,em alguns modelos temos uma eprom, no CI em estudo a memória é do tipo FLASH, o que nos permite gravar e apagar centenas de vezes esta memória, tornando-se o ci mais indicado para desenvolvimento de sistemas.

b) Stack (pilha) : local separado da memória de programa para salvar endereços do PC, para o qual o programa principal retornara após executar interrupções ou subrotinas que forem chamadas. O stack salva só o endereço de retorno, as condições do microcontrolador tem que serem tratadas pelo usuário. O stack do 16F84 tem 8 níveis , ou seja se passar deste número de interrupções ou subrotinas ele perdera a mais antiga.

Page 6: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

c) Memória de dados : nada mais é do que uma área de RAM , utilizada para guardar as variáveis e registradores usados pelo sistema microcontrolado, no PIC esta área é separada em bancos de memória, no caso do 16F84 temos o banco 0 e banco 1, que são selecionados pelos bits RP1 e RP0 do registro STATUS que veremos adiante.

d) SFR (special function registers – registros especiais de controle) : são usados pela CPU

e ou periféricos para controlar o funcionamento do chip conforme o desejado. Se dividem em 2 tipos , controle e uso da CPU e controle e uso dos periféricos. São lidos e escritos tanto pelo usuário como pelo hardware, ocupam espaço na RAM, e podem estar em um ou em ambos os bancos de memória, e são acessados através de seu endereço.

e) Registradores de uso geral : área destinada ao armazenamento de variáveis definidas

pelo usuário, para serem escritas ou lidas pelo programa. O tamanho desta área de RAM depende do PIC usado.

f) EEPROM : alguns PIC possuem esta memória especial não volátil (o 16F84 possui uma

de 64 bytes), que podemos usar para escrever ou ler dados .

Memória de dados e RAM de uso geral:

BANCO 0 BANCO 1

Page 7: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

As interrupções do PIC : Uma interrupção, para a execução do programa que estiver em curso, é desviado para o endereço 0004h no caso do PIC, onde teremos uma rotina de interrupção que será executada pelo microcontrolador, e após voltara para a instrução seguinte a que foi atendida a interrupção (o PC guarda o último end.+1 para o retorno). No PIC 16F84 as interrupções podem acontecer por : Overflow do timer 0. Fim de escrita na EEPROM. Interrupção externa pelo pino RB0/INT. Mudança nos pinos RB4 a RB7. Como trata-las será descrito nos registradores e rotinas adiante. Os registros de controle da CPU : Estudaremos a seguir os registros STATUS, OPTION, INTCON, e registros de controle das portas. Com eles e que inicializamos nosso microcontrolador. a) STATUS : Configura a página de memória atual (banco 0 ou 1), flags da ULA e forma

do ültimo reset. BIT 7 IRP Seleciona bancos - no 16F84 sempre em 0 BIT 6 RP1 No 16F84 manter em 0 BIT 5 RP0 Seleciona

bancos 0=banco 0 e 1=banco1

BIT 4 TO\ Bit sinaliza time out/ 1=power-up,clrwdt,sleep, 0=time-out do watch dog BIT 3 PD\ Power Down/1=power-up,clrwdt, 0=inst.sleep BIT 2 Z Bit sinalizador 0,1 reg.estac/vlr.0 se =0 oreg.dif.de 0 BIT 1 DC Digit carry/borrow BIT 0 C Carry/borrow b) OPTION : Configura prescaler, timer, e outras opções. Na programação usa-se option-

reg , pois em PICs mais antigos existia uma instrução option. BIT 7 RPBU\ Habilita os pull-up portB 1=desab. 0=hab. BIT 6 INTEDG Como aceitara int.externa (RB0) 1=borda de susbida 0=borda de descida BIT 5 TOCS Fonte do clock do timer 0 1=pino RA4/TOCKI 0=clock interno (f/4) BIT 4 TOSE Como o clock ext.inc.timer 0 1=borda descida 0=borda susbida BIT 3 PSA Atribuição do prescaler 1=Watch dog 0=timer 0 BIT 2 PS2 PS2 BIT 1 PS1 PS1 VER TABELA ABAIXO BIT 0 PS0 PS0

Page 8: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

PS2 PS1 PS0 TIMER 0 WATCH DOG 0 0 0 1 para 2 1 para 1 0 0 1 1 para 4 1 para 2 0 1 0 1 para 8 1 para 4 0 1 1 1 para 16 1 para 8 1 0 0 1 para 32 1 para 16 1 0 1 1 para 64 1 para 32 1 1 0 1 para 128 1 para 64 1 1 1 1 para 256 1 para 128

Nota : para assegurar uma taxa de 1:1 na frequência de contagem do timer0 direcionar o prescaler para Watch dog . c) INTCON : serve para configurar e identificar as interrupções. BIT 7 GIE Habil.geral das int. 0=desab. 1=hab. BIT 6 EEIE Habil.da int.de final de escrita 0=int.não será tratada 1=int.será tratada BIT 5 TOIE Hab.de overflow timer 0=nào tratada 1=int.será tratada BIT 4 INTE Hab.da int.externa RB0 0=int.não será tratada 1=int.será tratada BIT 3 RBIE Hab.da int.mudança RB4 a RB7 0=int.não será tratada 1=int.será tratada BIT 2 TOIF Identificação de over.timer 0 0=não ocorreu 1=ocorreu BIT 1 INTF Identificação da int.externa RB0 0=não ocorreu 1=ocorreu BIT 0 RBIF Identificação da int.por mudança de estado 0=não ocorreu 1=ocorreu

d) TRIS : registros de configuração das portas de IO (Port B e Port A) , através do TRIS e

que determinamos se determinado pino de uma porta será entrada ou saída. Para programar a porta A usamos o TRISA, e a porta B o TRISB, quando queremos que o pino seja entrada setamos (1) o bit correspondente ao pino no registro, se queremos que seja uma saída resetamos (0) o bit correspondente ao pino no registro TRIS .

TRISA BIT 7 NC BIT 6 NC BIT 5 NC BIT 4 RA4 Pino 3 0=saída 1=entrada BIT 3 RA3 Pino 2 0=saída 1=entrada BIT 2 RA2 Pino 1 0=saída 1=entrada BIT 1 RA1 Pino 18 0=saída 1=entrada BIT 0 RA0 Pino 17 0=saída 1=entrada

Page 9: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

TRISB BIT 7 RB7 Pino 13 0=saida 1=entrada BIT 6 RB6 Pino 12 0=saida 1=entrada BIT 5 RB5 Pino 11 0=saida 1=entrada BIT 4 RB4 Pino 10 0=saida 1=entrada BIT 3 RB3 Pino 9 0=saida 1=entrada BIT 2 RB2 Pino 8 0=saida 1=entrada BIT 1 RB1 Pino 7 0=saida 1=entrada BIT 0 RB0 Pino 6 0=saida 1=entrada e) PCL e PCLATH : O PCL é o registro que armazena os 8 bits menos significativos do

PC e o PCLATH os 5 bits mais significativos, o programador pode acessar o PCL (mas com cuidado para não travar o uC) . o PCLATH só é acessado pelo hardware do uC.

PCL BIT 7 Escrita e leitura BIT 6 Escrita e leitura BIT 5 Escrita e leitura BIT 4 Escrita e leitura BIT 3 Escrita e leitura BIT 2 Escrita e leitura BIT 1 Escrita e leitura BIT 0 Escrita e leitura

f) Portas de I/O (PORTA e PORTB) : o estado destas portas é acessado diretamente em

posições distintas da memória. E cada bit pode ser testado individualmente , se for entrada verificaremos qual o nível de tensão presente no mesmo, e se for saída poderemos determinar o valor que queremos para cada pino.

PORTA BIT 4 I/O Schmidt trigger Open

drain In timer0

BIT 3 I/O TTL BIT 2 I/O TTL BIT 1 I/O TTL BIT 0 I/O TTL

Page 10: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

PORTB BIT 7 I/O TTL Pode gerar int.ext.por mudança de estado BIT 6 I/O TTL Pode gerar int.ext.por mudança de estado BIT 5 I/O TTL Pode gerar int.ext.por mudança de estado BIT 4 I/O TTL Pode gerar int.ext.por mudança de estado BIT 3 I/O TTL BIT 2 I/O TTL BIT 1 I/O TTL BIT 0 I/O Schmidt trigger Int.externa Nota : todos os pinos do PORTB possuem Pull-up interno, e para ser habilitado globalmente o bit 7 (RPBU\) do OPTION deve ser zerado. Individualmente apenas os bits de entrada terão pull-ups habilitados.

Page 11: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

g) TIMER 0 : contador de 8 bits na memória que pode ser acessado para escrita ou leitura.

O seu incremento pode ser interno ( Fclock/4, logo T=1/(fclock/4)),o que em um clock de 4Mhz será um pulso a cada 1uS . Também pode ser incrementado externamente pelo pino RA4 (TOKI). Nosso TIMER 0 pode ser usado de duas formas, temporizador ou contador.

BIT 7 ESCRITA/LEITURA BIT 6 ESCRITA/LEITURA BIT 5 ESCRITA/LEITURA BIT 4 ESCRITA/LEITURA BIT 3 ESCRITA/LEITURA BIT 2 ESCRITA/LEITURA BIT 1 ESCRITA/LEITURA BIT 0 ESCRITA/LEITURA

Modo timer (sinal interno): ao ajustar TOCS=0 no OPTION, o timer será incrementado a cada ciclo de máquina (4Mhz� 1uS). E por lógica de programação , faremos o controle de transbordo do contador através da interrupção (T0IE) ou através T0IF que quando igual a 1 ocorreu overflow e se igual a 0 não ocorreu. Modo contador (sinal externo RA4) : o timer 0 incrementará sua contagem a cada pulso presente no pino TOCKI. Para ser incrementado na borda de subida fazer TOSE=0 e na borda de descida TOSE=1. h) WATCH DOG (cão de guarda): timer especial que funciona com um clock RC interno

e independente do clock do uC. O tempo normal de transbordo do WDT é de 18 mS, mas pode variar com a temperatura e a tensão de alimentação. Ele resetara o uC sempre que ocorrer o overflow, isto impede que haja travamento no uso do uC em circuitos críticos, pois o programador devera implementar uma subrotina para dar clear no WDT, antes do transbordo de seu contador (instrução clrwdt) cujo o valor básico é FFh (pode assumir outros valores com o uso do prescaler). O WDT é selecionado durante a gravação do PIC para estar ativo ou não.

i) PRESCALER : um registro de 8 bits que pode dividir o sinal de clock , tando do timer 0

como do WDT por 256 , conforme tabela anexa ao registro OPTION. Nota : quando queremos uma contagem de 1:1 no timer 0 devemos atribuir o prescaler ao WDT que tem esta relação . J) INDF e FSR : registro para endereçamento indireto; onde o INDF e o registro onde eu darei os comandos, e no fsr o endereço que estes comandos irão atuar. Exemplo : clrf indf - se no FSR eu estiver com o valor 18h, o clear dado no registro indf ira zerar a posição 18h da RAM de uso geral.

Page 12: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

k) EEPROM : já sabemos que o PIC 16F84 possui esta memória de 64 bytes, que pode ser usada como memória de dados. Sua vantagem é que não perde as informações , mesmo sem alimentação. Pode ser usado para gravar diversas informações em circuitos de controle remoto, telefones, alarmes e etc. Possui 4 registros importantes para seu funcionamento, são eles : EEADR, EEDATA, EECON1 e EECON2. EEADR registro do endereço para escrita ou leitura. EEDATA tem duas funções, escrevemos o dado a ser gravado, no endereço escolhido, ou teremos o dado lido da eeprom. EECON1 registro que controla as operações de escrita e leitura. BIT 4 EEIF Identificação da int.de fim de escita 0=não ocorreu 1=ocorreu BIT 3 WRERR Identificação de erro durante a escrita 0=não ocorreu 1=ocorreu BIT 2 WREN Habilitação de escrita na eeprom 0=não disponível 1=dispon. BIT 1 WR Inicio de escrita 0=escrita terminou/zerada pelo hardware 1=inicia BIT 0 RD Inicio da leitura 0=leitura teminou/zerada pelo hardware 1=inicia

EECON2 é um registro que não sofre ajustes, é usado durante o processo de escrita da eeprom, será visto nos modelos de programas adiante. K) POWER-DOWN (modo sleep) : o uC entra em estado inerte de 7mA de consumo cai para 60uA. Para entrar neste modo basta usar a instrução sllep. Para sair deste estado basta um reset externo pelo MCLR\ , time out no WDT , interrupção externa RB0, ou por fim de escrita na eeprom, ou por mudança de estado no PORTB (RB7 a RB4). Nota 1 : o PIC 16F84 possui no endereço 2007 da memória de programa, 14 bits que os gravadores preenchem, com informações determinadas pelo usuário. BIT 13 CP código de proteção a BIT 4 CP código de proteção BIT 3 PWRTE\ 1=Habilitado 0=desabilitado BIT 2 WDTE 1=WDT Habilitado 0=desabilitado BIT 1 FOSC1 Seleciona tipo de oscilador BIT 0 FOSC2 Seleciona tipo de oscilador

Tabela de escolha do tipo de oscilador : FOSC1 FOSC2 TIPO

0 0 LP 0 1 XT 1 0 HS 1 1 RC

Page 13: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

Nota 2 : nos endereços 2000h a 2003h, armazena-se 4 nibles (4 bits) sendo um em cada posição de memória, que servem como identificação, check-sum, ou outro código desejado pelo usuário. Estas informações só podem ser lidas durante a gravação ou verificação do uC. Estes valores são escritos pelo gravador. Ex.: ID (identificação) 2E7Fh = 0010 1110 0111 1111 , teremos : 2000h xxxxxxxxxx0010 2001h xxxxxxxxxx1110 2002h xxxxxxxxxx0111 2003h xxxxxxxxxx1111 Agora que já conhecemos nosso microcontrolador, vamos começar nosso aprendizado através de programas, que vão nos levar ao conhecimento das principais características de um uC, tais como : temporização , contador, sensoreamento, controle de display e cargas diversas. Mas as possibilidades de uso de um uC são quase ilimitadas e fascinantes, e com a prática e perseverança , seremos capazes de desenvolver sistemas de alto grau de complexidade. Vamos escrever programas e comentá-los , juntamente com o circuito que será controlado pelo uC, assim poderemos fixar as principais instruções e seu uso lógico. Em vários livros e data sheets , temos algumas convenções que nos facilitam o entendimento das instruções em linguagem de máquina de um uC. No PIC temos convenções que o compilador MPASM e MPASMWIN reconhecem. 1) O que for escrito após “; “ é considerado comentário. 2) Constante decimal D’valor’ ou d’valor’ , ex.: d’20’ 3) Constante binária B’xxxx’ ex.: 0110 = B’0110’ 4) Constante hexadecimal 0x’valor’ou valorH, ex.: 0x’12’ ou 12H, se a constante hexa for

uma das letras A até F , terá que ser precedia de um 0 ; ex.: A = 0AH 5) A letra f será um registro entre 0 e 127 (0 a 7FH). 6) W ou w registro Work (ou acumulador no 8031). 7) A letra b será um bit entre 0 e 7 usado em uma operação. 8) A letra k representa uma constante ou um rótulo (label). 9) A letra d o destino da instrução. Se d = 0 o resultado é armazenado em W, se d = 1 o

resultado é armazenado no próprio registro indicado (f). 10) Algumas dicas para entender como é formada as instruções: File = f , literal = l na instrução e k no argumento, destino = d, work = w, bit = b, teste = t, skip = s (pulo), set =s, clear = c, zero = z . Também temos as ações especificas como: Add =soma, and= lógica e, clr= limpar, com =complemento, dec= decrementar , inc = incrementar, ior= lógica ou , mov= mover, rl = rotacionar 1 bit a esquerda (left), rr = rotacionar um bit a direita (right), sub = subtração , swap = inversão entre os nibles de um byte, xor = lógica ou exclusivo. Agora podemos construir os nomes das instruções , vamos a uns exemplos: DECF = decrementar (dec) um registrador (f). DECFSZ = decrementar (dec) o registrador (F) e pula (Skip) se o resultado for zero (z). Após algum treino ficaremos campeões (retirado de Desbravando o PIC-editora Érica).

Page 14: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

TABELA DE INSTRUÇÕES INSTRUÇÃO OPERANDO DESCRIÇÃO CICLOS ADDWF f,d Soma W e f 1 ANDWF f,d And entre W e f 1 CLRF f Zera f 1 CLRW Zera w 1 COMF f,d Complementa f 1 DECF f,d Decrementa f 1 DECFSZ f,d Decrem.f pula se f=0 1(2) INCF f,d Incrementa f 1 INCFSZ f,d Increm.f pula se f = 0 1(2) IORWF f,d OR entre W e f 1 MOVF f,d Move f 1 MOVWF f Move W para f 1 NOP Nenhuma operação 1 RLF f,d Roda esq.pelo carry 1 RRF f,d Roda dir. pelo carry 1 SUBWF f,d Subtrai W de f 1 SWAPF f,d Troca nibles em f 1 XORWF f,d XOR entre W e f 1 BCF f,b Zera bit b em f 1 BSF f,b Seta bit b em f 1 BTFSC f,b Se bit b=0 em f,pula 1(2) BTFSS f,b Se bit b=1 em f,pula 1(2) ADDLW k Soma W e k 1 ANDLW k And entre W e k 1 CALL k Chama sub-rotina 2 CLRWDT Zera timer Watch dog 1 GOTO k Desvia p/label k 1 IORLW k OR entre W e k 1 MOVLW k W=k 1 RETFIE Retorna de interrup. 2 RETLW k Retorna c/ w = k 2 RETURN Retorna de sub-rotina 2 SLEEP Entra em modo sleep 1 SUBLW k Subtrai k de W 1 XORLW k Xor entre W e k 1

Page 15: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

PROGRAMAS EXEMPLOS Vamos ao nosso primeiro programa; ao lado de cada comando teremos o

comentário do que o mesmo executa no funcionamento do projeto proposto. a) Sensoreamento e acionamento de LED. Neste projeto iremos testar uma chave normalmente aberta (nosso sensor) , e se a mesma estiver aberta ligara o LED(D2) e fechada ligara o LED(D1). Vejamos o circuito abaixo:

O mesmo é bem simples , mas aprenderemos conceitos importantes de programação do PIC através das instruções que usaremos. Iremos sugerir um modelo padrão de formulário para programação mais adiante , o que facilita e organiza o trabalho do projetista, pois poderá montar uma pasta com o diagrama lógico e o programa de seus projetos. Importante salientar que o programa deve ser digitado no bloco de notas (note pad) ou no editor do próprio MPLAB. Vamos ao programa: (foi digitado no bloco de notas) list p=16F84 ;para qual o processador o código será gerado radix dec ;padrão decimal para vlrs.s/identificação include <P16F84A.INC> ;anexa arquivo def.16F84A> l1 equ 2 ;nome do pino 2 da portB l2 equ 1 ;nome do pino 1 da portB s1 equ 1 ;nome do pino 1 da portA

Page 16: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

org 0 ;define início do progrma no end.0 goto início ;desvia para o label(rótulo) início org 4 ;inicio das interrupções (reservada) retfie ;retorno da interrupção início: ;aqui neste label começa o programa movlw B'00000000' ;w=0h movwf INTCON ;registro intcon=0h,ou seja todas int.desab. bsf STATUS,RP0 ;seta bit RP0 no reg.status, sel.banco 1 movwf TRISB ;trisb=0h,todos pinos conf.saidas portB movlw B'11111111' ;w=ffh movwf TRISA ;TRISA=B'11111'os 5 pinos serão entradas portA movlw B'11011000' ;w=D8h movwf OPTION_REG ;usa-se este nome p/o registrador,estudar ;com as tabelas como configuramos o option bcf STATUS,RP0 ;clear bit RP0 volto para o banco 0 movlw B'00000000' ;w=0h movwf PORTB ;garanto zero nos pinos do portB no

;inicio/portB=w principal: ;aqui vou começar as rotinas de controle btfss PORTA,s1 ;se pino 1 portA=1 salta próxima linha goto test1 bsf PORTB,l2 ;liga pino 2 portB goto desl1 ;vai p/label desl1 (desliga1) test1: bsf PORTB,l1 ;liga pino 1 portB goto desl2 ;vai p/label desl2 (desliga2) desl1: bcf PORTB,l1 ;desliga pino 1 portB goto principal desl2: bcf PORTB,l2 ;desliga pino 2 portB goto principal end ;fim de programa Após a digitação do programa em assembler, iremos compilar o mesmo no MPLAB (solução completa da MICROCHIP), conforme explicações nos anexos. Se não tivermos nenhum erro de programação, iremos verificar o funcionamento do mesmo gravando o arquivo gerado em hexadecimal (código de máquina) no PIC16F84A, com um dos gravadores sugeridos. Se não funcionar conforme o esperado, analisar o circuito lógico e o

Page 17: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

programa, pois só a solução de sistemas simples nos dará experiência e a base necessária para projetos mais complexos (todos circuitos e programas desta apostila foram testados). b) Seqüencial de 4 LEDS . Neste programa iremos aprender a fazer bases de tempo (temporização), usando ciclos de máquina para obtermos o tempo desejado entre o ligar e desligar de cada LED da seqüência. Usaremos o PORTB como saída, sendo definido em nosso programa o P0B até o P3B os pinos que usaremos para acionamento de LED1 (D1) até LED4 (D4) respectivamente. Vamos ao circuito :

O programa : list p=16F84 ;para qual o processador o código será gerado radix dec ;padrão decimal para vlrs. s/ identificação include <P16F84A.INC> ;anexa arquivo def.16F84A> l1 equ 0 ;nome do pino 0 da portB l2 equ 1 ;nome do pino 1 da portB l3 equ 2 ;nome do pino 2 da portB l4 equ 3 ;nome do pino 3 da portB x equ 0CH ;define var.aux.x no end 0Ch da RAM y equ 0DH ;define var.aux.y no end 0Dh da RAM j equ 0EH ;define var.aux.j no end 0Eh da RAM org 0 ;define início do progrma no end.0 goto início ;desvia para o label(rótulo) início

Page 18: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

org 4 ;inicio das interrupções (reservada) retfie ;retorno da interrupção início: ;aqui neste label começa o programa movlw B'00000000' ;w=0h movwf INTCON ;registro intcon=0h,ou seja todas int.desab. bsf STATUS,RP0 ;seta bit RP0 no reg.status,sel.banco 1 movwf TRISB ;trisb=0h,todos pinos conf.saidas portB movlw B'11111111' ;w=ffh movwf TRISA ;TRISA=B'11111'os 5 pinos serão entradas ; portA movlw B'11011000' ;w=D8h movwf OPTION_REG ;usa-se este nome p/o registrador,estudar ;com as tabelas como configuramos o option bcf STATUS,RP0 ;clear bit RP0 volto para o banco 0 movlw B'10001000' ;w=88h

movwf PORTB ;garanto zero nos pinos do portB no ; inicio/portB=w principal: ;aqui vou começar as rotinas de controle rrf PORTB ;rotaciona a direita o registo portB call time goto principal time: ;inicio da rotina de tempo (aprox.500mS) movlw 2 ;w=2 decimal (1uS) movwf j ;j=w (1uS) time1: movlw 250 ;w=250 decimal (1uS) movwf x ;x=w (1uS) time2: movlw 248 ;w=248 decimal (1uS) movwf y ;y=w (1uS) time3: nop ; (1uS) decfsz y ; decrem.y se y=0 salta prox.inst.(2uS se salta) ; (1us se não salta) goto time3 ; (2uS) decfsz x ; (1uS ou 2uS) goto time2 ; (2uS) decfsz j ; (1uS ou 2uS) goto time1 ; (2uS) return ; (2uS) end ;fim de programa

Page 19: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

; COMO FUNCIONA A ROTINA DE TEMPO ; Tempo usado por cada instrução da rotina: ; call=2uS nop=1uS ; movlw=1uS decfsz=1uS ; movwf=1uS goto=2uS ; total: 2+1+1+1+1+1+1+1+2x{250x[(248x4uS)+2+2+1+1]+2+2+1+1+1+1}=0,499021uS==0,5 S ; note que os loops me garantem chegar ao tempo desejado, estude para entender ; o funcionamento deste método. Note que não usamos o timer do PIC. c) Contador de sinal externo (RA4/TOCKI) . Neste exemplo iremos utilizar nosso uC para contar um determinado número de pulsos externos , em nosso caso serão 10, quando isto acontecer nosso timer 0 ira gerar uma interrupção no uC, a mesma será resolvida pelo software , que ligara um led (representando uma carga qualquer) por 250mS, e após desligara, voltando para rotina principal do uC como contador. Também aproveitaremos para ativar um display de 7 segmentos (de led) para fixarmos mais este conceito. O circuito :

O programa deste circuito nos introduz a vários comandos importantes do uC em estudo, que também são usados em quase todos uC da MICROCHIP.

Page 20: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

;------------------------------------------------------------------------------ ; FORMULÁRIO PADRÃO PARA USO EM PROGRAMAÇÃO COM ; MICROCONTROLADORES ; DA LINHA PIC ( MICROCHIP ). COM USO DO COMPILADOR MPASWIN. ;------------------------------------------------------------------------------ ; ** Os registros da CPU serão escritas com letras maiúsculas, e a- ; pós " ; " os comentários não serão considerados pelo compilador. ;------------------------------------------------------------------------------ ; PROJETO : CONTADOR DE SINAL EXTERNO DATA : 08/10/2002 ;------------------------------------------------------------------------------ ; AUTOR :Maurício Madeira Oliveira ;------------------------------------------------------------------------------ list p=16F84 ;para qual processador o código será gerado radix dec ;padrão decimal para valores sem identificação include <p16f84a.inc> ;anexa arquivo def.16F84A ;------------------------------------------------------------------------------ ; TABELA DE DEFINIÇÕES DE RAM E CONSTANTES (defino nomes associados a ; valores) ;------------------------------------------------------------------------------ x equ 0CH ; define variável auxiliar x na ram 0Ch (hexadecimal) y equ 0DH ; define variável auxiliar y na ram 0Dh (hexadecimal) STEMP equ 0EH ; define variável p/colocar vlrs.temporarios do status l1 equ 7 ; define led1 ligado ao pino 7 do portB ; variáveis acima são exemplos do uso da diretriz EQU ;------------------------------------------------------------------------------ ; TABELA DE MONTAGEM DO DISPLAY ;------------------------------------------------------------------------------ ; ; a=RB0 define segmento do display ligado ao pino 0 do portB ; b=RB1 " " " " " " " 1 do portB ; c=RB2 " " " " " " " 2 do portB ; d=RB3 " " " " " " " 3 do portB ; e=RB4 " " " " " " " 4 do portB ; f=RB5 " " " " " " " 5 do portB ; g=RB6 " " " " " " " 6 do portB ; ; fica em binario: B'0gfedcba', para escrever n.7 ==> B'00000111' ou B'00000cba' ; , para escrever n.6 ==> B'01111101' ou B'0gfedc0a' , etc. ;

Page 21: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

; a ; ******* ; f * * b ; * g * ; ******* DISPLAY ; e * * c ; * * ; ******* ; d ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; MEMÓRIA DE PROGRAMA ;------------------------------------------------------------------------------ org 0 ; define inicio do programa a partir do end. 0h goto inicio ; desvia o progrma para o label (rótulo) início ;------------------------------------------------------------------------------ ; INÍCIO DA ROTINA DE INTERRUPÇÃO ;------------------------------------------------------------------------------ org 4 ; sempre inicia no end.4h as interrup.no PIC swapf STATUS,W movwf STEMP ; stemp=w=status (c/nibles invertidos) bsf PORTB,l1 ; ligo led1 pino 7 do portB movlw 0x0F6 ; w=F6h movwf TMR0 ; tmr0=w=F6h call tempo bcf PORTB,l1 ; desligo led1 swapf STEMP,W movwf STATUS ; move vlrs.stemp p/status (inv.nibles/fica correto) bcf INTCON,T0IF ; zera o indicador de overflow p/iniciar novam. retfie ; comando de retorno de interrupção ;------------------------------------------------------------------------------ ; INÍCIO DO PROGRAMA ;------------------------------------------------------------------------------ inicio: ; inicialização do uC movlw B'10000000' ; w=10000000b movwf INTCON ; INTCON=w , GIE esta habilitada bsf STATUS,RP0 ; seleciono banco1 movlw B'11111000' ; w=11111000b movwf OPTION_REG ; OPTION=w , T0CS=1 contagem por RA4 , externa movlw B'11111111' ; w=FFh movwf TRISA ; trisa=w , portA entrada movlw B'00000000' ; w=0

Page 22: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

movwf TRISB ; trisb=w , portB saídas bcf STATUS,RP0 ; seleciono banco0 movwf PORTA ; portA=w=0 movwf PORTB ; portB=w=0 principal: movlw 0x0F5 ; w=0F5h movwf TMR0 ; timer0=w bcf INTCON,T0IF ; reset no bit indicador de overflow bsf INTCON,T0IE ; seto o bit de interrupção do timer0 loop: movf TMR0,0 ; w=tmr0 call certo ; sub-rotina de conversão p/7 segmentos movwf PORTB ; portB=w nop goto loop certo: andlw B'00001111' ; and w p/limitar em 4 bits vlr.contador sublw 0x0E ; subtrai de 14 o vlr.w(vlr.do tmr0 acertado) addwf PCL ; soma valor de w com pcl, saltando p/ instrução ; necessária p/escrita do número correto ;'0gfedcba' sequência dos segmentos retlw B'01100111' ; retorna 9 retlw B'01111111' ; retorna 8 retlw B'00000111' ; retorna 7 retlw B'01111100' ; retorna 6 retlw B'01101101' ; retorna 5 retlw B'01100110' ; retorna 4 retlw B'01001111' ; retorna 3 retlw B'01011011' ; retorna 2 retlw B'00000110' ; retorna 1 retlw B'00111111' ; retorna 0 tempo: ; rotina de 250mS movlw 250 ; w=250d movwf x temp1: movlw 248 ; w=248d movwf y temp2: nop decfsz y goto temp2 decfsz x goto temp1

Page 23: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

return end d) Escrevendo em um display de cristal liquido (LCD). Vamos aprender a usar um LCD para escrever a frase CURSO DE MICROCONTROLADOR. Vários conceitos importantes sobre o uso deste serão abordados. Vamos conhecer um pouco sobre o LCD : 1) Pinagem padrão.

Comandos para inicialização do display (seguir a tabela abaixo): MÓDULO TIPO INST. TEMPO INST. TEMPO INST. TEMPO INST. TEMPO INST. TEMPO

1 LINHA 7X5 18X5 30 15mS 30 15mS 6 40uS 0E 40uS 1 40uS

2 LINHAS 7X5 18X5 38 15mS 38 15mS 6 40uS 0E 40uS 1 40uS

Page 24: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

Existem outros módulos com mais linhas e mais colunas. Procurar outras bibliografias e referências técnicas . Em nosso projeto exemplo iremos usar os 8 bits de dados, mas é possível usarmos apenas 4 bits para enviarmos as informações para o LCD, usamos o nible mais significativo D7 a D4 (pinos 14 a 11) para a comunicação, por ex.: enviar a instrução 14 , primeiro envio 1(0001) e após o 4 (0100) note que também envio primeiro o nible mais significativo, se estivesse usando os 8 bits enviaria direto 14 (00010100). 3) Agora iremos descrever quais os pinos do uC iremos usar para gerar os sinais de controle e transferência de dados para o LCD. Usaremos a porta A para gerar os sinais de controle e a porta B para enviarmos dados e instruções. PINO Controla Comentários

PA.0 RS 1=dado 0=inst. PA.1 CS 1=enable 0=disable PB.0 D0 bmS PB.1 D1 PB.2 D2 PB.3 D3 PB.4 D4 PB.5 D5 PB.6 D6 PB.7 D7 BmS

4)Diagrama lógico do circuito com LCD.

Page 25: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

5) Vamos ao programa que ira controlar o LCD e escrever a mensagem escolhida, vamos com isto aprender os conceitos necessários para o funcionamento correto do display. ;------------------------------------------------------------------------------ ; FORMULÁRIO PADRÃO PARA USO EM PROGRAMAÇÃO COM ; MICROCONTROLADORES ; DA LINHA PIC ( MICROCHIP ). COM USO DO COMPILADOR MPASWIN. ;------------------------------------------------------------------------------ ; ** Os registros da CPU serão escritas com letras maiúsculas, e a- ; pós " ; " os comentários não serão considerados pelo compilador. ;------------------------------------------------------------------------------ ; PROJETO : Display-LCD DATA : 29/10/2002 ;------------------------------------------------------------------------------ ; AUTOR :Mauricio Madeira Oliveira ;------------------------------------------------------------------------------ list p=16F84 ;para qual processador o código será gerado radix dec ;padrão decimal para valores sem identificação include <p16f84a.inc> ;anexa arquivo def.16F84A ;------------------------------------------------------------------------------ ; TABELA DE DEFINIÇÕES DE RAM E CONSTANTES (defino nomes associados a valores) ;------------------------------------------------------------------------------ x equ 0Ch ; define variável auxiliar x na ram 0Ch (hexadecimal) y equ 0Dh ; define variável auxiliar y na ram 0Dh (hexadecimal) con0 equ 0h ; controle do sinal RS (LCD) através do PA.0 con1 equ 1h ; controle do sinal CS (LCD) através do PA.1 ;Definição de caracteres que serão usados: M equ 0x4D I equ 0x49 ; C equ 0x43 R equ 0x52 O equ 0x4F N equ 0x4E T equ 0x54 L equ 0x4C A equ 0x41 D equ 0x44 U equ 0x55 S equ 0x53 E equ 0x45 # equ 0x23

Page 26: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

;------------------------------------------------------------------------------ ; MEMÓRIA DE PROGRAMA ;------------------------------------------------------------------------------ org 0 ; define inicio do programa a partir do end. 0h goto início ; desvia o progrma para o label (rótulo) início ;------------------------------------------------------------------------------ ; INÍCIO DA ROTINA DE INTERRUPÇÃO ;------------------------------------------------------------------------------ org 4 ; sempre inicia no end.4h as interrup.no PIC

; rotinas ............................... retfie ; comando de retorno de interrupção ;------------------------------------------------------------------------------ ; INÍCIO DO PROGRAMA ;------------------------------------------------------------------------------ início: movlw B'00000000' ; w=0 movwf INTCON ; inticon=w int.desabilitadas bsf STATUS,RP0 ; sel.banco1 movwf TRISB ; portB def.para saída movlw B'11111100' ; w=11111100 movwf TRISA ; PA.0 e PA.1 def.saidas , demais input movlw B'11011000' ; w=11011000b movwf OPTION_REG ; option=w (verif.naa tabela as atribuições) movlw B'00000000' ; w=o bcf STATUS,RP0 ; sel.banco0 movwf PORTA ; portA=w movwf PORTB ; portB=w principal: ;inicialização do display LCD bcf PORTA,con0 ; portA P0=0, RS=0 ,LCD recebe instrução movlw 0x38 ; w=38h movwf PORTB ; portB=instrução 38 p/ o LCD call tempo ; rotina de 20mS movlw 0x38 ; movwf PORTB ; Verificar tabela de configuração LCD call tempo ; movlw 0x06 ; w=o6h movwf PORTB ; portB=inst. 06 p/ o LCD call tempo movlw 0x0E ; w=0Eh movwf PORTB ; portB=inst. 0E p/ o LCD call tempo

Page 27: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

movlw 0x01 ; w=01h movwf PORTB ; portB=inst. 01 p/ o LCD call tempo movlw 0x80 ; w=80h movwf PORTB ; portB=inst. 80 p/ o LCD, iniciar na 1.linha ; e 1.coluna do LCD

call time ; rotina de 40uS (pode ter tempo menor p/esta ; inst.)

esc1: ; rotina de escrita na primeira linha do LCD bcf PORTA,con0 movlw 0x80 movw f PORTB call time bsf PORTA,con0 ; portA P0=1, RS=1 , LCD recebe dados movlw 0x43 ; letra C movwf PORTB call time movlw U movwf PORTB call time movlw R movwf PORTB call time movlw S movwf PORTB call time movlw O movwf PORTB call time movlw # movwf PORTB call time movlw D movwf PORTB call time movlw E movwf PORTB call time movlw # movwf PORTB call time bcf PORTA,con0 ; porta P0=0, RS=0 , LCD recebe inst. Movlw 0x0C0 ; w=C0h Movwf PORTB ; cursor vai p/2.linha, 1.coluna do LCD call time

Page 28: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

bsf PORTA,con0 movlw M movwf PORTB call time movlw I movwf PORTB call time movlw 0x43 movwf PORTB call time movlw R movwf PORTB call time movlw O movwf PORTB call time movlw 0x43 movwf PORTB call time movlw O movwf PORTB call time movlw N movwf PORTB call time movlw T movwf PORTB call time movlw R movwf PORTB call time movlw O movwf PORTB call time movlw L movwf PORTB call time movlw A movwf PORTB call time movlw D movwf PORTB call time movlw O movwf PORTB call time movlw R

Page 29: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

movwf PORTB call time aqui: goto aqui tempo: ; rotina de 20mS bsf PORTA,con1 ; gera sinal (alto) p/ CS do LCD bcf PORTA,con1 ; gera sinal (low ) p/ CS do LCD movlw 250 ; w=250d, 1uS movwf x ; x=w , 1uS temp1: movlw 18 ; 1uS movwf y ; 1uS temp2: nop ; 1uS decfsz y ; decrementa y de 1,se>0 exec.prox.inst. goto temp2 ; se=0 salta prox.inst. decfsz x ; 1uS goto temp1 ; 1uS return ; 1uS time: ; rontina de 4uS bsf PORTA,con1 ; gera sinal (alto) p/ CS do LCD bcf PORTA,con1 ; gera sinal (low ) p/ CS do LCD movlw 38 ; w=38d movwf x tim1: nop decfsz x goto tim1 return end

Page 30: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

e) Acionando um motor de passo (stepper motor) . Vamos controlar através do microcontrolador um motor de passo com 5 terminações, sendo um dos fios terminais o comum (ligaremos a +Vcc) e os demais fios terminais correspondem aos 4 enrolamentos do motor, cada um será ligado ao coletor de um transistor NPN (BC548). Assim iremos controlar o sentido de rotação (horário ou anti-horário) e a velocidade do mesmo. Com esta aplicação poderemos explorar mais algumas das possibilidades de uso do microcontrolador, robótica, aplicações industriais, e etc. O diagrama lógico abaixo, mostra o circuito , e sua simplicidade, pois iremos controlar o sentido e velocidade de rotação através de um programa.

O programa para este circuito é de fácil entendimento, basta analisar as instruções usadas e os comentários ao lado de cada uma, note que usamos apenas 4 portas de I/O, sobrando recursos para circuitos bem mais complexos. ;------------------------------------------------------------------------------ ; FORMULÁRIO PADRÃO PARA USO EM PROGRAMAÇÃO COM ; MICROCONTROLADORES ; DA LINHA PIC ( MICROCHIP ). COM USO DO COMPILADOR MPASWIN. ;------------------------------------------------------------------------------ ; ** Os registros da CPU serão escritas com letras maiúsculas, e a- ; pós " ; " os comentários não serão considerados pelo compilador. ;------------------------------------------------------------------------------ ; PROJETO : Controle de motor de passo DATA : 09/11/2002 ;------------------------------------------------------------------------------ ; AUTOR :Mauricio Madeira Oliveira ;------------------------------------------------------------------------------ list p=16F84 ;para qual processador o código será gerado

Page 31: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

radix dec ;padrão decimal para valores sem identificação include <p16f84a.inc> ;anexa arquivo def.16F84A ;------------------------------------------------------------------------------ ; TABELA DE DEFINIÇÕES DE RAM E CONSTANTES (defino nomes associados a valores) ;------------------------------------------------------------------------------ x equ 0Ch ; define variável auxiliar x na ram 0Ch (hexadecimal) y equ 0Dh ; define variável auxiliar y na ram 0Dh (hexadecimal) n equ 0Eh ; define variável auxiliar n na ram 0Eh (hexadecimal) ; variáveis acima são exemplos do uso da diretriz EQU ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; MEMÓRIA DE PROGRAMA ;------------------------------------------------------------------------------ org 0 ; define inicio do programa a partir do end. 0h goto início ; desvia o progrma para o label (rótulo) início ;------------------------------------------------------------------------------ ; INÍCIO DA ROTINA DE INTERRUPÇÃO ;------------------------------------------------------------------------------ org 4 ; sempre inicia no end.4h as interrup.no PIC ; rotinas ............................... retfie ; comando de retorno de interrupção ;------------------------------------------------------------------------------ ; INÍCIO DO PROGRAMA ;------------------------------------------------------------------------------ início : movlw B'00000000' ; w=0d movwf INTCON ; desabilito todas as interrupções movlw B'10001000' ; w=88h movwf OPTION_REG ; option=w , verificar tabela bsf STATUS,RP0 ; seleciono banco1 movlw B'00000000' ; w=0d movwf TRISB ; portB=saida movlw B'11111111' ; w=ffh movwf TRISA ; portA=entrada bcf STATUS,RP0 ; seleciono banco0 movlw B'00000000' ; w=0d movwf PORTB ; portB=0d movwf PORTA ; portA=0d HORARIO: Movlw 100 ; w=100d

Page 32: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

Movwf n ; n=100d HORA1: Movlw B'00001000' ; w=8h movwf PORTB call TIME ; chama rotina de tempo call CON1 ; chama rotina de controle1 movlw B'00000100' ; w=4d movwf PORTB call TIME call CON1 movlw B'00000010' ; w=2d movwf PORTB call TIME call CON1 movlw B'00000001' ; w=1d movwf PORTB call TIME call CON1 goto HORA1 ANTIHORA: movlw 100 movwf n ANTI1: Movlw B'00000001' ; w=1h Movwf PORTB call TIME ; chama rotina de tempo call CON2 ; chama rotina de controle2 movlw B'00000010' ; w=2d movwf PORTB call TIME call CON2 movlw B'00000100' ; w=4d movwf PORTB call TIME call CON2 movlw B'00001000' ; w=8d movwf PORTB call TIME call CON2 goto ANTI1 TIME: movlw 100 ; w=100d movwf x ; x=w TIM1: movlw 248 ; w=248d movwf y ; y=w

Page 33: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

TIM2: nop decfsz y ;dec.y,pula prox.inst.se =0 goto TIM2 decfsz x goto TIM1 return CON1: decfsz n return goto ANTIHORA CON2: decfsz n return goto HORARIO end Memória EEPROM . Agora vamos ao estudo dos registros de escrita e leitura da EEPROM do PIC em estudo. O 16F84 possui 64 Bytes que posso usar como memória de dados, e que diferente da RAM não perco as informações com a falta de alimentação . Esta memória facilita o projeto de circuitos, tais como : discadores telefônicos , códigos para sistemas de alarmes, ajustes em controle remoto, coletor de dados, etc. Iremos descrever o uso básico para leitura e escrita de dados. Temos 4 registros especiais para esta finalidade, são eles : EEADR – endereço desejado para leitura ou escrita na EEPROM. EEDATA – dado a escrever ou dado lido da EEPROM. EECON1 – registro de controle 1. EECON2 – registro de controle 2. 1) Escrevendo na EEPROM. - Coloco o endereço de escrita no EEADR ( 0 a 63 ou 0 a 3Fh). - O dado a ser escrito coloco em EEDATA. - Desabilito as interrupções (GIE = 0). - Habilito a escrita setando o bit WREN no registro EECON1. - Carrego o registro EECON2 com os valores 0x55 e 0xAA nesta seqüência(obrigatório). - A escrita deve ser iniciada setando o bit WR no registro EECON2. - Devo resetar o bit WREN no registro EECON1 (isto ira proteger o processo de escrita). - Agora aguardamos o bit WR ir para 0 , e após continuamos nossas rotinas ou usamos a

interrupção de escrita (bit EEIE no registro INTCON, associado ao bit EEIF do EECON1), para controle do final de escrita.

- Caso algum erro de escrita ocorra no processo o bit WRERR do registro EECON1 será setado.

Page 34: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

Nota : o registro EECON1 e descrito em Registros de controle da CPU em páginas anteriores. Vamos a um trecho de programa de escrita , iremos escrever no endereço 01h da EEPROM o valor 1Ch (00011010). escrita: bcf STATUS,RP0 ; seleciono banco0 movlw 0x1 ; w=1h movwf EEADR ; EEADR=w=1h movlw 0x1C ; w=1Ch movwf EEDATA ; EEDATA=w=1Ch bsf STATUS,RP0 ; seleciono banco1 para EECON1 bcf INTCON,GIE ; desabilito as int. bsf EECON1,WREN ; hab. escrita na EEPROM movlw 55H ; w=55h movwf EECON2 ; EECON2=55h movlw 0AAH ; w0=AAh movwf EECON2 ; EECON2=AAh bsf EECON1,WR ; inicia processo de escrita bcf EECON1,WREN ; desab. esc. EEPROM, não interfere na ; escrita(agora) controle: ; escolho uma rotina de controle de fim de ; escrita , vamos implementar uma bem simples ; (como exemplo) btfss EECON1,EEIF ; se bit EEIF=1 pula próxima instrução goto controle bcf EECON1,EEIF ; zero o bit EEIF (para novo controle de ; escrita) bsf INTCON,GIE ; habilito novamente as interrupções return Nota : este exemplo não tem o controle de erros , o ideal e fazer uma rotina usando a interrupção de fim de escrita e de erros. 2) Lendo na EEPROM. Podemos ler os dados a qualquer momento, bastando seguir os passos abaixo. - O endereço a ser lido deve ser colocado em EEADR. - A leitura deve ser habilitada setando o bit RD no registro EECON1. - O dado lido será colocado em EEDATA. Vamos a um trecho de programa onde iremos ler o dado contido no endereço 01h, o qual escrevemos no trecho anterior (escrita), e colocar a informação lida (1C, no caso) no endereço 10h na RAM de uso geral.

Page 35: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

leitura: bcf STATUS,RP0 ; seleciono banco0, onde esta EEADR movlw 0x1C ; w=1Ch movwf EEADR ; EEADR= w bsf STATUS,RPO ; sel.banco1 onde esta EECON1 bsf EECON1,RD ; hab. leitura bcf STATUS,RP0 ; volto ao banco0 onde esta EEDATA movf EEDATA,0 ; w= EEDATA que é o dado lido movwf 0x10 ; disponibilizo o dado no end.10h da ; RAM de uso geral, para uso qualquer return Não esgotamos de forma alguma, neste curso inicial a gama de recursos e aplicações de um MICROCONTROLADOR , mas esperamos ter conseguido iniciar nossos alunos neste campo maravilhoso da eletrônica atual , onde software e hardware andam juntos, onde o limite praticamente é criatividade e perseverança do projetista.

Page 36: Microcontrolador – 16F84Aseguidorsolar.com.br/obras/Microcontrolador3.pdf · Microcontrolador – 16F84A Os microcontroladores (uC) podem ser chamados de microcomputadores de um

AUTOR Maurício Madeira Oliveira Página pessoal (fonte): www.seguidorsolar.com.br Este curso pode ser usado e divulgado, sem fins comerciais, citar fonte e autor.

BIBLIOGRAFIA Microcontroladores – PIC , Engenheiro Vidal Pereira da Silva Jr. , edição independ. 1997. Desbravando o PIC , David José de Souza , Editora Érica. 2000. Microchip – Data Sheet , Microchip Technology Inc. 2001. Circuito Digitais , Herbert Taub , Editora McGRAW-HILL 1984. Display LCM , Polígrafos diversos (colhidos na Internet). Motor de Passo , Polígrafos diversos (colhidos na Internet). Sites : www.microchip.com www.mosaico-eng.com.br www.vidal.com.br www.ic-prog.com ( site com vários modelos de programadores e software gratuito).