Passo 1: Instalando o Software ARMBASIC - inf.furb.brmaw/arm/asm51.pdf · O ARMBASIC é um módulo...
Transcript of Passo 1: Instalando o Software ARMBASIC - inf.furb.brmaw/arm/asm51.pdf · O ARMBASIC é um módulo...
Manual do ARMBASIC 1
_________________________________________________________________________ www.basic4ever.com
1) Iniciando
Passo 1: Instalando o Software
O ARMBASIC é um módulo baseado em ARM que roda programas criados na linguagem BASIC (não é interpretado). A transferência de programas é realizada com o TclTerm, o qual é um emulador de terminal especialmente desenvolvido para o ARMBASIC.
Click em Next.
Manual do ARMBASIC 2
_________________________________________________________________________ www.basic4ever.com
Se você deseja alterar o diretório que deseja instalar o TclTerm, não tem problema algum.
Manual do ARMBASIC 3
_________________________________________________________________________ www.basic4ever.com
Se você não deseja instalar tanto o TclTerm ou arquivos de ajuda ARMBASIC, aqui é o lugar.
Click Next para começar a instalar os arquivos.
Manual do ARMBASIC 4
_________________________________________________________________________ www.basic4ever.com
Um momento, por favor.
Viu com é fácil.
Manual do ARMBASIC 5
_________________________________________________________________________ www.basic4ever.com
Passo 2: Monte o Circuito em um protoboard conforme o esquemático
Manual do ARMBASIC 6
_________________________________________________________________________ www.basic4ever.com
Veja o circuito montado.
Manual do ARMBASIC 7
_________________________________________________________________________ www.basic4ever.com
O cabo permite você conectar o ARMBASIC diretamente ao computador. Localize a serial do computador e conecte o cabo (DB9).
Passo 3: Escrevendo seu primeiro programa
Manual do ARMBASIC 8
_________________________________________________________________________ www.basic4ever.com
Uma vez que você executou o TclTerm, você está habilitado para se comunicar com o ARM ARMBASIC. Para checar isto, resete o ARMBASIC com a opção do botão de Reset.
Se tudo é conectado corretamente, o ARMBASIC exibirá uma mensagem de Bem-vindo e estará pronto para receber comandos ARMbasic, os quais podem ser entrados na Janela de Entrada próxima à palavra Enter (veja abaixo):
Manual do ARMBASIC 9
_________________________________________________________________________ www.basic4ever.com
Então digite alguma coisa tradicional como PRINT “Hi Mom”. Quando você tecla ENTER, será enviado para o ARMBASIC e ecoado de volta para a Janela de Console: (veja abaixo).
Manual do ARMBASIC 10
_________________________________________________________________________ www.basic4ever.com
Quando você tecla RUN ou pressiona o botão RUN no topo da tela, você verá a tecla abaixo:
Você pode notar um número de coisas. Primeiro o programa é compilado e escrito na memória FLASH, o qual normalmente levará menos de 1,4 segundos. Depois o programa é executado, como evidenciado pela saída “Hi Mom” no console. ARMBASIC também reportará o tempo de execução, neste caso, de 19ms.
Passo 4: Programando a I/O
Manual do ARMBASIC 11
_________________________________________________________________________ www.basic4ever.com
Para começar um novo programa, você deve apagar (CLEAR) o programa anterior. Você pode fazer isto com o botão Clear ou ditando CLEAR.
Digite o seguinte programa no console do Windows.
DIR(15)= 1 ' Habilite o pino 15 como saída WHILE X<30 OUT(15) = X AND 1 ' Jogue o pino 15 para alto e vice-versa X=X+1 WAIT(500) LOOP
Manual do ARMBASIC 12
_________________________________________________________________________ www.basic4ever.com
Agora digite RUN. Você verá o LED do ARMlite piscar 15 vezes.
Para a execução do programa, simplesmente pressione o botão de Stop.
Manual do ARMBASIC 13
_________________________________________________________________________ www.basic4ever.com
Passo 5: Programação mais complexa
Normalmente é mais fácil enviar um programa para o ARMBASIC usando as opções Send File ou Resend File.
Manual do ARMBASIC 14
_________________________________________________________________________ www.basic4ever.com
Passo 6: Guia de Manutenção
Manual do ARMBASIC 15
_________________________________________________________________________ www.basic4ever.com
A COM onde está conectado o ARMBASIC pode ser encontrada em Control Panel>System>Device Manager
Manual do ARMBASIC 16
_________________________________________________________________________ www.basic4ever.com
A biblioteca Tcl permite apenas as portas COM1 até COM9 serem usadas. A sua serial deve estar em uma destas portas. Pode ser trocada no Painel de Controle do Windows.
Control Panel> System> Hardware> Device Manager> Ports> Port Settings> Advanced
A maioria dos computadores tem um número de portas COM, você pode não ter selecionado a porta correta, você pode trocar para a porta correta em Options>Port Menu.
Manual do ARMBASIC 17
_________________________________________________________________________ www.basic4ever.com
Em casos raros, quando o Windows Update tem automaticamente dado um boot enquanto o TclTerm estiver rodando, configurações do TclTerm referente à porta serial fica corrompido. Para corrigir este problema, boot novamente o sistema e se o problema persistir, apague o TclTerm “Configurations Settings” (TclTerm.ini será regenerado quando você rodar o TclTerm). Este arquivo está localizado em Program Files\Coridium directory.
Bom divertimento!
2) O compilador
Sobre
ARMbasic é um compilador de 32 bits para processadores ARM. Foi desenvolvido para ser uma portátil, alternativa para Hardware Debugger, mas tem
Manual do ARMBASIC 18
_________________________________________________________________________ www.basic4ever.com
rapidamente crescido como um poderoso controlador programável, incluído também suporte para serial assíncrona, I2C, SPI, PWM, Timer e operações de contagem. Roda em um processador ARM.
ARMbasic é simples de usar, e roda totalmente no ARMBASIC, podendo ser programado pela porta serial. Aplicações destinos incluem funções de controle, desta forma, performance e um poderoso conjunto de rotinas de Hardware tem sido incluídas. Apesar de tem a sintaxe a mais compatível possível com MS-Visual e Pbasic, ARMbasic introduziu vários novas funções como rotinas específicas para Hardware, suporte a String, ponteiros limitados e muitas outras coisas.
ARMbasic é escrito em ANSI-C compilado com GCC.
Principais caracteristicas
Simplicidade
• Muitas aplicações de controle pode ser amparadas por um programa muito pequeno.
• ARMbasic pode ser instalado em minutos e resolver seus problemas de controle rapidamente.
• Enquanto o BASIC é considerado uma linguagem simples, ARMbasic com funções de Hardware e a velocidade de código compilado pode ser uma solução de alta performance que muitas outras linguagens complexas.
• É ótimo para Debugar programas. Por que aprender um novo desenvolvimento de sistema se você pode entrar com os comandos diretamente com um emulador de terminal ou usar um editor de texto que você está familiar
Compatibilidade com o BASIC
• ARMbasic da Coridium não é uma nova linguagem BASIC. Não é necessário você aprender alguma coisa nova se você está familiarizado com alguma variação do Microsoft Basic. Se você não tem conhecimento da linguagem BASIC, suas construções são fáceis de aprender e usar.
• ARMbasic é Case-Insensitive; variáveis escalar não necessita ser dimensionadas ou declaradas antes do uso; uma função MAIN não é necessária. A sintaxe segue muito da Microsoft.
A maioria das funções PBASIC tem sido adicionada:
• Pino de controle de direção de INPUT e OUTPUT • Pino de controle de nível HIGH ou LOW
Manual do ARMBASIC 19
_________________________________________________________________________ www.basic4ever.com
• I2C para qualquer um dos grupos de 2 pinos dos 15 pinos • SPI para qualquer um dos grupos de 3 pinos dos 15 pinos • PWM tem qualquer pino com 256 níveis • FREQOUT em qualquer pino de até 100KHz • PULSIN e PULSOUT medirão ou vão gerar um pulso de saída • SHIFTIN, SHIFTOUT podem ser usados para dispositivos SPI ou MicroWire • OWIN ou OWOUT suporta dispositivos One-Wire • SERIN, SEROUT podem ser usados para comunicação serial em qualquer
pino de até 9600 Baud • RCTIME medirá o delay capacitivo
Suporte para variáveis de 32 bits e Strings
• Integer: (32-bit math) • Suporte a String • Conversão Automática de tipos
Arrays
• Arrays estáticas são suportadas, até 32Kb de tamanho.
Direto acesso ao Hardware
• Usa a mesma sintaxe dos ponteiros em C
Suporte a Debug
• A facilidade e velocidade do Interpretador • Rápido acesso às variáveis
Geração de código Optimizado
• Enquanto ARMbasic não é um compilador de otimização, faz várias espécies de otimizações para gerar código rápido nas CPU ARM. Roda mais de 10 milhões de instruções por segundo.
Incluído com qualquer módulo
• Cada módulo tem o ARMbasic internamente, então nada mais há para se comprar. A interface com TclTerm foi escrita pela Coridium e liberado como fonte, sendo necessário que o comentário sobre sua origem ser mantida. Outro emulador de terminal tendo suporte a XON/XOFF pode ser utilizado usado no lugar.
Requerimentos
Manual do ARMBASIC 20
_________________________________________________________________________ www.basic4ever.com
• O compilador ARMbasic roda na plataforma de Hardware e simplesmente requer uma conexão a um emulador de terminal através de uma USB ou porta serial.
• TclTerm é um emulador de terminal escrito em Tcl e tem sido portado para Windows. Outros emuladores de terminal podem ser usados.
ARMbasic e outros BASICs
ARMbasic e Visual BASIC têm diferentes fins. Visual BASIC é uma linguagem de propósito geral que inclui acesso aos vários elementos da Microsoft e seus programas de aplicações. ARMbasic é uma pequena linguagem criada para controle de Hardware. ARMbasic é um Subset do Visual Basic. Alguns elementos de BASICs recentes não se aplicam para o Visual Basic, mas se aplicam para o ARMbasic. Nestes elementos incluem palavras chaves como RUN e CLEAR.
Tipos de Dados
• Visual BASIC tem um rico conjunto de tipos de dados bem como extensões orientadas a objetos.
• Em ARMbasic o tipo de dado default é 32 bits (INTEGER) e também suporta Arrays de Integer S e Strings.
Diferenças de Design
• Um objetivo do ARMbasic é ser uma simples, fácil de usar linguagem, mas ainda ser uma poderosa ferramenta para controlar Hardware. Para isto, um simples Subset do Basic tem sido escolhido, com extensões para controle de Hardware.
• O sufixo $ é usado para declarar Strings usando o Statement DIM • Apenas dimensões simples de Arrays são suportadas
Diferenças com o PBASIC
Embora ARMbasic tem ama similaridade com a sintaxe ao PBASIC, há algumas pequenas diferenças, de forma que alguma mudança deve ser feita para compilar 100%.
32-bits vs. 16-bits
• ARMbasic foi escrito para um Hardware de 32 bits e não pode utilizar código o qual depende do truncamento de 16 bits.
• O topo de dado default é 32 bits, em vez de 16 bits em PBASIC.
Trocas devido a ambiguidade
Manual do ARMBASIC 21
_________________________________________________________________________ www.basic4ever.com
• FOR..NEXT é ambíguo para STEP negativo. Para clarificar, use DOWNTO • A sintaxe do IN0, DIR0, OUT0 no PBASIC tem problemas com
parametrização. Foram substituídos pelo uso de IN(0), DIR(0) e OUT(0). • A Entrada formatada de vários comandos PBASIC, em vários casos, ficarão
numa espera infinita se não estiver no formato correto. É melhor aceitar qualquer ou todas as entradas e então analisar mais tarde, mas o PBASIC não tem esta habilidade. Um conjunto de funções de String tem sido adicionadas para entrada interpretada do ARMbasic.
Diferenças de Design
• Variáveis Integer não necessitam serem declaradas. Isto é comum para a maioria dos BASICs. ARMbasic não requer que as variáveis sejam declaradas antes.
• Como há muito espaço para variáveis disponível, tipos BIT, NIBBLE, BYTE não são suportados. Arrays de BYTE também chamados de String, são suportados.
• Declaração de Array são suportados usando DIM, diferente da sintaxe do PBASIC.
• Declaração PIN é substituída pelo tratamento de pinos como uma Array de IN(x) vs INx. Isto faz a parametrização de pinos mais simples.
• A sintaxe CONST padrão da maioria dos BASICs é usada em vez da sintaxe CONST do PBASIC
• Múltiplos Statements em uma simples linha NÂO são suportados. • O PRINT padrão é usado no lugar do PBASIC DEBUGOUT. • O sufixo $ é usado para declarar Strings no Statement DIM. • Strings usam NULL como “terminador”. • CLEAR é usado para resetar todas as varíáveis e o Stack. • Em um interpretador há uma vantagem em ter funções como &\ |\ ^\ ** *\
DIG e DCD , mas estes podem ser facilmente feitos no BASIC compilado e tem nenhuma penalidade na performance ou espaço.
x = NOT (a & b) ' equivalente a &\ b
x = a * b >> 16 ' equivalente a ** b (para valores de 16 bits)
x = a * b >> 8 ' equivalente a */ b (para valores de 16 bits)
x = y /1000 mod 10 ' equivalente a y DIG 4
x = 1<<6 ' equivalente a DCD 6
• HYP, TAN e NCD não são implementados em ARMbasic • Valores -$hex não são suportados
Manual do ARMBASIC 22
_________________________________________________________________________ www.basic4ever.com
Simplificações no Design
• Apenas 1 comando por linha é aceito • “run-on Statements“ não são permitidos • Entrada formatada é substituída por funções de Strings elementares
Outros comandos
• DTMFOUT não é suportado • ON e BRANCH pode ser codificados usando SELECT CASE. • LOOKUP pode usar Arrays ou Strings • LOOKDOWN pode ser codificado usando SELECT CASE • GET, PUT podem ser substituido com Arrays
FAQs
O que é ARMbasic? ARMbasic é um compilador incluído em uma família de módulos usando uma CPU ARM da Coridium Corp. O compilador roda em um processador ARM e simplesmente necessita de um Host que tenha uma porta serial ou USB serial. Além da sintaxe compatível com VISUAL BASIC, ARMbasic introduziu várias características do PBASIC, incluindo I2C,SERIAL, PWM, IN, OUT e FREQOUT. ARMbasic foi escrito em ANSI C, compilado com GCC
Quem é responsável pelo ARMbasic? Coridium Corp. Distribui e mantém o ARMbasic.
Posso eu usar o ARMbasic? ARMbasic tem várias vantagens sobre as alternativas.
o É rápido o Produz código compilado e não interpretado (Tokens) o É simples o Tem funções de Hardware poderosas para os mais populares bus
seriais o Baixo custo o Fácil de usar
Por que eu usaria ARMbasic em vez de GCC ?
Não há questões que alguns problemas requerem linguagens mais complexas. Mas muitos controles de problemas são simples e isto é o que pode
Manual do ARMBASIC 23
_________________________________________________________________________ www.basic4ever.com
atender. Em muitos casos ARMbasic irá rodar muito mais rápido que um programa em C compilado. Como isto é possível, você perguntará? A resposta é que ARMbasic tem apenas o escopo global, não há Stack na maioria do código do usuário. Transferência de controle pode produzir código mais rápido que chamadas as procedures em C ou Java. ARMbasic é comprometido com velocidade e tamanho do código, mas se compara a programas escritos em C.
O quanto rápido é o ARMbasic?
O loop mais rápido usa WHILE ... LOOP, com um loop simples rodando 4 milhões de interações por segundo, loops levam um número de instruções para executar, quando rodando simples instruções, como X= X+1, irá rodar a velocidade excedendo 13 milhões de linhas por segundo.
ARMbasic suporta Programação Orientada a Objetos?
ARMbasic não suporta
Scopo das Variáveis
• Todos os Labels e variáveis são globais no ARMbasic. A grande vantagem é que há um pequeno Overhead para o Stack, o qual dá uma maior performance.
Matemáticas com ponto Flutuante
• ARMbasic usa matemática de 32 bits para todas as operações matemáticas.
Qual o futuro do ARMbasic?
• mais funções para String • mais seriais BUS • mais funções de Hardware • networking • Funções analógicas
Tipos das variáveis no ARMBASIC
NAME BITS FORMAT MIN VAL MAX VAL
Manual do ARMBASIC 24
_________________________________________________________________________ www.basic4ever.com
INTEGER 32 signed Integer -2147483648 +2147483647
ARRAY Fixed length signed Integer -2147483648 +2147483647
STRING variable/max length 256 bytes
zero terminated 0 +255
Manual do ARMBASIC 25
_________________________________________________________________________ www.basic4ever.com
3) A linguagem
STATEMENTS SIMPLES
Atribuição
Sintaxe lvalue = expression
Descrição Este comando altera o valor da variável, String, elemento de uma Array ou Registrador de Hardware. Exemplo A$ = "this is a string" A$(8) = "1" ' faz ele com uma String “1” IN(0) = 1 'seta o pino 0 como Alto x = 100+(x*z-3)
Manual do ARMBASIC 26
_________________________________________________________________________ www.basic4ever.com
END Sintaxe END
Descrição END é usado para terminar o programa.
Quando o ARMbasic é usado para controlar uma aplicação, o END pode ser normalmente encontrado. Como a maioria das aplicações pode ser um loop bem como pode terminar, o qual vai requerer ao usuário dar um reboot.
Exemplo PRINT "An unrecoverable error has occurred " END
Manual do ARMBASIC 27
_________________________________________________________________________ www.basic4ever.com
EXIT Sintaxe EXIT
Descrição Deixa um código do bloco como DO...LOOP, FOR...NEXT, ou WHILE...LOOP
Exemplo 'O comando PRINT não será executado DO EXIT ' Exit do DO...LOOP PRINT "Eu nunca serei executado" LOOP
Manual do ARMBASIC 28
_________________________________________________________________________ www.basic4ever.com
GOSUB Sintaxe GOSUB label
Descrição A execução pula para uma subrotina marcada por um Label. Sempre usa RETURN para sair de um GOSUB, a execução continuará no próximo Statement após o GOSUB. Exemplo
GOSUB message END message PRINT "Welcome! return
Manual do ARMBASIC 29
_________________________________________________________________________ www.basic4ever.com
GOTO Sintaxe GOTO label
Descrição A execução pula para o Label
Goto pode ser substituído poder estruturas mais modernas, como DO...LOOP, FOR...NEXT, e WHILE...LOOP.
Exemplo GOTO message message: PRINT "Welcome!
Manual do ARMBASIC 30
_________________________________________________________________________ www.basic4ever.com
DEBUGIN variable Sintaxe DEBUGIN variable Descrição Normalmente, os programas que rodam no ARMBASIC não tem nenhuma interação humana. Porém, durante a fase de testes o usuário que entrar com diferentes valores. Então, uma versão simplificada do comando Basic tradicional INPUT tem sido adicionado, chamado de DEBUGIN. Exemplo DIM yn$(10) DO PRINT "Please enter a number: "; DEBUGIN a PRINT "and another "; DEBUGIN b PRINT "Thank you" PRINT PRINT "The total is "; a + b PRINT PRINT DO PRINT "Would you like to enter some more numbers"; DEBUGIN yn$ UNTIL (yn$(0) = "y") OR (yn$(0) = "n") UNTIL (yn$(0) <> "y")
Manual do ARMBASIC 31
_________________________________________________________________________ www.basic4ever.com
PRINT Sintaxe PRINT [expressionlist] [(, | ;)] ...
Descrição Prints expressionlist para tela Expressionlist pode ser uma constante String, constante número, variáveis, variáveis Strings ou expressões consistindo de variáveis e números. Separados por “,” ou “;”.
Usando virgula (,) como separador ou no final da expressionlist colocará o cursor na próxima coluna (a cada 5 caracteres), usando ponto e vírgula (;), não moverá o cursor. Se nenhum dos deles for utilizado, então um new-line será impresso.
Exemplo DIM A$(10) A$ = "World" '' new-line PRINT "Hello World!"PRINT "Hello World!" '' no new-line PRINT "Hello"; "World"; "!"; PRINT '' column separator PRINT "Hello!", "World!" PRINT "3+4 =",3+4 y=4321 x=1234 PRINT "sum=",x+y
Manual do ARMBASIC 32
_________________________________________________________________________ www.basic4ever.com
READ Sintaxe READ {constant,} variable_list
Descrição
Lê um dado armazenado na aplicação com o comando DATA. A Constant pode ser usado para alterar a localização dentro da Array de dados que será lido.
Os elementos de variable_list devem ser dos tipos básicos, numéricos, Strings ou elementos de Array. Cada elemento lido será preenchido de um valor de 32 bits no espaço de 4K usado para armazenar os Statements de DATA. Todos os Statements de DATA no programa se comportam como uma lista simples.
Após o último elemento de a lista ser lido, o primeiro elemento da lista será lido.
O Statement RESTORE reseta o ponteiro do próximo elemento da lista para o começo do DATA. Isto permite o usuário alterar a ordem no qual os DATA são READ.
Exemplo ' Cria uma Array de 5 Integer s e uma String para guardar dados DIM h(4) DIM hs$(30) ' Configura o loop para ocorrer 5 vezes (para 5 número... check o dado) FOR read_data = 0 TO 4 ' Lê um inteiro READ h(read_data) ' Mostra ele PRINT "Number"; read_data;" = "; h(read_data) NEXT ' Espaço PRINT ' Lê uma String READ hs$
Manual do ARMBASIC 33
_________________________________________________________________________ www.basic4ever.com
' Imprime PRINT "String = " + hs$ ' Espera uma tecla SLEEP ' Sai do programa END ' Bloco de Dados DATA 3, 234, 4354, 23433, 87643, "Bye!"
Manual do ARMBASIC 34
_________________________________________________________________________ www.basic4ever.com
RESTORE
Sintaxe RESTORE Descrição Reseta o ponteiro do próximo elemento da lista para o começo do DATA
Exemplo ' Cria 2 Arrays de Inteiros e Strings para armazenar dados DIM h(4) DIM h2(4) ' Configura o loop para ocorrer 5 vezes (para 5 números) FOR read_data1 = 0 TO 4 ' Le um inteiro READ h(read_data1) ' Mostra ele PRINT "Bloc 1, number"; read_data1;" = "; h(read_data1) NEXT ' Seta o ponteiro para o início RESTORE ' Mostra ele PRINT "Bloc 1 String = " + hs ' Espaço PRINT Print ' Seta o ponteiro para o inicio RESTORE ' Configura o loop para ocorrer 5 vezes (para 5 números) FOR read_data2 = 0 TO 4 ' Lê um Inteiro
Manual do ARMBASIC 35
_________________________________________________________________________ www.basic4ever.com
READ h2(read_data2) ' Mostra PRINT "Bloc 2, number"; read_data2;" = "; h2(read_data2) NEXT DATA 3, 234, 4354, 23433, 87643 DATA 546, 7894, 4589, 64657, 34554
Manual do ARMBASIC 36
_________________________________________________________________________ www.basic4ever.com
RETURN Sintaxe RETURN Descrição
RETURN é usado para retornar ao Statement imediatamente ao GOSUB.
Exemplo PRINT "Let's Gosub!" GOSUB MyGosub PRINT "Back from Gosub!" END MyGosub: PRINT "In Gosub!" RETURN
STATEMENT COMPOSTOS
Manual do ARMBASIC 37
_________________________________________________________________________ www.basic4ever.com
DO...LOOP Sintaxe
[DO] WHILE condition [Statement block] LOOP DO [Statement block] [LOOP] UNTIL condition
DO [Statement block] LOOP
Descrição Repete um bloco de Statements until/while a condition é encontrada. As três sintaxes acima exibem tipos diferentes. O DO .. LOOP sem um WHILE ou UNTIL entrará em loop para sempre, a não ser que um Statement EXIT é executado.
Exemplo ' Imprimirá a mensagem "hello" no console até que a condição seja encontrada ‘ (a > 10) a = 1 DO PRINT "hello" a += 1 LOOP UNTIL a > 10
Manual do ARMBASIC 38
_________________________________________________________________________ www.basic4ever.com
FOR...NEXT Sintaxe
FOR counter = startvalue TO endvalue [STEP stepvalue] [Statement block] NEXT [counter]
FOR counter = startvalue DOWNTO endvalue [STEP stepvalue] [Statement block] NEXT [counter]
Descrição O loop FOR [...] NEXT inicializa counter para startvalue, então executa o Statement block's, incrementando counter por stepvalue até que alcance endvalue. Se stepvalue não esta explicitamente declarado, é ““setado”” para 1.
Se DOWNTO é usado, então o counter é decrementado pelo valor stepvalue ou 1 se nada é especificado.
Exemplo PRINT "contando de 3 a 0, com passo de -1" FOR i = 3 DOWNTO 0 STEP 1 PRINT "i is "; i NEXT i
Manual do ARMBASIC 39
_________________________________________________________________________ www.basic4ever.com
IF...THEN Sintaxe IF expression THEN Statement(s) [ELSE Statement(s) ] IF expression THEN Statement(s) [ELSE] Statement(s) [ELSEIF expression THEN] Statement(s) ENDIF
Descrição
IF...THEN é o meio de tomar decisões. É um mecanismo para executar um Statement ou conjunto de Statements (bloco) somente se a condição é True.
Exemplo x = 5 'Número a ser descoberto PRINT "Entre com o número entre 0 e 10" DO 'Inicia o loop DEBUGIN "guess"; y 'Ente um numero! IF x = y THEN PRINT "Correto!" 'Parabens!!!! EXIT ELSEIF y > 10 THEN PRINT "O número nao pode se maior que 10” ELSEIF x > y THEN PRINT "Muito baixo!!!" ELSEIF x < y THEN PRINT "Muito alto!!! " ENDIF LOOP 'Repete o loop
Manual do ARMBASIC 40
_________________________________________________________________________ www.basic4ever.com
SELECT [CASE] Sintaxe SELECT [CASE] expression [CASE expressionlist] [Statements] [CASE ELSE] [Statements] ENDSELECT
Descrição Select case executa código específico dependendo do valor da expression. Se a expression iguala ao primeiro case então o código executado, caso contrário os próximos case são comparados e se um iguala então o código é executado. Se nenhuma condição iguala e há um case else no final, então será executado, caso contrário o completo bloco select case será pulado. Sintaxe da lista de expressão expression [{TO expression | relational operator expression}][, ...] exemplos de lista de expressões
CASE "A" CASE 5 TO 10 CASE > "e" CASE 1, 3 TO 10 CASE 1, 3, 5, 7, 9
Exemplo PRINT "Escolha um número de 1 a 10: " DEBUGIN choice SELECT choice CASE 1 PRINT "numero é 1" CASE 2 PRINT " numero é 2" CASE 3, 4 PRINT " numero é 3 ou 4" CASE 5 TO 10 PRINT " numero está de 5 a 10" CASE <= 20 PRINT "numero esta de 11 a 20" CASE ELSE
Manual do ARMBASIC 41
_________________________________________________________________________ www.basic4ever.com
PRINT "numero esta fora de 1 a 20 " ENDSELECT
Manual do ARMBASIC 42
_________________________________________________________________________ www.basic4ever.com
WHILE...LOOP Sintaxe [DO] WHILEcondition [Statements] LOOP
Descrição WHILE [...] LOOP repetirá os Statements entre WHILE e LOOP, enquanto a condição condition é True. Se a condition não é verdade quando o Statement WHILE começa, nenhum dos Statements será executado. O DO é opcional no ARMbasic. Exemplo WHILE x = 0 x = 1 LOOP
OUTROS STATEMENTS
Manual do ARMBASIC 43
_________________________________________________________________________ www.basic4ever.com
CLEAR Sintaxe CLEAR
Descrição Este é um comando em tempo de compilação que apaga o atual programa em BASIC na memória Exemplo PRINT "hi there" RUN CLEAR
Manual do ARMBASIC 44
_________________________________________________________________________ www.basic4ever.com
CONST Sintaxe CONST symbolname = value
Descrição Declara um constante em tempo de compilação que pode ser um inteiro Exemplo CONST Count = 5 FOR I = 1 TO Count PRINT I NEXT I -- Imprimirá 1 2 3 4 5
Manual do ARMBASIC 45
_________________________________________________________________________ www.basic4ever.com
DATA Sintaxe DATA constant_expression1 [,constant_expression2]...
Descrição Armazena uma lista de constantes numéricos ou expressões alfabéticas que são avaliadas em tempo de compilação e armazenadas como constantes que podem ser lidas dentro de variáveis usando READ. DATA é normalmente usado para inicializar variáveis. Exemplo ' Cria uma Array de 5 inteiros DIM h(5) ' Configura laço para 5 ocorrências FOR read_data = 0 TO 4 ' Lê um Inteiro READ h(read_data) ' Display it. PRINT "Number"; read_data;" = "; h(read_data) NEXT DATA 3, 234, 435/4, 23+433, 87643
Manual do ARMBASIC 46
_________________________________________________________________________ www.basic4ever.com
DIM Sintaxe
Declarando Arrays: DIM symbolname (size )
Declarando Strings: DIM symbolname$ (size )
Descrição Declara uma variável e aloca memória para acomodá-lo. Embora ARMbasic não requer a declaração de variáveis inteiras, DIM é usado para atribuir Arrays de Inteiros e Strings (Array de Bytes). O size é o número de elementos da Array mais 1. Permite indexação de 0 até size.
Todas Strings devem ter como último caractere ‘$’.
Apenas uma variável pode ser declarada por cada Statement DIM
Memória para variáveis simples é alocada a partir do início do Heap e Strings ou Arrays são alocadas a partir do topo do Heap. Strings são empacotadas como bytes e são sempre alinhadas em Word, você deve permitir espaço suficiente para acomodar o tamanho máximo esperado da String mais 1 Byte para o NULL.
Exemplo DIM a$ (10) DIM b$ (20) DIM c$ (30) a$ = "Hello World" b$ = "... from ARMbasic!" c$ = a$ + b$ print c$ ' Mostra Hello World
Manual do ARMBASIC 47
_________________________________________________________________________ www.basic4ever.com
LABEL: Sintaxe name : Descrição
GOTO e GOSUB vão para um label. Qualquer parte no código é um label destino. Um label pode ser qualquer um nome de variável válido seguido por dois pontos “:”. Um label pode ser o único elemento na linha.
MAIN: é um caso especial de label que irá iniciar a execução do programa em algum lugar deferente da primeira linha de código.
Exemplo ... GOSUB sayHello .... sayHello: PRINT "Hello" RETURN
Manual do ARMBASIC 48
_________________________________________________________________________ www.basic4ever.com
MAIN Sintaxe: MAIN:
Descrição Normalmente o programa ARMbasic irá executar o primeiro Statement. Isto pode ser mudado tendo um MAIN: em qualquer parte no programa. Quando o MAIN não é encontrado, o programa iniciará no primeiro Statement. Exemplo SUB1: PRINT "Hello from sub1" RETURN MAIN: GOSUB SUB1 END
Manual do ARMBASIC 49
_________________________________________________________________________ www.basic4ever.com
RESTORE Sintaxe RESTORE
Descrição
O Statement RESTORE reseta o ponteiro do próximo elemento da lista para o começo do DATA. Isto permite o usuário alterar a ordem no qual os DATA são READ.
Exemplo ' Cria 2 Arrays de Inteiros DIM h(4) DIM h2(4) ' Configura laço de 5 loops FOR read_data1 = 0 TO 4 ' Lê um inteiro READ h(read_data1) ' O Mostra PRINT "Bloc 1, number"; read_data1;" = "; h(read_data1) NEXT ' Seta o ponteiro para o início RESTORE ' Imprime PRINT "Bloc 1 String = " + hs ' Espaços. PRINT Print
Manual do ARMBASIC 50
_________________________________________________________________________ www.basic4ever.com
' Seta o ponteiro do DATA para o início RESTORE ' Configura laço de 5 loops FOR read_data2 = 0 TO 4 ' Lê um Inteiro READ h2(read_data2) ' Mostra PRINT "Bloc 2, number"; read_data2;" = "; h2(read_data2) NEXT DATA 3, 234, 4354, 23433, 87643 DATA 546, 7894, 4589, 64657, 34554
Manual do ARMBASIC 51
_________________________________________________________________________ www.basic4ever.com
RUN Sintaxe RUN
Descrição Execute o programa que foi carregado na memória.
Exemplo PRINT "hi there" RUN CLEAR
OPERADORES
Manual do ARMBASIC 52
_________________________________________________________________________ www.basic4ever.com
& (Concatenação de String) Sintaxe string1 & String 2
Descrição Retorna uma String da concatenação das duas variáveis. Se uma das duas variáveis não é uma String, a função STR é chamada automaticamente para converter a variável para String. Podem incluir funções LEFT, RIGHT, HEX e STR. Exemplo DIM A$(20) DIM C$(20) A$="The result is: " B=1243 C$=A$ & B PRINT C$ SLEEP O resultado é: The result is: 1243
Manual do ARMBASIC 53
_________________________________________________________________________ www.basic4ever.com
* (Multiplicação)
Sintaxe
argument1 * argument2
Descrição O operador de multiplicação é usado para multiplicar 2 números. Os argumentos argument1 e argument2 podem ser qualquer expressão numérica válida.
Exemplo n = 4 * 5 PRINT n SLEEP O resultado é: 20
Manual do ARMBASIC 54
_________________________________________________________________________ www.basic4ever.com
+ (Adição) Sintaxe argument1 + argument2
Descrição O operador adição é usado para achar a soma de 2 números. Os argumentos argument1 e argument2 podem ser qualquer expressão numérica válida.
Exemplo
n = 454 + 546 PRINT n SLEEP O resultado é: 1000
Manual do ARMBASIC 55
_________________________________________________________________________ www.basic4ever.com
+ (Concatenação de String) Sintaxe string1 + string2
Descrição Retorna uma String da concatenação das duas variáveis. Se uma das duas variáveis não é uma String, a função STR é chamada automaticamente para converter a variável para String. Podem incluir funções LEFT, RIGHT, HEX e STR Exemplo DIM A$(20) DIM B$(20) DIM C$(30) A$="Hello," B$=" World!" C$=A$+B$ PRINT C$ SLEEP O resultado é: Hello, World!
Manual do ARMBASIC 56
_________________________________________________________________________ www.basic4ever.com
- (Negação) Sintaxe - número
Descrição O operador de negação é usado para transformar o número em negativo. number pode ser qualquer expressão numérica válida.
Exemplo PRINT -5 n = 6543256 n = - n PRINT n SLEEP O resultado é: -5 -6543256
Manual do ARMBASIC 57
_________________________________________________________________________ www.basic4ever.com
- (Subtração) Sintaxe argument1 - argument2
Descrição O operador de subtração é usado para achar a diferença entre dois números. Os argumentos argument1 e argument2 podem ser qualquer expressão numérica válida.
can be any valid numerical expression.
Exemplo n = 4 - 5 PRINT n SLEEP
Manual do ARMBASIC 58
_________________________________________________________________________ www.basic4ever.com
/ (Divisão) Sintaxe argument1 / argument2
Descrição O operador de divisão é usado para dividir dois números e retorna um número inteiro. Os argumentos argument1 e argument2 podem ser qualquer expressão numérica válida. Se um outro argumento é uma variável não inicializada, o argumento será avaliado como zero. Se argument2 é zero, uma mensagem de divisão por zero será exibido.
Exemplo PRINT n / 5 n = 600000 / 23 PRINT n SLEEP
Manual do ARMBASIC 59
_________________________________________________________________________ www.basic4ever.com
< (Menor que) Sintaxe expressionLEFT < expressionRT
Descrição O operador < (Menor que) avalia 2 expressões, compara e então retorna o resultado da condição. A condição é False (0) se left-hand é maior que right-hand, ou True (1) se é menor que right-hand.
Exemplo O operador >= (maior ou igual) é o complemento de < (menor que) e o funcionamento é idêntico quando combinado com o operador NOT (Bit-wise Complement).
IF( 69 < 420 ) THEN PRINT "( 69 < 420 ) is True." IF NOT( 69 >= 420 ) THEN PRINT "not( 69 >= 420 ) is True."
Manual do ARMBASIC 60
_________________________________________________________________________ www.basic4ever.com
<= (menor ou igual) Sintaxe expressionLEFT <= expressionRT
Descrição O operador <= (Menor ou igual) avalia 2 expressões, compara e então retorna o resultado da condição. A condição é True se left-hand é menor ou igual a right-hand, ou False (0) se é maior que right-hand.
Exemplo O operador > (maior que) é o complemento de <= (menor ou igual), e o funcionamento é idêntico quando combinado com o operador NOT (Bit-wise Complement).
IF( 69 <= 420 ) THEN PRINT "( 69 <= 420 ) is True." IF NOT( 60 > 420 ) THEN PRINT "not( 420 > 69 ) is True."
Manual do ARMBASIC 61
_________________________________________________________________________ www.basic4ever.com
> (Maior que) Sintaxe expressionLEFT > expressionRT
Descrição O operador > (Maior que) avalia 2 expressões, compara e então retorna o resultado da condição. A condição é False (0) se left-hand é maior que right-hand, ou True (1) se é menor que right-hand.
Exemplo O operador <= (menor ou igual) é o complemento de > (maior que), e o funcionamento é idêntico quando combinado com o operador NOT (Bit-wise Complement).
IF( 420 > 69 ) THEN PRINT "( 420 > 69 ) is True." IF NOT( 420 <= 69 ) THEN PRINT "not( 420 <= 69 ) is True."
Manual do ARMBASIC 62
_________________________________________________________________________ www.basic4ever.com
>= (maior ou igual) Sintaxe expressionLEFT >= expressionRT
Descrição O operador >= (Maior ou igual) avalia 2 expressões, compara e então retorna o resultado da condição. A condição é True se left-hand é maior ou igual a right-hand, ou False (0) se é menor que right-hand.
Exemplo O operador < (menor) é o complemento de >= (maior ou igual), e o funcionamento é idêntico quando combinado com o operador NOT (Bit-wise Complement).
IF( 420 >= 69 ) THEN PRINT "( 420 >= 69 ) is True." IF NOT( 420 < 69 ) THEN PRINT "not( 420 < 69 ) is True."
Manual do ARMBASIC 63
_________________________________________________________________________ www.basic4ever.com
<> (Diferente)
Sintaxe expressionLEFT <> expressionRT
Descrição O operador <> avalia duas expressões, compara se são diferentes e retorna o resultado condicional. A condição é True (1) se a expressão left-hand é diferente de right-hand, ou False (0) se são iguais.
Exemplo IF( guess <> secret_number ) THEN PRINT "Sorry, Try again." O operador = (igual) é o complemento do operador <> e a funcionalidade é idêntica quando combinada com o operador NOT (Bit-wise Complement). IF( 420 <> 69 ) THEN PRINT "( 420 <> 69 ) is True." IF NOT( 420 = 69 ) THEN PRINT "not( 420 = 69 ) is True."
Manual do ARMBASIC 64
_________________________________________________________________________ www.basic4ever.com
= (Igual)
Sintaxe expressionLEFT = expressionRT
Descrição O operador = avalia duas expressões, compara se são iguais e retorna o resultado condicional. A condição é True (1) se a expressão left-hand é igual a right-hand, ou False (0) se são diferentes.
Exemplo IF( guess = secret_number ) THEN PRINT "Cool, found! " O operador <> (diferente) é o complemento do operador = e a funcionalidade é idêntica quando combinada com o operador NOT (Bit-wise Complement). IF( 420 <> 69 ) THEN PRINT "( 420 <> 69 ) is True." IF NOT( 420 = 69 ) THEN PRINT "not( 420 = 69 ) is True."
Manual do ARMBASIC 65
_________________________________________________________________________ www.basic4ever.com
ABS Sintaxe ABS ( number )
Descrição O valor absoluto de um número é sua magnitude sem sinal. Por exemplo, ABS(-1) e ABS(1) retornam 1. O argumento pode ser qualquer expressão numérica válida. Se number é uma variável não inicializada, zero é retornado. ABS retorna o valor que é o mesmo tipo do argumento number. Exemplo PRINT ABS ( -1 ) PRINT ABS ( 42 ) PRINT ABS ( N ) N = -69 PRINT ABS ( N ) O resultado é: 1 42 0 69
Manual do ARMBASIC 66
_________________________________________________________________________ www.basic4ever.com
AND Sintaxe number AND number
Descrição AND é uma operação booleana, uma função lógica que pega dois bits e produz um bit resultante. Se dados dois bits, a função retorna True se ambos são True e False para qualquer outra combinação. A tabela verdade abaixo mostra todas as combinações. Bit1 Bit2 Result 0 0 0 1 0 0 0 1 0 1 1 1 Ele retorna True para expressões condicionais no ARMbasic. Quando usando "And" dentro de um bloco If, While loop, ou Do loop, se comportará assim: "IF condition1 AND condition2 THEN expression1" É traduzido como: IF condition1 é True, AND condition2 é True, THEN executa expression1 Quando dadas duas expressões, números ou variáveis que retornam um valor que é mais que um simples bit, AND é realizado “bitwise”. Uma operação “bitwise” compara cada bit se um número, como cada bit de outro número, realizando uma operação lógica para cada bit. A expressão matemática booleana abaixo descreve isto 00001111 AND 00011110 -------- igual 00001110 Exemplo: ' Usando o operador AND em dois valores numéricos numeric_value1 = 15 '00001111 numeric_value2 = 30 '00011110
Manual do ARMBASIC 67
_________________________________________________________________________ www.basic4ever.com
'Result = 14 = 00001110 PRINT numeric_value1 AND numeric_value2 END ' Usando o operador em duas expressões condicionais numeric_value1 = 15 numeric_value2 = 25 IF numeric_value1 > 10 AND numeric_value1 < 20
THEN PRINT "Valor numérico 1 esta entre 10 e 20" IF numeric_value2 > 10 AND numeric_value2 < 20
THEN PRINT " Valor numérico 2 esta entre 10 e 20" END O resultado é: Valor numérico 1 esta entre 10 e 20
Manual do ARMBASIC 68
_________________________________________________________________________ www.basic4ever.com
OR Sintaxe number OR number
Descrição OR é uma operação booleana, uma função lógica que pega dois bits e produz um bit resultante. Se dados dois bits, a função retorna True qualquer um deles for True e False para qualquer outra combinação. A tabela verdade abaixo mostra todas as combinações. Bit1 Bit2 Result 0 0 0 1 0 1 0 1 1 1 1 1 Ele retorna True para expressões condicionais no ARMbasic. Quando usando "OR" dentro de um bloco If, While loop, ou Do loop, se comportará assim: "IF condition1 OR condition2 THEN expression1" É traduzido como: IF condition1 é True OU condition2 é True, THEN executa expression1 Quando dadas duas expressões, números ou variáveis que retornam um valor que é mais que um simples bit, OR é realizado “bitwise”. Uma operação “bitwise” compara cada bit se um número, como cada bit de outro número, realizando uma operação lógica para cada bit. A expressão matemática booleana abaixo descreve isto 00001111 OR 00011110 -------- igual 00011111 Exemplo: ' Usando o operador OR em dois valores numéricos numeric_value1 = 15 '00001111 numeric_value2 = 30 '00011110 'Result = 31 = 00011111
Manual do ARMBASIC 69
_________________________________________________________________________ www.basic4ever.com
PRINT numeric_value1 OR numeric_value2 END ' Usando o operador em duas expressões condicionais numeric_value = 10 IF numeric_value = 5 OR numeric_value = 10 THEN PRINT "Numeric_Value equals 5 or 10" END O resultado é: Numeric_Value equals 5 or 10
Manual do ARMBASIC 70
_________________________________________________________________________ www.basic4ever.com
NOT Sintaxe NOT expression
Descrição NOT, é uma função lógica que pega um bit e retorna o bit invertido. A função retorna True se o bit é False e False se o bit é True. Também NOT pode ser utilizado em expressões condicionais. Quando usando NOT em um bloco If, While loop, ou Do loop, se comportará assim: IF NOT condition1 THEN expression1 É traduzido como: IF condition1 é False THEN executa expression1 Quando dada uma expressão, número, ou variável que retorna um número que é mais que um simples bit, NOT é realizado "bitwise". Uma operação “bitwise” realiza uma operação lógica para cada bit. A expressão matemática booleana abaixo descreve isto: 00001111 NOT -------- igual 11110000 A mesma lógica é também usado quando trabalhando com condições. NOT, quando usado “bitwise”, é executado com inteiros positivos, como UInteger, UByte, ou ULongInt. Pode, de qualquer forma, ser usado com qualquer tipo numérico.
Exemplo ' Usando o operador NOT sobre um valor numérico numeric_value = 15 '00001111 'Resultado = -16 = 111111111111111111111111111110000 (Complemento de ‘2) PRINT NOT numeric_value END ' Usando o operador NOT em expressões condicionais numeric_value1 = 15 numeric_value2 = 25
Manual do ARMBASIC 71
_________________________________________________________________________ www.basic4ever.com
IF NOT numeric_value1 = 10 THEN PRINT "Numeric_Value1 is not equal to 10" IF NOT numeric_value2 = 25 THEN PRINT "Numeric_Value2 is not equal to 25" END O resultado é: Numeric_Value1 is not equal to 10
Manual do ARMBASIC 72
_________________________________________________________________________ www.basic4ever.com
MOD Sintaxe argument1 MOD argument2
Descrição MOD é modulo ou operador aritmético que retorna o resto de argument1 dividido por argument2. Exemplo PRINT 47 MOD 7 PRINT 56 MOD 2 PRINT 5 MOD 3 O resultado é: 5 0 2
Manual do ARMBASIC 73
_________________________________________________________________________ www.basic4ever.com
COS Sintaxe COS ( expression )
Descrição ARMbasic usa inteiros, mas pode haver a necessidade delas em certas funções que normalmente usam cálculos com ponto flutuante. Uma destas é a função coseno, a qual normalmente opera em graus ou radianos. Mas para simplicidade no mundo binário, estes valores devem ser normalizados para preencher um valor do tipo byte. Então o argumento é 0-255, que é igual o número de graus vezes 0.7103 (256/360). O resultado deveria estar normalmente entre -1 e 1, mas no caso é expresso como -127 a +127 ou o cos() multiplicado por 127.
Exemplo PRINT "Please enter an angle in degrees: "; DEBUGIN a r = a * 256 / 360 'Convert the degrees to "binary radians" PRINT "" PRINT "The cosine of a" ; a; " degree angle is"; COS ( r ) END
O resultado é: Please enter an angle in degrees: 30 The cosine of a 30 degree angle IS 110
Manual do ARMBASIC 74
_________________________________________________________________________ www.basic4ever.com
SIN Sintaxe SIN ( number )
Descrição ARMbasic usa inteiros, mas pode haver a necessidade delas em certas funções que normalmente usam cálculos com ponto flutuante. Uma destas é a função coseno, a qual normalmente opera em graus ou radianos. Mas para simplicidade no mundo binário, estes valores devem ser normalizados para preencher um valor do tipo byte. Então o argumento é 0-255, que é igual o número de graus vezes 0.7103 (256/360). O resultado deveria estar normalmente entre -1 e 1, mas no caso é expresso como -127 a +127 ou o sin() multiplicado por 127.
Exemplo PRINT "Please enter an angle in degrees: "; DEBUGIN a r = a * 256 / 360 'Convert the degrees to Radians PRINT "" PRINT "The sine of a" ; a; " degree angle is"; SIN ( r ) END O resultado é: Please enter an angle in degrees: 30 The sine of a 30 degree angle IS 64
Manual do ARMBASIC 75
_________________________________________________________________________ www.basic4ever.com
XOR Sintaxe number XOR number
Descrição XOR é uma operação booleana, uma função lógica que pega dois bits e produz um bit resultante. Se dados dois bits, a função retorna True forem diferentes e False se forem iguais. A tabela verdade abaixo mostra todas as combinações. Bit1 Bit2 Result 0 0 0 1 0 1 0 1 1 1 1 0 Ele retorna True para expressões condicionais no ARMbasic. Quando usando "XOR" dentro de um bloco If, While loop, ou Do loop, se comportará assim: "IF condition1 XOR condition2 THEN expression1" É traduzido como: IF condition1 é True XOR condition2 é True, THEN executa expression1 Quando dadas duas expressões, números ou variáveis que retornam um valor que é mais que um simples bit, XOR é realizado “bitwise”. Uma operação “bitwise” compara cada bit se um número, como cada bit de outro número, realizando uma operação lógica para cada bit. A expressão matemática booleana abaixo descreve isto 00001111 XOR 00011110 -------- igual 00010001 Exemplo: ' Usando o operador XOR em dois valores numéricos numeric_value1 = 15 '00001111 numeric_value2 = 30 '00011110 'Result = 17 = 00010001
Manual do ARMBASIC 76
_________________________________________________________________________ www.basic4ever.com
PRINT numeric_value1 AND numeric_value2 END ' Usando o operador em duas expressões condicionais numeric_value1 = 10 numeric_value2 = 15 IF numeric_value1 = 10 XOR numeric_value2 = 20 THEN PRINT "Numeric_Value1 equals 10 or Numeric_Value2 equals 20" END O resultado é: "Numeric_Value1 equals 10 or Numeric_Value2 equals 20"
Manual do ARMBASIC 77
_________________________________________________________________________ www.basic4ever.com
<< Sintaxe number << places
Descrição << shifts todos os bits do argumento inteiro number para esquerda por um número de vezes places. Isto tem o efeito de multiplicar o argumento number por 2 para cada shift dado em argumentos places. Ambos argumentos numbers e places são inteiros. Isto é mais fácil ver em um número binário. Por exemplo, %0101 << 1 retorna o número binário %01010. Na base 10, número com este 5 << 1 retorna 10 Exemplo FOR i = 1 TO 10 PRINT 1 << i NEXT i SLEEP O resultado é: 2 4 8 16 32 64 128 256 512 1024
Manual do ARMBASIC 78
_________________________________________________________________________ www.basic4ever.com
>> Sintaxe number >> places
Descrição >> shifts todos os bits do argumento inteiro number para direita por um número de vezes places. Isto tem o efeito de dividir o argumento number por 2 para cada shift dado em argumentos places. Ambos argumentos numbers e places são inteiros. Isto é mais fácil ver em um número binário. Por exemplo, %0101 >> 1 retorna o número binário %010. Na base 10, número com este 5 >> 1 retorna 2 Exemplo FOR i = 1 TO 10 PRINT 1000 >> i NEXT i SLEEP O resultado é: 500 250 125 62 31 15 7 3 1 0
Manual do ARMBASIC 79
_________________________________________________________________________ www.basic4ever.com
REV Sintaxe ( value ) REV ( number of bits )
Descrição A função retorna a cópia espelhada de uma quantidade específica de bits do valor, começando pelo bit mais à direita (LSB). Exemplo: 0xFEED REV 4 retorna 0xB (1011) que é o espelho de 0xD (1101) Em 0xFEED, os number of bits mais a direita de 0xFEED é D. D em binário é 1101, o espelho de 1101 é 1011.
TIPOS DE DADOS
Manual do ARMBASIC 80
_________________________________________________________________________ www.basic4ever.com
Constantes Descrição Constantes são números que não podem ser alterados após eles serem definidos. Por exemplo, 5 será sempre o mesmo número.
No ARMbasic, nomes de variáveis podem ser ditos constantes definindo-os com o comando CONST. Cada constante é disponível globalmente, significa que uma vez definida você pode usar a palavra para se referir a constante em qualquer parte do seu programa. Após sendo definido com o comando CONST, constantes não podem ser alteradas. Se o código tenta alterar a constante, uma mensagem de erro irá resultar durante a compilação do código.
Exemplo CONST FirstNumber = 1 CONST SecondNumber = 2 PRINT FirstNumber, SecondNumber 'Irá imprimir 1 e 2
Manual do ARMBASIC 81
_________________________________________________________________________ www.basic4ever.com
Variáveis Descrição Variáveis são valores os quais podem ser manipulados. Elas são referenciadas usando nomes compostos de letras, números e caractere "_". Tipo de dado numérico de 32-bit tem sinal. Pode guardar valores de -2147483648 até 2147483647. Variáveis são declaradas automaticamente no primeiro uso. Não é necesário um Statement DIM.
Exemplo FirstNumber = 1 SecondNumber = 2 PRINT FirstNumber, SecondNumber, ThirdNumber 'Irá imprimir 1 2 0
Manual do ARMBASIC 82
_________________________________________________________________________ www.basic4ever.com
Arrays Descrição Arrays são variáveis as quais contem mais que um valor. O valor é decidido através do uso de um índice o qual é um número inteiro entre 0 e o número de elementos da Array. Em ARMbasic, qualquer Array deve ser declarada antes de seu primeiro uso, com o comando DIM O melhor meio de conceituar uma Array é olhando ela com uma planilha. Por exemplo, se você tem uma Array chamada myArray a qual contém elementos (1 até 10), e foi preenchida com números randômicos, você pode ver algo como: Indice Dado 1 5 2 2 3 6 4 5 5 9 6 1 7 0 8 4 9 5 10 7 Tenha em mente que os números na coluna Dados são completamente arbitrários neste exemplo. Quando você criar uma Array no ARMbasic usando o comando DIM, todos os elementos são inicializados com 0. Se você olhar myArray(1), você verá que é 5. Se você olhar myArray(5), você verá que é 9. No ARMbasic , você tratar uma parte de uma Array como se fosse uma variável simples. Exemplo: DIM Numbers( 10) DIM OtherNumbers( 10) Numbers(1) = 1 Numbers(2) = 2 OtherNumbers(1) = 3 OtherNumbers(2) = 4 GOSUB PrintArray FOR a = 1 TO 10 PRINT Numbers(a) NEXT a PRINT OtherNumbers(1)
Manual do ARMBASIC 83
_________________________________________________________________________ www.basic4ever.com
PRINT OtherNumbers(2) PRINT OtherNumbers(3) PRINT OtherNumbers(4) PRINT OtherNumbers(5) PRINT OtherNumbers(6) PRINT OtherNumbers(7) PRINT OtherNumbers(8) PRINT OtherNumbers(9) PRINT OtherNumbers(10) PrintArray: FOR i = 1 TO 10 PRINT otherNumbers(i) NEXT i RETURN
Manual do ARMBASIC 84
_________________________________________________________________________ www.basic4ever.com
Strings Sintaxe DIM symbolname$ ( maxlength )
Descrição
Uma String é uma Array de caracteres e limitado para 256 caracteres.
Um implícito CHR(0) (NULL) é incluído no final da STRING, para permitir uma String de tamanho variável.
STRINGS não são checadas pelo tamanho durante tempo de execução, desta forma, cuidado com o preenchimento da String para não ultrapassar o valor máximo.
Nome de Strings devem terminar com o sinal de Dólar $
A$(12) retorna o caractere da posição 12, começando na posição 0.
Exemplo DIM a$ (20) a$ = "Hello" a$ = a$+chr(32)+ "World" PRINT a$ ' = "Hello World"
Manual do ARMBASIC 85
_________________________________________________________________________ www.basic4ever.com
Acesso ao Hardware do ARMBASIC
Descrição EnquantoARMbasic provê acesso para várias funções de Hardware, há casos onde o usuário pode querer ter o controle sobre registradores diretamente. Exemplo DayOfWeek = * ($E0024034) ' Lê o registrador DIA DA SEMANA do RTC
Manual do ARMBASIC 86
_________________________________________________________________________ www.basic4ever.com
4) Runtime Library Funções de Data e Hora (Necessita colocar cristal de 32768Hz em J3, pino 1 e 2) DAY Sintaxe DAY
Descrição A Função configura ou retorna o dia do mês. Pode ser de 1 a 28, 29, 30, ou 31
Exemplo
SECOND = 30 MINUTE = 15 HOUR = 13 DAY = 14 MONTH = 4 YEAR = 2006 SELECT WEEKDAY CASE 0 dayname$ = "Sunday" CASE 1 dayname$ = "Monday" CASE 2 dayname$ = "Tuesday" CASE 3 dayname$ = "Wednesday" CASE 4 dayname$ = "Thursday" CASE 5 dayname$ = "Friday" CASE 6 dayname$ = "Saturday" CASE ELSE dayname$ = "not possible" ENDSELECT PRINT "This is "; dayname$
Manual do ARMBASIC 87
_________________________________________________________________________ www.basic4ever.com
PRINT MONTH; "/"; DAY; "/"; YEAR PRINT "The time is "; HOUR; ":"; MINUTE; ":"; SECOND O resultado é: This is Friday 4/14/2006 The time is 13:15:30
Manual do ARMBASIC 88
_________________________________________________________________________ www.basic4ever.com
MONTH Sintaxe MONTH
Descrição A função configura ou retorna o mês. Valores vão de 1 a 12
Exemplo SECOND = 30 MINUTE = 15 HOUR = 13 DAY = 14 MONTH = 4 YEAR = 2006 SELECT WEEKDAY CASE 0 dayname$ = "Sunday" CASE 1 dayname$ = "Monday" CASE 2 dayname$ = "Tuesday" CASE 3 dayname$ = "Wednesday" CASE 4 dayname$ = "Thursday" CASE 5 dayname$ = "Friday" CASE 6 dayname$ = "Saturday" CASE ELSE dayname$ = "not possible" ENDSELECT PRINT "This is "; dayname$ PRINT MONTH; "/"; DAY; "/"; YEAR PRINT "The time is "; HOUR; ":"; MINUTE; ":"; SECOND O resultado é:
Manual do ARMBASIC 89
_________________________________________________________________________ www.basic4ever.com
This is Friday 4/14/2006 The time is 13:15:30
Manual do ARMBASIC 90
_________________________________________________________________________ www.basic4ever.com
YEAR Sintaxe YEAR = 2006
PRINT YEAR
Descrição Configura ou retorna o ano
Exemplo SECOND = 30 MINUTE = 15 HOUR = 13 DAY = 14 MONTH = 4 YEAR = 2006 SELECT WEEKDAY CASE 0 dayname$ = "Sunday" CASE 1 dayname$ = "Monday" CASE 2 dayname$ = "Tuesday" CASE 3 dayname$ = "Wednesday" CASE 4 dayname$ = "Thursday" CASE 5 dayname$ = "Friday" CASE 6 dayname$ = "Saturday" CASE ELSE dayname$ = "not possible" ENDSELECT PRINT "This is "; dayname$ PRINT MONTH; "/"; DAY; "/"; YEAR PRINT "The time is "; HOUR; ":"; MINUTE; ":"; SECOND O resultado é:
Manual do ARMBASIC 91
_________________________________________________________________________ www.basic4ever.com
This is Friday 4/14/2006 The time is 13:15:30
Manual do ARMBASIC 92
_________________________________________________________________________ www.basic4ever.com
HOUR Sintaxe HOUR
Descrição Configura ou retorna a hora. Valores vão de 0 a 23.
Exemplo SECOND = 30 MINUTE = 15 HOUR = 13 DAY = 14 MONTH = 4 YEAR = 2006 SELECT WEEKDAY CASE 0 dayname$ = "Sunday" CASE 1 dayname$ = "Monday" CASE 2 dayname$ = "Tuesday" CASE 3 dayname$ = "Wednesday" CASE 4 dayname$ = "Thursday" CASE 5 dayname$ = "Friday" CASE 6 dayname$ = "Saturday" CASE ELSE dayname$ = "not possible" ENDSELECT PRINT "This is "; dayname$ PRINT MONTH; "/"; DAY; "/"; YEAR PRINT "The time is "; HOUR; ":"; MINUTE; ":"; SECOND O resultado é:
Manual do ARMBASIC 93
_________________________________________________________________________ www.basic4ever.com
This is Friday 4/14/2006 The time is 13:15:30
Manual do ARMBASIC 94
_________________________________________________________________________ www.basic4ever.com
MINUTE
Sintaxe
MINUTE
Descrição Configura ou retorna o minuto. Valores vão de 0 a 59
Exemplo SECOND = 30 MINUTE = 15 HOUR = 13 DAY = 14 MONTH = 4 YEAR = 2006 SELECT WEEKDAY CASE 0 dayname$ = "Sunday" CASE 1 dayname$ = "Monday" CASE 2 dayname$ = "Tuesday" CASE 3 dayname$ = "Wednesday" CASE 4 dayname$ = "Thursday" CASE 5 dayname$ = "Friday" CASE 6 dayname$ = "Saturday" CASE ELSE dayname$ = "not possible" ENDSELECT PRINT "This is "; dayname$ PRINT MONTH; "/"; DAY; "/"; YEAR PRINT "The time is "; HOUR; ":"; MINUTE; ":"; SECOND O resultado é:
Manual do ARMBASIC 95
_________________________________________________________________________ www.basic4ever.com
This is Friday 4/14/2006 The time is 13:15:30
Manual do ARMBASIC 96
_________________________________________________________________________ www.basic4ever.com
SECOND Sintaxe SECOND
Descrição Configura ou retorna o segundo. Valores vão de 0 a 59.
Exemplo SECOND = 30 MINUTE = 15 HOUR = 13 DAY = 14 MONTH = 4 YEAR = 2006 SELECT WEEKDAY CASE 0 dayname$ = "Sunday" CASE 1 dayname$ = "Monday" CASE 2 dayname$ = "Tuesday" CASE 3 dayname$ = "Wednesday" CASE 4 dayname$ = "Thursday" CASE 5 dayname$ = "Friday" CASE 6 dayname$ = "Saturday" CASE ELSE dayname$ = "not possible" ENDSELECT PRINT "This is "; dayname$ PRINT MONTH; "/"; DAY; "/"; YEAR PRINT "The time is "; HOUR; ":"; MINUTE; ":"; SECOND O resultado é:
Manual do ARMBASIC 97
_________________________________________________________________________ www.basic4ever.com
This is Friday 4/14/2006 The time is 13:15:30
Manual do ARMBASIC 98
_________________________________________________________________________ www.basic4ever.com
WEEKDAY Sintaxe WEEKDAY
Descrição Retorna o dia o número do dia da semana. 0 corresponde a Domingo até Sábado valendo 6.
Exemplo SECOND = 30 MINUTE = 15 HOUR = 13 DAY = 14 MONTH = 4 YEAR = 2006 SELECT WEEKDAY CASE 0 dayname$ = "Sunday" CASE 1 dayname$ = "Monday" CASE 2 dayname$ = "Tuesday" CASE 3 dayname$ = "Wednesday" CASE 4 dayname$ = "Thursday" CASE 5 dayname$ = "Friday" CASE 6 dayname$ = "Saturday" CASE ELSE dayname$ = "not possible" ENDSELECT PRINT "This is "; dayname$ PRINT MONTH; "/"; DAY; "/"; YEAR PRINT "The time is "; HOUR; ":"; MINUTE; ":"; SECOND O resultado é:
Manual do ARMBASIC 99
_________________________________________________________________________ www.basic4ever.com
This is Friday 4/14/2006 The time is 13:15:30
Manual do ARMBASIC 100
_________________________________________________________________________ www.basic4ever.com
WAIT Sintaxe WAIT ( milliseconds )
Descrição
Dá uma pausa de milliseconds no programa. 1000 milisegundos = 1 segundo
WAIT e PAUSE são equivalentes
Exemplo ’ Imprime “tick” uma vez por segundo WHILE 1 PRINT "tick" WAIT(1000) LOOP
Manual do ARMBASIC 101
_________________________________________________________________________ www.basic4ever.com
TIMER Sintaxe TIMER
Descrição
TIMER é um Timer contando livremente que incrementa a cada microsegundo. Pode ser acessado para escrita e leitura.
Exemplo TIMER = 0 WHILE (espere por algo acontecer) PRINT "That took "; TIMER; " microseconds"
Manual do ARMBASIC 102
_________________________________________________________________________ www.basic4ever.com
Funcões para String CHR Sintaxe CHR( expression )
Descrição CHR retorna uma simples String (byte) contendo o caractere representado pelo código ASCII passado para ela. Por exemplo, CHR(97) retorna "a".
Exemplo PRINT "O caractere representado pelo codigo ASCII 97 é: "; CHR(97)
Manual do ARMBASIC 103
_________________________________________________________________________ www.basic4ever.com
HEX Sintaxe
HEX ( expression )
Descrição
Retorna uma String representando o valor Hexadecimal de uma expressão do tipo inteiro. Valores Hexadecimais contem 0-9, e A-F. O tamanho da String em Hexadecimal depende o tipo inteiro passado.
Exemplo DIM text$(10) text$ = HEX(4096) PRINT "0x";text$ 'mostrará 0x1000
Manual do ARMBASIC 104
_________________________________________________________________________ www.basic4ever.com
LEFT Sintaxe LEFT( String, characters)
Descrição Retorna n-characters começando da esquerda da String. String pode ser uma constante ou uma String variável.
Funções para String não podem ser aninhadas.
A$ = LEFT("this is a test",5) + RIGHT(B$,3) ' operação de String válida
A$ = LEFT("this "+b$,5) ' Não permitido (aninhado)
Exemplo text$ = "hello world" PRINT LEFT(text$, 5) 'Mostra "hello"
Manual do ARMBASIC 105
_________________________________________________________________________ www.basic4ever.com
RIGHT Sintaxe RIGHT( String, characters )
Descrição Retorna n-characters começando da direita da String. String pode ser uma constante ou uma String variável.
Funções para String não podem ser aninhadas.
A$ = LEFT("this is a test",5) + RIGHT(B$,3) ' operação válida
A$ = RIGHT("this "+b$,5) ' não permitido
Exemplo text$ = "hello world" PRINT RIGHT(text$, 5) 'mostra "world"
Manual do ARMBASIC 106
_________________________________________________________________________ www.basic4ever.com
LEN Sintaxe
LEN( String )
Descrição
Retorna o tamanho da String em caracteres. String pode ser uma constante ou String variável.
Funções para String não podem ser aninhadas.
Exemplo DIM text$(10) text$ = "0x"+HEX(4096) PRINT LEN(text$) 'Irá mostrar 6
Manual do ARMBASIC 107
_________________________________________________________________________ www.basic4ever.com
STR Sintaxe STR( expression )
Descrição STR irá converte uma expressão em uma String. Por exemplo, STR(3) será "3", ou STR(333) será "333". STR é também utilizado em certas rotinas da biblioteca de Hardware para designar que uma série de bytes pode ser lido ou escrito para uma String. Exemplo DIM b$ (10) a = 8421 b$ = STR(a) PRINT a, b$ ' Irá mostrar 8421 8421
Manual do ARMBASIC 108
_________________________________________________________________________ www.basic4ever.com
VAL Sintaxe VAL( String )
Descrição VAL converte uma String para um número decimal. Por exemplo, VAL("10") irá retornar 10. Esta função analisa a String a partir da esquerda e retorna o maior número que pode ler até encontrar um caractere que não seja de 0 a 9. Exemplo
DIM a$(20) a$ = "20xa211" b = VAL(a$) PRINT a$, b 20xa211 20
Manual do ARMBASIC 109
_________________________________________________________________________ www.basic4ever.com
STRCOMP Sintaxe
STRCOMP( string1, string2 )
Descrição
Ela compara duas Strings, retornando -1 se string1 for menor que string2. Retorna 0 se as duas Strings são iguais, e 1 se string1 for maior que string2. String1 e String2 podem ser constantes ou Strings variáveis
Funções para String não podem ser aninhadas.
Exemplo DIM text$(10) text$ = "BAT" PRINT STRCOMP(text$, text$) ' Irá mostrar 0 PRINT STRCOMP(text$, "BAT") ' Irá mostrar 0 PRINT STRCOMP(text$, "BOOT") ' Irá mostrar -1 PRINT STRCOMP(text$, "BAA") ' Irá mostrar 1
Manual do ARMBASIC 110
_________________________________________________________________________ www.basic4ever.com
5) Biblioteca de Hardware
Comportamento do ARMBASIC durante o POWER UP
No POWER UP todos os pinos estão em "tri-stated"
Reiniciando o programa
Se o usuário tem entrado um programa BASIC dentro do ARMBASIC, aquele programa será executado quando a alimentação é aplicada ou reiniciado quando o pino de RESET é acionado tanto com o PUSH BUTTON ou através do programa TclTerm através do linha DTR que vai a alto.
Se o programado do usuário termina com a execução do último Statement do programa ou executando uma instrução END, o ARMBASIC entrará em POWER DOWN e esperará por uma entrada na porta serial ou RESET.
Operação de Break ou STOP
Se o código do usuário está rodando, pode ser parado por uma condição de RESET. This normalmente reinicia o programa do usuário, mas há um pequeno espaço de tempo (500 ms) que o ARMBASIC espera por uma entrada pelo terminal. Se o caractere é recebido pela porta serial é ESCAPE (27) ou CTL-C (3), então o programa do usuário é impedido de rodar e o ARMBASIC esta pronta para ser reprogramado. Ou você pode reiniciar o programa digitando RUN ou usando o botão RUN no TclTerm.
Manual do ARMBASIC 111
_________________________________________________________________________ www.basic4ever.com
Controle de pinos AD Sintaxe AD ( expressão )
AD retornará 0..65472 que corresponde a tensão no pino correspondente a expressão. O Valor retornado terá estará nos 10 bits mais significantes. Os bits 5..0 serão 0. 0 seria para 0V e 65472 seria para 3.3V.
Uma conversão leva menos de 6 usec.
O VREF+ É FIXO EM 3.3V NO ARMBASIC
USO DUAL DOS PINOS AD Durante o reset ou alimentação, os pinos dos AD são configurados como entradas. Para trocá-los como IO digitais, o usuário deve individualmente especificar o controle de direção usando os comandos INPUT x, OUTPUT x, DIR(x), ou IO(x). Após isto, que eles passam a serem Digitais, até o próximo Reset ou alimentação. Exemplo voltage = AD (0) ' isto lerá a tensão no Pino 0
Manual do ARMBASIC 112
_________________________________________________________________________ www.basic4ever.com
DIR Sintaxe DIR ( expression )
Descrição
DIR (expression) pode ser usado para “setar” ou ler a direção dos 16 pinos configuráveis. Se DIR (expression) é 1 então o pino correspondente é uma Saída. Se o valor é 0 então o pino correspondente é Entrada.
Exemplo ' Seta o pino 4 como entrada DIR(4) = 0 ' Seta o pino 12 como saída DIR(12) = 1
Manual do ARMBASIC 113
_________________________________________________________________________ www.basic4ever.com
DIRS Sintaxe DIRS
Descrição
DIRS lê ou escreve os 16 bits que controlam a direção dos 16 pinos de entrada e saída. Um 1 em uma das 16 posições corresponde para aquele pino ser como uma saída.
Exemplo 'Set a direção dos pinos de 0 a 7 como saída e 8 até 15 como entrada DIRS = $00FF
Manual do ARMBASIC 114
_________________________________________________________________________ www.basic4ever.com
IN Sintaxe IN ( expression )
Descrição Quando lendo de IN (expression), -1 ou 0 será retornado correspondente ao nível de tensão no pino numerado por expression.
A diretiva não modifica a configuração de entrada / saída do pino.
Exemplo ' Seta pino 9 com saída INPUT 9 ' Assume que um dispositivo externo forçou o pino 9 com Alto PRINT "O estado corrente do pino 9 é "; IN(9) AND 1 O estado corrente do pino 9 é 1
Manual do ARMBASIC 115
_________________________________________________________________________ www.basic4ever.com
INS Sintaxe INS Descrição INS representa todos os 16 pinos de entrada. Quando lido, irá retornar todos os valores correspondentes nos pinos.
Escrita para INS não é permitida.
Exemplo 'seta direção dos pinos de 0 a 7 como saída e 8 até 15 como saída DIRS = $FF00 'Assume que um dispositivo externo está está forçando os pinos de 0 a 7 em Alto PRINT "O valor corrente dos pinos é "; INS O valor corrente dos pinos é 15
Manual do ARMBASIC 116
_________________________________________________________________________ www.basic4ever.com
IO Sintaxe IO ( expression )
Descrição IO é um meio mais complexo de acessar ou controlar os pinos. Quando IO (expression) é lido, o pino correspondente à expressão é convertido como entrada e então o valor do pino é retornado.
Quando é atribuído um valor para IO(expression), então o pino correspondente à expressão é convertido como saída e o valor lógico é escrito para o pino, 0 escreve um nível baixo e outros valores escrevem no pino um nível alto.
Usando IO simplifica quando os pinos são usados como entrada e saída.
Exemplo
' Seta pino 9 como saída e força ele a alto IO(9) = 1 ' Configura pino 9 como entrada, lê o valor, inverte este valor, converte ' pino 9 como saída e escreve este valor. IO(9) = NOT IN(9) ' Seta pino 8 como entrada e lê seu valor x = IO(8)
Manual do ARMBASIC 117
_________________________________________________________________________ www.basic4ever.com
OUT
OUT ( expression )
Descrição Quando escrevendo OUT (expression), o pino correspondente da expressão irá “setar” o nível de tensão correspondente para TRUE ou FALSE, -1 ou 0.
Esta diretiva não modifica configuração do pino de entrada / saída
Exemplo ' Seta o pino 9 como saída OUTPUT 9 ' Seta pino como alto OUT(9) = 1 PRINT "O valor corrente do pino 9 é "; OUT(9) O valor corrente do pino 9 é 1
Manual do ARMBASIC 118
_________________________________________________________________________ www.basic4ever.com
OUTS Sintaxe OUTS Descrição
OUTS representa todos os 16 pinos de saída. Quando escrito para eles, irá transferir todos os valores correspondentes para os pinos de saída que estão atualmente configurados como saída.
Ler OUTS é o mesmo que ler INS, ou seja, lê o estado corrente dos 16 pinos.
Exemplo 'seta direção dos pinos 0 a 7 como saída, 8 a 15 como entrada DIRS = $00FF 'seta pino 0 até 3 como alto, 4 até 7 como baixo OUTS = $000F PRINT "O valor corrente do pino é de saída é "; OUTS O valor corrente do pino é de saída é 15
Manual do ARMBASIC 119
_________________________________________________________________________ www.basic4ever.com
Lista de Funções * (ARM peripheral access) Sintaxe * variable
* constant
Descrição A sintaxe da linguagem C para ponteiros é usada para dar um acesso direto aos registradores de periféricos do ARM. Cuidado deve ter, por exemplo, se você modificar um registrador de interrupção, irá interferir na operação do ARMbasic e seu programa.
Exemplo X= $E0014018 *X = 1234 ' seta o registrador ARM PWM0 match register
T = * $E001401C ' lê o registrador ARM PWM1 match register * $E0014020 = 4321 ' seta o registrador ARM PWM2 match register
Manual do ARMBASIC 120
_________________________________________________________________________ www.basic4ever.com
BAUD Sintaxe BAUD( pin )
Descrição BAUD (pin) irá “setar” baudrate para o pin que será mais tarde usado pelas funções RXD e TXD.
O valor corrente do baudrate do pino pode também ser lido com Baud.
Se pin for 16 então o Baud rate para os pinos SIN é SOUT é ““setado”” (default é 19200).
Baudrates podem ser até 115.2 Kbaud para os pinos 0-15 ou 19.2 Kbaud para o pino 16 (SIN e SOUT). SIN e SOUT são limitados pelos tradutores de nível.
Exemplo BAUD(2) = 19200 ' seta o Baud rate para serial I/O no pino 2 BAUD(1) = BAUD(2) ' seta o Baud rate para o pino 1 o mesmo do pino 2
Manual do ARMBASIC 121
_________________________________________________________________________ www.basic4ever.com
COUNT Sintaxe COUNT pin, milliseconds, variable
Descrição Conta o número de pulsos baixo-alto-baixo ou alto-baixo-alto no pin numa duração de milliseconds, retornando o valor para variable.
Exemplo 'Reporta o número de ciclos de transição no pino 7 durante 10 segundos COUNT 7, 10000, val PRINT "Pino 7 teve "; val; " transições" Pino 7 teve 3 transições 'Testa operação da rotina Count – atachado um sinal de a 100 KHz no pino '15 Utiliza o operador RUN IMEDIATE e o operador imediato. print >COUNT 15, 10000, x .x 99630
Manual do ARMBASIC 122
_________________________________________________________________________ www.basic4ever.com
FREQOUT Sintaxe FREQOUT pin, milliseconds, freq1 FREQOUT pin, milliseconds, freq1, freq2
Descrição Gera uma onda senoidal (freq1) no pin por milliseconds. Um tom de freqüência simples ou de freqüência dupla mixada pode ser gerado.
A direção do pino de IO deve ser setada como saída
A saída pode ser conectada a um auto falante ou amplificador.
Exemplo 'Gera um tom de freqüência dual no pino 4 por 8 segundos, utilizando freqüências de 2500 e 6000Hz FREQOUT 4, 8000, 2500, 6000
Manual do ARMBASIC 123
_________________________________________________________________________ www.basic4ever.com
HIGH Sintaxe HIGH expression
Descrição HIGH irá “setar” o pino correspondente a expression para um valor positivo (3.3V) e então é ““setado”” como saída.
HIGH e LOW têm sido adicionados para compatibilidade com o PBASIC
OUT(x)=1 será bem mais rápido
Exemplo DIRS = $00FF ' seta pinos 0 a 7 como saída OUTS = 0 ' e então seta os pinos para baixo ou 0V FOR I=0 TO 7 PAUSE (1000) HIGH I ' seta cada pino ALTO um por um a cada segundo NEXT I
Manual do ARMBASIC 124
_________________________________________________________________________ www.basic4ever.com
I2CIN Sintaxe I2CIN pin, slaveADDR, [opt1, [... opt5,]] [ InputList ] InputList = variable | stringname$ \count | arrayname \count [, InputList]
Descrição
I2CIN lerá uma série de bytes de um dispositivo I2C escravo. pin é qualquer expressão definindo o pino SDA a ser usado. pin+1 será designado como pino SCL. slaveADDR selecionará o dispositivo no bus I2C.
Até 5 valores de bytes opcionais podem ser enviados antes da leitura do InputList. Após aquela série de bytes terem sido lidas pelo dispositivo slave, será preenchida a InputList. A InputList pode conter variáveis ou Strings. Quando usando uma String, um Count deve ser especificado, que define o número de bytes para serem copiados dentro da String.
I2C é um bus orientado a byte. Então, cada transação irá tanto enviar um Byte ou receber um Byte para cada elemento de InputList. Dado é “shifted” em 380 Kbits/sec.
Exemplo DIM A$(10) I2CIN 1,$30,$10, [A$ \10] ' lê 10 bytes do slave $30, posição $10 ' Conectado nos pinos 1,2 I2CIN 5,$40,$20, [X] ' lê um Byte do slave $40, posição $20 ' Conectado nos pinos 5,6
Manual do ARMBASIC 125
_________________________________________________________________________ www.basic4ever.com
I2COUT Sintaxe I2COUT Data pin, slaveADDR, {Present,} [ OutputList ] OutputList = expr | arrayname \ count | stringname$ {\count} | "string" { , OutputList}
Descrição I2COUT irá enviar uma série de bytes para o dispositivo escravo. Datapin é qualquer expressão definindo o pino SDA a ser usado. Datapin+1 será o pino designado para SCL. slaveADDR selecionará o dispositivo no bus I2C.
Se um dispositivo “One-Wire” responde para a variável opcional Present será ““setado”” para 1 ou 0.
Após, aquela de bytes provenientes de OutputList serão escritos para o escravo (slave). OutputList podem conter expressões, variáveis Array ou Strings. Quando usando uma variável Array sem um elemento, um contador deve ser especificado que define o número de bytes a serem copiados da String.
[OutputList] podem também conter constante String ou “stringame$ . A última irá enviar os bytes começando de stringname$(0) até encontrar NULL.
I2C é um bus orientado a byte, então cada transação irá enviar valores Byte (0 até 255) para um dispositivo I2C escravo (slave). Se o valor da expressão na OutputList é maior que 8 bits, MSB será truncado.
Dado é “shifted” em 380 Kbits/sec.
Exemplo
DIM A$(10) FOR I=0 TO 9 A$(I) = $30 + I NEXT I I2COUT 1,$30, [$10,A$ \10] ' envia 10 bytes para o escravo $30 posição $10 'conectado nos pinos 1,2 X=$55 I2COUT 5,$40, [$20,X] ' envia um Byte para o escravo $40 posição $20 on 'pinos 5,6 I2COUT 5,$50, [$20,$AA] ' envia $AA para o escravo $50 posição $20 ' pinos 5,6
Manual do ARMBASIC 126
_________________________________________________________________________ www.basic4ever.com
Manual do ARMBASIC 127
_________________________________________________________________________ www.basic4ever.com
INPUT Sintaxe INPUT expression
Descrição
INPUT configura o pino correspondente a expressão como entrada.
INPUT e OUTPUT foram adicionados para compatibilidade com o PBASIC, DIR(x)=0 será mais rápido.
Exemplo INPUT 0 ' irá fazer o pino 0 como entrada
Manual do ARMBASIC 128
_________________________________________________________________________ www.basic4ever.com
OUTPUT Sintaxe OUTPUT expression
Descrição
OUTPUT configura o pino correspondente à expressão como saída
INPUT e OUTPUT foram adicionados para compatibilidade com o PBASIC, DIR(x)=0 será mais rápido.
Exemplo OUTPUT 8 ' irá fazer o pino 8 como saída
Manual do ARMBASIC 129
_________________________________________________________________________ www.basic4ever.com
LOW Sintaxe LOW expression
Descrição LOW irá “setar” o pino correspondente a expression para um valor baixo (0V) e então é ““setado”” como saída.
HIGH e LOW têm sido adicionados para compatibilidade com o PBASIC
OUT(x)=0 será bem mais rápido
Exemplo DIRS = $00FF ' seta pinos 0 a 7 como saída OUTS = 0 ' e então seta os pinos para baixo ou 0V FOR I=0 TO 7 PAUSE (1000) LOW I ' seta cada pino BAIXO um por um a cada segundo NEXT I
Manual do ARMBASIC 130
_________________________________________________________________________ www.basic4ever.com
PULSIN Sintaxe PULSIN pin, level, variable
Descrição Mede um pulso de entrada em um pino pin no level, retornando o valor para variable. A direção do pin deve ser ““setado”” como entrada.
Se o pin já estiver no level quando a função é chamada, irá esperar até a transição para level oposto. A função irá esperar 1 segundo para o pin ir para o level. O tempo é medido em microseconds(us). O mínimo pulso que pode ser medido é de 1 microseconds. Se o pin não for para o level ou manter em level mais que 1 segundo, variável é setada para 0.
Exemplo 'Espera pelo pino 7 ir a alto e então para baixo 'Imprime o número de microsegundos que o pino 7 permaneceu alto
PULSIN 7, 1, val PRINT "Pin 7 pulse high for "; val; " us"
' PULSIN – jogue um sinal de 10 KHz no pino 15 ' Use operador RUN IMEDIATO > e o operador print . >PULSIN 15, 0, x .x 50
Manual do ARMBASIC 131
_________________________________________________________________________ www.basic4ever.com
PULSOUT Sintaxe PULSOUT pin, microseconds
Descrição
Gera pulso na saída pin por microseconds.
O pino de direção de IO será ““setado”” como saída. O nível da saída será comutado por microseconds, então comutado de volta para o nível inicial. O pulso mínimo é de 1 microseconds.
Exemplo ' Gera um pulso alto de 1 segundo no pino 4. LOW 4 PULSOUT 4, 1000
Manual do ARMBASIC 132
_________________________________________________________________________ www.basic4ever.com
PWM Sintaxe PWM pin, duty, milliseconds
Descrição Gera um sinal analógico no pino pin por milliseconds com um duty cycle de 0 a 255. Um duty cycle de 255 corresponde a uma saída de valor de 100%.
A direção do pino de IO será ““setado”” como saída, o trem de pulso é enviado, então o pino é ““setado”” para tri-state (input). Se o pino é conectado para um filtro RC, então a tensão permanecerá no capacitor por um período de tempo determinado pela carga.
Exemplo 'Gera 1.65 volt (metade de 3.3V) no pino 4 por 6 segundos PWM 4, 127, 6000
Manual do ARMBASIC 133
_________________________________________________________________________ www.basic4ever.com
RCTIME Sintaxe RCTIME pin, level, variable
Descrição Mede o tempo o qual um pin sem mantém naquele level, retornando o valor para variable. O tempo é medido em microseconds(us). O tempo mínimo medido é 1 microseconds. Se pin não esta no level quando a função é chamada, variable é ““setado”” para 1. Se pin permanece no level mais que 1 segundo, variable é ““setado”” para 0.
Exemplo INPUT 7 RCTIME 7, 0, val PRINT "Pin 7 low for "; val; " us" '... função espera que o pin 7 vá para o estado alto Pin 7 low for 50 us
Manual do ARMBASIC 134
_________________________________________________________________________ www.basic4ever.com
TXD Sintaxe TXD ( pin )
Descrição
TXD (pin) mandará um simples dado (byte) que é “shifted” em um “stream” serial assíncrono. Esta função é similar a SEROUT, mas é uma implementação mais eficiente. O baudrate para o pino pode ser ““setado”” antes de usar TXD, através da função BAUD(pin).
TXD transmitirá 0-255 como byte, adicionado a ele os bits de START e STOP.
Se pin é 16, então o dado transmitido será pelo SOUT.
Exemplo DIM A$(10) BAUD(2) = 19200 ' seta o baud rate para o pino 2 ... A$ = "Hello World" GOSUB PRINTSTR ... ' Manda string até encontrar NULL PRINTSTR: I=0 WHILE A$(I) TXD(2) = A$(I) I=I+1 LOOP RETURN
Manual do ARMBASIC 135
_________________________________________________________________________ www.basic4ever.com
RXD Sintaxe RXD ( pin )
Descrição
RXD (pin) receberá um simples dado (byte) que é “shifted” em um “stream” serial assíncrono. Esta função é similar a SERIN, mas é uma implementação mais eficiente. O baudrate para o pino pode ser ““setado”” antes de usar RXD, através da função BAUD(pin).
RXD retornará de 0-255 se há dado presente. RXD gerará um TIMEOUT após 0.5 segundo e retorna -1 ($FFFFFFFF) se não há serial “stream” detectado no pin.
Se pin é 16, então o dado recebido no pino SIN.
Exemplo BAUD(1) = 9600 ' set the Baud rate for serial I/O on pin 1 ' Wait for serial input on pin 1 DO MyByte = RXD(1) UNTIL MyByte >= 0
Manual do ARMBASIC 136
_________________________________________________________________________ www.basic4ever.com
SERIN Sintaxe SERIN pin, baudrate, { posTrue,} [data-list ]
Descrição SERIN recebe [data-list] ( bytes) como dado serial assíncrono no pin a um baudrate. PosTrue se um parâmetro opcional e se ““setado”” para 0 então o dado é invertido.
[data-list] pode conter uma lista de variáveis, ou stringame$ \ len. A última irá receber len bytes começando de stringname$(0). SERIN irá gerar um TIMEOUT após 0.5 segundos e retorna -1 ($FFFFFFFF) no próximo item de data-list antes do TIMEOUT.
SE pin é 16 então o dado é recebido no pino SIN. SIN e SOUT são sempre negativos TRUE.
Baudrates podem ser até 115.2 Kbaud para os pinos 0-15 ou 19.2 Kbaud para o pino 16 (SIN e SOUT). SIN e SOUT são limitados pelos tradutores de nível.
Exemplo ' Lê serial stream pelo pino 1, salvando em “MyByte” SERIN 1, 19200, [MyByte] PRINT HEX(MyByte)
Manual do ARMBASIC 137
_________________________________________________________________________ www.basic4ever.com
SEROUT Sintaxe SEROUT pin, baudrate, { posTrue,} [OutputList ]
OutputList = expr | arrayname \ count | stringname$ {\count} | "string" { , OutputList}
Descrição SEROUT envia bytes da [data-list] através de uma serial assíncrona no pino a um baudrate. PosTrue é um parâmetro opcional e se ““setado”” para 0 então o dado é invertido
[OutputList] podem conter uma lista de constantes, variáveis, “Strings constantes” ou stringame$. O último enviará bytes começando de stringname$(0) até Byte 0 for lido.
Baudrates podem ser até 115.2 Kbaud para os pinos 0-15 ou 19.2 Kbaud para o pino 16 (SIN e SOUT). SIN e SOUT são limitados pelos tradutores de nível.
Baudrates podem ser até 115.2 Kbaud para todos os pinos.
Exemplo SEROUT 1, 19200, [$31,$32,$33] ' envia 123 na velocidade de 19.2Kbaud
Manual do ARMBASIC 138
_________________________________________________________________________ www.basic4ever.com
SHIFTIN Sintaxe SHIFTIN Dpin, Cpin, Mode, [Variable{\ Bits} {, Variable{\ Bits}...}]
Descrição
SHIFTIN pode ser usado para dispositivos que não conversam com dispositivos com bus SPI, I2C ou 1-Wire.
Enquanto na maioria das funções de Hardware usam bytes, SHIFTIN é orientado a controle de bit. O tamanho de cada variável define o número de bits que serão “shifted” out (2-32). Se o valor bit não é especificado, é assumido como 8.
• Mode = 0 dado “shifted-in” no MSB primeiro, e “sampling” começa antes do primeiro pulso de clock.
• Mode = 1 dado “shifted-in” no LSB primeiro, e “sampling” começa antes do primeiro pulso de clock.
• Mode = 2 dado “shifted-in” no MSB primeiro, e “sampling” começa antes segundo pulso de clock.
• Mode = 3 dado “shifted-in” no LSB primeiro, e “sampling” começa antes do segundo pulso de clock.
SHIFTIN não permite Arrays ou Strings como parte de InputList. Valores “shifted-in“ serão valores positivos, a não ser que valor de 32 bits completo é “shifted in”, e então se MSB é 1, o número é negativo.
Dado é “shifted in” na velocidade de 1.1 Mbits/sec.
Exemplo
' Usa SHIFTIN/OUT para controlar um EN28J60 (SPI) rw=2 reg = $1b io(6)=0 shiftout 3,4,1,[rw\3, reg\5, y] ' sera registrador $1B io(6)=1 io(6)=0 shiftout 3,4,1,[reg] 'selecione o registrador
shiftin 5,4,0,[x] 'lê de volta io(6)=1
Manual do ARMBASIC 139
_________________________________________________________________________ www.basic4ever.com
Manual do ARMBASIC 140
_________________________________________________________________________ www.basic4ever.com
SHIFTOUT Sintaxe SHIFTOUT Dpin, Cpin, Mode, [OutputData{\ Bits} {, OutputData{\ Bits}...}]
Descrição
SHIFTIN pode ser usado para dispositivos que não conversam com dispositivos com bus SPI, I2C ou 1-Wire.
Enquanto na maioria das funções de Hardware usam bytes, SHIFTIN é orientado a controle de bit. O tamanho de cada variável define o número de bits que serão “shifted” out (2-32). Se o valor bit não é especificado, é assumido como 8.
• Mode = 0 dado é “shifted out” é primeiro o LSB • Mode = 1 dado é “shifted out” é primeiro o MSB
SHIFTOUT não permite Arrays ou Strings serem parte de OutputList.
SHIFTIN não permite Arrays ou Strings como parte de InputList. Exemplo ' Usa SHIFTIN/OUT para controlar um EN28J60 (SPI) rw=2 reg = $1b io(6)=0 shiftout 3,4,1,[rw\3, reg\5, y] ' seta registrador $1B io(6)=1 io(6)=0 shiftout 3,4,1,[reg] 'seleciona o registrador
shiftin 5,4,0,[x] 'e lê de volta io(6)=1
Manual do ARMBASIC 141
_________________________________________________________________________ www.basic4ever.com
SPIMODE Sintaxe SPIMODE mode Descrição
SPIMODE suporta o protocolo serial usado por uma variedade de fabricantes. Permite diferentes formas de clock e qual ordem de bit é usado.
O modo default é 1, e se é o apropriado para o dispositivo que você pretende usar, não é necessário usar o comando SPIMODE.
• Mode = 0 o dado “shifted” é primeiro o MSB, e “sampling” começa antes do primeiro pulso de clock.
• Mode = 1 o dado “shifted” é primeiro o LSB, e “sampling” começa antes do primeiro pulso de clock.
• Mode = 2 o dado “shifted” é primeiro o MSB, e “sampling” começa antes do segundo pulso de clock.
• Mode = 3 1 o dado “shifted” é primeiro o LSB, e “sampling” começa antes do segundo pulso de clock.
Dado é “shifted” na velocidade de 1.1 Mbits/sec.
Exemplo 'Debugando a interface SPI do ENC28J60 -- feito no modo imediato hex >spiout 6,3,4,[$5b rev 8, $55 rev 8] ' setando o registrador EIE >spiin 6,5,4,3,$1b rev 8,[x] .x rev 8 55
Manual do ARMBASIC 142
_________________________________________________________________________ www.basic4ever.com
SPIIN Sintaxe SPIIN CSpin, inpin, clockpin, {outpin}, {out1, {out2,...}}, [InputList]
Descrição
SPIIN suporta o protocolo serial usado por uma variedade de fabricantes. O dispositivo desejado é selecionado forçando o pino CSpin para LOW. Se não há CSpin , o valor pode ser ““setado”” para -1.
No caso mais simples, inpin é usado para entrada de dados “clocked“ por clockpin, para preencher a InputList.
Em casos bidirecionais, out1..out3 serão saida no outpin antes da leitura de InputList .
Dado é “shifted-in” primeiro no LSB e cada elemento da InputList é preenchido com o Byte de dado. O operador VER pode ser usado para trocar a ordem do bit. Dado é “shifted in” na velocidade de 1.1 Mbits/sec.
Exemplo 'Debugando a interface SPI do ENC28J60 -- feito no modo imediato hex >spiout 6,3,4,[$5b rev 8, $55 rev 8] ' setting the EIE register >spiin 6,5,4,3,$1b rev 8,[x] .x rev 8 55
Manual do ARMBASIC 143
_________________________________________________________________________ www.basic4ever.com
SPIOUT
Sintaxe
SPIOUT CSpin, outpin, clockpin, [OutputList]
OutputList = expr | arrayname \ count | stringname$ {\count} | "string" { , OutputList}
Descrição
SPIOUT suporta o protocolo serial usado por uma variedade de fabricantes. O dispositivo desejado é selecionado forçando o pino CSpin para LOW. Se não há CSpin , o valor pode ser ““setado”” para -1.
No caso mais simples, outpin é usado para mandar dados “clocked” by clockpin, do OutputList.
[OutputList] podem conter uma lista de constantes, variáveis, “Strings constantes” ou stringame$. O último enviará bytes começando de stringname$(0) até Byte 0 for lido.
O dado “shifted out” primeiro é o LSB e cada elemento de OutputList é tratado como um byte. O operador VER pode ser usado para trocar a ordem do bit. Dado é “shifted out” na velocidade de 1.1 Mbits/sec.
Exemplo SPIOUT 4,1,2,[$04,GAIN] ' set o registrador de ganho do ADS7870 SPIIN 4,3,2,1,$44,[GAIN} ' le o ganho do registrador de volta
Manual do ARMBASIC 144
_________________________________________________________________________ www.basic4ever.com
SPIBI Sintaxe SPIBI CSpin, inpin, clockpin, outpin, {out1, {out2, out3}}, [InputList] Descrição
SPIBI suporta o protocolo serial usado por uma variedade de fabricantes. O dispositivo desejado é selecionado forçando o pino CSpin para LOW. Se não há CSpin , o valor pode ser ““setado”” para -1.
SPIBI irá “shift” os bytes out1, out2, out3 bytes para o pino outpin enquanto lendo 3 ou mis bytes dentro do InputList de inpin.
Dado é “shifted in” na velocidade de 1.1 Mbits/sec.
Manual do ARMBASIC 145
_________________________________________________________________________ www.basic4ever.com
OWOUT
Sintaxe OWOUT Pin, {Present,} [OutputList] OutputList = expr | arrayname \ count | stringname$ {\count} | "string" { , OutputList}
Descrição OWOUT começa com a seqüência RESET/Presence no pino designado Pin.
Se um dispositivo “One-Wire” responde para a variável opcional Present será ““setado”” para 1, caso contrário 0.
Seguinte aquela OutputList será enviado para o dispositivo. OutputList consiste de uma lista de expressões numéricas, String ou Array seguido pelo tamanho. No último caso, elementos individuais da String ou Array serão escritos para o dispositivo como uma série de bytes. Elementos serão truncados para byte. A output list pode consistir de múltiplas partes com até 32 diferentes fontes.
[OutputList] podem conter uma lista de constantes, variáveis, “Strings constantes” ou stringame$. O último enviará bytes começando de stringname$(0) até Byte 0 for lido.
A ordem do bit para um dispositivo “One-Wire” é assumido ser LSB (bit 0 primeiro). A função VER pode ser usada para trocar a ordem do bit.
Other than string$ names, String expressions are not allowed in the OutputList.
Elementos diferentes de nomes de Strings, expressões com String não são permitidos no OutputList.
Exemplo ' escreve no “scratch pad” do DS2430 x = $be y = $41 owout 7,present,[$cc,$f,$6,x,y] print present owin 7,$cc,$aa,$6,[a,b] print hex(a),hex(b)
Manual do ARMBASIC 146
_________________________________________________________________________ www.basic4ever.com
OWIN
Sintaxe
OWIN Pin, {Output1, Output2, ... Output6}, [ InputList ]
InputList =
Variable | Array(expr) | String(expr) | Array \ count| String \ count{,InputList}
Descrição OWIN começa com a seqüência RESET/Presence no pino designado Pin.
Então até 6 Output bytes serão transferidos para o dispositivo para selecionar o comando.
Seguinte, o InputList irá ser lido de volta do dispositivo. A InputList consiste de uma lista de nomes de variáveis, Strings ou Array, ou String ou Array seguido de um count. No último caso, uma série de bytes será lido do dispositivo e colocado dentro dos elementos individuais de uma String ou Array.
A input list pode consistir de múltiplas partes com até 32 diferentes fontes.
A ordem do bit para um dispositivo “One-Wire” é assumido ser LSB (bit 0 primeiro). A função VER pode ser usada para trocar a ordem do bit.
Exemplo ' escreve no “scratch pad” do DS2430 x = $be y = $41 owout 7,present,[$cc,$f,$6,x,y] print present owin 7,$cc,$aa,$6,[a,b] print hex(a),hex(b)
Manual do ARMBASIC 147
_________________________________________________________________________ www.basic4ever.com
6) Especificação de Hardware Diagrama dos pinos do ARMBASIC
/SOUT 1 Saída Serial, Compatível com RS-232 (ativo baixo)
/SIN 2 Entrada Serial, Compatível com RS-232 (ativo baixo)
ATN 3 Conectado ao DTR com RS-232, quando alto reseta o ARMBASIC (ativo alto)
/RES 22 Reset nível TTL (coletor aberto com resistor 2.7K) (ativo baixo)
SCL0 (IO5) SDA0 (IO6) P04 (IO16) P05 (IO17) P06 (IO18) P07 (IO19) P08 (IO20) P09 (IO21) P10 (IO22) (AD3) P11 (IO23) (AD4) P12 (IO9) (AD5) P13 (IO13) P15 (IO14) P16 (IO15) P17 (IO24) P18 (IO25) P19 (IO26) P20 (IO27) P21 (IO28) P22 (IO7) (AD0) P23 (IO10) (AD1) P24 (IO8) (AD2) P25 (IO11) (AD6) P26 (IO12) (AD7) P27 (IO0) P28 (IO1) P29 (IO2) P30 (IO3) P31 (IO4)
10 11 8 J2 7 J2 6 J2 5 J2 4 J2 3 J2 2 J2 1 J2 14 18 19 20 8 J3 7 J3 6 J3 5 J3 4 J3 12 15 13 16 17 5 6 7 8 9
I/Os – controlado pelo usuário Nível 0-3.3V Drena 4mA quando configurado como saída Tolerância: 5V
GND 4,23 Terra (0V)
Manual do ARMBASIC 148
_________________________________________________________________________ www.basic4ever.com
VDD 24 Alimentação 5 a 12V
Alt-VDD 21 Reservado para expansões futuras (Alimentação alternativa)
Esquemático do ARMBASIC
Manual do ARMBASIC 149
_________________________________________________________________________ www.basic4ever.com
1 2 3 4 5 6
A
B
C
D
654321
D
C
B
A
Title
Num ber RevisionSize
B
Date: 20-Feb-2007 She et of File: C:\armba sic_express\armbasic.ddb Drawn By :
DCD1
MHZ 20a
TXD0
P22
RESETn
P23
P24
RXD0
P13
P16
P12
P25
P26
P15
P30
P29
+
12
C3
0.1uF
12
C1
0.1uF
12
C20.47uF
+
12
C4
0.1/16V
V18
5
GN
D7
VD
D17
VD
D40
GN
D19
GN
DA
31
GN
D43
XTALO12 XTALI11
RESET6
RTCK 26
P01/RXD014
P0218
P0321
PO422
P0523
P0624
P0728
P08/TXD129
P09/RXD130
P1035
P1136
P1237
P1341
P14/BOOT44
P1545
P1646
P17/TRST47
P18/TMS48
P19/TCK1
P20/TDI2
P21/TDO3
P2232
P2333
P2538
P2639
P278
P289
P2910
P3015
P3116
P00/TXD013
P2434
DBGSEL 27
*RTX1 20
*RTX2 25
*VD
DA
42*V
BA
T4
U2
VI4
GN
D2
VO 5
FB 1NC3
U3
TPS 71518
V33
V18
V5
V33V18
V33
Y1
C522pF
C622pF
P27P28
VI4
GN
D2
VO 5
FB 1NC3
U1
TPS 71533
SCL0SDA0
P31
Q2
123456789101112131415161718192021222324
J1
P27P28P29P30P31SCL0SDA0P22P24P12P23P25P26P13P15P16
RESETn
V33
RESETn
RXD0
SOU
T
TXD0
SOUTSINATN
R3 R4 R5 R6
RX
D0
DC
D1
RE
SETn
PULL
DO
WN
SOU
T
R2 R1 DCD1
Q1
V5
12345678
J2P04P05P06P07P08P09P10P11
P17P18P19P20P21
12345678
J3
V33
RT
X1
RT
X2
SO-G3/P.65 = SOT 323SO-G6/Z2.8 = SOT-363
D1
PULLD
OW
N
V5
Manual do ARMBASIC 150
_________________________________________________________________________ www.basic4ever.com
Configuração Serial Embora nós recomendemos usar o TclTerm para conversar com ARMBASIC, aqui estão as configurações para outros emuladores de terminal.
Baudrate
19.2 kbaud, 8 bit, No Parity, 1 stop bit
Fim de linha
LF (alimentação de linha),
CR é atualmente ignorado.
Níveis de Tensão
/SOUT, /SIN e ATN (pinos 1,2,3) aceitarão tanto os níveis TTL como RS-232. ATN quando alto reseta o ARMBASIC, e ATN não podem flutuar. Pode tanto ser conectado diretamente para o DTR, ou em alguns sinais TTL que está em baixo ou terra.
Handshaking
XON/XOFF (software handshaking) é usado durante a programação da Flash. Quando downloading um programa grande, uma pausa é requerida quando o corrente amontoado de código no buffer excede 8K (de 500 a 600 linhas). Aquele buffer será escrito na memória Flash e levará um tempo de 1 segundo. Um total de 40K é disponível para o usuário, para código, constantes Strings e DATA.
Sinalização do Programa Rodando
Quando ó código do usuário inicia a execução, um caractere SOH (\1) é enviado, e quando o usuário quer parar a execução (STOP), um é enviado. Isto foi adicionado ao ARMBASIC para que o TclTerm necessita saber quando o código está executando.
Manual do ARMBASIC 151
_________________________________________________________________________ www.basic4ever.com
Conexão RS232 sugerida com ARMBASIC
Manual do ARMBASIC 152
_________________________________________________________________________ www.basic4ever.com
Interface TTL e 5V ARMBASIC podem ser conectados diretamente para dispositivos TTL 5V. A tensão de saída destes dispositivos vai de 0.4V até 2.9V quando drenando até 4mA de corrente. A maioria dos dispositivos TTL reconhece estes com níveis lógicos válidos (normalmente definido ser 0.8 e 2.0V)
Entradas
O ARMBASIC pode também ser conectado diretamente para saídas TTL 5V. Se eles são TTL compatíveis com níveis de tensão da saída TTL deveriam ser normalmente (0.4 e 3.4V), embora podem ser maiores. As entradas para estes dispositivos ARM são 5V compatíveis.
Linhas de alimentação
As entradas do ARMBASIC podem ser conectadas diretamente ao pino GND, mas, se conectadas para nível de tensão alto fixo, então pode ser conectado para uma linha de alimentação de 5V com um resistor de 1K ou maior. Esta é a mesma recomendação para qualquer dispositivo compatível com TTL. A razão é é que a alimentação de 5V pode execeder as vezes os 5V.
Manual do ARMBASIC 153
_________________________________________________________________________ www.basic4ever.com
Alimentação 5 à 12V DC.
Condições na alimentação inicial
Na alimentação inicial, todos os pinos do ARM estão em “tri-stated”
Reiniciando o programa
Se o usuário programou o ARMBASIC, aquele programa será iniciado quando a alimentação é aplicada ou reiniciada com um Reset que é levado a baixo no pino de coletor aberto pino 22, ou positivo True no pino ATN.
Se o programa do usuário terminou ao encontrar o último Statement ou executando uma instrução END, o ARMBASIC entrará em Power Down e irá esperar tanto uma entrada no porta serial de Debugou um Reset.
Operação de Break ou STOP
Se o código do usuário está rodando, pode ser parado por uma condição de RESET. Normalmente reinicia o programa do usuário, mas há um pequeno espaço de tempo (500 ms) que o ARMBASIC espera por uma entrada pelo terminal. Se o caractere é recebido pela porta serial é ESCAPE (27) ou CTL-C (3), então o programa do usuário é impedido de rodar e o ARMBASIC esta pronta para ser reprogramado. Ou você pode reiniciar o programa digitando RUN ou usando o botão RUN no TclTerm.
Manual do ARMBASIC 154
_________________________________________________________________________ www.basic4ever.com
7) Miscellaneous
DEBUGGING > (execute immediately) Sintaxe > simple_Statement Descrição O operador > (maior que) quando é o primeiro token na linha é usado para executar um linha no ARM imediatamente. O > pode ser usado no lugar do INPUT durante a fase de debugging do código. Pode ser usado para alterar uma variável > X = 1234 O segundo exemplo exibe o uso do > para ler um periférico externo (I2C), e então imprimir o valor.
> I2CIN 5,$40, $30, [X] . X O terceiro exemplo exibe o uso do > para alterar o endereço de um endereço periférico do ARM
> $e0014000 = $33
Manual do ARMBASIC 155
_________________________________________________________________________ www.basic4ever.com
. (print now) Sintaxe . expression Descrição O operador . avalia a expression e mostra o resultado Exemplo Após o programa ter sido executado, pode ser útil para ver vários valores para ajudar no debugging.
FOR x = 1 to 10 HIGH x NEXT x RUN ... .x ' mostrará 11
Manual do ARMBASIC 156
_________________________________________________________________________ www.basic4ever.com
@ (dump memory) Sintaxe @ [expression] Descrição
Este comando fará o DUMP de memória começando no endereço expression. É útil para controle direto de Debug dos periféricos ARM. Se a expressão for omitida, a próxima página de memória será mostrada.
Expression pode ser qualquer constante ou variável.
Exemplo
O exemplo seguinte mostra a área do ARM correspondente aos registradores PWM. São exibidos em Hexadecimal e ASCII.
@ $e0014000 E0014000: 00000000 00000001 04BFE6BB 0000E663 c E0014010: 0000A516 00000000 00000000 00000000 {3 E0014020: 00000000 00000000 00000000 00000000 E0014030: 00000000 00000000 00000000 00000000 E0014040: 00000000 00000000 00000000 00000000 E0014050: 00000000 00000000 00000000 00000000 E0014060: 00000000 00000000 00000000 00000000 E0014070: 00000000 00000000 00000000 00000000 @ E0014080: 00000000 00000001 04C8D34C 0000E663 M c E0014090: 000041E7 00000000 00000000 00000000 l E00140A0: 00000000 00000000 00000000 00000000 E00140B0: 00000000 00000000 00000000 00000000 E00140C0: 00000000 00000000 00000000 00000000 E00140D0: 00000000 00000000 00000000 00000000 E00140E0: 00000000 00000000 00000000 00000000 E00140F0: 00000000 00000000 00000000 00000000 CLEAR
Manual do ARMBASIC 157
_________________________________________________________________________ www.basic4ever.com
Sintaxe CLEAR
Descrição Este é um comando em tempo de compilação que apaga o programa corrente da memória. Exemplo PRINT "hi there" RUN CLEAR DEC
Manual do ARMBASIC 158
_________________________________________________________________________ www.basic4ever.com
Sintaxe
DEC
Descrição
Quando digitado como única palavra na linha, irá “setar” a base de numeração default para decimal para comandos de Debug
A base de numeração é normalmente decimal.
Exemplo >x = $1000 DEC .x ' mostrará 4096 HEX
Manual do ARMBASIC 159
_________________________________________________________________________ www.basic4ever.com
Sintaxe
HEX
Descrição
Quando digitado como única palavra na linha, irá “setar” a base de numeração default para hexadecimal para comandos de Debug
Exemplo >x = 4096 HEX .x ' mostrará 1000 RUN
Manual do ARMBASIC 160
_________________________________________________________________________ www.basic4ever.com
Sintaxe RUN
Descrição Executa o programa que foi carregado na FLASH.
Exemplo PRINT "hi there" RUN CLEAR
ARMBasic
Manual do ARMBASIC 161
_________________________________________________________________________ www.basic4ever.com
Características
• Tecnologia “Simply Connected™” • CPU ARM7 rodando a 60 Mhz • Programado via Interface Serial • Compilador compila >10 milhões de linha de código por segundo • 32k de memória Flash com 8K para SRAM • 6 canais de PWM por Hardware • 24 TTL compatible digital I/O (mais a ser expandido) • 6 Canais de conversores A/D de 10 bits, 100 KHz rate • Fonte de alimentação onboard regulada (5-12V DC)
Entradas e saídas Digitais
• 24 pinos programados para entrada e saída • 8 pinos compartilhados com A/D • >1 milhão de operações de IO por segundo • SPI suporta transferiencia de 600 Kb • I2C suporta transferenciia de 380 Kb • Rotinas de SHIFT para bus síncrono de 800 Kb • Suporte a 1-Wire • Suporte a serial assincrona de até 115200 • Medição de geração de Pulso com resolução de 1uSec • PWM com resolução de 8 bit • Síntese de Freqüência de Até 50Khz • Compatível com TTL • IOs tolerante a 5V