Página 1 de 1
PIC18F endereçamento indireto da flash

Enviado:
19 Ago 2008 09:30
por fabim
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

Enviado:
19 Ago 2008 11:02
por Djalma Toledo Rodrigues
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


Enviado:
19 Ago 2008 11:51
por Sergio38br
fabim , em pascal?
[ ]'s
Sergio

Enviado:
19 Ago 2008 11:54
por fabim
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;

Enviado:
19 Ago 2008 11:55
por Sergio38br
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

Enviado:
19 Ago 2008 12:01
por Sergio38br
caramba tu ta online???

Enviado:
19 Ago 2008 12:01
por Djalma Toledo Rodrigues
Uma sugestão:
Ao criar tabela colocar na primeira posição o comprimento da tabela, isto será util para delimitar a leitura da mesma.


Enviado:
19 Ago 2008 12:06
por fabim
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,

Enviado:
19 Ago 2008 12:08
por Sergio38br
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

Enviado:
20 Ago 2008 08:43
por fabim
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