PIC18F endereçamento indireto da flash

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

PIC18F endereçamento indireto da flash

Mensagempor fabim » 19 Ago 2008 09:30

Psoal,..
To com um pipinozo aqui, num é bem um "pepino" mais esta maior do que eu imaginava.
Num estou conseguindo desfazer o tamanho.

Seguinte, criei uma rotina grandinha com um CASE, que envia para o LCD os itêns de um menu.
Mais aí o problema.
PEga constantes, byte to byte, joga na ram, vai pra LCD out etc.

Aí tive uma ideóta, criar um array de X string´s, na flash.

Mais na familia do 18F eu tendo os endereços da flash como eu faço pra ler usando os registradores ? que no 16F eram o FSR e INDIF para ram.?
Tem isso para flash no 18f ?

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Djalma Toledo Rodrigues » 19 Ago 2008 11:02

No PIC18 tem endereçamento direto de tabelas, verifique no Data Sheet :
Data Memory <> Program Memory Operations
As Instruções:
TBLRD* Table Read
TBLWT* Table Write e as demais TBL + e - .

Abraço e boas tabelas
:lol:
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Sergio38br » 19 Ago 2008 11:51

fabim , em pascal?
[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor fabim » 19 Ago 2008 11:54

ASM ou PASCAL ou BASIC.. "MENOS C IÈÈCA"..
Num quero usar a liby flash..
Quero saber como funfa o processo pra eu fazer a minha própria rotina.
MAis eu estou dando uma zoiada cumé que o compilador trata read e write em ASM.

Mais se tiver alguma sugestão. tÂmae.

Fabim

fiz esta parte dessa forma aí apenas para formar a idéia, agora que ja acabei o projeto to enxutando o código.

Essa brincadeirinha aqui embaixo custou 5.365Bytes do 18F4455.rs

Código: Selecionar todos
PROCEDURE PEGASTRING( INP : BYTE);
  VAR DADO : BYTE;
  BEGIN
  DADO := INP;
  case dado of
  35 : LCD_out(2,1, 'Acoust Bass Drum');
  36 : LCD_out(2,1, 'Bass Drum 1     ');
  37 : LCD_out(2,1, 'Side Stick      ');
  38 : LCD_out(2,1, 'Acoustic Snare  ');
  39 : LCD_out(2,1, 'Hand Clap       ');
  40 : LCD_out(2,1, 'Electric Snare  ');
  41 : LCD_out(2,1, 'Low Floor Tom   ');
  42 : LCD_out(2,1, 'Closed Hi-Hat   ');
  43 : LCD_out(2,1, 'High Floor Tom  ');
  44 : LCD_out(2,1, 'Pedal Hi-Hat    ');
  45 : LCD_out(2,1, 'Low Tom         ');
  46 : LCD_out(2,1, 'Open Hi-Hat     ');
  47 : LCD_out(2,1, 'Low-Mid Tom     ');
  48 : LCD_out(2,1, 'Hi-Mid Tom      ');
  49 : LCD_out(2,1, 'Crash Cymbal 1  ');
  50 : LCD_out(2,1, 'High Tom        ');
  51 : LCD_out(2,1, 'Ride Cymbal 1   ');
  52 : LCD_out(2,1, 'Chinese Cymbal  ');
  53 : LCD_out(2,1, 'Ride Bell       ');
  54 : LCD_out(2,1, 'Tambourine      ');
  55 : LCD_out(2,1, 'Splash Cymbal   ');
  56 : LCD_out(2,1, 'Cowbell         ');
  57 : LCD_out(2,1, 'Crash Cymbal 2  ');
  58 : LCD_out(2,1, 'Vibraslap       ');
  59 : LCD_out(2,1, 'Ride Cymbal 2   ');
  60 : LCD_out(2,1, 'Hi Bongo        ');
  61 : LCD_out(2,1, 'Low Bongo       ');
  62 : LCD_out(2,1, 'Mute Hi Conga   ');
  63 : LCD_out(2,1, 'Open Hi Conga   ');
  64 : LCD_out(2,1, 'Low Conga       ');
  65 : LCD_out(2,1, 'High Timbale    ');
  66 : LCD_out(2,1, 'Low Timbale     ');
  67 : LCD_out(2,1, 'High Agogo      ');
  68 : LCD_out(2,1, 'Low Agogo       ');
  69 : LCD_out(2,1, 'Cabasa          ');
  70 : LCD_out(2,1, 'Maracas         ');
  71 : LCD_out(2,1, 'Short Whistle   ');
  72 : LCD_out(2,1, 'Long Whistle    ');
  73 : LCD_out(2,1, 'Short Guiro     ');
  74 : LCD_out(2,1, 'Long Guiro      ');
  75 : LCD_out(2,1, 'Claves          ');
  76 : LCD_out(2,1, 'Hi Wood Block   ');
  77 : LCD_out(2,1, 'Low Wood Block  ');
  78 : LCD_out(2,1, 'Mute Cuica      ');
  79 : LCD_out(2,1, 'Open Cuica      ');
  80 : LCD_out(2,1, 'Mute Triangle   ');
  81 : LCD_out(2,1, 'Open Triangle   ');
  82 : LCD_out(1,1, 'selecione instr.');
  83 : Lcd_out(2,2, 'OK Selecione    ');
  84 : lcd_out(1,1, 'selecione canal ');
  85 : lcd_out(1,1, 'selecione porta ');
  END;
  END;
Editado pela última vez por fabim em 19 Ago 2008 11:56, em um total de 1 vez.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Sergio38br » 19 Ago 2008 11:55

esqueci um exemplo, esta foi escrita em MB
Código: Selecionar todos
const msg04 as string[14] = "1 - Configurar"
const msg05 as string[11] = "2 - Ajustar"
const msg06 as string[16] = "0 - Sair do Menu"

com isto as string ou dados como vc queira ficam em flash liberando a ram

Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Sergio38br » 19 Ago 2008 12:01

caramba tu ta online???
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Djalma Toledo Rodrigues » 19 Ago 2008 12:01

Uma sugestão:
Ao criar tabela colocar na primeira posição o comprimento da tabela, isto será util para delimitar a leitura da mesma.
:idea:
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor fabim » 19 Ago 2008 12:06

nossa o tico e o téco estão de folga esses dias.
Vou bolar argo aqui.
to pensando em bolar um array multi dimensional.
ou constantes com endereços fixos na flash tipo.

const ar : array[10] of char = {0,1,2,3,4,5,6,7,8,9}; org 0x400;<<<<<

Sacou, vou pulando de 16+1 em 16+1 na definição de endereços absolutos.

Xo ver qual fica menorzim,
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Sergio38br » 19 Ago 2008 12:08

bem um exemplo:

Código: Selecionar todos
const msg04 as string[14] = "1 - Configurar"
const msg05 as string[11] = "2 - Ajustar"
const msg06 as string[16] = "0 - Sair do Menu"
.
.
.
.
dim msg_geral as string[70]

'****************************************
'enviando por uma hipotetica serial
sub procedure envia_menu_serial2(dim j as byte)
dim i as byte

    for i = 0 to Strlen(msg_geral)
        r01 = msg_geral[i]
        serial2_out()
    next i

      if j = 1 then env_crlf()
      end if
end sub
'****************************************
'agora usando a sub acima

msg_geral = msg04

envia_menu_serial2(1) ' vou enviar crlf no final



[ ]'s

Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor fabim » 20 Ago 2008 08:43

Eba Eba... Cruellllll.

Ou fiz uma bagaça aqui. com ponteiros numericos multiplos de 16+1.

DE

5.365Bytes Caiu para 2.385 Bytes.

Nhã nHã Nhã Nhã Nhã.

Eu intendi, e não sabia que o 18F tinha essa Grachinha de registradores.

Lindo de viver :

TKS ALLLLLL
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x