collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: ASM SFR STATUS (Funcionamento do RP0 e RP1)  (Lida 5621 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
ASM SFR STATUS (Funcionamento do RP0 e RP1)
« em: 01 de Agosto de 2012, 10:31 »
Ver se consigo explicar-me.
Estou a tentar compreender completamente, como usar o Enderecamento directo , e a diferenca, ja agora, do indirecto...
Acrescentei estas intrucoes ao codigo original exemplo (Mais para usar em conjunto com o debugger e tentar compreender e "documentar" o funcionamento do chip em relacao ao programa.

Alguem me pode explicar por exemplo, se eu quiser acender os 5 ledds , por exemplo ... Como usaria o RP0, Como parte do STATUS em relacao ao codigo ?!
Porque ainda nao consegui perceber muito bem esta funcao do register !
O Sena usa um codigo que me fez pensar e realizar que afinal nao tinha percebido bem este detalhe ainda( e muitos outros, mas um de cada vez lol)

Ja digeri o funcionamento dos SFR's PCL e PCLATCH ( que nos da o tal total teorico de 8192 divididos pelos 13 bits, sendo os 8 LSB no PCL ...,ais ou menos lol). Portanto nem tudo esta mal !





Código: [Seleccione]
#include <p16F887.inc>
__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

     org 0
Start:
     bsf     STATUS,RP0  ; escolher Register 1
     bcf     TRISD,0     ;  Pin RD0 Como Output
     bcf     STATUS,RP0  ; Clear Register Bank 0
     bsf     PORTD,0     ; activar LED RD0 (DS0)
     bcf PORTD,0
     bcf     STATUS,RP0
     bsf     STATUS,RP0  ; escolher Register 1
     bcf     TRISD,1     ;  Pin RD1 Como Output
     bcf     STATUS,RP0  ; back to Register Bank 0
     bsf     PORTD,1     ; activar LED RD1 (DS1)
     bcf PORTD,1
     bcf     STATUS,RP0
     bsf     STATUS,RP0  ; escolher Register 1
     bcf     TRISD,2    ;  Pin RD2 Como Output
     bcf     STATUS,RP0  ; back to Register Bank 0
     bsf     PORTD,2     ; activar LED RD2 (DS2)
     bcf PORTD,2
     bcf     STATUS,RP0
     bsf     STATUS,RP0  ; escolher Register 1
     bcf     TRISD,3    ;  Pin RD3 Como Output
     bcf     STATUS,RP0  ; back to Register Bank 0
     bsf     PORTD,3     ; activar LEDRD3 (DS3)
     bcf PORTD,3
     bcf     STATUS,RP0
     bsf     STATUS,RP0  ; escolher Register 1
     bcf     TRISD,4    ;  Pin RD4 Como Output
     bcf     STATUS,RP0  ; back to Register Bank 0
     bsf     PORTD,4     ; activar LED RD4 (DS4)
     bcf PORTD,4
     bcf     STATUS,RP0
     goto    Start      ; wait here
     end
     

PS- Acho que estou a comecar a perceber...Acho !!
« Última modificação: 01 de Agosto de 2012, 12:09 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #1 em: 01 de Agosto de 2012, 13:14 »
Olá iyahdub,

se bem que tenha achado a tua pergunta um tanto ao quanto confusa vou ver se clarifico...

Se consultares o datasheet do PIC em questão vais ver que a memória RAM do mesmo está dividida em quatro bancos.

Os bits RP0 e RP1 do registo STATUS permitem-te alternar entre os quatro escolhendo a combinação certa, por exemplo para ires para o banco 1 tens de meter os bits (RP1:RP0) = 01 o que implica Bank 1 (80h-FFh)

é o que tens no código, basicamente eu só faria uma coisa para optimizar....

em vez de estares constantemente a mudar para o banco 1 e dps regressar ao 0, eu mudaria para o 1 faria todas as operações possiveis de fazer na altura (neste caso mudar todos os TRIS) e dps disso é que regressaria ao banco0.

@sena, se quiseres dizer mais alguma coisa ou explicar melhor.....

Cumps, Mauro.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #2 em: 01 de Agosto de 2012, 15:10 »
Consegues explicar iisso em codigo?! Se puderes agradecia...
Estou a usar MPASM...
Eu sei que e confuso , porque nao percebo bem como e que entao e distribuida, nem como...
Ou como usar correctamente. Dai estar a tentar perceber
Obrigada por o interesseem ajudar !
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline maurosmartins

  • Mini Robot
  • *
  • Mensagens: 483
    • msm
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #3 em: 01 de Agosto de 2012, 15:46 »
Olá novamente,

então para inicializar o porto D todo como saída e dps escrever-lhe qq coisa poderia escrever o seguinte código.

Código: [Seleccione]
#include <p16F887.inc>
__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

org 0x00

Start:

     bsf     STATUS,RP0  ; escolher Register 1

     MOVLW 0x00          ;carregar o registo W com 0

     MOVWF TRISD         ;inicializar o registo TRISD com 0 (atraves de W)

     bcf     STATUS,RP0  ; Voltar ao Bank 0

     MOVLW b'10101010'   ;Padrao com que quero acender os LEDs (um sim um nao)

     MOVWF PORTD        ;escrever para o porto D

     GOTO $              ; Salta para a mesma instrução (ciclo infinito)

     end                ;fim

Espero que ajude, qq duvida é só dizer

Mauro.

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #4 em: 02 de Agosto de 2012, 09:45 »
iyahdub,

o endereçamento directo/indirecto até bastante simples, depois de entenderes o princípio da coisa. Lê bem o capítulo no meu manual sobre isso, a meu ver está lá devidamente explicado. Se não chegar, eu respondo ao resto aqui. O datasheet do micro também é jeitoso.

Como estás a programar em Assembly, é natural que tenhamos de nos preocupar com o endereçamento. Faz parte do processo.
Como, infelizmente, a memória RAM destes PIC de gama baixa está toda particionada, temos que andar a saltar de banco-em-banco para conseguir usar os registos. (um dos pontos a favor do AVR)

No endereçamento podes usar o switch dos bancos, através do RP0-RP1-Status e trabalhar com o PCL-PCLATH, e no indirecto com o IRP e FSR-INDF.
São formas diferentes de o fazer, e o seu uso depende mesmo da tua aplicação.
Se queres trabalhar com um registo apenas, então RP0-RP1-Status. Se queres trabalhar com arrays na memória, então FSR-INDF é o caminho a seguir.


O MPLAB tem várias macros internas para ajudar nos trabalhos. Uma delas é o BANKSEL, que te ajuda a mudar de bancos quando necessário.
Basta apenas fazer BANKSEL TRISA, para mudar "automaticamente" para o banco onde está o TRISA.

Não precisas de mudar de banco de cada vez que usas um registo. É claro que podes, mas não há essa necessidade.
Podes ver onde estão os registos e se o seguinte com que vais trabalhar está no mesmo banco que o anterior, então poupas passos e memória.

Para ver as macros disponiveis no MPLAB, ver o HELP file do mesmo.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #5 em: 02 de Agosto de 2012, 23:17 »
HHH, agora comeca a fazer sentido .
Desde entao estive a ler com muita calma e estudar outros codigos e era mais ou menos nessa direccao que me estava achar !
Nao consegui formular a pergunta muito bem porque ainda nao sabia o que perguntar
Obrigado !
PS-Sena,  O teu codigo do exemplo ajudou bastante ja que tem mais uns passos que ajudam a perceber melhor.

@Mauro - Obrigado, agradeco ajuda !!
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #6 em: 02 de Agosto de 2012, 23:47 »
Ah, Sena - assim e muito mais facil, ja que o BANKSEL faz tudo pro pessoal... Incluindo o STATUS !

Depois de ler a explicacao

Código: [Seleccione]
#include <p16F887.inc>
__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

     org 0
Start:
     

  banksel TRISD           ;Pelos vistos comeca no banco 1 ,
                                  ;e nao o 0: Isto para assegurar   
                                  ;nunca cruzar dados (pelo que percebo)...
  clrf        TRISD           ;Limpa TRISD.  PORTD como saida.
  banksel  PORTD          ;banksel usa agora o banco 0,
                                  ;aonde a PORTD esta.
  movlw    0x55            ;Valor para PORTD .
  movwf   PORTD
  clrf        PORTD
  goto      Start
  end                           ; end.


 
« Última modificação: 02 de Agosto de 2012, 23:52 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #7 em: 02 de Agosto de 2012, 23:49 »
boa! ;D

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #8 em: 02 de Agosto de 2012, 23:53 »
E engracado ou nao, consegui agora perceber plenamente o Status !!
E o mesmo que o Banksel faz por tras por nos: {rimeiro manda para o banco um, e a seguir temos que chamar de novo para o 0, de forma a podermos inserir o novo bloco de instrucoes...
Dai o Sena dizer que isso e coisa que os ATMEL fazem de diferente.


Esta cena de ter o debugger disponivel da um jeito incrivel para perceber isto como deve de ser...



Obrigada !
Mais duvidas em breve...lol
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #9 em: 03 de Agosto de 2012, 01:15 »
Podes ver todo esse processo apenas som o SIMULATOR do MPLAB.
O Debbuger também funciona,mas estás a ver os registos internos do micro em "tempo-real".

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: ASM SFR STATUS (Funcionamento do RP0 e RP1)
« Responder #10 em: 03 de Agosto de 2012, 01:24 »
Sim eu sei , Sena... Mas nao sei porque , ele costuma aprvalhar comigo, enquanto o PickIt2 nunca aparvalha... O MPLAB SIM tem ajudado em varios codigos, mas parece ter muito mais do que eu vejo...
O Debugger pelo PickIt e mais porque um homem ve os leds acender, etc, devagarinho ( porque a tempo real um homem nem ve essas quebras off dos leds).
Coisa que o SIM nao faz, correcto ?

E Mauro, o teu codigo ajudou tb... fixe ter-vos a explicarem -me, pq sozinho nao ia la tao depressa !

PS- Foi engracado teres mencionado o endereco do Bank 1 (80h-FFh), porque vi um exemplo que usa o endereco direco, atraves de uma definicao pelo menos ? Tipo STATUS equ 80h , ou parecido !!
Devagar hei-de la chegar !! lol
« Última modificação: 03 de Agosto de 2012, 01:27 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!