ÁgioFelipe escreveu:Pessoal estou escrevendo um código para 16f877A q já está até meio grande mas ainda não ultrapassa a primeira página da memória de programa, o problema é q estas simples instruções não funcionam conforme o esperado:
1 movlw b'00000000'
2 addwf PCL
3 nop
nop
nop
nop
nop
Ele muda todo o PC e não o PCL que é somente a parte baixa.
Na linha 2 o meu pc é 0x5b7, logo depois disso o programa desvia para o endereço 0xb8.
O que vcs acham disso??
Bom dia Felipe.
Realmente parece um misterio, demorou um bom tempo para mim descobrir o problema quando me deparei com uma situação assim.
quando utilizamos o call, goto e return por exemplo, esta instruções corrigem o pclath e o pcl de acordo com o endereço que queremos ir, quando carregamos diretamente um valor no pcl isso não acontece, note que o programa pulou para os primeiros 256 bytes da flash
pois o pclath esta zerado.
existem duas altarnativas ou voce acerta o pclath no local onde você esta:
no seu caso:
movlw .05
movwf PCLATH
1 movlw b'00000000'
2 addwf PCL
3 nop
nop
nop
nop
nop
Ou cria uma tabela na parte baixa da flash, eu particurlamente utilizo esta opção:
movlw b'00000000'
call tab_exemplo
org 30H
Tab_exemplo:
2 addwf PCL
3 nop
nop
nop
nop
espero que tenha entendido.
até mais.