Professional Documents
Culture Documents
For i = 1 To 10
Gosub nextchar
Serout 0,N2400,[#C
count = count * 2
Next i
Dtmfout 1,[1,2,3,4]
I2cread cont,addr,[idata]
If PORTA.1 = 0 Then pbpressed
* slip + count + 1
loop
0
1
1
00
1
2/99
PicBasic Pro Compiler
CONTEÚDO
1. Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1. Os PICmicros . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Sobre Este Manual . . . . . . . . . . . . . . . . . . . . . . . . 3
2. I n i c i a n d o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1. Instalação do Software. . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Seu Primeiro Programa. . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Programe Este PicMicro . . . . . . . . . . . . . . . . . . . . 7
2.4. Ele Vive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5. Eu Tive Problemas . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6. Estilos de Código. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6.1. Comentários . . . . . . . . . . . . . . . . . . . . . . 11
2.6.2. Nomes de Pinos e Variáveis . . . . . . . . . . . 12
2.6.3. Rótulos . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6.4. GOTO . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.22. HSEROUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.23. I2CREAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.24. I2CWRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.25. IF..THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.26. INPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.27. {LET} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.28. LCDOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.29. LOOKDOWN . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.30. LOOKDOWN2 . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.31. LOOKUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.32. LOOKUP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.33. LOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.34. NAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.35. ON INTERRUPT . . . . . . . . . . . . . . . . . . . . . . . . 81
5.36. OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.37. PAUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.38. PAUSEUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.39. PEEK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.40. POKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.41. POT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.42. PULSIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.43. PULSOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
5.44. PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.45. RANDOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.46. RCTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.47. READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.48. RESUME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.49. RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.50. REVERSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.51. SERIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.52. SERIN2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.53. SEROUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.54. SEROUT2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.55. SHIFTIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.56. SHIFTOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.57. SLEEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.58. SOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.59. STOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.60. SWAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.61. TOGGLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.62. WHILE..WEND . . . . . . . . . . . . . . . . . . . . . . . . 118
5.63. WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.64. XIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
iii
PicBasic Pro Compiler
9. Interrupções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
9.1. Interrupções em Geral . . . . . . . . . . . . . . . . . . . . . 139
9.2. Interrupções em BASIC. . . . . . . . . . . . . . . . . . . . . . 140
9.3. Interrupções em Assembler. . . . . . . . . . . . . . . . . . . 142
Apêndice A
Sumário do Conj. de Instruções do Microchip Assembly. . . 155
Apêndice B
Informação Para Contato. . . . . . . . . . . . . . . . . . . . . . . . . 157
v
PicBasic Pro Compiler
vi
PicBasic Pro Compiler
1. Introdução
O PicBasic Pro Compiler (ou PBP) é nossa linguagem de programação
de próxima geração que torna mais rápido e fácil para você programar
os poderosos microcontroladores PICmicro da Microchip Technology.
A linguagem BASIC semelhante ao inglês é mais fácil de ler e escrever que a
a ardilosa linguagem Microchip Assembly.
O PicBasic Pro Compiler é "igual ao BASIC Stamp II" e tem a maioria das biblio-
tecas e funções do BASIC Stamp I e II. Sendo ele um verdadeiro compilador,
os programas rodam mais rápido e podem ser maiores do que em seus
equivalentes Stamp.
1.1. Os PICmicros
1
PicBasic Pro Compiler
2
PicBasic Pro Compiler
Este manual não pode ser um tratado completo na linguagem BASIC. Ele
descreve o conj. de instruções do PicBasic Pro e provê exemplos em
como usá-lo. Se você não está familiarizado c/ programação BASIC, você
deve adquirir um livro sobre o tema. Ou apenas mergulhe de cabeça. O BASIC
é projetado p/ ser uma linguagem fácil de usar e há programas de exemplo
adicionais no disco que podem ajudá-lo a começar.
A seguir, será coberto o básico de programação, seguido por uma seção de referência
listando cada comando do PicBasic Pro em detalhe. A seção de referência
mostra cada protótipo do comando, uma descrição do comando e
alguns exemplos. As chaves, { }, indicam parâmetros opcionais.
3
PicBasic Pro Compiler
4
PicBasic Pro Compiler
2. I n i c i a n d o
md PBP
cd PBP
a:\pbpxxx -d
Primeiro crie o arq. fonte em BASIC p/ o programa usando o seu editor de texto
ou processador de texto favorito. Se você não tem um favorito, o EDIT do DOS
(incluso no MS-DOS) ou o NOTEPAD do Windows (incluso no Windows
5
PicBasic Pro Compiler
O arquivo texto criado precisa ser texto ASCII puro. Ele não pode conter quais-
quer códigos especiais que possam ser inseridos por processadores de texto p/
seus propósitos. Normalmente lhe é dada a opção de salvar o arquivo como
DOS puro ou texto ASCII pela maioria dos processadores.
PBP blink
6
PicBasic Pro Compiler
P/ ajudar a ter certeza de que seu arq. original não tem erros, é melhor começar
escrevendo e testando um pequeno pedaço de seu programa, ao invés de escrever
um bloco inteiro de 100.000 linhas de uma só vez e então tentar depurá-lo de ponta
a ponta.
O PicBasic Pro Compiler gera arquivos padrão de 8 bits Merged Intel HEX
(.HEX) que podem ser usados c/ qualquer programador PICmicro incluindo
nosso EPIC Plus Pocket PICmicro Programmer. Os PICmicros não podem ser
programados c/ cabos de programação do BASIC Stamp.
O LED no EPIC Programmer poderá estar aceso ou não neste ponto. Não
insira um PICmicro no soquete de programação quando o LED estiver aceso
ou antes do software de programação ter sido iniciado.
7
PicBasic Pro Compiler
Entre:
EPIC
O software EPIC irá dar uma olhada ao redor p/ encontrar onde o EPIC
Programmer está ligado e prepará-lo p/ programar um PICmicro. Se o EPIC
Programmer não for encontrado, cheque todas as conexões acima e veri-
fique que não haja nenhum PICmicro ou adaptador conectado ao
programador. Digitando:
EPIC /?
O arquivo irá carregar e você deverá ver uma lista de números na janela à es-
querda. Este é seu programa em código PICmicro. À direita da tela há
um mostrador da informação de configuração que irá ser
programada no PICmicro. Verifique que isto esteja correto antes de
prosseguir.
Uma vez que a programação esteja completa e o LED esteja apagado, é hora
de testar seu programa.
+5V +5V
1 18
RA2 RA1
2 17
4.7K RA3 RA0
3 16 4Mhz
RA4 OSC1
4 15
MCLR OSC2
5 14
Vss Vdd
6 13
RB0 RB7
22pf 22pf
7 12
RB1 RB6
470 8 11
RB2 RB5
9 10
RB3 RB4
LED
.1uf
PIC16F84
Conecte uma fonte de alimentação. Seu PICmicro deverá ganhar vida e começar
a piscar o LED cerca de uma vez por segundo. Se ele não piscar, cheque todas
as conexões e certifique-se de que os 5 volts estão presentes nos pinos apropri-
ados no PICmicro.
Partindo destas simples iniciações, você poderá criar sua própria apli-
cação que conquistará o mundo.
9
PicBasic Pro Compiler
Certifique-se de que o pino /MCLR esteja ligado aos 5 volts através de algum tipo
de circuito de reset protegido contra tensão ou simplesmente c/ um resistor de 4,7K.
Se você deixar o pino s/ ligação, seu nível flutuará e algumas vezes o
PICmicro funcionará mas normalmente não. O PICmicro tem um circuito de
power-on-reset em-chip assim em geral apenas um resistor de pull-up externo
é adequado. Mas em alguns casos o PICmicro poderá não se ligar cor-
retamente e um circuito externo poderá ser necessário. Veja os PICmicro
data books da Microchip p/ mais informações.
Esteja certo de que você tem um bom cristal c/ capacitores de valores corretos
ligados a ele. Valores de capacitores podem ser difíceis de ler. Se os valores esti-
verem muito fora, o oscilador não partirá e rodará corretamente. Um cristal
de 4MHz c/ 2 capacitores de disco cerâmico de 22pf (picofarads) é um bom começo p/
a maioria dos PICmicros. Mais uma vez, confirme nos data books da Micro-
chip p/ detalhes adicionais no assunto.
CMCON = 7
10
PicBasic Pro Compiler
ADCON1 = 7
Todos os pinos do PICmicro estão fixados como entradas ao ligar-se. Se você precisa
que um pino seja uma saída, fixe-o como saída antes de usá-lo, ou use um comando
do PicBasic Pro que o faça p/ você. Mais uma vez, revise as folhas de dados
do PICmicro p/ familiarizar-se c/ as idiossincrasias de uma peça especí-
fica.
Tente fazer as coisas de outra maneira. Às vezes o que você está tentando fazer
parece que deveria funcionar mas não o faz, não importa o quanto você bata
nele. Normalmente há mais de uma maneira de se descascar um programa. Tente
abordar o problema de um ângulo diferente e talvez isto
resulte num esclarecimento.
2.6.1. Comentários
Use muitos comentários. Mesmo que seja perfeitamente óbvio p/ você o que o
código está fazendo à medida que você o escreve, outra pessoa que esteja olhando
p/ o programa (ou mesmo você quando tornar-se outra pessoa mais tarde na vida) pode
11
PicBasic Pro Compiler
não ter qualquer idéia do que você estava tentando conseguir. Enquanto que os
comentários tomam espaço no seu arq. fonte BASIC, eles não tomam nenhum
espaço adicional no PICmicro portanto use-os livremente.
2.6.3. Rótulos
Rótulos também devem ser mais significativos do que "rotulo1:" ou "aqui:". Até mesmo
um rótulo como "loop:" é mais descritivo (embora apenas levemente). Normal-
mente a linha ou rotina p/ a qual você está pulando fará algo único. Tente e dê
12
PicBasic Pro Compiler
2.6.4. GOTO
Finalmente, tente não usar muitos GOTOS. Enquanto GOTOS podem ser um
mal necessário, tente minimizar seu uso o máximo possível. Tente escrever
seu código em seções lógicas e não ficar pulando muito por aí.
GOSUBS podem ajudá-lo a conseguir isto.
13
PicBasic Pro Compiler
14
PicBasic Pro Compiler
3.1. Utilização
O PicBasic Pro Compiler pode ser invocado a partir da linha de comando do DOS
usando o seguinte formato de comando:
Zero ou mais Opções podem ser usadas p/ modificar a maneira na qual o PBP
compila o arq. especificado. Opções começam c/ um sinal de menos ( - ) ou uma
barra normal (/). O caractere seguinte ao sinal de menos ou barra é uma letra
que seleciona a Opção. Caracteres adicionais poderão vir a seguir se a
Opção requerer mais informação. Cada Opção deve ser separada por
por um espaço, embora nenhum espaço poderá ocorrer de dentro de uma Opção.
Múltiplas Opções podem ser usadas ao mesmo tempo. Por exemplo, a linha
de comando:
irá fazer c/ que o arq. BLINK.BAS seja compilado usando MPASM como
montador e direcionado p/ um processador PIC16C71.
15
PicBasic Pro Compiler
3.2. Options
Opção Descrição
A Usa um Montador diferente
C Insere linhas de fonte como Comentários no arq. montador
H(?) Mostra tela de Ajuda
I Usa um caminho de Inclusão diferente
L Usa um arq. de Biblioteca diferente
O Passa Opção p/ montador
P Especifica Processador alvo
S Pula execução do montador quando terminado
V Modo Verboso
3.2.1. Opção -A
O PBP tem a capacidade de usar tanto o PM, que é incluído c/ o PBP, como o
MPASM da Microchip e seu montador. Para especificar o MPASM (que deve
ser adquirido da Microchip), use -ampasm na linha de comando:
3.2.2. Opção -C
A opção -C faz c/ que o PBP insira linhas do arq. fonte PicBasic Pro como
comentários no arq. fonte em linguagem assembly. Isto pode ser útil como
ferramenta de depuração ou aprendizado já que ela mostra a instrução
do PicBasic Pro seguida pelas instruções em linguagem assembly que ela gera.
PBP -c nome_de_arquivo
16
PicBasic Pro Compiler
3.2.3. Optção -H ou -?
A opção -H ou -? faz c/ que o PBP mostre uma breve tela de ajuda. Esta
tela de ajuda também é mostrada se nenhuma opção e nome de arq. são espe-
cificados na linha de comando.
3.2.4. Opção -I
3.2.5. Opção -L
A opção -L lhe permite selecionar a biblioteca usada pelo PicBasic Pro. Esta
opção é geralmente desnecessária já que o arq. de biblioteca padrão está fixado em
um arq. de configuração p/ cada microcontrolador. Para mais informação sobre
as bibliotecas do PicBasic Pro, veja as seções avançadas mais tarde neste manual.
3.2.6. Opção -O
Opção PM Descrição
OD Gera Listagem, Tabela Simbólica e Arq. de Mapa
OL Gera apenas Listagem
17
PicBasic Pro Compiler
3.2.7. Opção -P
3.2.8. Opção -S
PBP -s nome_de_arquivo
3.2.9. Opção -V
PBP -v nome_de_arquivo
18
PicBasic Pro Compiler
4.1. Identificadores
4.3. Variáveis
Variáveis são onde dados temporários são guardados num programa do PicBasic Pro.
Elas são criadas usando a palavra-chave VAR. Variáveis podem ser bits, bytes ou
palavras. O espaço p/ cada variável é alocado automaticamente na
RAM do microcontrolador pelo PBP. O formato p/ se criar uma variável é o
seguinte:
19
PicBasic Pro Compiler
Include “bs1defs.bas”
ou
Include “bs2defs.bas”
4.4. Aliases
VAR pode também ser usado p/ criar um alias (um outro nome) p/ uma variável.
Isto é mais útil p/ acessar-se as vísceras de uma variável.
20
PicBasic Pro Compiler
Modificador Descrição
BIT0 ou 0 Cria alias p/ o bit 0 do byte ou palavra
BIT1 ou 1 Cria alias p/ o bit 1 do byte ou palavra
BIT2 ou 2 Cria alias p/ o bit 2 do byte ou palavra
BIT3 ou 3 Cria alias p/ o bit 3 do byte ou palavra
BIT4 ou 4 Cria alias p/ o bit 4 do byte ou palavra
BIT5 ou 5 Cria alias p/ o bit 5 do byte ou palavra
BIT6 ou 6 Cria alias p/ o bit 6 do byte ou palavra
BIT7 ou 7 Cria alias p/ o bit 7 do byte ou palavra
BIT8 ou 8 Cria alias p/ o bit 8 da palavra
BIT9 ou 9 Cria alias p/ o bit 9 da palavra
BIT10 ou 10 Cria alias p/ o bit 10 da palavra
BIT11 ou 11 Cria alias p/ o bit 11 da palavra
BIT12 ou 12 Cria alias p/ o bit 12 da palavra
BIT13 ou 13 Cria alias p/ o bit 13 da palavra
BIT14 ou 14 Cria alias p/ o bit 14 da palavra
BIT15 ou 15 Cria alias p/ o bit 15 da palavra
BYTE0 ou LOWBYTE Cria alias p/ o bit inferior da palavra
BYTE1 ou HIGHBYTE Cria alias p/ o bit superior da palavra
4.5. Conjuntos
21
PicBasic Pro Compiler
Por causa da maneira c/ que os conjuntos são alocados na memória, há limites de tama-
nho p/ cada tipo:
4.6. Constantes
ratos con 3
ratoeiras con ratos * 1000
4.7. Símbolos
22
PicBasic Pro Compiler
O PBP permite que constantes numéricas sejam definidas nas três bases: decimal,
binária e hexadecimal. Valores binários são definidos usando o prefixo '%'
e valores hexadecimais usando o prefixo '$'. Valores decimais são o
padrão e não requerem prefixo.
O PBP não provê capacidades de manuseio de séries de caracteres, mas elas podem
ser usadas c/ alguns comandos. Uma série contém um ou mais caracteres e é
delimitada por aspas. Não são suportadas seqüências de escape p/
caracteres não-ASCII (embora a maioria dos comandos do PBP têm
embutido este manuseio).
Séries são normalmente tratadas como uma lista de valores de caractere individuais.
4.10. Pinos
Para tornar mais fácil de se lembrar p/ que um pino é usado, a ele deve-se
atribuir um nome usando o comando VAR. Desta maneira, o nome pode
então ser usado em qualquer operação:
23
PicBasic Pro Compiler
Se uma porta não tem 8 pinos, tal como PORTA, só os números dos pinos
que existem podem ser usados, por exemplo 8 - 12. O uso dos pinos de número 13 - 15
não causará efeito visível.
Esta numeração dos pinos, 0 - 15, nada tem a ver c/ a numeração física dos pinos
de um PICmicro. Dependendo do PICmicro em particular, o pino número 0
poderia ser o pino físico 6, 21 ou 33, mas em cada caso ele mapeia-se ao PORTB.0
(ou GPIO.0 p/ dispositivos de 8 pinos, ou PORTC.0 p/ um PIC14C000) .
Os pinos podem ser referenciados por números (0 - 15), nome (ex. Pino0, se um
dos arquivos bsdefs.bas estão inclusos ou você mesmo os definiu), ou o
nome do bit completo (ex. PORTA.1). Qualquer pino ou bit do microcontrolador pode
ser acessado usando o último método.
Os nomes dos pinos (ex. Pino0) não são automaticamente inclusos no seu
programa. Na maioria dos casos, você iria definir os nomes dos pinos como achar melhor
usando o comando VAR:
24
PicBasic Pro Compiler
Include “bs1defs.bas”
ou
Include “bs2defs.bas”
Quando um PICmicro é ligado, todos os pinos são fixados como entradas. P/ usar
um pino como saída, o pino ou porta deve ser fixado como uma saída ou deve ser usado
um comando que automaticamente fixa um pino como saída.
Para fixar um pino ou porta como saída (ou entrada), fixe o seu registrador TRIS. Fixando
um bit TRIS em 0 torna seu pino uma saída. Fixando um bit TRIS em 1 torna seu
pino uma entrada. Por exemplo:
TRISC = %10101010
Fixa todos os pinos pares em PORTC como saídas e os pinos ímpares como entradas.
Direções individuais de bit podem ser fixadas da mesma maneira.
TRISA.0 = 0
fixa PORTA, pino 0 como uma saída. Todas as demais direções de pinos
em PORTA permanecem inalteradas.
25
PicBasic Pro Compiler
4.11. Comentários
Ao contrário de vários BASICs, REM é uma palavra-chave única e não uma abreviação
p/ REMark. Assim, nomes de variáveis podem começar c/ REM (embora REM
por si só não seja válido).
W2 = W0
W0 = W1
W1 = W2
é o mesmo que:
W2 = W0 : W0 = W1 : W1 = W2
Branch B0,[rotulo0,rotulo1,rotulo2,_
rotulo3,rotulo4]
26
PicBasic Pro Compiler
4.14. INCLUDE
Outros arq. fonte BASIC podem ser adicionados a um programa do PBP usando
INCLUDE. Você pode ter sub-rotinas padronizadas, definições ou outros ar-
quivos que você deseje manter em separado. Os Stamp e arq. de definição
de modo serial são exemplos disso. Estes arquivos podem ser incluídos em
programas onde eles sejam necessários, mas deixados fora de programas
onde eles não sejam precisos.
INCLUDE “modedefs.bas”
4.15. DEFINE
27
PicBasic Pro Compiler
A = (B + C) * (D - E)
28
PicBasic Pro Compiler
29
PicBasic Pro Compiler
4.16.1. Multiplication
4.16.2. Divisão
4.16.3. Deslocamento
30
PicBasic Pro Compiler
4.16.4. ABS
B1 = ABS B0
4.16.5. COS
B1 = COS B0
4.16.6. DCD
DCD retorna o valor decodificado de um número de bit. Ele altera o número de bit
(0 - 15) p/ um número binário c/ apenas aquele bit fixado em 1. Todos os demais bits são
fixados em 0.
4.16.7. DIG
DIG retorna o valor de um dígito decimal. Simplesmente diga a ele o número do dígito
(0 - 4 c/ 0 sendo o dígito mais à direita) do qual você gostaria de saber o valor, e
voila.
31
PicBasic Pro Compiler
4.16.9. NCD
NCD retorna o número de bit codificado prioritário (1 - 16) de um valor. Ele é usado
p/ achar o bit mais alto ligado em um valor. Ele retorna 0 se nenhum bit estiver ligado.
4.16.10. REV
4.16.11. SIN
B1 = SIN B0
4.16.12. SQR
32
PicBasic Pro Compiler
33
PicBasic Pro Compiler
Esteja certo de usar parênteses p/ dizer ao PBP a ordem exata em que você quer
que as operações sejam executadas.
34
PicBasic Pro Compiler
35
PicBasic Pro Compiler
36
PicBasic Pro Compiler
5.1. @
@ Declaração
i var byte
role-me var byte
For i = 1 to 4
@ rlf _role-me, F ; Gira o bit uma vez p/ esq.
Next i
@ Include “fp.asm”
37
PicBasic Pro Compiler
5.2. ASM..ENDASM
ASM
ENDASM
ASM
bsf PORTA, 0 ; Fixa bit 0 em PORTA
bcf PORTB, 0 ; Limpa bit 0 em PORTB
ENDASM
38
PicBasic Pro Compiler
5.3. BRANCH
BRANCH Indice,[Rotulo{,Rotulo...}]
BRANCH B4,[cao,gato,peixe]
‘ O mesmo que:
‘ If B4=0 Then cao (goto cao)
‘ If B4=1 Then gato (goto gato)
‘ If B4=2 Then peixe (goto peixe)
39
PicBasic Pro Compiler
5.4. BRANCHL
BRANCHL Indice,[Rotulo{,Rotulo...}]
BRANCHL (BRANCH longo) funciona muito similarmente ao BRANCH em que ele faz
o programa pular p/ um local diferente baseado em um índice de variáveis.
As principais diferenças são que ele pode pular p/ um Rotulo que está em uma pág. de
cód. diferente da instrução BRANCHL e gera código que é quase o dobro
do tamanho do código gerado pela instrução BRANCH. Se você
estiver certo de que os rótulos estão na mesma pág. que a instrução BRANCH
ou se o microcontrolador não tiver mais do que uma pág. de cód. (2K ou me-
nos de ROM), usar BRANCH ao invés de BRANCHL irá minimizar a utili-
zação da memória.
BRANCHL B4,[cao,gato,peixe]
‘ O mesmo que:
‘ If B4=0 Then cao (goto cao)
‘ If B4=1 Then gato (goto gato)
‘ If B4=2 Then peixe (goto peixe)
40
PicBasic Pro Compiler
5.5. BUTTON
BUTTON Pino,Down,Delay,Rate,BVar,Action,Rotulo
10K
I/O I/O
10K
41
PicBasic Pro Compiler
42
PicBasic Pro Compiler
5.6. CALL
CALL Rotulo
43
PicBasic Pro Compiler
5.7. CLEAR
CLEAR
CLEAR zera todos os registradores da RAM em cada banco. Isto irá fixar
todas as variáveis, inclusive as variáveis internas de sistema p/ zero. Isto não
é feito automaticamente quando um programa do PBP inicia como está num
BASIC Stamp. Em geral, as variáveis devem ser fixadas no programa p/ um estado
inicial apropriado ao invés de se usar CLEAR.
44
PicBasic Pro Compiler
5.8. COUNT
COUNT Pino,Periodo,Var
45
PicBasic Pro Compiler
5.9. DATA
DATA {@Local,}Constante{,Constante...}
Os dados são guardados no espaço da EEPROM apenas uma vez na hora em que
o microcontrolador é programado, não a cada vez que o programa é rodado.
WRITE pode ser usado p/ fixar os valores da EEPROM no-chip em tempo
de execução.
46
PicBasic Pro Compiler
5.10. DEBUG
DEBUG Item{,Item...}
DEBUG assume um oscilador de 4Mhz quando gera sua temporização de bit. Para
manter a temp. apropriada da taxa de transf. c/ outros valores do oscilador, esteja certo
de DEFINIR o ajuste do OSC p/ qualquer valor de oscilador diferente.
47
PicBasic Pro Compiler
DB9 DB25
1K
Pino RS-232 RX Pino 2 Pino 3
48
PicBasic Pro Compiler
5.11. DISABLE
DISABLE
49
PicBasic Pro Compiler
5.12. DTMFOUT
DTMFOUT Pino,{Onms,Offms,}[Tom{,Tom...}]
50
PicBasic Pro Compiler
5.13. EEPROM
EEPROM {Posicao,}[Constante{,Constante...}]
Os dados são guardados no espaço da EEPROM apenas uma vez na hora que o
microcontrolador é programado, não a cada vez que o programa é rodado.
WRITE pode ser usado p/ fixar os valores da EEPROM no-chip em tempo
de execução.
51
PicBasic Pro Compiler
5.14. ENABLE
ENABLE
52
PicBasic Pro Compiler
5.15. END
END
END
53
PicBasic Pro Compiler
5.16. FOR..NEXT
Se o loop necessitar Contar mais do que 255, uma variável dimensionada por pa-
lavra deve ser usada.
FOR i = 1 TO 10 ‘ Conta de 1 a 10
Serout 0,N2400,[#i,” “] ‘ Envia cada numero p/
Pin0 serialmente
NEXT i ‘ Retorna e faz a proxima
contagem
Serout 0,N2400,[10] ‘ Envia um avanco de linha
54
PicBasic Pro Compiler
5.17. FREQOUT
FREQOUT Pino,Onms,Frequencia1{,Frequencia2}
FREQOUT gera tons usando uma forma de modulação por largura de pulso. Os
dados puros que saem do pino parecem bem assustadores. Algum tipo de filtragem
é geralmente necessária p/ alisar o sinal p/ uma onda senoidal livrando-se
dos harmônicos que são gerados:
55
PicBasic Pro Compiler
5.18. GOSUB
GOSUB Rotulo
56
PicBasic Pro Compiler
5.19. GOTO
GOTO Rotulo
57
PicBasic Pro Compiler
5.20. HIGH
HIGH Pino
Põe o Pino especificado em nível alto. Pino é fixado automaticamente como saída.
Pino pode ser uma constante, 0-15, ou uma variável que contenha um número 0-15
(ex. B0) ou um nome de pino (ex. PORTA.0).
Alternativamente, se o pino já for uma saída, uma maneira mais rápida e mais
curta (a partir de um ponto de parada de código gerado) de levá-lo a nível alto seria:
58
PicBasic Pro Compiler
5.21. HSERIN
HSERIN {RotuloParidade,}{Timeout,Rotulo,}[Item{,...}]
HSERIN é uma das muitas funções seriais assíncronas embutidas. Ela pode
apenas ser usada c/ dispositivos que tenham um USART no hardware. Veja a
folha de dados do dispositivo p/ informação sobre o pino de entrada serial e outros
parâmetros. Os parâmetros seriais e baud rate são especificados usando
DEFINEs:
O formato dos dados seriais padrão é 8N1, 8 bits de dados, s/ bit de paridade e 1
bit de parada. 7E1 (7 bits de dados, paridade par, 1 bit de parada) ou 7O1 (7 bits de dados,
paridade ímpar, 1 bit de parada) podem ser habilitados usando um dos seguintes DEFINEs:
59
PicBasic Pro Compiler
60
PicBasic Pro Compiler
5.22. HSEROUT
HSEROUT [Item{,Item...}]
O formato dos dados seriais padrão é 8N1, 8 bits de dados, s/ bit de paridade e 1
bit de parada. 7E1 (7 bits de dados, paridade par, 1 bit de parada) ou 7O1 (7 bits de dados,
paridade ímpar, 1 bit de parada) podem ser habilitados usando um dos seguintes DEFINEs:
61
PicBasic Pro Compiler
62
PicBasic Pro Compiler
5.23. I2CREAD
I2CREAD PinoDados,PinoClock,Controle,{Endereco,}
[Var{,Var...}]{,Rotulo}
63
PicBasic Pro Compiler
As instruções I2C podem ser usadas p/ acessar a EEPROM serial no-chip nos
dispositivos 12CExxx e 16CExxx. Simplesmente especifique os nomes dos pinos
p/ as linhas internas apropriadas como parte do comando I2C e coloque
o seguinte DEFINE no topo do programa:
DEFINE I2C_INTERNAL 1
A temporização das instuções I2C é fixada de forma que dispositivos de veloc. padrão
(100Khz) serão acessíveis a velocidades de clock de até 8Mhz. Dispositivos
64
PicBasic Pro Compiler
de modo rápido (400Khz) podem ser usados até 20Mhz. Se for desejado acessar
um dispositivo de velocidade padrão acima de 8Mhz, o seguinte DEFINE deve ser
adicionado ao programa:
DEFINE I2C_SLOW 1
65
PicBasic Pro Compiler
5.24. I2CWRITE
I2CWRITE PinoDados,PinoClock,Controle,{Endereco,}
[Valor{,Valor...}]{,Rotulo}
Quando for escrever em uma EEPROM serial é necessário esperar 10ms (depende do
dispositivo) p/ a escrita completar-se antes de tentar comunicação
c/ o dispositivo novamente. Se um I2CREAD ou I2CWRITE subseqüente é
tentado antes da escrita ser completada, o acesso será ignorado.
Enquanto que uma simples declaração I2CWRITE pode ser usada p/ escrever múltiplos
bytes de uma vez, fazendo assim poderá violar os requisitos de tempo acima p/
EEPROMs seriais. Algumas EEPROMS seriais lhe permitem escrever múltiplos bytes
em uma única página antes de necessitar a espera. Cheque a folha de dados
p/ o dispositivo específico que você está usando p/ estes detalhes. A característica de
escrita em múltiplos bytes também pode ser útil c/ dispositivos I2C além das
EEPROMs seriais que não têm que esperar entre escritas.
DEFINE I2C_INTERNAL 1
66
PicBasic Pro Compiler
A temporização das instruções I2C é feita de forma que dispositivos de veloc. padrão
(100Khz) sejam acessíveis a velocidades de clock de até 8Mhz. Dispositivos de
modo rápido (400Khz) podem ser usados até 20Mhz. Se for desejado acessar um
dispositivo de velocidade padrão acima de 8Mhz, o seguinte DEFINE deve ser
adicionado ao programa:
DEFINE I2C_SLOW 1
67
PicBasic Pro Compiler
5.25. IF..THEN
Efetua uma ou mais comparações. Cada termo Comp pode relacionar uma
variável a uma constante ou outra variável e inclui um dos
operadores de comparação listados anteriormente.
Esteja certo de usar parênteses p/ especificar a ordem em que as operações devem ser
testadas. De outra forma, a precedência de um operador irá determiná-la p/ você e
o resultado pode não sair como esperado.
68
PicBasic Pro Compiler
If B0 <> 10 Then
B0 = B0 + 1
B1 = B1 - 1
Endif
If B0 = 20 Then
led = 1
Else
led = 0
Endif
69
PicBasic Pro Compiler
5.26. INPUT
INPUT Pino
Torna o Pino especificado uma entrada. Pino pode ser uma constante, 0-15, ou uma
variável que contenha um número 0-15 (ex. B0) ou um nome de pino (ex.
PORTA.0).
Alternativamente, o pino pode ser fixado como entrada de forma mais rápida e
curta (a partir de um standpoint de código gerado):
Todos os pinos em uma porta podem ser fixados como entradas ajustando-se
todo o registrador TRIS de uma vez:
70
PicBasic Pro Compiler
5.27. {LET}
Atribui um Valor a uma Variável. O Valor pode ser uma constante, uma outra
variável ou o resultado de uma expressão. Refira-se à seção anterior sobre
operadores p/ mais informação. A palavra-chave LET é opcional.
LET B0 = B1 * B2 + B3
B0 = Sqr W1
71
PicBasic Pro Compiler
5.28. LCDOUT
LCDOUT Item{,Item...}
Um programa deve esperar por pelo menos meio segundo antes de enviar o primeiro
comando a um LCD. Pode levar um bom tempo p/ um LCD se inicializar.
Command Operation
$FE, 1 Limpa display
$FE, 2 Retorno (início da primeira linha)
$FE, $0C Cursor desligado
$FE, $0E Cursor sublinhado ligado
$FE, $0F Cursor piscante ligado
$FE, $10 Move cursor uma posição à esquerda
$FE, $14 Move cursor uma posição à direita
$FE, $C0 Move cursor ao início da segunda linha
72
PicBasic Pro Compiler
PBP assume que o LCD está conectado a pinos específicos a não ser que seja dito
de outra forma. Ele assume que o LCD será usado c/ um barram. de 4 bits c/ as linhas
de dados DB4 - DB7 conectadas à PORTA.0 - PORTA.3 do PICmicro, Sel. de
Registrador à PORTA.4 e Habilitação à PORTB.3.
Para alterar esta configuração, coloque um ou mais dos seguintes DEFINEs, todos em
maiúsculas, no topo do seu programa PicBasic Pro:
73
PicBasic Pro Compiler
Este arranjo dirá ao PBP que um LCD de 2 linhas está ligado no modo de 4 bits c/ o
barram. de dados nos 4 bits superiores de PORTB, Sel. de Reg. em PORTB.1, e
Habilitação em PORTB.0.
74
PicBasic Pro Compiler
5.29. LOOKDOWN
LOOKDOWN Pesquisa,[Constante{,Constante...}],Var
75
PicBasic Pro Compiler
5.30. LOOKDOWN2
LOOKDOWN2 Pesquisa,{Teste}[Valor{,Valor...}],Var
O parâmetro opcional Test pode ser usado p/ executar um teste que não
seja igual a (“=”) quando pesquisar a lista. Por exemplo, a lista poderia
ser pesquisada p/ o primeiro Valor maior que o parâmetro Pesquisa
usando “>” como o parâmetro de Teste. Se Teste é deixado de fora, “=” é assumido.
A lista de Valor pode ser uma mistura de constantes numéricas e string de 16 bits
and variáveis. Cada caractere numa string é tratado como uma constante
separada igual ao valor ASCII do caractere. Expressões não podem ser
usadas na lista de Valor, embora elas possam ser usadas como o valor Pesquisa.
Cadeias de variáveis c/ um índice variável não podem ser usadas em LOOKDOWN2
embora cadeias de variáveis c/ um índice constante sejam permitidas.
LOOKDOWN2 W0,[512,W1,1024],B0
LOOKDOWN2 W0,<[10,100,1000],B0
76
PicBasic Pro Compiler
5.31. LOOKUP
LOOKUP Indice,[Constante{,Constante...}],Var
A declaração LOOKUP pode ser usada p/ recuperar valores de uma tabela de cons-
tantes de 8 bits. Se Indice é zero, Var é fixado como o valor da primeira
Constante. Se Indice é um, Var é fixado como o valor da segunda
Constante. E assim vai. Se Indice é maior que ou igual ao número
de entradas na lista constantes, nenhuma ação é tomada e Var permanece
inalterado.
For B0 = 0 to 5 ‘ Conta de 0 a 5
LOOKUP B0,[“A l o !”],B1 ‘ Pega caractere
numero B0 da
string p/ variavel
B1
Serout 0,N2400,[B1] ‘ Envia caractere
em B1 p/ Pino0
serialmente
Next B0 ‘ Faz proximo caractere
77
PicBasic Pro Compiler
5.32. LOOKUP2
LOOKUP2 Indice,[Valor{,Valor...}],Var
A lista Valor pode ser uma mistura de constantes numéricas e string de 16 bits
e variáveis. Cada caractere numa string é tratado como uma constante
separada igual ao valor ASCII do caractere. Expressões não podem ser
usadas na lista Valor, embora elas possam ser usadas como o valor Indice.
Cadeias de variáveis c/ um índice variável não podem ser usadas em LOOKUP2
embora cadeias de variáveis c/ um índice constante sejam permitidas.
LOOKUP2 B0,[256,512,1024],W1
78
PicBasic Pro Compiler
5.33. LOW
LOW Pino
Leva o Pino especificado a nível baixo. Pino é automaticamente fixado como saída. Pino
pode ser uma constante, 0 - 15, ou uma variável que contenha um número 0 - 15
(ex. B0) ou um nome de pino (ex. PORTA.0).
79
PicBasic Pro Compiler
5.34. NAP
NAP Periodo
80
PicBasic Pro Compiler
5.35. ON INTERRUPT
Quando uma interrupção ocorre, ela é bandeirada. Logo que a execução da de-
claração atual do PicBasic Pro está completa, o programa pula p/ o manipulador de
interrupções BASIC em Rotulo. Uma vez que o manipulador de interrupções está
completo, a declaração RESUME envia o programa de volta p/ onde ele estava
quando a interrupção ocorreu, continuando de onde ele havia parado.
O PBP não introduzirá o manipulador de interrupções BASIC até que tenha acabado
a execução da declaração atual. Se a declaração for PAUSE ou SERIN,
poderá levar um bom tempo antes da interrupção ser reconhecida. O
programa deve ser projetado c/ esta latência em mente. Se for
inaceitável e as interrupções precisarem ser manipuladas mais rapidamente,
uma rotina de interrupção em linguagem assembly deve ser usada.
81
PicBasic Pro Compiler
. . .
INTCON = $80
82
PicBasic Pro Compiler
5.36. OUTPUT
OUTPUT Pino
Torna o Pino especificado uma saída. Pino pode ser uma constante, 0 - 15, ou
uma variável que contenha um número 0 - 15 (ex. B0) ou um nome de pino (ex.
PORTA.0).
Alternativamente, o pino pode ser fixado como saída de uma maneira mais
rápida e curta (partindo de um standpoint de código gerado):
Todos os pinos numa porta podem ser fixados como saídas ajustando-se todo
o registrador TRIS de uma só vez:
83
PicBasic Pro Compiler
5.37. PAUSE
PAUSE Periodo
84
PicBasic Pro Compiler
5.38. PAUSEUS
PAUSEUS Periodo
85
PicBasic Pro Compiler
5.39. PEEK
PEEK Endereco,Var
86
PicBasic Pro Compiler
5.40. POKE
POKE Endereco,Valor
87
PicBasic Pro Compiler
5.41. POT
POT Pino,Escala,Var
Pin 5-50K
0.1uF
88
PicBasic Pro Compiler
5.42. PULSIN
PULSIN Pino,Estado,Var
89
PicBasic Pro Compiler
5.43. PULSOUT
PULSOUT Pino,Periodo
90
PicBasic Pro Compiler
5.44. PWM
PWM Pino,Duty,Ciclo
Produz um trem de pulsos em modulação por largura de pulso em Pino. Cada ciclo de
PWM consiste de 256 passos. O Duty cycle p/ cada ciclo PWM
vai de 0 (0%) a 255 (100%). Este ciclo PWM é repetido Ciclo
vezes. Pino pode ser uma constante, 0 - 15, ou uma variável que contenha
um número 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
Pino é fixado como saída logo antes da geração dos pulsos e reverte p/ en-
trada após parar a geração. A saída PWM num pino se parece tanto
com sujeira, e não uma linda série de ondas quadradas. Algum tipo de
filtro é necessário p/ tornar o sinal em algo útil. Um circuito RC
pode ser usado como um simples conversor D/A:
10K
Pino Saída Analóg.
1uF
91
PicBasic Pro Compiler
5.45. RANDOM
RANDOM Var
92
PicBasic Pro Compiler
5.46. RCTIME
RCTIME Pino,Estado,Var
RCTIME mede o tempo que um Pino fica num Estado particular. Ele é
basicamente meio PULSIN. Pino pode ser uma constante, 0 - 15, ou uma variável
que contenha um número 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
RCTIME pode ser usado p/ ler um potenciômetro (ou algum outro dispositivo re-
sistivo). Resistência pode ser medida pela descarga e cronometragem da
carga (ou vice versa) de um capacitor através do resistor (tipicamente 5K a
50K).
93
PicBasic Pro Compiler
5.47. READ
READ Endereco,Var
94
PicBasic Pro Compiler
5.48. RESUME
RESUME {Rotulo}
95
PicBasic Pro Compiler
5.49. RETURN
RETURN
96
PicBasic Pro Compiler
5.50. REVERSE
REVERSE Pino
Se Pino é uma entrada, ele é fixado como saída. Se Pino é uma saída, ele é fixado
como entrada. Pino pode ser uma constante, 0 - 15, ou uma variável que contenha
um número 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
97
PicBasic Pro Compiler
5.51. SERIN
SERIN
Pino,Modo,{Timeout,Rotulo,}{[Qual...],}{Item...}
Include “modedefs.bas”
A lista de ítens de dados a serem recebidos pode ser precedida por um ou mais
qualificadores contidos entre colchetes. SERIN deve receber estes bytes na
98
PicBasic Pro Compiler
ordem exata antes de receber os ítens de dados. Se qualquer byte recebido não
coincidir c/ o próximo byte na seqüência do qualificador, o processo de
qualificação recomeça (ex. o próximo byte recebido é comparado ao primeiro
ítem na lista do qualificador). Um Qualificador pode ser uma constante, variável
ou uma constante string. Cada caractere de uma string é tratado como um
qualificador individual.
Uma vez que os qualificadores são satisfeitos, SERIN começa a guardar dados nas
variáveis associadas c/ cada Item. Se o nome da variável é usado
sozinho, o valor do caractere ASCII recebido é guardado na
variável. Se a variável é precedida por um jogo-da-velha ( # ), SERIN converte um
valor decimal em ASCII e guarda o resultado naquela variável. Todos os não-
dígitos recebidos antes do primeiro dígito do valor decimal são ignorados e
descartados. Os caracteres não-dígito que terminarem o valor decimal
também são descartados.
SERIN assume um oscilador de 4Mhz quando gerar sua temporização de bit. Para
manter a temporização de baud rate apropriada c/ outros valores de oscilador, esteja
certo de definir (DEFINE) o ajuste OSC ao novo valor do oscilador.
DB9 DB25
22K
Pino RS-232 TX Pino 3 Pino 2
99
PicBasic Pro Compiler
5.52. SERIN2
SERIN2 PinoDados{\PinoFluxo},Mode,{RotuloParidade,}
{Timeout,Rotulo,}[Item...]
O pino de controle de fluxo optional, PinoFluxo, pode ser incluso p/ ajudar a evitar
que os dados sobrecarreguem o receptor. Se for usado, PinoFluxo é
automaticamente levado ao estado habilitado p/ permitir a transmissão de cada
caractere. Este estado habilitado é determinado pela polaridade dos dados
especificados por Mode.
Os bits de baud rate especificam o tempo de bit em microsegundos - 20. Para en-
contrar o valor p/ um dado baud rate, use a equação:
(1000000 / baud) - 20
100
PicBasic Pro Compiler
SERIN2 suporta muitos modificadores de dados diferentes que podem ser misturados
e combinados livremente dentro de uma única declaração SERIN2 p/ prover várias
formatações de entrada.
Modificador Operação
BIN{1..16} Recebe dígitos binários
DEC{1..5} Recebe dígitos decimais
HEX{1..4} Recebe dígitos hexadecimais
SKIP n Pula n caracteres recebidos
STR CadeiaVar\n{\c} Recebe cadeia de n caracteres
opcionalmente terminados c/ caractere c
WAIT ( ) Espera por seqüência de caracteres
WAITSTR CadeiaVar{\n} Espera por cadeia de caracteres
Uma vez que quaisquer qualificadores WAIT ou WAITSTR são satisfeitos, SERIN2 começa
a guardar dados nas variáveis associadas c/ cada Item. Se o nome da
variável é usado sozinho, o valor do caractere ASCII recebido é guardado
na variável. Se a variável é precedida por BIN, DEC ou HEX, então
SERIN2 converte um valor binário, decimal ou hexadecimal em ASCII e
guarda o resultado naquela variável. Todos os não-dígitos recebidos antes do primeiro
dígito do valor decimal são ignorados e descartados. O caractere
não-dígito que termina o valor é também descartado.
BIN, DEC e HEX podem ser seguidos por um número. Normalmente, estes
modificadores recebem tantos dígitos quanto há na entrada. Entretanto, se um
número segue o modificador, SERIN2 irá sempre receber aquele número de
dígitos, pulando dígitos adicionais conforme necessário.
102
PicBasic Pro Compiler
SERIN2 assume um oscilador de 4Mhz enquanto genera sua temporização de bit. Para
manter a temporização de baud rate apropriada c/ outros valores de oscilador, esteja certo
de fazer o DEFINE do parâmetro OSC p/ o novo valor do oscilador.
DB9 DB25
22K
Pino RS-232 TX Pino 3 Pino 2
103
PicBasic Pro Compiler
5.53. SEROUT
SEROUT Pino,Modo,[Item{,Item...}]
Include “modedefs.bas”
104
PicBasic Pro Compiler
SEROUT suporta três tipos de dados diferentes que podem ser misturados e
combinados livremente dentro de uma única declaração SEROUT.
SEROUT assume um oscilador de 4Mhz enquanto gera sua temporização de bit. Para
manter a temporização de baud rate apropriada c/ outros valores de oscilador, esteja
certo de fazer o DEFINE do parâmetro OSC p/ o novo valor do oscilador.
105
PicBasic Pro Compiler
DB9 DB25
1K
Pino RS-232 RX Pino 2 Pino 3
106
PicBasic Pro Compiler
5.54. SEROUT2
SEROUT2 PinoDados{\PinoFluxo},Modo,{Passo,}
{Timeout,Rotulo,}[Item...]
O pino de controle de fluxo opcional, PinoFluxo, pode ser incluído p/ ajudar a impedir
que os dados sobrecarreguem o receptor. Se ele é usado, os dados seriais não serão
enviados até que PinoFluxo esteja no estado apropriado. Este estado é determinado
pela polaridade dos dados especificados por Mode.
Os bits de baud rate especificam o tempo de bit em microsegundos - 20. Para achar
o valor p/ um dado baud rate, use a equação:
(1000000 / baud) - 20
107
PicBasic Pro Compiler
108
PicBasic Pro Compiler
Modificador Operação
{I}{S}BIN{1..16} Envia dígitos binários
{I}{S}DEC{1..5} Envia dígitos decimais
{I}{S}HEX{1..4} Envia dígitos hexadecimais
REP c\n Envia caractere c repetido n vezes
STR ArrayVar{\n} Envia cadeia de n caracteres
BIN, DEC e HEX podem ser precedidos ou seguidos por muitos parâmetros
opcionais. Se qualquer um deles for precedido por um I (p/ indicado), a
saída será precedida por um “%”, “#” ou “$” p/ indicar que o valor
seguinte é binário, decimal ou hexadecimal.
109
PicBasic Pro Compiler
1" desde que o bit de ordem superior seja enviado. Então c/ um pouco de manha, a
aritmética não-assinada do PBP pode render resultados assinados.
BIN, DEC e HEX podem também serem seguidos por um número. Normalmente, estes
modificadores mostram exatamente quantos dígitos forem necessários, zero apagado
(zeros à esquerda não são enviados). Entretanto, se um número segue o modificador,
SEROUT2 irá sempre enviar aquele número de dígitos, adicionando zeros à esquerda con-
forme necessário. Ele também irá ajustar quaisquer dígitos de ordem superior extra. Por
exemplo, BIN6 8 enviaria “001000" e BIN2 8 enviaria “00".
DB9 DB25
1K
Pino RS-232 RX Pino 2 Pino 3
110
PicBasic Pro Compiler
5.55. SHIFTIN
SHIFTIN PinoDados,PinoClock,Modo,[Var{\Bits}...]
Include “modedefs.bas”
SHIFTIN 0,1,MSBPRE,[B0]
111
PicBasic Pro Compiler
5.56. SHIFTOUT
SHIFTOUT PinoDados,PinoClock,Modo,[Var{\Bits}...]
Include “modedefs.bas”
SHIFTOUT 0,1,MSBFIRST,[B0]
SHIFTOUT PORTA.1, PORTA.2, 1,[wordvar\4]
112
PicBasic Pro Compiler
5.57. SLEEP
SLEEP Periodo
113
PicBasic Pro Compiler
5.58. SOUND
SOUND Pino,[Nota,Duracao{,Nota,Duracao...}]
Nota 0 é silêncio. Notas 1-127 são tons. Notas 128-255 são ruído
branco. Tons e ruídos brancos estão em ordem ascendente (ex. 1 e 128
são as freqüências mais baixas, 127 e 255 são as mais altas). Nota 1 é
cerca de 78.74hz e Nota 127 é cerca de 10,000hz.
10uF
Pin
114
PicBasic Pro Compiler
5.59. STOP
STOP
115
PicBasic Pro Compiler
5.60. SWAP
SWAP Variavel,Variavel
116
PicBasic Pro Compiler
5.61. TOGGLE
TOGGLE Pino
117
PicBasic Pro Compiler
5.62. WHILE..WEND
WHILE Condicao
Declaracao...
WEND
i = 1
WHILE i <= 10
Serout 0,N2400,[”No:”,#i,13,10]
i = i + 1
WEND
118
PicBasic Pro Compiler
5.63. WRITE
WRITE Endereco,Valor
119
PicBasic Pro Compiler
5.64. XIN
XIN PinoDados,PinoZero,{Timeout,Rotulo,}[Var{,...}]
XIN é usado p/ receber informação dos dispositivos X-10 que podem enviar
tal informação. Módulos X-10 estão disponíveis em uma larga variedade de
fontes sob muitas marcas. Uma interface é requerida p/ conectar o micro-
controlador à linha de força CA. O TW-523 p/ comunicações X-10 bidire-
cionais é requerido pelo XIN. Este dispositivo contém a interface de linha de
força e isola o microcontrolador da linha CA. Já que o formato X-10
é patenteado, esta interface também cobre as taxas de licença.
XIN apenas processa dados a cada instante zero da linha de força CA confor-
me recebido no PinoZero. Se não houverem transições nesta linha, XIN
irá efetivamente esperar p/ sempre.
Se Var tiver tamanho de palavra, cada House Code recebido é guardado no byte
superior da palavra. Cada Key Code recebido é guardado no byte inferior da
palavra. Se Var for um byte, apenas o Key Code é guardado.
120
PicBasic Pro Compiler
que futuros exemplos irão clarear as coisas. Números de Key Code 0-15
correspondem aos números 1-16 do módulo.
121
PicBasic Pro Compiler
5.65. XOUT
XOUT PinoDados,PinoZero,
[HouseCode\KeyCode{\Repeticao}{,...}]
XOUT apenas processa dados a cada instante zero da linha de força AC conforme
recebido no PinoZero. Se não houver transições nesta linha, XOUT irá
efetivamente esperar para sempre.
122
PicBasic Pro Compiler
Include “modedefs.bas”
Fiação PL-513
No. Fio Cor do Fio Conexão
1 Preto Saída instante zero
2 Vermelho Comum instante zero
3 Verde Comum transmissão X-10
4 Amarelo Entrada transmissão X-10
123
PicBasic Pro Compiler
FiaçãoTW-523
No. Fio Cor do Fio Conexão
1 Preto Saída instante zero
2 Vermelho Comum
3 Verde Saída recepção X-10
4 Amarelo Entrada transmissão X-10
Include “modedefs.bas”
XOUT PORTA.1,PORTA.0,[house\unitOff]
Pause 10000 ‘ Espera 10 segundos
Goto loop
124
PicBasic Pro Compiler
Finalmente, o assembler tem seu próprio arquivo include que define os endereços
dos registradores do microcontrolador. Este arquivo é geralmente chamado de
algo da ordem de P16F84.INC.
125
PicBasic Pro Compiler
O assembler gera seu próprio conjunto de arquivos. Estes incluem o arq. de saída
final .HEX e possivelmente arquivos de listagem e depuração.
O arquivo .ASM tem uma estrutura muito específica. As coisas precisam ser
feitas numa ordem particular p/ que tudo funcione apropriadamente.
126
PicBasic Pro Compiler
Por padrão, o PicBasic Pro Compiler gera programas p/ serem rodados num
PICmicro c/ um cristal de 4Mhz ou ressonador cerâmico. Todas as instru-
ções tempo-sensíveis assumem um tempo de instrução de 1 microssegundo
p/ seus atrasos. Isto permite um PAUSE 1000, por exemplo, p/ esperar 1
segundo e as baud rates dos comandos SERIN e SEROUT serem
precisas.
Existem horas, entretanto, quando seria útil rodar o PICmicro a uma freqüência
diferente de 4Mhz. Ainda que os programas compilados andem a um
passo muito bom, poderia ser bom rodá-los ainda mais rápido.
Ou talvez seja desejável fazer a entrada ou saída serial a 19,200
bauds em vez da velocidade máxima atual de 9600 bauds.
Se você deseja rodar o barramento serial a 19,200 como descrito acima, você
iria simplesmente temporizar o microcontrolador c/ um cristal de 8Mhz em vez de um
cristal de 4Mhz. Isto, c/ efeito, faz tudo rodar duas vezes mais rápido,
incluindo os comandos SERIN e SEROUT. Se você dizer ao SERIN ou
SEROUT p/ rodarem a 9600 bauds, o dobramento da velocidade do cristal
irá dobrar a baud rate atual p/ 19,200 bauds.
Entretanto, tenha em mente que comandos como PAUSE e SOUND também irão
rodar duas vezes mais rápido. O PAUSE 1000 mencionado acima iria esperar
apenas .5 segundos c/ um cristal de 8Mhz antes de permitir que a execução do
programa continue.
127
PicBasic Pro Compiler
DEFINE OSC 8
128
PicBasic Pro Compiler
A Proteção por Código é desligada por padrão mas pode ser ligada quando o dis-
positivo é fisicamente programado. Não proteja por código um dispositivo c/ janela.
129
PicBasic Pro Compiler
Cadeias precisam caber num único banco. Elas não podem cruzar os limites de um
banco. Isto efetivamente limita o comprimento de uma cadeia individual. Veja
a seção anterior sobre cadeias p/ estes limites.
Você pode até fixar endereços específicos p/ variáveis. Na maioria dos casos, é
melhor deixar o PBP manipular o mapeamento de memória p/ você. Mas em alguns
casos, tais como armazenamento do registrador W num manipulador de interrup-
ções, é necessário definir um endereço fixo. Isto pode ser feito numa maneira
similar à seleção de bancos:
Palavras reservadas são simplesmente isto - palavras que são reservadas p/ uso pelo
compilador e não podem ser definidas nem como nomes de variável ou rótulos.
Estas palavras reservadas podem ser os nomes de comandos, pseudo-ops,
tipos de variáveis ou os nomes dos registradores do PICmicro.
131
PicBasic Pro Compiler
132
PicBasic Pro Compiler
Dois montadores diferentes podem ser usados c/ o PBP: PM, nosso PICmicro
Macro Assembler, e MPASM, o montador da Microchip. O PM é incluído
c/ o compilador enquanto o MPASM deve ser obtido diretamente da
Microchip através do seu web site ou é incluído c/ seus programadores
PICmicro.
133
PicBasic Pro Compiler
PBP defaults to using PM. To use MPASM with PBP, simply copy all of
the MPASM files into their own subdirectory, perhaps named MPASM.
This subdirectory must also be in the DOS PATH.
MPASM may be used with PBP in two ways. If the command line option
"-ampasm" is used, MPASM will be launched following compilation to
complete the process. MPASM will display its own screen with its
progress.
In any case, MPASM is not included with PBP and must be obtained
from Microchip.
@ bsf PORTA,0
Asm
bsf STATUS,RP0
bcf TRISA,0
bcf STATUS,RP0
Endasm
The lines of assembly are copied verbatim into the assembly output file.
This allows the PBP program to use all of the facilities of PM, the
PICmicro Macro Assembler. This also, however, requires that the
programmer have some familiarity with the PBP libraries. PBP’s
134
PicBasic Pro Compiler
135
PicBasic Pro Compiler
The first executable line that appears in the PicBasic Pro source is
where the program starts execution. That statement literally appears in
memory right behind the controller’s startup and library code, right after
the MAIN label.
If the program is longer than 2K, it could make more sense to put the
assembly language routines at the beginning of the PBP program. This
should ensure them of being in the first code page so that you know
where to find them. This is the way assembly language interrupt
routines should be handled.
If the routines are placed at the front, you must include a GOTO (or JMP)
around the code to the first executable PBP statement. See the section
on interrupts for an example of this.
The actual code for the assembly language routines may be included in
your program or in a separate file. If a routine is used by only one
particular PicBasic Pro program, it would make sense to include the
assembler code within the PBP source file. This routine can then be
accessed using the CALL command.
Asm
136
PicBasic Pro Compiler
Include “myasm.inc”
Endasm
PICmicro registers are banked. PBP keeps track of which register bank
it is pointing to at all times. It knows if it is pointing to a TRIS register,
for example, it needs to change the bank select bits before it can access
a PORT.
It also knows to reset the bank select bits to 0 before making a Call or a
Jump. It does this because it can’t know the state of the bank select bits
at the new location. So anytime there is a change of locale or a label
that can be called or jumped to, the bank select bits are zeroed.
It also resets the bank select bits before each ASM and the @ assembler
shortcut. Once again, the assembler routine won’t know the current
state of the bits so they are set to a known state. The assembler code
must be sure to reset the bank select bits before it exits, if it has altered
them.
137
PicBasic Pro Compiler
138
PicBasic Pro Compiler
9. Interrupts
Interrupts can be a scary and useful way to make your program really
difficult to debug.
Interrupts are not for the faint of heart. They can be very tricky to
implement properly, but at the same time they can provide very useful
functions. For example, an interrupt could be used to buffer serial input
data behind the scenes while the main PicBasic Pro program is off
doing something else. (This particular usage would require a
microcontroller with a hardware serial port.)
There are many ways to avoid using interrupts. Quickly polling a pin or
register bit instead is usually fast enough to get the job done. Or you
can check the value of an interrupt flag without actually enabling
interrupts.
However, if you just gotta do it, here are some hints on how to go about
it.
When an interrupt occurs, the PICmicro stores the address of the next
instruction it was supposed to execute on the stack and jumps to
location 4. The first thing this means is that you need an extra location
on the hardware stack, which is only 8 deep to begin with.
139
PicBasic Pro Compiler
Once you have dealt with the stack issues, you need to enable the
appropriate interrupts. This usually means setting the INTCON register.
Set the necessary enable bits along with Global Interrupt Enable. For
example:
INTCON = %10010000
Finally, select the best technique with which to handle your particular
interrupts.
As an example, lets say that the PicBasic Pro program just started
execution of a Pause 10000 when an interrupt occurs. PBP will flag
the interrupt and continue with the PAUSE. It could be up to 10 seconds
140
PicBasic Pro Compiler
To minimize the problem, use only statements that don’t take very long
to execute. For example, instead of Pause 10000, use Pause 1 in a
long FOR..NEXT loop. This will allow PBP to complete each statement
more quickly and handle any pending interrupts.
DISABLE stops PBP from inserting the Call to the interrupt checker after
each statement. This allows sections of code to execute without the
possibility of being interrupted. ENABLE allows the insertion to continue.
141
PicBasic Pro Compiler
INTCON = $80
This disables all the individual interrupts but leaves the Global Interrupt
Enable bit set.
One final note about interrupts in BASIC: If the program uses the form:
Since you have no idea of what the processor was doing when it was
interrupted, you have no idea of the state of the W register, the STATUS
flags, PCLATH or even what register page you are pointing to. If you
need to alter any of these, and you probably will, you must save the
current values so that you can restore them before allowing the
processor to go back to what it was doing before it was so rudely
interrupted. This is called saving and restoring the processor context.
If the processor context, upon return from the interrupt, is not left exactly
the way you found it, all kinds of subtle bugs and even major system
crashes can and will occur.
This of course means that you cannot even safely use the compiler’s
internal variables for storing the processor context. You cannot tell
which variables are in use by the library routines at any given time.
You should create variables in the PicBasic Pro program for the express
purpose of saving W, the STATUS register and any other register that
may need to be altered by the interrupt handler. These variables should
not be otherwise used in the BASIC program.
The interrupt routine should be as short and fast as you can possibly
make it. If it takes too long to execute, the Watchdog Timer could
timeout and really make a mess of things.
The routine should end with an Retfie instruction to return from the
interrupt and allow the processor to pick up where it left off in your
PicBasic Pro program.
143
PicBasic Pro Compiler
You must restore these registers at the end of your assembler interrupt
handler. If the PICmicro has 2K or less of code space, the registers are
not saved. Your interrupt handler must save and restore any used
registers.
Finally, you need to tell PBP that you are using an assembly language
interrupt handler and where to find it. This is accomplished with a
DEFINE:
Label is the beginning of your interrupt routine. PBP will place a jump
to this Label at location 4 in the PICmicro.
144
PicBasic Pro Compiler
145
PicBasic Pro Compiler
146
PicBasic Pro Compiler
Unlike the BASIC Stamp, PBP programs operate directly on the PORT
and TRIS registers. While this has speed and RAM/ROM size
advantages, there is one potential drawback.
Some of the I/O commands (e.g. TOGGLE and PULSOUT) perform read-
modify-write operations directly on the PORT register. If two such
operations are performed too close together and the output is driving an
inductive or capacitive load, it is possible the operation will fail.
Suppose, for example, that a speaker is driven though a 10uF cap (just
as with the SOUND command). Also suppose the pin is initially low and
the programmer is attempting to generate a pulse using TOGGLE
147
PicBasic Pro Compiler
statements. The first command reads the pin's low level and outputs its
complement. The output driver (which is now high) begins to charge the
cap. If the second operation is performed too quickly, it still reads the
pin's level as low, even though the output driver is high. As such, the
second operation will also drive the pin high.
148
PicBasic Pro Compiler
The PicBasic Pro Compiler does not automatically create any variables
like B0 or W0. They must be defined using VAR. Two files are
provided: BS1DEFS.BAS and BS2DEFS.BAS that will define the
standard BS1 or BS2 variables. However, it is recommended that you
assign your own variables with meaningful names rather than using
either of these files.
The BS2's nibble variable type is not implemented in the PicBasic Pro
Compiler. As PBP allows many more variables than a BS2, simply
change nibble variable types to bytes.
Highest Precedence
()
NOT
149
PicBasic Pro Compiler
Highest Precedence
**
*/
//
<<
>>
MIN
MAX
DIG
REV
&
&/
/|
^/
&& AND
^^ XOR
|| OR
Lowest Precedence
150
PicBasic Pro Compiler
10.8. [ ] Versus ( )
Serout 0,T2400,(B0)
Serout 0,T2400,[B0]
The BASIC Stamp allows EEPROM not used for program storage to
store non-volatile data. Since PBP programs execute directly from the
PICmicro's ROM space, EEPROM storage must be implemented in
some other manner.
The PIC16F84 (the default target for PBP programs), PIC16F83 and
PIC16C84 have 64 bytes of on-chip EEPROM. PBP programs may use
this for EEPROM operations and supports the Stamp's DATA, EEPROM,
READ and WRITE commands.
10.10. DEBUG
151
PicBasic Pro Compiler
The other difference is that the control byte format has changed. You
no longer set the address size as part of the control byte. Instead, the
address size is determined by the type of the address variable. If a
byte-sized variable is used, an 8-bit address is sent. If a word-sized
variable is used, a 16-bit address is sent.
10.13. IF..THEN
The BASIC Stamps and the original PicBasic compiler only allow a label
to be specified after an IF..THEN. PicBasic Pro additionally allows an
IF..THEN..ELSE..ENDIF construct as well as allowing actual code to
be executed as a result of an IF or ELSE.
The MAX and MIN operator’s function have been altered somewhat from
the way they work on the Stamp and the original PicBasic Compiler.
152
PicBasic Pro Compiler
MAX will return the maximum of two values. MIN will return the minimum
of two values. This corresponds more closely to most other BASICs and
does not have the 0 and 65535 limit problems of the Stamp’s MIN and
MAX instructions.
In most cases, you need only change MIN to MAX and MAX to MIN in
your Stamp programs for them to work properly with PBP.
SERIN and SEROUT use BS1 syntax. SERIN2 and SEROUT2 use BS2
syntax. A BS2 style timeout has been added to the SERIN command.
SERIN and SEROUT have been altered to run up to 9600 baud from the
BS1 limit of 2400 baud. This has been accomplished by replacing the
little used rate of 600 baud with 9600 baud. Modes of T9600, N9600,
OT9600 and ON9600 may now be used.
10.16. SLEEP
153
PicBasic Pro Compiler
154
PicBasic Pro Compiler
Appendix A
ADDLW k
ADDWF f,d
ANDLW k
ANDWF f,d
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b
CALL k
CLRF f
CLRW
CLRWDT
COMF f,d
DECF f,d
DECFSZ f,d
GOTO k
INCF f,d
INCFSZ f,d
IORLW k
IORWF f,d
MOVF f,d
MOVLW k
MOVWF f
NOP
RETFIE
RETLW k
RETURN
RLF f,d
RRF f,d
SLEEP
SUBLW k
SUBWF f,d
SWAPF f,d
XORLW k
XORWF f,d
b - bit address
d - destination; 0 = w, 1 = f
f - register file address
k - literal constant
155
PicBasic Pro Compiler
156
PicBasic Pro Compiler
Appendix B
Contact Information
157
READ THE FOLLOWING TERMS AND CONDITIONS CAREFULLY
BEFORE OPENING THIS PACKAGE.
microEngineering Labs, Inc. ("the Company") is willing to license the
enclosed software to the purchaser of the software ("Licensee") only on
the condition that Licensee accepts all of the terms and conditions set
forth below. By opening this sealed package, Licensee is agreeing to
be bound by these terms and conditions.
Disclaimer of Liability
Software License