Em sequência ao Minicurso BASIC Stamp, nesta segunda parte veremos um pouco mais sobre como elaborar um programa sem se ater a linguagem de programação. Iremos descrever a arquitetura interna do BASIC Stamp, suas instruções e o ambiente de programação, terminando assim a parte teórica.

Nota: O artigo é de 1997. Os conceitos básicos são válidos para versões mais modernas do PIC. Outros artigos sobre Basic Stamp e PIC publicados pelo autor são encontrados no site.

Dando continuidade ao nosso curso, veremos os tópicos que constituem as fases de elaboração de um programa, são eles:

1- Estudo do problema

2. Construção de um fluxograma sequencial

3- Construção de fluxogramas detalhados

4- Montagens das instruções

5- Compilação do programa

6- Depuração

7- Documentação

 

1- Estudo do problema:

Essa é uma das principais fases na elaboração de um programa, sem uma boa análise e um estudo aprofundado do problema a ser resolvido, poderemos seguir caminhos diferentes e mais difíceis para solucioná-lo. Por isso sempre que for resolver um problema estude duas ou mais alternativas, veja quais as possibilidades de erro em cada uma e faça simulações de condições adversas. Vale a pena salientar que nessa fase não devemos nos prender a resolver o problema a nível de programação, mas sim, a nível de solução, levantando todas as variáveis envolvidas, isso facilitará muito as próximas fases.

 

2 - Construção de um fluxograma sequencial

Nesta fase devemos nos preocupar em construir um fluxograma bem simplificado que cubra todo O problema. Como dissemos anteriormente, não devemos nos preocupar em resolvê-lo com a programação de instruções, se fizermos isso agora dependendo da complexidade do programa, iremos nos perder e seguir caminhos mais difíceis.

O fluxograma é importantíssimo, alguns programadores não gostam de fazê-lo achando tedioso e trabalhoso, mas ele é uma ferramenta muito valiosa para visualização da solução do problema.

Com ele ganharemos muito tempo em identificar problemas de lógica e a depuração ficará bastante facilitada também.

 


 

 

 

Muitos programadores com mais experiência elaboram o fluxograma mentalmente e embora este método seja mais rápido e até eficiente, na hora de fazer a manutenção ou alteração do programa surgem contratempos. Geralmente, esse “fluxograma mental” não é documentado, passado para o papel, assim, repensar o funcionamento do programa pode requerer um trabalho maior que a própria elaboração do programa original.

Em nosso exemplo do supermercado, citado na primeira parte do curso, o fluxograma ficaria mais ou menos como na figura 2.

 

 


 

 

 

3 - Construção de fluxogramas detalhados

Agora iremos detalhar cada etapa do fluxograma feito na etapa anterior. Nos preocuparemos em fazer cada etapa separadamente. Por exemplo, na figura 3, detalharemos o item “Faz Lista”.

 

4 - Montagem das instruções

Nessa fase iremos finalmente resolver o problema a nível de instruções de programa do sistema desejado. No caso do BASIC Stamp, serão as instruções da linguagem PBASIC da Parallax.

Devemos fazer a montagem do programa seguindo as ideias do fluxograma principal e detalhado. Para não se perder, faça processo por processo sem se preocupar muito com o programa inteiro. Ao final, seguindo os fluxogramas, você terá o programa montado.

Na parte prática iremos detalhar como fazer os fluxogramas e a montagem do programa

 

5 - Compilação do Programa

Nesta fase iremos compilar O programa escrito em instruções para a linguagem do processador. No caso do BASIC Stamp, esse processo é feito pelo programa EDITOR/PROGRAMADOR da Parallax, que além de compilar, já carrega o programa no BASIC Stamp.

 

6 - Depuração

Essa fase é onde testaremos e resolveremos os problemas que não conseguimos identificar na fase de Estudo do Problema. Quanto mais elaborado o estudo e mais detalhados os fluxogramas, mais rápida e fácil será a montagem do programa e sua depuração.

O leitor iniciante não deve desanimar mesmo após ter feito todas as etapas corretamente, o programa não funcionar, isso é normal quando estamos trabalhando com sistemas processados, mesmo os programadores experientes têm problemas. Veremos que o BASIC Stamp tem uma instrução chamada “DEBUG” que irá facilitar muito o trabalho de depuração.

 

7 - Documentação

Uma das fases mais importantes e também mais “esquecida” é a documentação, pois ficamos empolgados com o funcionamento do sistema e nunca temos “tempo” para fazê-la.

Só iremos valorizá-la, quando após semanas ou até anos, precisarmos fazer uma manutenção ou alteração no sistema, pois sem ela perderemos um grande tempo repensando como foi feito o programa. Assim, por mais tedioso e trabalhoso que seja fazer a documentação nunca será um trabalho perdido e o sistema terá vida independente do programador que o elaborou e outras pessoas entenderão facilmente o sistema.

 

Linguagem de programação:

Todo microprocessador executa instruções que são números binários.

Para facilitar a programação, elas foram associadas a Mnemônicos (e mais fácil lembrar de INC A do que 0010 1101 0000 0000), essa linguagem é chamada de ASSEMBLER que é uma linguagem de baixo nível.

A tarefa de programar em Assembler não é uma tarefa das mais fáceis, pois implica em conhecer a fundo o hardware envolvido.

Para facilitar o uso de computadores e sua programação foram desenvolvidas linguagens de alto nível (BASIC, PASCAL, C, FORTRAM, COBOL, etc) onde o programador não precisa ter um conhecimento tão apurado do hardware envolvido, outra vantagem é que essas linguagens são portáveis aos diferentes tipos de hardware (ex. um programa em C pode rodar em um sistema Intel 486 ou em um Motorola 68000).

 

 


 

 

 

No caso do BASIC Stamp essa linguagem é a PBASIC desenvolvida pela Parallax que é um BASIC simplificado e com instruções específicas para sistemas de controle.

 

Manual do usuário do BASIC Stamp.

Nele estão descritos como o software editor/programador funciona, a sintaxe utilizada, os procedimentos de edição e correção de erros.

As instruções da linguagem BASIC estão detalhadas e temos citações de exemplos de utilização. Seria muito útil o leitor ter esse manual para consultas.

Adiante iremos relacionar as instruções do BASIC Stamp e sua sintaxe simplificada e durante o MINI Curso, detalharemos algumas instruções. Caso o leitor tenha dúvidas sobre a sintaxe da instrução é aconselhável uma consulta ao manual.

 

Estrutura interna

A estrutura é muito simples e tem como base o microcontrolador PIC16C56 e uma EEPROM 93LC56 de 256 bytes. O PIC contém um interpretador BASIC gravado que não pode ser apagado ou modificado. Já a EEPROM pode ser “apagada” e gravada novamente um milhão de vezes e é nela que armazenamos os códigos compactados do programa em BASIC.

 

Portas I/O e Variáveis

O BASIC Stamp tem 16 bytes de RAM dedicados para I/O e armazenamento de variáveis. Os dois primeiros bytes são usados para I/O (um para dados e outro para controle de direção), os outros 14 bytes são para dados.

O arranjo das variáveis é mostrado na tabela 1.

 


| Clique na imagem para ampliar |

 

 

PWR

Entrada de força não regulada. Aceita 6-15 VDC, que é então regulada para 5 V. Não pode ser conectado se for aplicada uma fonte de 5 V ao pino +5 V.

 

GND

Ground do sistema. Conectado ao pino 25 (GND) da portaparalela do PC para programação.

 

PCO

PC Out. Conectado ao pino 11 (Busy) da porta paralela do PC para programação.

 

PCI

PC In. Conectado ao pino 2 (DO) da porta paralela do PC ara programação.

 

+5V

Entrada / Saída de 5 V. Se uma tensão desregulada é aplicada ao pino PWR, ele proverá uma tensão de 5 V. Se nenhuma tensão for aplicada ao pino PWR, então uma tensão regulada entre 4,5 V e 5,5 V deverá ser aplicada nesse pino (+5 V).

 

RES

Entrada / Saída de RESET. Vai ao nível lógico baixo (zero) quando a tensão de alimentação for menor que 4 V, fazendo 0 BS1-IC ficar na condição de RESET. Pode ser forçado para a condição de nivel lógico baixo (zero) para forçar um RESET.

 

PO-P7

Pinos de I/O de uso genérico. Cada pino pode fornecer uma corrente de 25 mA em pico e 20 mA contínuo. Porém, a soma de corrente de todos os pinos não pode exceder 50 mA de pico e 40 mA contínuo.

Na tabela abaixo temos a descrição dos limites de corrente do regulador de tensão. O usuário deverá ter em mente a preocupação de não ultrapassar esses limites para não danificar o BASIC Stamp.

 


| Clique na imagem para ampliar |

 

 

 


 

 

Observe que determinado byte pode pertencer a variáveis de grupos diferentes, por exemplo:

A variável word W0 é composta por duas variáveis byte B0 e B1. Portanto, se definirmos que W0 = $1F43, a variável B0 ficará com o valor $43 e a B1 com $1F. O mesmo ocorre a nível de variável BIT.

A linguagem BASIC do BASIC Stamp® é muito flexível em nomear variáveis e pinos de I/O. Dependendo das suas necessidades, você poderá usar as variáveis ou pinos de I/O como bytes (Pins, Dirs, B0 - B13) ou como variáveis de 16 bits (W0 - W6). Adicionalmente, os pinos de I/O e as duas primeiras variáveis (B0 e B1) podem ter os seus bits usados individualmente (Pin0-Pin7, Dir0-Dir7, Bit0-Bit15). Em muitos casos, um simples bit é o necessário, como por exemplo, quando for armazenar uma determinada condição de um pino de I/O.

Port é uma variável de 16 bits (word) composta por dois bytes, Pins e Dirs:

Pins (byte) e Pin0-Pin7 (bits correspondentes) são os pinos do Port de I/O. Quando estas variáveis são lidas, os pinos de I/O são lidos diretamente. Quando estas variáveis são escritas, as memórias RAM correspondentes são escritas e então transferidas para os pinos de I/O depois de cada instrução.

Dirs (byte) e Dir0-Dir7 (bits correspondentes) são os bits de controle de direção do port de I/O. Um “0" em um desses bits faz com que o correspondente ao pino de I/O seja uma entrada. Um “1” faz com que o pino seja uma saída. Este byte de dados é transferido para o registrador de controle de direção do port de I/O após cada instrução.

Quando você escrever seus programas em BASIC, poderá usar os símbolos descritos abaixo para ler e escrever nos 8 pinos de I/O do BASIC Stamp®.

Normalmente, você começa a escrever o seu programa definindo quais pinos serão entradas e quais pinos serão saídas. Por exemplo, “dirs = %00001111” define que bits 0-3 serão saídas e 4-7, entradas (direita para esquerda).

Após definir que pinos serão entradas e saídas, você poderá ler e escrever neles. A instrução “pins = % 11000000" seta os bits 6-7 para o nível lógico alto (um), 4-5 para o nível lógico baixo (Zero), os outros bits 0-3 são entradas. Para ler os pinos, a instrução “b2 = pins” lê o estado dos 8 pinos e escreve na variável b2.

Os pinos podem ser endereçados individualmente, o que é mais fácil. Para ler um simples pino, a instrução “Bit0 = Pin7” lê o estado do pino de I/O 7 e armazena na variável Bit0. A instrução "if pin3 = 1 then start lê o pino de I/O 3 e então desvia para start (uma localização) se o pino estiver em nível lógico alto (um).

O Software Editor do BASIC Stamp® reconhece os nomes das variáveis mostradas na tabela acima. Se você deseja colocar nomes diferentes, comece o seu programa com instruções que definam novos nomes:

symbol Chave = pinQ

‘Define “Chave” como label para o pino de I/O 0

symbol flag = bit3

‘Define “flag” como label da variável bit3

symbol contador = b2

‘Define “contador' como label da variável b2

 

Operações matemáticas

Abaixo temos as descrições dos operadores matemáticos. Uma observação muito importante é que o BASIC Stamp não suporta expressões matemáticas de ponto flutuante e as expressões são executadas sempre da esquerda para a direita, independente dos operadores usados.

Portanto, na Matemática do BASIC Stamp, 2 + 3*4=20 e não 14, como era de se esperar na Matemática tradicional.

+ soma

- subtração

* multiplicação (retorna a palavra baixa (low word) do resultado)

 

multiplicação (retorna a palavra alta (high word) do resultado)

/ divisão (retorna o quociente)

// divisão (retorna o resto)

min mantém a variável maior ou igual ao valor

max mantém a variável menor ou igual ao valor

& operação lógica AND

** operação lógica OR

^ operação lógica XOR

&/ operação lógica AND NOT

I/ operação lógica OR NOT

^/ operação lógica XOR NOT

 

Alguns exemplos

contador = contador + 1

‘Incrementa contador

tempo = tempo * 2

‘Multiplica tempo por 2

b2=b2/8

'Divide b2 por 8

W3 = w3 & 255

‘Isola o byte baixo de w3

b0 = b0 + 1 max 99

‘Incrementa b0, mas não deixa exceder 99

b3 = b3 - 1 min 10

'Decrementa b3, mas não deixa ficar abaixo de 10

 

Formato do Programa

Existem poucas restrições de como o programa pode ser formatado, entretanto, você deve conhecer as regras de como entrar constantes, labels e comentários, que serão descritos na sequência:

Constantes: Os valores das constantes podem ser declarados de quatro maneiras: decimal, hexadecimal, binário e ASCIL.

, Números hexadecimais são precedidos com um sinal de dólar ($), números binários são precedidos com um sinal de porcentagem (%) e valores em ASCll estão entre aspas (“). Se nenhum sinal for usado, o editor assume que o valor é decimal. Na sequência são descritos alguns exemplos:

100 Decimal

$ 64 'Hexadecimal

%01100100 'Binário

“A” ‘ASCII "A” (65)

“Olá I” ‘ASCII “O”, “I”, “a”, “ “, “I”

A maioria dos seus programas provavelmente usará valores decimais, O que é muito comum em programas em BASIC. Entretanto, valores em hexadecimal, binário podem ser muito úteis. Por exemplo, para definir os pinos 0-3 como saída e os pinos 4-7 como entrada, você poderá usar qualquer das formas abaixo, mas o exemplo binário é muito mais legível:

dirs = 15 ‘Decimal

dirs = $0F 'Hexadecimal

dirs = %00001111 ‘Binário

Labels de endereço: O editor usa labels para referenciar os endereços (localizações) dentro do seu programa. Esta é a diferença de algumas versões de BASIC que usam linhas numeradas.

Genericamente falando, os nomes dos Labels podem ser qualquer combinação de letras, números e sublinhado (. ), mas o primeiro caractere necessariamente não pode ser um número. Também, os nomes dos labels não podem ser palavras reservadas, como Os nomes das instruções (serin, toggle, goto, etc.) e nomes de variáveis (port, w2, b13, etc.).

Quando forem usados pela primeira vez, os nomes dos labels devem terminar com dois pontos (:). Quando chamados em qualquer parte do programa, os labels não devem ser terminados com os dois pontos (:). Na sequência o exemplo ilustra como os labels devem ser usados para referir endereços:

loop: toggle 0 ‘Inverte o pino O

for b0 = 1 to 10

toggle 1 'Inverte o pino O

next

goto loop 'Repete o processo

 

Labels de valores: Além de serem usados para referência de endereços, é possível usá-los para se referir a variáveis e constantes. Labels de valores seguem as mesmas regras dos labels de endereços, somente não terminam com dois pontos (:), elas devem ser definidas usando a diretriz “symbol”. Na sequência o exemplo ilustra vários usos de labels de valores:

symbol início = 1

'Define dois labels de constantes

symbol fim = 10

symbol contador = b0

'Define um label para bO

loop: for contador = início to fim

toggle 1

‘Inverte o pino 1 dez vezes

next

Comentários: serão adicionados ao programa para tornar mais fácil

sua compreensão.

Comentários começam com um apóstrofo (') e continuam até o final da linha. Alternativamente, você pode designar um comentário usando a diretriz REM encontrada em muitas versões de BASIC. Na sequência temos vários exemplos de uso de comentários:

symbol relé = 3

“Define um label para O

pino de I/O 3

symbol tamanho = w2

'Define um label para w2

dirs = %11111111

'Faz todos os pinos de

I/O como saida.

pins = %00000000

'Faz todos os pinos de I/O ficarem baixos

REM este é o loop principal

principal: tamanho = tamanho + 10

Incrementa 10 ao valor da variável tamanho

gosub sub

'Chama a subrotina de gerar pulso

goto principal

sub: pulsout relé,

tamanho : toggle 0 : return

 

Formato geral

O editor não é sensível a letras maiúsculas ou minúsculas, exceto quando está processando strings (ex.: “Oi !”).

Múltiplas instruções e labels podem ser combinados na mesma linha tendo separação com dois pontos (:).

Os exemplos abaixo mostram O mesmo programa em linhas separadas e em uma única linha ...

Versão em linhas separadas:

dirs = 255

‘Define todos os pinos como saída

forb2 = 0 to 100

‘Conta de 0 a 100

pins = b2

‘Faz com que os pinos de I/0 reflitam o contador

next 'Continua contar até 100

 

 


| Clique na imagem para ampliar |

 

 

 


 

 

 

Versão de uma única linha

dirs = 255 :forb2 = O to 100: pins

=b2: next

 

O Editor

Foi desenvolvido pela Parallax e se integra perfeitamente ao ambiente

de edição, programação e depuração de programas. Eventualmente há quem prefira outros editores, e eles podem ser usados sem maiores problemas, a única desvantagem é a não integração com o sistema.

 

Transferindo programas para o BASIC Stamp

A transferência do programa para o BASIC Stamp é feita através de um cabo de 3 fios (PCI, PCO e GND) conectado na porta paralela do PC. Basta teclar as teclas “ALT” e “R” e o programa será transferido e automaticamente executado figura 4.

Note que uma faixa branca irá aparecer no meio da tela do programa editor/programador e uma parte dela ficará vermelha, indicando a quantidade de memória utilizada.

 

Conclusão da segunda parte

Nessa etapa terminamos os conceitos teóricos e uma abordagem genérica do BASIC Stamp, as próximas etapas serão práticas com exemplos de técnicas de programação e depuração.