Microcontrolador PIC 16F877 Parte 1 Instruções de MOV, e PORT
Microcontrolador PIC 16F877 Termos utilizados nas instruções: Campo f w ou W b k d Descrição registro entre 0 e 127 registro Work bit utilizado pela operação ( 0 até 7 ) Constante ou label Destino do resultado d = 0, resultado é armazenado em W d = 1, resultado é armazenado no próprio registro indicado na operação
Microcontrolador PIC 16F877 Termos utilizados nas instruções: Representação Numérica Decimal: D?? ou.?? Ex: D 20 ou.20 Hexadecimal: H??, 0X?? ou??h Ex: H 2F ou 2FH 0X2F Binário: B???????? Ex: B 01101101
MOVLW k Descrição: Movimenta uma constante k para o registro w Operação: w = k Limites: (0 a 255) para W Nro de Ciclos: 1 Registros afetados: nenhum Exemplo: antes da instrução o valor de w???? MOVLW B 10011001 w = 10011001 (Binário) MOVLW 0x99 w = 99H (Hexa) MOVLW.153 w = 153 (Decimal)
MOVWF f Descrição: Movimenta W para o registro da memória com endereço f Operação: f = w Limites: 0 a 127 Nro de Ciclos: 1 Registros afetados: nenhum Exemplo: MOVWF AUX AUX = w OBS: AUX é uma constante que deve ser definida em uma posição de memória
Exemplo: NA = 3; MOVLW.3 w = 3 MOVWF NA NA = w NB = 6; MOVLW.6 w = 6 MOVWF NB NB = w
MOVF f,d Descrição: Movimenta o valor de (f) para um destino (d) Operação: d = f Se d=0 o destino é o W Se d=1 o destino é o próprio f. Se d for omitido assume-se 1 como valor default. Limites: 0 a 127 Nro de Ciclos: 1 Registros afetados: Z (STATUS) Exemplo: MOVF AUX,W W = AUX MOVF AUX,0 W = AUX logo Z=1) MOVF AUX,1 AUX = AUX (se AUX=0 então Z=1) (se AUX=1 então Z=0)
PORT Para ter acesso a qualquer porta é necessário se conhecer o hardware e fazer as configurações pertinentes. 1º Verificar qual banco de memória se encontra o registrador da PORT; 2º Selecionar o banco; 2º Carregar o registrador W com o valor a ser configurado; 3º Mover o registrador W para o registrador TRIS; 4º Selecionar o banco 0.
Microcontroladores
Selecionando um banco de memória bsf STATUS,RP0 ; seleciona banco 1 movlw B'00000000' ; w = 0 movwf TRISB ; configura PORTB saída bcf STATUS,RP0 ; seleciona banco 0 Notar que há 2 instruções novas BCF BSF
Microcontrolador PIC 16F877 Registradores de função Especial STATUS (03h, 83h, 103h e 183h) mostra o estado a ULA Bit7 Seleciona banco de memória p/ endereçamento indireto BIT6..5 Selecionam banco de memória para endereçamento direto 00 Bank0 01 Bank1 10 Bank2 11 Bank 3 Bit4 Indica que houve um estouro do Watchdog timer (WDT) 1 = depois da energização 0 = ocorreu estouro do WDT Bit3 0 = indica que está no modo de baixo consumo SLEEP Bit2 Flag de zero Z 0 = a última operação realizada na ULA não foi zero 1 = a última operação realizada na ULA foi zero Bit1 Carry/Borrow ou estouro de nibble na ultima operação da ULA. 1 = indica que houve estouro de nibble (bit3) Bit0 Carry ou estouro de byte na ultima operação da ULA. 1 = indica que houve estouro de byte (bit 7)
Instruções de BIT (): Descrição: Seta o BIT (b) do registrador f. Registros afetados: Nenhum Exemplo: Configurando o Registrador STATUS BSF STATUS,C C = 1 BSF STATUS,0 C = 1 BSF STATUS,5 RP0 = 1 BSF STATUS,RP0 RP0 = 1 BSF STATUS,2 Z = 1 BSF STATUS,Z Z = 1 BSF f,b
Instruções de BIT (): Descrição: Zera o BIT (b) do registrador f. Registros afetados: Nenhum Exemplo: BCF f,b Configurando o Registrador STATUS BCF STATUS,C C = 0 BCF STATUS,0 C = 0 BCF STATUS,5 RP0 = 0 BCF STATUS,RP0 RP0 = 0 BCF STATUS,2 Z = 0 BCF STATUS,Z Z = 0
Movimentação para uma PORT Fluxograma inicio Configuração Carrega W principal Move para uma PORT FIM
Movimentação para uma PORT Acender um LED Fluxograma inicio Configuração principal Carrega W com valor 1 Move para uma PORT FIM
Movimentação para uma PORT Acender um LED
Programa inicio: movlw B'00000000' ; w = 0 movwf INTCON ; Desabilita as interrupções bsf STATUS,RP0 ; seleciona banco 1 movlw B'00000000' ; w = 0 movwf TRISB ; configura PORTB saída bcf STATUS,RP0 ; seleciona banco 0 principal: movlw.1 ; w = 1 movwf PORTB,0 ; LED L1 da placa END ATENÇÃO PEGAR PROGRAMA MODELO
Analise o circuito abaixo e escreva um programa para mostrar nos led s o número 8 em binário...