Ir ao conteúdo
  • Cadastre-se

Ajuda com pic, postei esquema


Posts recomendados

seguinte, estou ha um tempo aprendendo a programar pic em assmbly sem ajuda

li de cabo a rabo datasheet varias vezes, e chega uma hora que nao ha mais o que fazer, eu gostaria então de pedir que vc6 compartilhassem um pouco de sabedoria e me ajudassem a entender,

PORQUE NAO FUNCIONA!!!!????

:angry:

ja tentei de tudo, mudar varias vezes as configuracoes e em vez de chegar mais perto parece que estou cada vez mais longe, eu tinha ate conseguido fazer um led piscar, mas ao tentar adicionar comandos simples (que ja estava usando e funcionando) parou de vez

ja testei varios pics e todos se comportam igual

cod protect off todas as vezes

ok ja vi um erro, option_reg é bank1 ou 3

mas o real problema eu acho que seria configurar o mplab para compilar direito e gerar o .hex certo, porque eu estou gravando com sucesso(ate da para abrir e conferir o .hex com o pickit2 se esta gravado no pic, e esta)

porque o que acontece e o seguinte:

apesar disso:

w098pvn7gme703sd76eq.jpg

NAO FUNCIONA!!!!

=/

se alguem poder me me ajudar, ou pelo menos ter a paciencia de ler fico grato :D

Link para o comentário
Compartilhar em outros sites

o que que não funciona?

Talvez algum erro na montagem?

valeu velho, consegui

vario0s problemas q fui aprendendo xDD

nao tava incluindo o documento com os enderecos `pic16f628a.INC(eu nao lembrava que tinha)

ai dps eu tava escrevendo o codigo errado mesmo =PP

so nao consegui fazer funcionar essa tal da ra4

vou posta o codigo pra ficar de exemplo no forum pra quem quiser usar

pic16f628a com oscilador interno e timer0 int ai quem quiser so pegar e modificar o resto

valeu

	list      p=16F628A           ; list directive to define processor
#include <p16F628A.inc> ; processor specific variable definitions

errorlevel -302 ; suppress message 302 from list file


__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.



;***** VARIABLE DEFINITIONS (examples)
CBLOCK 0x20
contador1
contador2
contador3
flags
ENDC

#DEFINE flag_led flags,0
; example of using Shared Uninitialized Data Section


;**********************************************************************
org 0 ; processor reset vector
goto main ; go to beginning of program


org 4 ; interrupt vector location
CALL interrupcao
retfie ; return from interrupt

interrupcao

btfsc INTCON,T0IF ;TESTA SE OCORREU TIMER 0 OVERFLOW INTERRUPT
goto $+2 ;SE OCORREU VAI PARA ROTINA DO TIMER0
return ;SE NAO OCORREU NAO DEVIA NEM ESTAR AQUI, VERIFICAR SE HA ALGUMA INTERRUPCAO

call timer_interrupcao
return
timer_interrupcao

clrf INTCON ;limpa flags de int
nop

movlw b'00000110' ;coloca 6 no timer0
movwf TMR0

bsf STATUS,RP0

nop
movlw b'11000010' ;rb pull up disabled, internal clock, prescaler no timer0, 1/8
movwf OPTION_REG

bsf INTCON, T0IE ;liga timer0 int
BSF INTCON, GIE ;liga interrupcoes

bcf STATUS,RP0

nop
decfsz contador1
return
movlw b'00100010'
movwf contador1
decfsz contador2
return
movlw b'01010010'
movwf contador2
btfsc flag_led
goto $+3
bsf flag_led
return
bcf flag_led
return

main


bsf STATUS,RP0

nop
CLRF PCON
nop
BSF PCON, 3
nop
nop
nop
nop
nop
MOVLW b'11000010' ;rb pull up disabled, prescaler no timer0 e timer0 rate 1:8
movwf OPTION_REG
nop

bcf STATUS,RP0

nop
movlw b'00000111' ;desliga comparadores
movwf CMCON
movlw b'00000000' ;desliga iinterrupcoes
movwf INTCON
clrf PORTA ;limpa
nop
clrf PORTB

bsf STATUS,RP0

nop
movlw b'00100000' ;seta todo saida menos port5 que nao tem saida
movwf TRISA
nop
movlw b'00000000' ;seta todas saidas
movwf TRISB
nop

bcf STATUS,RP0

nop
clrf PORTA
nop
movlw b'11011111' ;precisa configurar 1 saida ainda
movwf PORTA ;liga saidas do portA
nop
clrf PORTB
nop
movlw b'11111111'
movwf PORTB ;liga saidas do portB

clrf TMR0
clrf INTCON

movlw b'00000110' ;coloca 6 no timer0
movwf TMR0

bsf STATUS,RP0

movlw b'01000010' ;rb pull up disabled, internal clock, prescaler no timer0, 1/8
movwf OPTION_REG

bcf STATUS,RP0

bsf INTCON, T0IE ;liga timer0 int
BSF INTCON, GIE ;liga interrupcoes

movlw b'00110010'
movwf contador1
movlw b'00110010'
movwf contador2
movlw b'11011110'
movwf contador3

bcf flag_led
; remaining code goes here

goto programa ; loop forever, remove this instruction, for test only


programa ;fica piscando portb com o tempo definido dentro do tmr0 interrupt

btfsc flag_led
goto $+4
movlw b'00000000'
movwf PORTB
goto programa
movlw b'11111111'
movwf PORTB

goto programa

; initialize eeprom locations

END ; directive 'end of program'

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

RA4 não deve estar funcionando como você esperava por ser de dreno aberto e não pode ser usada como saída digital da mesma forma que as outras. Dê uma olhada no datasheet (40044f.pdf), página 35 figura 5.4. A saída vai para a porta de um FET, cuja fonte está conectada a VSS e o dreno ao pino RA4 do PIC.

Link para o comentário
Compartilhar em outros sites

RA4 não deve estar funcionando como você esperava por ser de dreno aberto e não pode ser usada como saída digital da mesma forma que as outras. Dê uma olhada no datasheet (40044f.pdf), página 35 figura 5.4. A saída vai para a porta de um FET, cuja fonte está conectada a VSS e o dreno ao pino RA4 do PIC.

valeu amigo, uma imagem diz todo, dei uma olhada por ae

vou tentar por um resistor pra puxa pra cima a tensão como estão falndo por ae e testar dps :P

Link para o comentário
Compartilhar em outros sites

estou com mais dificuldades...

que coisa doida.. nao compreendo...

estou tentando mover um valor para um registrador mas quando movo um valor aparece outro totalmente diferente dentro dele...

assembly fede poxa...

fiz um programa mo cabrero e agora nenhuma parte dele parece funcionar como deveria...

de uma olhada na imagem

apba9prbi3ohomxu1jqf.jpg

Link para o comentário
Compartilhar em outros sites

estou com mais dificuldades...

que coisa doida.. nao compreendo...

estou tentando mover um valor para um registrador mas quando movo um valor aparece outro totalmente diferente dentro dele...

assembly fede poxa...

fiz um programa mo cabrero e agora nenhuma parte dele parece funcionar como deveria...

de uma olhada na imagem

apba9prbi3ohomxu1jqf.jpg

O problema é simples:

A instrução movlw só serve para mover uma constante para W. Para copiar um registrador para w, você deve usar a instrução "movf registrador,w".

Usando o comando movlw, você acaba movendo o endereço (constante) do registrador trava_tempo2 para w. O endereço desse registrador é 3E hex, que é o valor 62 em decimal.

Recomendo a leitura desse pdf: Conectando o PIC. Me ajudou muito a dominar o assembly.

Link para o comentário
Compartilhar em outros sites

Quando voce usa MOVLW,o Mplab Move um 'Literal' para o Work.

Neste caso ele move o valor do endereço 'DISPLAI_AUX'.

voce deve usar MOVF.

Exemplo MOVF DISPLAI_AUX,W

Mesmo que voce utilizasse outra linguagem,se não ler as intruções no Datasheet do Micro,provavelmente vai cometer erros.

Sempre leia as intruções no Datasheet do Micro!

PS:Estava digitando e ja responderam...

Link para o comentário
Compartilhar em outros sites

O problema é simples:

A instrução movlw só serve para mover uma constante para W. Para copiar um registrador para w, você deve usar a instrução "movf registrador,w".

Usando o comando movlw, você acaba movendo o endereço (constante) do registrador trava_tempo2 para w. O endereço desse registrador é 3E hex, que é o valor 62 em decimal.

Recomendo a leitura desse pdf: Conectando o PIC. Me ajudou muito a dominar o assembly.

eu nao sabia que ele movia o endereco do registrador e nao o valor

em todosoutros lugares do codigo ele funciona perfeitamente movendo o valor , porque so ali que nao? pra mim nao faz sentido

uma funcao nao pde ser uma cosntante ou nao? :confused:

porque q eu entenda

movlw (move literal para w)

movwf (move w para funcao)

vou la corrigir.. se nao funciona nao funciona ne...

vlwz..

é... olhando aqui realmente, acho que so ali estou movendo um registrador para w, faz mais sentido agora =D

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Eu não sabia nada de microcontrolador.

Comprei o livro do Fábio Pereira "Microcontroladores PIC - Técnicas Avançadas".

Ele trata do PIC16F628, que só não tem o CAD. A linguagem usada é o Assembly. Li e reli.

É um livro honesto, que tem uma boa didática e você realmente aprende.

Já fiz pisca led, e muitos outros projetos com ele. Até um frequencímetro com excelente precisão.

Ainda hoje o consulto. Já está soltando as páginas, hehe!

MOR_AL

Link para o comentário
Compartilhar em outros sites

então, acho legal a ter gente que ainda se esforça começando a aprender pelo começo.

Mas para entender mesmo o que ocorre com as instruções movlw e movwf e movf, seria legal voltar la em eletrônica digital e relembrar o conceito de memória e registradores, depois abrir o datasheet do PIC e ver as semelhanças, quando eu comecei a por as mãos em microcódigo para microcontroladores, foi muito mais proveitoso  aprender o micro com um livro de sistemas digitais do lado, ajuda e muito.

:)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!