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/


Hosted by www.Geocities.ws

1