Programando a HP 48 G/GX
1. Introdução
Desde a mais tenra
idade, nos vemos obrigados a executar uma série de rotinas ou
ações para que possamos alcançar os objetivos que desejamos ou
necessitamos atingir. Quando, por exemplo, queremos escovar os
dentes, realizamos nada mais que uma série de rotinas para que a
ação pretendida se complete :
· Pegar a escova e a pasta dental;
· Abrir a torneira;
· Molhar a escova;
· Colocar pasta na escova;
· Escovar os dentes;
· Enxaguar a boca;
· Enxaguar a escova;
· Fechar a torneira;
· Guardar a escova e a pasta.
Isto nos faz perceber que estamos sempre programando e talvez
nunca nos demos conta disto. Pois programar, nada mais é que
escrever uma série de informações, de tal forma que a ação
possa ser executada.
2. Funções e teclas básicas
· Ligar a
calculadora - ON
· Desligar a calculadora - SETA VERDE + ON
· Autoteste - ON + E
· "Destravar" a Hp - ON +C
· Resetar a calculadora - ON+A+F
· Aumentar o contraste do visor - ON +(Segurar a tecla +
pressionada)
· Diminuir o contraste do visor - ON - (Segurar a tecla -
pressionada)
3. Menus
Principais

4. Programação Básica
Antes de
começar a programar utilizando a linguagem RPL é conveniente
fazermos pequenos programas utilizando variáveis locais.
Exemplo 1 : Criar um programa que resolva a seguinte equação:
![]()
OBS.:
Para explicação de comandos utiliza-se como convenção o
seguinte: as explicações estarão em itálico,
sublinhadas e negritadas.
<< B C D '
(B*C)+(C*D)' >> ENTER 'A' STO o comando STO
serve para armazenar dados em uma variável.
Exemplo 2 :
Criar um programa que resolva a seguinte equação:

<< X ' ò
(0, 1, 2*X+3, X) ' >> ENTER 'I' STO
PROGRAMAS USANDO O COMANDO INPUT
A sintaxe do comando INPUT é a seguinte:
" QUESTÂO" " O" INPUT ->OBJ
A saída na tela será a seguinte:

exemplo: Criar um programa utilizando o comando INPUT que encontre a corrente no seguinte circuito:

<< "
ENTRE COM O VALOR DA TENSÃO :" " O" ->OBJ
" ENTRE COM O VALOR DA RESISTÊNCIA :" "O"
->OBJ
->V R 'V/R' >>
5. Programação RPL ( Reverse Polish List)
A linguagem RPL funciona de
um jeito que você já está cansado de saber. Primeiro
colocam-se os dados depois a operação a ser efetuada. Por
exemplo, para efetuarmos a seguinte operação: (2+5).(2/3) fazemos o seguinte : 2 ENTER 5 ENTER + 2 ENTER
3 ENTER / *. Este é o funcionamento da chamada
linguagem de pilha, com o adendo de que o enter é suprimido, ou
seja, se fosse necessário efetuarmos a mesma operação acima
dentro de um programa, escreveríamos assim : 2 5 + 2 3 /
*. Mas para que possamos criar um programa que realmente
agilize nossas rotinas, é necessário que conheçamos alguns
comandos, que vêm relacionados abaixo com a sua ação.

SINTAXE DE ALGUMAS
FUNÇÕES
LAÇO FOR
Início fim FOR contador ....... NEXT
0 1 FOR i .... NEXT
IF
IF prova THEN prova verdadeira ELSE prova falsa END
IF A 0 == THEN A 1 + ELSE A 5 / END
CRIANDO UMA TELA DE ENTRADA USANDO O COMANDO INFORM
Uma alternativa ao condo INPUT para a entrada de dados é a
criação de uma tela de entrada. A sintaxe de criação é dada
abaixo:
" TÍTULO"
{ "VARIÁVEL 1" "VARIÁVEL 2" ...
"VARIÁVEL N"}
{ Nº DE LINHAS Nº DE COLUNAS}
{ VALORES DE RESET }
{ VALORES INICIAIS }
INFORM DROP EVAL
Exemplo:
<< "UM EXEMPLO DE INFORM"
{ " X :" "Y : " }
{ 1 2 } { } { } INFORM DROP EVAL >>

A melhor forma
de se aprender a utilizar os comandos e informações acima é
programando, desde então, esta apostila se resumirá a programas
exemplos e as explicações só serão feitas se absolutamente
necessárias. Vale lembrar que a utilização de programas
compressores de texto freeware e de fácil acesso, como o
COMPRESS e o TXT serão de grande valia.
Exemplo 1: Criar um programa que retorne o valor aproximado dos
zeros de uma função através do método numérico da bisseção.
OBS. : O método da bisseção consiste no seguinte : Tendo-se
uma f(x) contínua em um intervalo [a,b]. Dividindo-se [a,b] ao
meio, obtem-se x0, então tem-se dois intervalos. Se f(a).f(x0)
< 0, então a raíz pertence a este intervalo, senão pertence
ao outro intervalo ( [x0, b] ). Divide-se novamente o intervalo
que contém a raíz ao meio e obtem-se outro ponto e assim
sucessivamente até que se obtenha uma aproximação para a raíz
exata com a tolerância desejada.
SOLUÇÃO:
« "BISSECAO" { {"A:" "LIMITE
INFERIOR" }
{ "B" "LIMITE SUPERIOR" }
{ "F(X):" "ENTRE COM A FUNCAO "} {
"E:" "ERRO" } }
{ 1 4 } { } { }
INFORM DROP OBJ®
DROP 100 0 ® a b F
E e c
«
"a b X F(X) ERRO"
'F(X)' F = DEFINE a
F EVAL 'c' STO
IF c 0 ==
THEN a 'a' STO
ELSE b a 'b'
STO 'a' STO
END 0 'c' STO
WHILE e E >
REPEAT a b + 2
/ -> X
« a ABS b ABS
- ABS 'e' STO X F
EVAL 'c' STO a " "
+ " " + b " " +
" " + + X " " +
" " + + c " " +
" " + + e " " +
" " + +
IF c 0 >
THEN X 'a'
STO
ELSE X 'b'
STO
END
»
END
» " " COMPRESS Chamada para o programa
COMPRESS é preciso que ele exista na HP
»
Exemplo 2 :
Desenvolver um programa que resolva uma integral pelo método de
aproximação de Simpson 3/8.
« "SIMPSON 3/8" {
"Xi:" "Xf:" "F(X):"
"N:" } { 1 4 } { }
{ } INFORM DROP
OBJ® DROP 3 * ® Xi
Xf Y N
« Xi 1 ®LIST ® CX
« Xf Xi - N / ®
h
« Xi EVAL 1
®LIST 1 N
FOR i CX i
DUP SUB h + EVAL +
1 ®LIST + 'CX' STO
CX
NEXT DROP '
F(X)' Y = DEFINE {
} 1 N 1 +
FOR i CX i
DUP SUB EVAL F +
'Xi' STO Xi
NEXT DROP {
0 } 1 N
FOR i Xi i
DUP SUB Xi i 1 +
DUP SUB 3 * Xi i 2
+ DUP SUB 3 * Xi i
3 + DUP SUB + + + h
3 * 8 / *
« +
» STREAM
'Y' STO Y + 3
STEP
« +
» STREAM
'Y' STO " X"
CX EVAL " Y" Xi
EVAL " H" h
EVAL
" INTEGRAL" Y
"" COMPRESS
»
»
»
»
Exemplo 3: Desenvolver um programa que faça a análise cc e ac
do seguinte tipo de circuito:

« "ANALISE
DC E AC"
{ "VCC" "VI" "R1"
"R2" "RE" "RC" "RL"
"ß" } { 4 2 } { } {
} INFORM DROP EVAL
® VCC VI R1 R2 RE
RC RL ß
« R2 R2 R1 + /
VCC * VB STO VB .7
- VE STO VE RE / IE
STO VCC RC IE * -
VC STO VCC VB - R1
/ I1 STO VB R2 / I2
STO I1 I2 - IB STO
.025 IE / RE1 STO
RC RE1 / NEG A STO
R2 INV R1 INV ß RE1
* INV + + INV ZI
STO VI RE1 / ie STO
ie ß / ib STO A VI
* VO STO
" ANALISE DC"
" " "VB = " VB ""
+ " V" + + "VE = "
VE "" + " V" + +
"VC = " VC "" +
" V" + + "IC = " IE
"" + " A" + +
"IE = " IE "" +
" A" + + "IB = " IB
"" + " A" + + " "
" "
" ANALISE CA"
" " "RE' = " RE1 ""
+ " " + + "A = "
A "" + + "ZI = "
ZI "" + " " + +
"IE = " ie "" +
" A" + + "IC = "
ie "" + " A" + +
"IB = " ib "" +
" A" + "ZO = " RC
"" + " " + + +
"VO = " VO "" +
" V" + + 'VB' 'VE'
'IE' 'VC' 'I1' 'I2'
'IB' 'RE1' 'A' 'ZI'
'ie' 'ib' 'VO'
PURGE PURGE PURGE
PURGE PURGE PURGE
PURGE PURGE PURGE
PURGE PURGE PURGE
PURGE
» COMPRESS
»
Exemplo 4: Desenvolver um programa que dimensione os componentes
de um retificador em fonte com filtro capacitivo.
« RAD
"FILTRO CAPACITIVO - PONTE"
{ "VCC" "IL"
"RIPPLE" "F" } { 1
3 } { } { } INFORM
DROP EVAL V I R F
« R V * DV STO V
DV + VMAX STO V DV
- VMIN STO 2 NUM
* F * W STO VMIN
VMAX / ASIN W / T2
STO 1 4 / F INV *
T2 + T STO V I / R2
STO T NEG VMIN VMAX
/ LN R2 * / C STO V
I * PDC STO V I *
CAP STO VMAX " " +
" VMAX = " SWAP +
VMIN " " +
" VMIN = " SWAP +
T2 " " + " T2 = "
SWAP + T " " +
" T = " SWAP + C
" " + " C = " SWAP
+ CAP " " +
" CAPT = " SWAP +
"TRAFO " V " " +
" + " V " " + +
+ + I " " + "A" + +
PDC " " +
" PDC = " SWAP +
VMAX 2 * VMAX2 STO
" DIODOS POSSIVEIS DE USO (ATE 1A)"
IF VMAX2 50 <
" 1N4001"
" 1N4002"
" 1N4003"
" 1N4004"
" 1N4005"
" 1N4006"
" 1N4007" "" 123
THEN DROP
ELSE
IF VMAX2 100
< " 1N4002"
" 1N4003"
" 1N4004"
" 1N4005"
" 1N4006"
" 1N4007" "" 123
THEN DROP
ELSE
IF VMAX2
200 < " 1N4003"
" 1N4004"
" 1N4005"
" 1N4006"
" 1N4007" "" 123
THEN DROP
ELSE
IF VMAX2
400 < " 1N4004"
" 1N4005"
" 1N4006"
" 1N4007" "" 123
THEN DROP
ELSE
IF
VMAX2 600 <
" 1N4005"
" 1N4006"
" 1N4007" "" 123
THEN
DROP
ELSE
IF
VMAX 800 <
" 1N4006"
" 1N4007" 123
THEN
DROP
ELSE
IF VMAX2 1000 <
" 1N4007" 123
THEN DROP
ELSE 1 DROP
END
END
END
END
END
END
END "" ""
" DESENVOLVIDO POR"
" ALEXANDRE C. BRUSCATO "
" [email protected]"
» 'DV' 'VMAX' 'W'
'T2' 'T' 'R2' 'C'
'PDC' 'CAP' 'VMIN'
'VMAX2' PURGE PURGE
PURGE PURGE PURGE
PURGE PURGE PURGE
PURGE PURGE PURGE
COMPRESS
»
Anexo - FAQ ( Frequently Asked Questions)
- QUESTÕES
VARIADAS
1) Existe um canal IRC para HP 48?
Sim, tente acessar o canal #hp48. Muitos dos maiores conhecedores
de HP 48 são freqüentadores assíduos e terão o maior prazer
em responder às suas dúvidas (em inglês).
2) Posso utilizar pilhas recarregáveis na HP 48?
Sim, mas este uso não é recomendado porque elas tem uma duração
muito mais curta que as pilhas alcalinas.
3) O que a HP 48GX tem que a HP48G não tem?
Elas são iguais, exceto por duas diferenças. A GX tem duas
portas de expansão de memória e também 128 k RAM enquanto a G
tem somente 32 k.
4) Porque minha HP 48 congela por um momento?
A HP48 de vez em quando deve fazer "coleta de
lixo"(garbage collection) para liberar memória não
utilizada e é esta coleta que causa o congelamento momentâneo.
Um caminho fácil para forçar a coleta de lixo é rodando MEM
DROP. De outro modo você pode usar #05F42h SYSEVAL ou o comando
SysRPL GARBAGE.
5) Posso usar minha HP 48 como controle remoto?
Existem numerosos programas disponíveis para utilizar a porta IR
(infra vermelho) de suas HP 48's como controle remoto. Porém,
alguns controles são tão velozes que impossibilitam a reprodução.
Devido à sua rápida velocidade de processamento, as
calculadoras G/GX são aptas à suportar muitos controles remotos
mas tenha paciência em alguns casos.
- QUESTÕES SOBRE PROGRAMAÇÃO
6) Tenho ouvido falar de nomes como RPL, Saturn, STAR, GL, etc...
Que são elas?
ASAP
Isto é uma simples Saturn assembler, escrita em linguagem PEARL
Chip8, Chip48, Schip, Schip8
Estes são programas em linguagem de máquina, que foram
inspirados pelo interpretador de video game chip8 para o
microprocessador RCA CDP1802, muitos anos atrás. Chip8 permite
que você escreva simples jogos gráficos básicos para HP 48
SX/GX. Interpretadores Schip não são disponíveis para os
modelos S/G.
GL (GAME LANGUAGE)
É uma linguagem para programadores que precisam de pouca
velocidade do assembly, mas que não quer perder tempo e nem
esforço para aprender todos os truques do assembly programando
na HP 48. GL, tem uma sintaxe como a do assembly .
ML (MACHINE LANGUAGE)
É normalmente usada como referência à HP 48 linguagem assembly
de programação.
MLDL (MACHINE LANGUAGE DEVELOPMENT LIBRARY)
É a biblioteca que permite que você faça debug de programas em
linguagem de máquina somente com a HP 48.
PDL (PROGRAM DEVELOPMENT LINK)
Este é um programa para DOS, vendido pela Hewlett-Packard, que
permite que você escreva e projete aplicativos HP 48 em seu PC.
Os programas são escritos e testados no PC e transferidos via
cabo para a calculadora.
RPL (REVERSE POLISH LISP)
É o nome da linguagem usada para programar a série de
calculadoras HP 48 e HP 28.
SASS
É uma simples linguagem assembler escrita em C.
SATURN
É nome-código interno para o processador usado na HP 48, HP 28
e muitas outras calculadoras.
STAR
É a SATURN MACRO ASEMBLER (de onde vem STAR, eu não sei...),
escrita em C e roda nas mais diferentes máquinas( PC's, Amigas,
UNIX,etc.). STAR está disponível via ftp anônimo de:
ftp://hpcvbbs.cv.hp.com/dist/unix/star-1.04.4.tar.gz
Sistema RPL
Este é o nome para o sistema operacional utilizado para
programar a CPU da HP 48.
7) Existe um compilador C para HP 48?
Sim, Alex Ramos escreveu o GNU C para processador Saturn. Veja
ftp://ftp.engr.latech.edu:/pub/alex/hp48/ para a última versão.
8) Existe algum vírus para HP 48?
Existem muitos, principalmente franceses. Nos E.U.A. um vírus
chamado Michigan virus eclodiu a alguns anos atrás. Existe um
programa no Goodies Disk 8 que procura pela presença do Michigan
virus.
9) Onde posso obter arquivos e programas para a HP 48?
O melhor lugar é na Internet. Segue abaixo uma relação de
FTP's com arquivos para a calculadora:
·
ftp://ftp.cis.com/pub/hp48g/
· ftp://hpcvbbs.external.hp.com/dist/
· ftp://oprfhs.org/pub/hp48/
· ftp://ftp.stud.fh-heilbronn.de/
· ftp://ftp.cyberbox.north.de/pub/pockcomp/fileecho/hp48/
· ftp://hplyot.obspm.fr/hp48/
· ftp://wuarchive.wustl.edu/systems/hp/hp48/
· ftp://ftp.ee.ualberta.ca/pub/HP48/
· ftp://oak.oakland.edu/pub/ham/hp48g/
· ftp://nic.funet.fi/pub/misc/hp48g/