Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Pr-requisitos: Conhecimentos bsicos em Eletrnica Digital e Analgica Abordagem: Conceitos bsicos A pergunta que no quer calar: PIC ou 8051? Arquitetura Harvard RISC x CISC O PIC16F84: Caractersticas, Pinagem Organizao das memrias: Memria de programa, Memria de dados Vetores, Pilha (Stack), Registradores Introduo s Interrupes Bits de Configurao, Circuitos de Clock e Reset Introduo ao Assembler do PIC - SET de Instrues Introduo ao MPLAB
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Conceitos:
evoluo tecnolgica e miniaturizao possvel integrar num nico chip todos os componentes de um computador. Podemos defini-lo como um chip dotado de uma inteligncia programvel, embora seja limitada a quantidade de informaes e instrues que pode executar, normalmente as limitaes de aplicaes so limitaes da imaginao, criatividade e experincia do projetista e programador. Microprocessador x Microcontrolador: Um microprocessador um circuito muito complexo, em forma de circuito integrado, que pode conter entre alguns milhares (Z80) at 7 milhes de transistores (Pentium II), constituindo os mais diversos circuitos lgicos. O microcontrolador integra num nico componente os trs elementos principais na arquitetura de um computador: CPU, memria e I/O. I/O: Pinos fsicos de entrada ou sada de dados para ou proveniente do mundo exterior, podem ser digitais ou analgicas. Memria: Registros fsicos onde so armazenados os dados e programas, os microcontroladores normalmente possuem duas: Memria de dados e Memria de programa, alguns microcontroladores possuem ainda EEPROM.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
A vantagem a simplicidade de acesso memria. Possui um barramento nico para acessar a memria (endereos, dados e controle) O grande inconveniente o fato de a memria de programa e de dados serem comuns, pois impede que se possa acessar ao programa e aos dados simultaneamente e muitas vezes o tamanho dos dados diferente do tamanho das instrues.
CPU Memory (Program & Data)
Existem duas memrias diferentes e independentes, uma para as instrues e outra para os dados. Isto permite realizar acessos simultneos a ambas as memrias. Esta arquitetura tende a executar as instrues em menos ciclos de relgio, melhorando a taxa de uso dos barramentos. As duas memrias podem tambm ter palavras de comprimento diferentes. No caso do PIC16F84 a memria de programa Flash e possui 1024 posies de 14 bits cada. A memria de dados tem uma capacidade muito menor e um tamanho tpico de 8 bits.
Memory (Data) CPU Memory (Program)
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Princenton x Harvard
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Pipeline de instrues em dois estgios: Fase de busca (fetch) Procura-se o cdigo binrio da instruo na memria do programa. Fase de execuo Interpreta-se o cdigo, buscam-se os operandos e executa-se a operao. Enquanto executa a fase de execuo de uma instruo, executa a fase de busca da instruo seguinte. Cada uma das fases realizada em 4 ciclos de relgio, porm as instrues de salto demoram 8 ciclos de relgio. Desta forma consegue-se executar cada instruo em quatro ciclos de relgio. Em um PIC16F84 a 4Mhz, o perodo de um ciclo de clock (1/4.000.000) = 0.25us, logo, o tempo de execuo de uma instruo comum 4*0.25us = 1us e de uma instruo com salto 8*0.25us = 2us. Pipeline de instrues sobrepe no tempo a busca e a execuo de instrues, fazendo com que a execuo destas seja em single cicle.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
O PIC16F84 Fabricado com a tecnologia CMOS Capaz de trabalhar at 10 Mhz. PIC16F84A Capaz de trabalhar at 20 Mhz Pequeno, s tem 18 pernas devido multiplexao de funo dos pinos. Barato. O PIC16F84A custa aproximadamente R$7,00. Memria de programa de 1K palavras de 14 bits FLASH, em que em cada uma cabe uma instruo. Pode ser regravada cerca de 10.000 vezes com toda a segurana Memria de dados RAM de 68 Bytes Memria de dados EEPROM de 64 Bytes, no voltil 8 nveis de stack (pilha) 35 instrues de 14 bits Tempo de execuo das instrues normais: 4xTosc Tempo de execuo das instrues de salto: 8xTosc 4 tipos de interrupes (External RB0/INT pin, TMR0 timer overflow, PORTB<7:4> interrupton-change, Data EEPROM write complete) 13 linhas de entradas/sada digitais 1 timer 1 watch-dog Alimentao de 2V a 6 V Gravao de 12V a 14V Encapsulamento DIP de 18 pernas (SOIC) Proteo de cdigo , SLEEP, PWRT
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Pinagem do PIC16F84 RA0-RA4 PORTA RB0-RB7 PORTB MCLR Master Clear OSC1/CLKIN Conexo do oscilador externo ou entrada de clock OSC2/CLKOUT Conexa do oscilador externo ou sada de clock RA4/TOCKI I/O RA4 ou entrada de clock externo para contador TMR0. RB0/INT I/O RB0 ou entrada para interrupo externa VDD Alimentao +5V (2-6V) VSS Terra do CI
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Arquitetura do PIC16F84
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Organizao da memria de programa do PIC 16F84 O PIC16F84 dispe de um contador de programa com 13 bits capaz de enderear 8K posies de memria de 14 bits. Neste C s se encontra implementado 1K com endereos de 0000h a 03FFh. A estrutura de stack apresenta um mximo de 8 nveis o que impe uma limitao em termos de chamadas a subrotinas dentro de outras subrotinas. O vetor de reset corresponde posio de memria 0000h enquanto que o vetor de interrupo se encontra na posio 0004h.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Organizao da memria de dados do PIC 16F84 A memria de dados do 16F84 encontra-se dividida em duas reas. A primeira a rea correspondente aos Registros de Funo Especial (SFR) enquanto que a segunda diz respeito aos Registros de Uso Geral. Os SFRs so utilizados para o controle do C. Uma das particularidades desta memria a sua diviso em dois Bancos (Banco 0 e Banco 1) sendo o acesso a cada um destes bancos controlado a partir do bit 5 do registro STATUS (RP0). No que diz respeito aos registros de uso geral, o banco 1 destes registos encontra-se mapeado no banco 0 o que quer dizer que qualquer acesso ao banco 1 feito na realidade sobre o banco 0.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Registros de Uso Geral Cada registro de uso geral tem uma largura de 8 bits e pode ser acedido diretamente ou indiretamente atravs do registro FSR (ver mais frente). Registros de Funo Especial Os Registros de Funo Especial so utilizados pelo CPU e pelos perifricos para o controle do C. Estes registros so implementados em RAM esttica.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Registro STATUS O registro STATUS contm as flags ligadas ALU, os flags de RESET e os bits de seleo do banco da memria de dados.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Registro OPTION_REG Trata-se de um registro que permite escrita e leitura e que contm vrios bits de controle para a configurao do divisor de frequncia (prescaler) do TMR0 / WDT, da interrupo externa INT, do TMR0 e das polarizaes (pull-ups) do PORTB.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Registro INTCON O registro INTCON contm os diferentes bits que permitem configurar o sistema de interrupes (enable /disable) e os flags de pedido de interrupo. Este registro pode ser lido ou escrito.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Registros PCL e PCLATH O contador de programa (PC) especifica o endereo da instruo a ser pesquisada ( fetch) da memria de programa para ser executada. No PIC16F84 o PC tem uma largura de 13 bits, estando os 8 bits menos significativos no registro PCL. Este registro pode ser lido ou escrito por software. O byte mais significativo do PC designado por PCH e contm os bits 12:8 do contador de programa. Este registro no pode ser escrito ou lido diretamente. Todas as operaes que seja necessrio efetuar sobre ele so feitas indiretamente sobre o registro PCLATH. STACK A estrutura de Pilha (stack) implementada no PIC16F84 permite a ocorrncia de combinaes de at 8 chamadas de subrotinas ou interrupes, permitindo armazenar os respectivos endereos de retorno. A utilizao desta estrutura da exclusiva responsabilidade da unidade de controle do C, no havendo por isso qualquer instruo de software que a permita manipular. Como possui 8 nveis de profundidade (8 deep level Stack), significa que se forem chamadas 8 subrotinas uma dentro da outra, a chamada de uma nona subrotina far com que o endereo de retorno da primeira seja definitivamente perdida (memria tipo FILO).
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Endereamento indireto: registros INDF e FSR O registro INDF (endereo 00h / 80H) no um registro fsico. O acesso a este registro (leitura ou escrita) conduz realmente ao registro cujo endereo se encontra no registro FSR. Este ltimo registro o ponteiro para as operaes com endereamento indireto.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Perifricos de Interfaceamento Timers/Counters; Watchdog timers (WDT); On-chip Oscillator Start-up Timer (OST)/ Power-up Timer (PWRT) Portas paralelas Coversores A/D Mdulos CCP (Capture/Compare/PWM) Mdulos I2C Mdulos SSP (Synchronous serial port) Addressable USART Conversor A/D
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Temporizador / Contador TMR0 O perifrico TMR0 apresenta as seguintes caractersticas principais: Funes de temporizador ou contador de 8 bits Possibilidade de leitura e de escrita do registro Possibilidade de seleo de relgio interno ou externo Divisor de freqncia de 8 bits programvel por software (Prescaler) Permite gerar uma interrupo quando ocorrer um overflow (passagem de FFh a 00h) O Timer0 pode funcionar como temporizador ou como contador. A seleo do modo de funcionamento feita atravs do bit T0CS ( Timer0 Clock Sourse, bit 5 do OPTION_REG). No modo temporizador, T0CS=0, o registro TMR0 incrementa em cada ciclo de instruo desde que no seja utilizado o Prescaler (divisor de freqncia). No modo contador, T0CS=1, o registro TMR0 incrementa em cada borda de subida ou de descida do sinal presente no pino exterior RA4/T0CKI. O bit T0SE (Timer0 Source Edge, bit 4 do OPTION_REG), determina se ser na borda de subida ou descida: T0SE=0 TOSE=1
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Prescaler O prescaler um divisor de freqncia programvel e constitudo por um contador de 8 bits associado a um multiplexador de 81, como se mostra na figura 16. Este prescaler partilhado pelo Timer0 e pelo Watchdog Timer, no podendo contudo ser usado simultaneamente pelos dois perifricos. Sendo assim, a atribuio do prescaler ao Timer0 significa que o Watchdog Timer funciona sem prescaler, e vice-versa.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Watchdog Timer (WDT) WDT permite a recuperao funcional da CPU em caso de perda do fluxo de execuo (ex. loops infinitos) Overflow do WDT reseta o chip O temporizador Watchdog constitudo por um oscilador interno RC, no necessitando de quaisquer outros componentes externos. Este oscilador totalmente independente do oscilador do C. Isto quer dizer que, mesmo que o oscilador principal no funcione (por exemplo no caso do C se encontrar no estado de SLEEP), o WDT continuar em funcionamento.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Portas de I/O Alguns dos pinos das portas de I/O apresentam funes alternativas (Multiplexadas) para a utilizao com alguns perifricos do C. Geralmente, quando essas funes so utilizadas, o respectivo bit no pode ser utilizado como I/O. PORTA e TRISA O registro PORTA implementa uma porta de I/O bidirecional com 5 bits, estando ligado aos pinos exteriores do C, RA0:RA4. O registro onde se define, para cada bit, se se trata de entrada ou sada de dados o TRISA. Colocando um bit do registro TRISA a 1 permite programar o respectivo bit do PORTA como entrada de dados. A escrita de um 0 num bit do registro TRISA programa o respectivo bit do PORTA como sada de dados. Aps uma operao de reset, qualquer um dos bits de I/O fica programado como entrada de dados. A leitura do registro PORTA permite fazer a leitura do estado dos pinos exteriores enquanto que uma operao de escrita sobre o mesmo registro coloca os valores de escrita nas Data Latch de sada.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
RA0 RA3
RA4
Exemplo de Configurao da PORTA clrf PORTA ;Zera o Data Latch da PORTA bsf STATUS,RP0 ;Muda para o banco 1 movlw b00011100 ;Configura pinos RA0 e RA1 como sadas movwf TRISA ;e RA2, RA3 e RA4 como entradas bcf STATUS,RP0 ;Volta para o banco 0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
PORTB e TRISB PORTB uma porta bidirecional de 8 bits que, como acontece com o PORTA, dispe tambm de um registro TRISB para a configurao dos bits como entrada ou sada de dados. Cada um dos bits do PORTB dispe de um pull-up interno que controlado pelo bit 7 do registro OPTION (RBPU). Quando este bit igual a 0, todos os pull-ups esto ativados. A configurao de um bit como sada de dados provoca automaticamente a desativao do respectivo pull-up. Quando feito o power-on reset, os pull-ups so desativados. Quatro dos bits do PORTB, RB7:RB4, permitem gerar uma interrupo sempre que h uma mudana de estado em qualquer um deles, desde que estejam programados como entrada de dados. Os bits de entrada so permanentemente comparados com o ltimo valor lido. Desde que seja encontrada uma diferena em qualquer um desses bits, ativado o flag RBIF de pedido de interrupo.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
RB0 RB3
RB4 RB7
Exemplo de Configurao da PORTB clrf PORTB ;Zera o Data Latch do PORTB bsf STATUS,RP0 ;Muda para o banco 1 movlw b11110000 ;Configura pinos RB0 a RB3 como sadas movwf TRISA ;e RA4 a RA7 como entradas bcf STATUS,RP0 ;Volta para o banco 0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Modo SLEEP Execuo da instruo Sleep; A CPU entra no modo de Power down; Consumo de 60uA (7mA operao normal) Caractersticas: WDT resetado, mas continua operando; Bit PD sinalizado (Status Register); Oscilador interno desligado; TMR0 desligado Modos de sada do estado sleep: Reset externo (MCLR); Time-out do WDT; Interrupo externa (RB0/INT); Interrupo de fim de escrita na EEPROM
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Interrupes O PIC16F84A dispe de um nico nvel de interrupo com 4 fontes de interrupo: Interrupo externa atravs do pino RB0/INT Interrupo provocada pelo overflow do TMR0 Interrupo provocada pela mudana de estado do PORTB (RB7:RB4) Interrupo provocada pelo fim da operao de escrita na E2PROM de dados O registro de controle das interrupes (INTCON) contm as diferentes flags de pedido de interrupo e os bits que permitem ativar ou desativar individualmente ou globalmente as diferentes interrupes. Na situao de reset, todos os bits correspondentes autorizao individual ou global das interrupes encontram-se desativados (T0IE = INTE = RBIE = EEIE = GIE = 0). Quando o C responde a um pedido de interrupo, o bit GIE colocado em 0 para no permitir mais nenhuma interrupo, o endereo de retorno colocado na stack e o PC carregado com o valor 0004h que o vetor de interrupo para este C. A rotina de servio de qualquer interrupo deve terminar sempre com a instruo RETFIE (RETurn From Interrupt Enable) que, alm de fazer o sistema retornar ao programa no local onde se verificou a interrupo, coloca tambm GIE = 1 permitindo de novo o acesso dos perifricos s interrupes.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Gerador de relgio oscilador O circuito do oscilador usado para fornecer um relgio (clock), ao microcontrolador. O clock necessrio para que o microcontrolador possa executar um programa ou as instrues de um programa. Tipos de osciladores O PIC16F84 pode trabalhar com quatro configuraes de oscilador. Uma vez que as configuraes com um oscilador de cristal e circuito RC so as mais freqentemente usadas, elas so as nicas que vamos mencionar aqui. Quando o oscilador de cristal, a designao da configurao de XT, se o oscilador for constitudo apenas por uma associao em srie de um resistor e um capacitor, tem a designao RC. Isto importante, porque h necessidade de se optar entre os diversos tipos de oscilador, quando se escolhe um microcontrolador, e no caso do PIC essa opo configurada via software. Oscilador XT O oscilador de cristal est contido num envlucro de metal com dois pinos onde foi escrita a frequncia a que o cristal oscila. Dois capacitores cermicos devem ligar cada um dos pinos do cristal massa. Quando o cristal e os capacitores esto contidos no mesmo encapsulamento, chamado de ressonador cermico. Este elemento tem trs pinos com o pino central ligado massa e os outros dois pinos ligados aos pinos OSC1 e OSC2 do microcontrolador.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Reset O reset usado para pr o microcontrolador num estado conhecido. Na prtica isto significa que s vezes o microcontrolador pode comportar-se de um modo inadequado em determinadas condies indesejveis. A fim de que o seu funcionamento normal seja reestabelecido, preciso fazer o reset do microcontrolador, isto significa que todos os seus registos vo conter valores iniciais pr-definidos, correspondentes a uma posio inicial. O reset no usado somente quando o microcontrolador no se comporta da maneira que ns queremos, mas, tambm pode ser usado, quando ocorre uma interrupo por parte de outro dispositivo, ou quando se quer que o microcontrolador esteja pronto para executar um programa . O microcontrolador PIC16F84, admite vrias formas de reset: a) Reset quando se liga a alimentao, POR (Power-On Reset) b) Reset durante o regime de SLEEP (dormir). c) Reset durante o funcionamento normal, quando se pe a nvel lgico baixo o pino MCLR . d) Reset quando o temporizador do watchdog (WDT) transborda (passa para 0 depois de atingir o valor mximo). e) Reset quando o temporizador do watchdog (WDT) transborda estando no regime de SLEEP.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Oscilador RC Em aplicaes em que a preciso da temporizao no um fator crtico, o oscilador RC torna-se mais econmico. A frequncia de ressonncia do oscilador RC depende da tenso de alimentao, dos valores de RC e da temperatura de funcionamento.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Sintaxe ADDLW k ADDWF f,d ANDLW k ANDWF f,d BCF f,b BSF f,b BTFSC f,b BTFSS f,b CALL k CLRF f CLRW CLRWDT COMF f,d DECF f,d DECFSZ f,d
Descrio Microchip Add Literal and W Add W and f AND Literal with W AND W with f Bit Clear f Bit Set f Bit Test f, Skip if Clear Bit Test f, skip if Set Subroutine Call Clear f Clear W Register Clear Watchdog Timer Complement f Decrement f Decrement f, Skip if 0
Operao equivalente W=W+k d = W + f (onde d pode ser W ou f) W = W AND k d = W AND f (onde d pode ser W ou f) f(b) = 0 f(b) = 1 f(b) = 0 ? Se , salta uma instruo f(b) = 1 ? Se , salta uma instruo Chamada a uma subrotina no endereo k f=0 W=0 Watchdog timer = 0 d = not f (onde d pode ser W ou f) d = f -1 (onde d pode ser W ou f) d = f -1 (onde d pode ser W ou f) se d = 0 salta
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Sintaxe GOTO k INCF f,d INCFSZ f,d IORLW k IORWF f,d MOVLW k MOVF f,d MOVWF f NOP OPTION RETFIE RETLW k RETURN RLF f,d RRF f,d
Descrio Microchip Go to address Increment f Increment f, Skip if 0 Inclusive OR Literal with W Inclusive OR W with f Move literal to W Move f Move W to f No Operation Load Option Register Return from Interrupt Return Literal to W Return from Subroutine Rotale Left f through Carry Rotale Right f through Carry
Operao equivalente salta para o endereo k d = f +1 (onde d pode ser W ou f) d = f +1 (onde d pode ser W ou f) se d = 0 salta W = W OR k d = f OR W (onde d pode ser W ou f) W=k d = f (onde d pode ser W ou f) f=W Nenhuma operao OPTION = W Retorna de uma interrupt handler Retorna de uma subrotina com W = k Retorna de uma subrotina d = f << 1 (onde d pode ser W ou f) d = f >> 1 (onde d pode ser W o f)
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Sintaxe SLEEP SUBLW k SUBWF f,d SWAPF f TRIS f XORLW k XORWF f,d
Descrio Microchip Go into Standby Mode Subtract W from Literal Subtract W from f Swap f Load TRIS Register Exclusive OR Literal with W Exclusive OR W with f
Operao equivalente Coloca o PIC em standby W=k-W d = f - W (onde d pode ser W ou f) f = Swap do bit 0123 com 4567 de f TRIS di f = W W = W XOR k d = f XOR W (onde d pode ser W ou f)
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - ADDLW
ADDLW Soma um literal a W
Sintaxe: [label] ADDLW k Operandos: 0 k 255 Operao: : (W) + (k)==> (W) Flags afectadas: C, DC, Z Cdigo OP: 11 111x kkkk kkkk Descrio: Soma o contedo do registo W e k, guardando o resultado em W.
Exemplo:
ADDLW 0xC2
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - ADDWF
ADDWF W + F
Sintaxe: [label] ADDWF f,d Operandos: d [0,1], 0 f 127 Operao: (W) + (f) ==> (dest) Flags afectadas: C, DC, Z Cdigo OP: 00 0111 dfff ffff Descrio: Soma o contedo do registo W com o registo f. Se d 0, o resultado armazena-se em W, Se d 1 armazena-se em f. Exemplo: ADDWF REG,0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - ANDLW
ANDLW W AND literal
Sintaxe: [label] ANDLW k Operandos: 0 k 255 Operao: : (W) AND (k)==> (W) Flags afectadas: Z Cdigo OP: 11 1001 kkkk kkkk Descrio: Realiza a operao lgica AND entre o contedo do registo W e k, guardando o resultado em W. Exemplo: ADDLW 0xC2
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - BCF
BCF Apaga um bit
Sintaxe: [label] BCF f,b Operandos: 0 f 127, 0 b 7 Operao: : 0 ==> (f<b>) Flags afectadas: nenhum Cdigo OP: 01 00bb bfff ffff Descrio: Apaga o bit b do registo f
BCF REG,7
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - BSF
BSF Activa um bit
Sintaxe: [label] BSF f,b Operandos: 0 f 127, , 0 Operao: 1 ==> (f<b>) Flags afectadas: nenhum Cdigo OP: 01 01bb bfff
ffff
Exemplo:
BSF REG,7
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - BTFSC
BTFSC Testa o bit e salta se for 0
Sintaxe: [label] BTFSC f,d Operandos: d [0,1], 0 f 127 Operao: Salto Se (f<b>) = 0 Flags afectadas: nenhum Cdigo OP: 01 10bb bfff ffff Descrio: Se o bit b do registo f 0, salta uma instruo e continua com a execuo. Em caso de salto, ocupar dois ciclos de relgio. Exemplo: BTFSC REG,6 GOTO NO_ES_0 SI_ES_0 instruo NO_ES_0 instruo
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - BTFSS
BTFSS Testa o bit e salta se for 1
Sintaxe: [label] BTFSS f,d Operandos: d [0,1], 0 f 127 Operao: Salto Se (f<b>) = 1 Flags afectadas: nenhum Cdigo OP: 01 11bb bfff ffff Descrio: Se o bit b do registo f 1, salta uma instruo e continua com a execuo. Em caso de salto, ocupar dois ciclos de relgio. Exemplo: BTFSS REG,6 GOTO NO_ES_0 SI_ES_0 instruo NO_ES_0 instruo
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - CALL
CALL Salta para subrotina
Sintaxe: [label] CALL k Operandos: 0 k 2047 Operao: PC ==> pilha; k ==> PC Flags afectadas: nenhum Cdigo OP: 10 0kkk kkkk kkkk Descrio: Salta para uma subrotina. A parte baixa de k carregada em PCL, e a alta em PCLATCH. Ocupa 2 ciclos de relgio. Exemplo: ORIGEM CALL DESTINO Antes: PC = ORIGEM Depois: PC = DESTINO
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - CLRF
CLRF Apaga um registo
Sintaxe: [label] CLRF f Operandos: 0 f 127 Operao: : 0x00 ==> (f), 1 ==> Z Flags afectadas: Z Cdigo OP: 00 0001 1fff ffff Descrio: O registo f carregado com 0x00. A flag Z activada.
Exemplo: :
CLRF REG
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - CLRW
CLRW Apaga o registo W Sintaxe: [label] CLRW Operandos: nenhum Operao: : 0x00 ==> W, 1 ==> Z Flags afectadas: Z Cdigo OP: 00 0001 0xxx xxxx Descrio: O registo de trabalho W carregado com 0x00. A flag Z activada. Exemplo: : CLRW
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - CLRWDT
CLRWDT Apaga o WDT
Sintaxe: [label] CLRWDT Operandos: nenhum Operao: 0x00 ==> WDT, 1 ==> /TO 1 ==> /PD Flags afectadas: /TO, /PD Cdigo OP: 00 0000 0110 0100 Descrio: Esta instruo apaga tanto o WDT como o seu preescaler. Os bits /TO e /PD do registo de estado so colocados a 1. Exemplo: : CLRWDT Depois: Contador WDT = 0, Preescales WDT = 0, /TO = 1, /PD = 1
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - COMF
COMF Complemento de f
Sintaxe: [label] COMF f,d Operandos: d [0,1], 0 f 127 Operao: : (/ f), 1 ==> (dest) Flags afectadas: Z Cdigo OP: 00 1001 dfff ffff Descrio: O registo f complementado. A flag Z activada se o resultado 0. Se d 0 o resultado armazenado em W. Se d 1 armazenado em f. Exemplo: : COMF REG,0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - DECF
DECF Decremento de f
Sintaxe: [label] DECF f,d Operandos: d [0,1], 0 f 127 Operao: : (f ) - 1 ==> (dest) Flags afectadas: Z Cdigo OP: 00 0011 dfff ffff Descrio: Decrementa contedo de f. Se d 0, o resultado armazenado em W, Se d 1 armazenado em f.
Exemplo: :
DECF CONT,1
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - DECFSZ
DECFSZ Decremento e salta se 0 Sintaxe: [label] DECFSZ f,d Operandos: d [0,1], 0 f 127 Operao: (f) -1 ==> d; Salto Se R=0 Flags afectadas: nenhum Cdigo OP: 00 1011 dfff ffff Descrio: Decrementa o contedo do registo f. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Se o resultado 0 salta uma instruo e ocuparia 2 ciclos. Exemplo: DECFSZ REG,0 GOTO NO_ES_0 SI_ES_0 instruo NO_ES_0 Salta instruo anterior
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - GOTO
GOTO Salto incondicional
Sintaxe: [label] GOTO k Operandos: 0 k 2047 Operao: k ==> PC <8:0> Flags afectadas: nenhum Cdigo OP: 10 1kkk kkkk kkkk Descrio: Trata-se de um salto incondicional. A parte baixa de k carregada em PCL, e a alta em PCLATCH. Ocupa 2 ciclos de relgio. Exemplo: ORIGEM GOTO DESTINO Antes: PC = ORIGEM Depois: PC = DESTINO
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - INCF
INCF Incremento de f
Sintaxe: [label] INCF f,d Operandos: d [0,1], 0 f 127 Operao: : (f ) + 1 ==> (dest) Flags afectadas: Z Cdigo OP: 00 1010 dfff ffff Descrio: Incrementa o contedo de f. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Exemplo: : INCF CONT,1
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - INCFSZ
INCFSZ Incremento e salta se 0 Sintaxe: [label] INCFSZ f,d Operandos: d [0,1], 0 f 127 Operao: (f) -1 ==> d; Salto Se R=0 Flags afectadas: nenhum Cdigo OP: 00 1111 dfff ffff Descrio: Incrementa o contedo do registo f. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Se o resultado 0 salta a instruo seguinte, em cujo caso demoraria 2 ciclos. Exemplo: INCFSC REG,0 GOTO NO_ES_0 SI_ES_0 instruo NO_ES_0 Salta instruo anterior
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - IORLW
IORLW W OR literal
Sintaxe: [label] IORLW k Operandos: 0 k 255 Operao: : (W) OR (k)==> (W) Flags afectadas: Z Cdigo OP: 11 1000 kkkk kkkk Descrio: Realiza a operao lgica OR entre o contedo do registo W e k, guardando o resultado em W. Exemplo: IORLW 0x35
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - IORLWF
IORWF W OR F
Sintaxe: [label] IORWF f,d Operandos: d [0,1], 0 f 127 Operao: (W) OR (f) ==> (dest) Flags afectadas: Z Cdigo OP: 00 0100 dfff ffff Descrio: Realiza a operao lgica OR entre os registos W e f. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Exemplo: : IORWF REG,0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - MOVLW
MOVLW Carregar literal em W
Sintaxe: [label] MOVLW f Operandos: 0 f 255 Operao: (k) ==> (W) Flags afectadas: nenhum Cdigo OP: 11 00xx kkkk kkkk Descrio: O literal k passa ao registo W.
Exemplo:
MOVLW 0x5A
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - MOVF
MOVF Mover f para W
Sintaxe: [label] MOVF f,d Operandos: d [0,1], 0 f 127 Operao: (f) ==> (dest) Flags afectadas: Z Cdigo OP: 00 1000 dfff ffff Descrio: O contedo do registo f movido para o destino dependendo de d. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Quando d 1 permite verificar o registo, j que afecta a Z. Exemplo: Depois: W = REG MOVF REG,0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - MOVWF
MOVWF Mover W para f
Sintaxe: [label] MOVWF f Operandos: 0 f 127 Operao: W ==> (f) Flags afectadas: nenhum Cdigo OP: 00 0000 1fff ffff Descrio: O contedo do registo W passa para o registo f.
Exemplo:
MOVWF REG,0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - NOP
NOP No operao
Sintaxe: [label] NOP Operandos: nenhum Operao: No operar Flags afectadas: nenhum Cdigo OP: 00 0000 0xx0
0000
Descrio: No realiza nenhuma operao. Na realidade consome um ciclo de instruo sem fazer nada.
Exemplo:
NOP
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - RETFIE
RETFIE regresso de interrupo
Sintaxe: [label] RETFIE Operandos: nenhum Operao: : 1 ==> GIE; TOS==>PC Flags afectadas: nenhum Cdigo OP: 00 0000 0000 1001 Descrio: o PC carregado com o contedo de cima da pilha (TOS): direco de regresso. Consome 2 ciclos. As interrupes voltam a ser habilitadas. Exemplo: : RETFIE Depois: PC = direco de regresso GIE = 1
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - RETLW
RETLW regresso de uma subrotina, com o valor em W
Sintaxe: [label] RETLW k Operandos: 0 k 255 Operao: : (k)==> (W); TOS==>PC Flags afectadas: nenhum Cdigo OP: 11 01xx kkkk kkkk Descrio: O registo W carregado com a constante k. O PC carregado com o contedo de cima da pilha (TOS): direco de regresso. Consome 2 ciclos. Exemplo: : RETLW 0x37 Depois: PC = direco de regresso W = 0x37
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - RETURN
RETURN regresso de rotina Sintaxe: [label] RETURN Operandos: nenhum Operao: : TOS ==> PC Flags afectadas: nenhum Cdigo OP: 00 0000 0000
1000
Descrio: O PC carregado com o contedo de cima da pilha (TOS): direco de regresso. Consome 2 ciclos. Exemplo: : RETURN
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - RLF
RLF roda f para a esquerda
Sintaxe: [label] RLF f,d Operandos: d [0,1], 0 f 127 Operao: Rotao a a esquerda Flags afectadas: C Cdigo OP: 00 1101 dfff ffff Descrio: O contedo de f rodado para a esquerda. O bit de menor peso de f passa para o carry (C), e o carry colocado no de maior peso. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Exemplo: RLF REG,0
Antes: REG = 1110 0110, C = 0 Depois: REG = 1110 0110, W = 1100 1100, C = 1
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - RRF
RRF roda f para a direita
Sintaxe: [label] RRF f,d Operandos: d [0,1], 0 f 127 Operao: Rotao a a direita Flags afectadas: C Cdigo OP: 00 1100 dfff ffff Descrio: O contedo de f rodado para a direita. O bit de menos peso de f passa para o carry (C), e o carry colocado no de maior peso. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Exemplo: RRF REG,0
Antes: REG = 1110 0110, C = 1 Depois: REG = 1110 0110, W = 1111 0011, C = 0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - SLEEP
SLEEP Modo baixo consumo Sintaxe: [label] SLEEP Operandos: nenhum Operao: 0x00==>WDT, 1 ==> / TO 0 ==> WDT Preescaler, 0 ==> / PD Flags afectadas: / PD, / TO Cdigo OP: 00 0000 0110 0011 Descrio: O bit de energia colocado a 0, e a 1 o de descanso. O WDT e o seu preescaler so apagados. o micro pra o oscilador, ficando adormecido. Exemplo: : SLEEP Preescales WDT = 0, /TO = 1, /PD = 1
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - SUBLW
SUBLW Subtrai W ao literal
Sintaxe: [label] SUBLW k Operandos: 0 k 255 Operao: ( k ) - (W) ==> (W) Flags afectadas: Z, C, DC Cdigo OP: 11 110x kkkk kkkk Descrio: Mediante o mtodo do complemento para dois o contedo de W subtrado ao literal. O resultado armazenado em W.
Exemplos:
SUBLW
0x02
Antes:W=1,C=?. Depois: W=1, C=1 Antes:W=2,C=?. Depois: W=0, C=1 Antes:W=3,C=?.Depois:W=FF,C=0 (o resultado negativo)
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - SUBLWF
SUBWF Subtrai W ao f
Sintaxe: [label] SUBWF f,d Operandos: d [0,1], 0 f 127 Operao: ( f ) - (W )==> (dest) Flags afectadas: C, DC, Z Cdigo OP: 00 0010 dfff ffff Descrio: Mediante o mtodo do complemento para dois o contedo de W subtrado ao de f. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Exemplos: SUBWF REG,1 Antes: REG = 0x03, W = 0x02, C = ? Depois:REG=0x01, W = 0x4F, C=1 Antes: REG = 0x02, W = 0x02, C = ? Depois:REG=0x00, W =0x02, C= 1 Antes: REG= 0x01, W= 0x02, C= ? Depois:REG=0xFF, W=0x02, C= 0 (Resultado negativo)
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - SWAPF
SWAPF Troca de f
Sintaxe: [label] SWAPF f,d Operandos: d [0,1], 0 f 127 Operao: : (f <3: 0>) (f <7:4>) Flags afectadas: nenhum Cdigo OP: 00 1110 dfff ffff Descrio: Os 4 bits de maior peso e os 4 de menor so trocados. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Exemplo: SWAPF REG,0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - XORLW
XORLW W XOR literal
Sintaxe: [label] XORLW k Operandos: 0 k 255 Operao: : (W) XOR (k)==> (W) Flags afectadas: Z Cdigo OP: 11 1010 kkkk kkkk Descrio: Realiza a operao lgica XOR entre o contedo do registo W e k, guardando o resultado em W. Exemplo: : Antes: W = 0xB5 Depois: W = 0x1A XORLW 0xAF
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Instrues - XORLW
XORWF W XOR F
Sintaxe: [label] XORWF f,d Operandos: d [0,1], 0 f 127 Operao: (W) XOR (f) ==> (dest) Flags afectadas: Z Cdigo OP: 00 0110 dfff ffff Descrio: Realiza a operao lgica XOR entre os registos W e f. Se d 0, o resultado armazenado em W. Se d 1 armazenado em f. Exemplo: : XORWF REG,0
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Bits de configurao Os bits de configurao podem ser programados de maneira a selecionar diferentes tipos de configurao do microcontrolador.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Diretivas de controle #DEFINE Troca de uma poro de texto por outra Sintaxe: #define<nome> [< texto atribudo a nome > ] Descrio: De cada vez que a palavra <nome> aparece no programa, vai ser substituda por <texto atribudo a nome>. Exemplo1: #DEFINE banck0 bcf #DEFINE banck1 bsf STATUS,RP0 STATUS,RP0 ;Seta BANCK0 de memria ;Seta BANCK1 de memria
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
#INCLUDE Incluir um ficheiro adicional num programa Sintaxe: #include <<nome_do_ficheiro>> #include <nome_do_ficheiro> Descrio: A aplicao desta diretiva faz com que um ficheiro completo seja copiado para o local em que a diretiva include se encontra. Se o nome do ficheiro estiver entre aspas, estamos lidando com um ficheiro do sistema, se no estiver entre aspas, mas sim entre os sinais < >, trata-se de um ficheiro do utilizador. A diretiva include, contribui para uma melhor apresentao do programa principal. Exemplo: #INCLUDE <P16F84A.INC> ;Arquivo Padro Microchip para PIC16F84A
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
ORG Define o endereo a partir do qual o programa armazenado na memria do microcontrolador Sintaxe: <rtulo> org <valor> Descrio: Esta a diretiva mais frequentemente usada. Com esta diretiva ns definimos em que parte na memria de programa o programa vai comear. Exemplo: Inicio org 0x00 movlw 0xFF movwf PORTB Estas duas instrues a seguir directiva 'org', so guardadas a partir do endereo 00.
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
END Fim do programa Sintaxe: end Descrio: No fim do programa, necessrio colocar a diretiva 'end', para que o tradutor do assembly (assembler), saiba que no existem mais instrues no programa. Exemplo: . . movlw 0xFF movwf PORTB end
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
Directivas de Dados 4.16 CBLOCK Definir um bloco para as constantes nomeadas Sintaxe: Cblock [< termo >] <rtulo> [:<incremente>], <rtulo> [:<incremente>]...... endc Descrio: Esta directiva usada para atribuir valores s constantes a seguir nomeadas. A cada termo seguinte, atribudo um valor superior em uma unidade ao anterior. No caso de <incremente> estar preenchido, ento o valor de <incremente> que adicionado constante anterior. O valor do parmetro <termo>, o valor inicial. Se no for dado, ento, por defeito, considerado igual a zero. Exemplo: cblock 0x02 primeiro, segundo ; primeiro = 0x02, segundo = 0x03 terceiro ;terceiro = 0x04 endc
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica
__CONFIG Estabelecer os bits de configurao Sintaxe: __config<termo> ou __config <endereo>, <termo> Descrio: So definidos o tipo de oscilador, e a utilizao do watchdog e do circuito de reset interno. Antes de usar esta diretiva, tem que declarar o processador atravs da directiva PROCESSOR. Exemplo: __CONFIG _CP_OFF & _WDT_OFF & PWRTE_ON & _XT_OSC PROCESSOR Definindo o modelo de microcontrolador Sintaxe: processor <tipo_de_microcontrolador> Descrio: Esta diretiva, estabelece o tipo de microcontrolador em que o programa vai correr. Exemplo: processor 16f84
2006 UPE POLI Escola Politcnica de Pernambuco Carlos Alberto Cunha Engenharia Eletrnica