Manual Picbasic em Portugues

168
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 0 0 1 1 PicBasic Pro Compiler microEngineering Labs, Inc.

description

Manual Picbasic em Portugues

Transcript of Manual Picbasic em Portugues

Page 1: Manual Picbasic em Portugues

For i = 1 To 10Gosub nextcharSerout 0,N2400,[#Ccount = count * 2Next iDtmfout 1,[1,2,3,4]I2cread cont,addr,[idata]If PORTA.1 = 0 Then pbpressed * slip + count + 1 loop

0

100

11

PicBasic Pro Compiler

microEngineering Labs, Inc.

Page 2: Manual Picbasic em Portugues

Copyrights e Marcas Registradas

Copyright ©1999 microEngineering Labs, Inc.Todos os direitos reservados.

EPIC e PicBasic Pro são marcas registradas da microEngineering Labs, Inc.BASIC Stamp é marca registrada da Parallax, Inc.PICmicro é marca registrada da Microchip Technology Inc.

2/99

Page 3: Manual Picbasic em Portugues

PicBasic Pro Compiler

microEngineering Labs, Inc.

Page 4: Manual Picbasic em Portugues
Page 5: Manual Picbasic em Portugues

PicBasic Pro Compiler

i

CONTEÚDO

1. Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1. Os PICmicros . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Sobre Este Manual . . . . . . . . . . . . . . . . . . . . . . . . 3

2. I n i c i a n d o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1. Instalação do Software. . . . . . . . . . . . . . . . . . . . . . . 52.2. Seu Primeiro Programa. . . . . . . . . . . . . . . . . . . . . . . . 52.3. Programe Este PicMicro . . . . . . . . . . . . . . . . . . . . 72.4. Ele Vive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.5. Eu Tive Problemas . . . . . . . . . . . . . . . . . . . . . . . . 102.6. Estilos de Código. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.6.1. Comentários . . . . . . . . . . . . . . . . . . . . . . 112.6.2. Nomes de Pinos e Variáveis . . . . . . . . . . . 122.6.3. Rótulos . . . . . . . . . . . . . . . . . . . . . . . . . 122.6.4. GOTO . . . . . . . . . . . . . . . . . . . . . . . . . 13

3. Opções de Linha de Comando. . . . . . . . . . . . . . . . . . . . . . . . . . . 153.1. Utilização. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2. Opções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.2.1. Opção -A . . . . . . . . . . . . . . . . . . . . . . . 163.2.2. Opção -C . . . . . . . . . . . . . . . . . . . . . . . 163.2.3. Opção -H ou -? . . . . . . . . . . . . . . . . . . 173.2.4. Opção -I . . . . . . . . . . . . . . . . . . . . . . . 173.2.5. Opção -L . . . . . . . . . . . . . . . . . . . . . . . 173.2.6. Opção -O . . . . . . . . . . . . . . . . . . . . . . 173.2.7. Opção -P . . . . . . . . . . . . . . . . . . . . . . . 183.2.8. Opção -S . . . . . . . . . . . . . . . . . . . . . . . 183.2.9. Opção -V . . . . . . . . . . . . . . . . . . . . . . . 18

4. O Básico do PicBasic Pro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.1. Identificadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.2. Rótulos de Linha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.3. Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.4. Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.5. Conjuntos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.6. Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.7. Símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.8. Constantes Numéricas . . . . . . . . . . . . . . . . . . . . . . . 234.9. Constantes Alfanum. . . . . . . . . . . . . . . . . . . . . . . . . . 234.10. Pinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.11. Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Page 6: Manual Picbasic em Portugues

PicBasic Pro Compiler

ii

4.12. Linhas c/ Decl. Múltiplas . . . . . . . . . . . . . . . . . . . . 264.13. Caractere de Extensão de Linha. . . . . . . . . . . . . . . . . 264.14. INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.15. DEFINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.16. Op. Matemáticos. . . . . . . . . . . . . . . . . . . . . . . . . 28

4.16.1. Multiplicação . . . . . . . . . . . . . . . . . . . 304.16.2. Divisão . . . . . . . . . . . . . . . . . . . . . . . 304.16.3. Desl. . . . . . . . . . . . . . . . . . . . . . . . . . . 304.16.4. ABS . . . . . . . . . . . . . . . . . . . . . . . . . . 314.16.5. COS . . . . . . . . . . . . . . . . . . . . . . . . . 314.16.6. DCD . . . . . . . . . . . . . . . . . . . . . . . . . 314.16.7. DIG . . . . . . . . . . . . . . . . . . . . . . . . . . 314.16.8. MAX e MIN . . . . . . . . . . . . . . . . . . 314.16.9. NCD . . . . . . . . . . . . . . . . . . . . . . . . . 324.16.10. REV . . . . . . . . . . . . . . . . . . . . . . . . . 324.16.11. SIN . . . . . . . . . . . . . . . . . . . . . . . . . 324.16.12. SQR . . . . . . . . . . . . . . . . . . . . . . . . 324.16.13. Operadores a Bit . . . . . . . . . . . . . . 32

4.17. Operadores de Comparação. . . . . . . . . . . . . . . . . . . 334.18. Operadores Lógicos. . . . . . . . . . . . . . . . . . . . . . . 33

5. Referência de Declarações do PicBasic Pro. . . . . . . . . . . . . . . . . . 355.1. @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.2. ASM..ENDASM . . . . . . . . . . . . . . . . . . . . . . . . . . 385.3. BRANCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.4. BRANCHL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.5. BUTTON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.6. CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435.7. CLEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.8. COUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455.9. DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.10. DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.11. DISABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.12. DTMFOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.13. EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.14. ENABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.15. END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.16. FOR..NEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545.17. FREQOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.18. GOSUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.19. GOTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.20. HIGH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.21. HSERIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

Page 7: Manual Picbasic em Portugues

PicBasic Pro Compiler

iii

5.22. HSEROUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.23. I2CREAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.24. I2CWRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665.25. IF..THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685.26. INPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705.27. {LET} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715.28. LCDOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725.29. LOOKDOWN . . . . . . . . . . . . . . . . . . . . . . . . . . 755.30. LOOKDOWN2 . . . . . . . . . . . . . . . . . . . . . . . . . 765.31. LOOKUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775.32. LOOKUP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785.33. LOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795.34. NAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805.35. ON INTERRUPT . . . . . . . . . . . . . . . . . . . . . . . . 815.36. OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835.37. PAUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.38. PAUSEUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855.39. PEEK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.40. POKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875.41. POT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885.42. PULSIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895.43. PULSOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.44. PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.45. RANDOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925.46. RCTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935.47. READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945.48. RESUME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955.49. RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965.50. REVERSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975.51. SERIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985.52. SERIN2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005.53. SEROUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045.54. SEROUT2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075.55. SHIFTIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.56. SHIFTOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125.57. SLEEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135.58. SOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145.59. STOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.60. SWAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165.61. TOGGLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175.62. WHILE..WEND . . . . . . . . . . . . . . . . . . . . . . . . 1185.63. WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195.64. XIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Page 8: Manual Picbasic em Portugues

PicBasic Pro Compiler

iv

5.65. XOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

6. Estrutura de Um Programa Compilado . . . . . . . . . . . . . . . . . . . 1256.1. Cabeçalhos de Alvo Específico . . . . . . . . 1256.2. Os Arq. de Bibliotecas. . . . . . . . . . . . . . . . . . . . . . . . 1256.3. Código Gerado pelo PBP . . . . . . . . . . . . . . . . . . . . 1266.4. Estrutura do Arq. .ASM. . . . . . . . . . . . . . . . . . . . . . 126

7. Outras Considerações do PicBasic Pro . . . . . . . . . . . . . . . . . 1277.1. Quão Rápido é Bastante Rápido?. . . . . . . . . . . . . . . . 1277.2. Ajustes de Configuração . . . . . . . . . . . . . . . . . . . 1297.3. Utiliz. da RAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297.4. Pal. Reservadas . . . . . . . . . . . . . . . . . . . . . . . . 1317.5. Vida Após 2K . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

8. Programação em Linguagem Assembly . . . . . . . . . . . . . . . . . 1338.1. Dois Assemblers - S/ Espera . . . . . . . . . . . . . 1338.2. Programando em Linguagem Assembly . . . . . . . 1348.3. Inserção do Assembly Em-Linha . . . . . . . . . . . . . 1358.4. Outro Detalhe do Assembly . . . . . . . . . . . . . . . . . . 137

9. Interrupções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399.1. Interrupções em Geral . . . . . . . . . . . . . . . . . . . . . 1399.2. Interrupções em BASIC. . . . . . . . . . . . . . . . . . . . . . 1409.3. Interrupções em Assembler. . . . . . . . . . . . . . . . . . . 142

10. Diferenças do PicBasic Pro / PicBasic / Stamp . . . . . . . . . 14710.1. Veloc. de Execução . . . . . . . . . . . . . . . . . . . . . . . 14710.2. I/O Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14710.3. Instruções p/ Baixo Consumo. . . . . . . . . . . . . . . . . . 14810.4. Interface PC Faltante . . . . . . . . . . . . . . . . . . . . 14810.5. S/ Variáveis Automáticas . . . . . . . . . . . . . . . . . 14910.6. S/ Variáveis do Tipo Nibble . . . . . . . . . . . . . . . . 14910.7. Op. Matemáticos. . . . . . . . . . . . . . . . . . . . . . . . 14910.8. [ ] Versus ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 15110.9. DATA, EEPROM, READ e WRITE . . . . . . . 15110.10. DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15110.11. GOSUB e RETURN . . . . . . . . . . . . . . . . . 15210.12. I2CREAD e I2CWRITE . . . . . . . . . . . . . . . 15210.13. IF..THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15210.14. MAX e MIN . . . . . . . . . . . . . . . . . . . . . . . . 15210.15. SERIN e SEROUT . . . . . . . . . . . . . . . . . . 15310.16. SLEEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Page 9: Manual Picbasic em Portugues

PicBasic Pro Compiler

v

Apêndice ASumário do Conj. de Instruções do Microchip Assembly. . . 155

Apêndice BInformação Para Contato. . . . . . . . . . . . . . . . . . . . . . . . . 157

Page 10: Manual Picbasic em Portugues

PicBasic Pro Compiler

vi

Page 11: Manual Picbasic em Portugues

PicBasic Pro Compiler

1

1. Introdução

O PicBasic Pro Compiler (ou PBP) é nossa linguagem de programaçãode próxima geração que torna mais rápido e fácil para você programaros poderosos microcontroladores PICmicro da Microchip Technology.A linguagem BASIC semelhante ao inglês é mais fácil de ler e escrever que aa 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 seusequivalentes Stamp.

O PBP não é tão compatível c/ os BASIC Stamps como nosso PicBasicCompiler original é c/ o BS1. Foram tomadas decisões que esperamosmelhorem a linguagem em geral. Uma delas foi adicionar umIF..THEN..ELSE..ENDIF real em vez de IF..THEN(GOTO) dosStamps. Estas diferenças serão detalhadas mais adiante neste manual.

O PBP cria por padrão arquivos que rodam em um PIC16F84-04/P de clock4Mhz. Apenas um mínimo de outras peças é necessário: 2 capacitores de 22pfp/ o cristal de 4Mhz, um resistor pull-up de 4.7K ligado ao pino /MCLR e umafonte apropriada de 5 volts. Vários PICmicros que não o 16F84, bemcomo osciladores de freqüências diferentes de 4Mhz, podem ser usados c/ oPicBasic Pro Compiler.

1.1. Os PICmicros

O PicBasic Pro Compiler produz código que pode ser programado emuma variedade de microcontroladores PICmicro tendo de 8 a 68 pinose várias características em-chip incluindo conversores A/D, timers de hardwaree portas seriais.

Há alguns PICmicros que não irão funcionar c/ o PicBasic ProCompiler, notavelmente a série PIC16C5x, incluindo o PIC16C54 e oPIC16C58. Estes PICmicros baseiam-se no antigo núcleo de 12 bits ao invésdo núcleo mais atual de 14 bits. O PicBasic Pro Compiler requer algumasdas características apenas disponíveis com o núcleo de 14 bits, sendo a maisdestacada a pilha de 8 níveis.

Há vários, vários PICmicros, alguns compatíveis em pinagem c/ a série'5x, que podem ser usados com o PicBasic Pro Compiler. Atualmente, a

Page 12: Manual Picbasic em Portugues

PicBasic Pro Compiler

2

lista inclui o PIC16C554, 556, 558, 61, 62(AB), 620(A), 621(A),622(A), 63(A), 64(A), 65(AB), 66, 67, 71, 710, 711, 715, 72(A), 73(AB),74(AB), 76, 77, 773, 774, 84, 923, 924, o PIC16F83, 84, 873, 874,876, 877, o PIC12C671 e 672 e o PIC14C000, c/ a Microchipadicionando mais a uma taxa rápida. Para substituição direta de um PIC16C54 ou58, o PIC16C554, 558, 620 e 622 trabalham bem c/ o compilador etêm preços muito próximos.*

Para projetos de uso geral em PICmicro utilizando o PicBasic ProCompiler, o PIC16F84 (ou PIC16C84 se o 'F84 não estiver disponível) é o PICmicro atual p/ se escolher. Este microcontrolador de 18 pinos usa tecnologiaflash (ou EEPROM) p/ permitir rápido apagamento e reprogramação p/uma rápida depuração. Com o clique do mouse no software deprogramação, o PIC16F84 pode ser instantaneamente apagado e então re-programado por várias e várias vezes. Outros PICmicros nas séries 12C67x,16C55x, 16C6xx, 16C7xx e 16C9xx tanto podem ser programáveis umaúnica vez (OTP) ou ter uma janela de quartzo no topo (JW) p/ permitirapagamento por exposição à luz ultravioleta por vários minutos.

O PIC16F84 (e 'C84) contém também 64 bytes de memória de dadosque pode ser usada p/ armazenar dados de programa e outros parâmetrosmesmo quando a força estiver desligada. Esta área de dados pode ser acessadasimplesmente usando-se os comandos READ e WRITE do PicBasicPro Compiler. (O código estará sempre permanentemente guardado noespaço de código do PICmicro estando a força ligada ou não.

Usando-se o 'F84 p/ teste inicial de um programa, o processo de depuração poderáser acelerado. Uma vez que as rotinas principais estejam operandosatisfatoriamente, um PICmicro c/ mais capacidades ou características expandidasdo compilador poderá ser usado.

Enquanto muitas características do PICmicro serão discutidas neste manual, p/total informação sobre o PICmicro é necessário obter-se as folhas de dados doPICmicro apropriadas ou o CD-ROM da Microchip Technology. Refira-seao Apêndice B p/ informação de contato.

*O preço de venda é ditado pela Microchip Technology Inc. e seusdistribuidores.

Page 13: Manual Picbasic em Portugues

PicBasic Pro Compiler

3

1.2. Sobre Este Manual

Este manual não pode ser um tratado completo na linguagem BASIC. Eledescreve o conj. de instruções do PicBasic Pro e provê exemplos emcomo 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 exemploadicionais no disco que podem ajudá-lo a começar.

A próxima seção deste manual cobre a instalação do PicBasic ProCompiler e você escreverá seu primeiro programa. A seguir há uma seção quedescreve diferentes opções p/ compilar programas.

A seguir, será coberto o básico de programação, seguido por uma seção de referêncialistando cada comando do PicBasic Pro em detalhe. A seção de referênciamostra cada protótipo do comando, uma descrição do comando ealguns exemplos. As chaves, { }, indicam parâmetros opcionais.

O resto do manual provê informação p/ programadoresavançados - todo o funcionamento interno do compilador.

Page 14: Manual Picbasic em Portugues

PicBasic Pro Compiler

4

Page 15: Manual Picbasic em Portugues

PicBasic Pro Compiler

5

2. I n i c i a n d o

2.1. Instalação do Software

Os arquivos do PicBasic Pro estão compactados em um arquivo auto-extraível nodisquete. Eles precisam ser descompactados antes do uso. Para descompactar osarquivos, crie um sub-diretório no seu disco rígido chamado PBP ou outronome de sua escolha, digitando:

md PBP

no prompt do DOS. Mude p/ o diretório:

cd PBP

Assumindo que o disquete de distribuição está no drive a:, descompacte osarquivos no diretório PBP:

a:\pbpxxx -d

Não esqueça da opção -d ao final do comando. Isto assegura que ossub-diretórios apropriados dentro de PBP sejam criados.

Certifique-se de que FILES e BUFFERS estejam ajustados p/ ao menos 50 noseu arquivo CONFIG.SYS. Dependendo de quantos FILES e BUFFERS jáestiverem em uso pelo seu sistema, poderá ser necessário alocar um núme-ro maior.

2.2. Seu Primeiro Programa

Para a operação do PicBasic Pro Compiler você precisará de um editor de texto ouprocessador de texto p/ a criação do arquivo fonte do seu programa, algum tipode programador de PICmicro como o nosso EPIC Plus Pocket PICmicroProgrammer, e o PicBasic Pro Compiler propriamente dito. Claro que vocêtambém precisará de um PC p/ rodar tudo isso.

A seqüência de eventos é mais ou menos a seguinte:

Primeiro crie o arq. fonte em BASIC p/ o programa usando o seu editor de textoou 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

Page 16: Manual Picbasic em Portugues

PicBasic Pro Compiler

6

e Windows 95/98) podem substituir. O nome do arq. fonte deve termi-nar c/ (mas não é requerido) a extensão .BAS.

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 comoDOS puro ou texto ASCII pela maioria dos processadores.

O seguinte programa provê um bom teste inicial de um PICmicro no mundoreal. Você pode digitá-lo ou simplesmente pegá-lo do sub-diretórioSAMPLES incluso no disquete de distribuição do PicBasicPro Compiler. O nome do arq. é BLINK.BAS. O arq. fonte BASICdeve ser criado ou movido p/ o mesmo diretório onde o arquivoPBP.EXE estiver.

' Programa exemplo p/ piscar um LED ligado ao PORTB.0 aprox.uma vez por segundo

loop: High PORTB.0 ‘ Liga o LEDPause 500 ‘ Atraso de .5 segundos

Low PORTB.0 ‘ Desliga o LEDPause 500 ‘ Atraso de .5 segundos

Goto loop ‘ Voltar ao loop e piscaro LED indefinidamente

End

Uma vez satisfeito que o programa que você escreveu funcionará s/falhas, você pode executar o PicBasic Pro Compiler entrando PBPseguido pelo nome do seu arquivo texto no prompt do DOS. Por exemplo, seo arquivo texto que você criou chama-se BLINK.BAS, no prompt de comandodo DOS entre:

PBP blink

O compilador irá mostrar uma mensagem de inicialização (copyright) eprocessar seu arq. Se ele gostar do seu arq., ele irá criar um arq. de cód. fonteassembler (nesse caso chamado BLINK.ASM) e automaticamente invocar seumontador p/ completar a tarefa. Se tudo correr bem, o arq. final de códigodo PICmicro será criado (nesse caso, BLINK.HEX). Se você tiver deixado ocompilador infeliz, ele enviará uma série de erros que precisarão sercorrigidos no seu arq. fonte BASIC antes de você tentar compilar novamente.

Page 17: Manual Picbasic em Portugues

PicBasic Pro Compiler

7

P/ ajudar a ter certeza de que seu arq. original não tem erros, é melhor começarescrevendo e testando um pequeno pedaço de seu programa, ao invés de escreverum bloco inteiro de 100.000 linhas de uma só vez e então tentar depurá-lo de pontaa ponta.

Se você não especificar de outra maneira, o PicBasic Pro Compiler irácriar código p/ o PIC16F84 por padrão. Para compilar códigos p/ PICmicros quenão o 'F84, simplesmente use a opção de linha de comando -p descrita maistarde no manual p/ especificar um processador alvo diferente. Por exemplo, se vocêpretende rodar o programa acima, BLINK.BAS, em um PIC16C74, compile-o usando o comando:

PBP -p16c74 blink

2.3. Programe Este PicMicro

Há ainda duas etapas a fazer - colocar seu programa compilado nomicrocontrolador PICmicro e testá-lo.

O PicBasic Pro Compiler gera arquivos padrão de 8 bits Merged Intel HEX(.HEX) que podem ser usados c/ qualquer programador PICmicro incluindonosso EPIC Plus Pocket PICmicro Programmer. Os PICmicros não podem serprogramados c/ cabos de programação do BASIC Stamp.

O seguinte é um exemplo de como um PICmicro pode ser programado usandonosso EPIC Programmer c/ o software de programação DOS. Se oWindows95/98/NT estiver disponível, é recomendado usar a versão Win-dows do EPIC.

Certifique-se de que não haja PICmicros instalados no soquete de programaçãodo EPIC Programmer ou quaisquer adaptadores.

Conecte o EPIC Programmer à porta de impressora paralela do PC usando umcabo de extensão DB25 macho p/ DB25 fêmea.

Plugue o adaptador CA na parede e então no EPIC Programmer(ou encaixe 2 baterias novas de 9 volts no programador e conecte ojumper “Batt ON”).

O LED no EPIC Programmer poderá estar aceso ou não neste ponto. Nãoinsira um PICmicro no soquete de programação quando o LED estiver acesoou antes do software de programação ter sido iniciado.

Page 18: Manual Picbasic em Portugues

PicBasic Pro Compiler

8

Entre:

EPIC

no prompt de comando do DOS p/ iniciar o software de programação. Osoftware EPIC deve ser rodado de uma sessão DOS pura ou de uma seçãode tela cheia do DOS sob Windows ou OS/2. (Desencorajamosrodar sob Windows. O Windows (todas as variantes) altera o tempo do sis-tema e brinca c/ a porta quando você não está olhando, o que pode causarerros de programação).

O software EPIC irá dar uma olhada ao redor p/ encontrar onde o EPICProgrammer está ligado e prepará-lo p/ programar um PICmicro. Se o EPICProgrammer não for encontrado, cheque todas as conexões acima e veri-fique que não haja nenhum PICmicro ou adaptador conectado aoprogramador. Digitando:

EPIC /?

no prompt de comando do DOS irá mostrar uma lista de opções disponíveisp/ o software EPIC.

Uma vez que a tel de programação é mostrada, use o mouse p/ clicar emOpen file ou pressione Alt-O no seu teclado. Use o mouse (outeclado) p/ selecionar BLINK.HEX ou qualquer outro arq. que você quiserprogramar no PICmicro a partir da caixa de diálogo.

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á serprogramada no PICmicro. Verifique que isto esteja correto antes deprosseguir.

Em geral, o Oscillator deverá ser ajustado p/ XT p/ um cristal de 4Mhz e oWatchdog Timer deverá ser ajustado p/ ON p/ programas PicBasic Pro. Maisimportante, Code Protect deverá estar em OFF quando for programarqualquer PICmicro c/ janela (JW). Você não conseguirá apagar um PICmicroc/ janela qu tenha sido protegido contra cópia.

Quando tudo parecer maravilhoso, é hora de inserir um PICmicro no soquetede programação e clicar em Program ou pressionar Alt-P noteclado. O PICmicro será primeiramente checado p/ ter certeza que está apagadoe então seu código será programado nele. Se o PICmicro não estiver

Page 19: Manual Picbasic em Portugues

PicBasic Pro Compiler

9

LED

470

+5V +5V

22pf 22pf

4Mhz4.7K

.1ufPIC16F84

1

MCLR

Vss

OSC1

OSC2

Vdd

4

5 14

15

16

17

18

RA0

RA1RA2

RA3

RA4

RB0

RB1

RB2

RB3 RB4

RB5

RB6

RB7

2

3

6

7

8

9 10

11

12

13

apagado e for um 16F84 ou 16C84, você pode simplesmente escolher progra-mar por cima s/ apagar antes.

Uma vez que a programação esteja completa e o LED esteja apagado, é horade testar seu programa.

2.4. Ele Vive

O esquema de amostra abaixo lhe dá uma idéia do pouco que precisaser ligado ao PICmicro p/ fazê-lo funcionar. Basicamente tudo que vocêprecisa é um resistor de pull-up na linha /MCLR, um cristal de 4Mhz c/ 2capacitores, e algum tipo de fonte de alimentação de 5 volts. Nós acrescen-tamos um LED e um resistor p/ prover a saída p/ o programa BLINK.

Monte e cheque duplamente este simples circuito em um breadboard e encaixeo PICmicro que você acabou de programar. Nossa linha PICProto de placas deprototipagem é perfeita p/ este tipo de coisa.

Conecte uma fonte de alimentação. Seu PICmicro deverá ganhar vida e começara piscar o LED cerca de uma vez por segundo. Se ele não piscar, cheque todasas 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.

Page 20: Manual Picbasic em Portugues

PicBasic Pro Compiler

10

2.5. Eu Tive Problemas

Os problemas mais comuns em fazer rodar os PICmicros envolvem tercerteza de que os poucos componentes externos são de valor apropriado eestão corretamente ligados ao PICmicro. A seguir estão algumas sugestõesp/ ajudar a conseguir que as coisas funcionem.

Certifique-se de que o pino /MCLR esteja ligado aos 5 volts através de algum tipode 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 oPICmicro funcionará mas normalmente não. O PICmicro tem um circuito depower-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 PICmicrodata books da Microchip p/ mais informações.

Esteja certo de que você tem um bom cristal c/ capacitores de valores corretosligados 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 cristalde 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.

Certifique-se de que sua fonte de alim. é apta p/ a tarefa. Enquanto que oPICmicro consome muito pouca potência, a fonte deve ser bastante bem fil-trada. Se o PICmicro está controlando dispositivos que puxam muita corrente dasua fonte, à medida em que se ligam e desligam eles podem pôr ruído sufi-ciente nas linhas de alimentação p/ fazer o PICmicro parar de funcionarcorretamente. Até mesmo um mostrador a LED pode criar dreno instantâneo sufi-ciente p/ derrubar momentâneamente uma fonte pequena (como uma bateria de9 volts) e fazer o PICmicro perder a cabeça.

Cheque as folhas de dados do PICmicro. Alguns dispositivos têm características quepodem interferir c/ operações de pinos esperadas. As peças PIC16C62x (os16C620, 621 e 622) são um bom exemplo disto. Estes PICmicros têmcomparadores analógicos no PORTA. Quando estes chips iniciam-se,PORTA é ajustado p/ o modo analógico. Isto faz c/ que as funções dos pinos no PORTAtrabalhem numa maneira inesperada. Para mudar os pinos p/ digital, simplesmenteadicione a linha:

CMCON = 7

Page 21: Manual Picbasic em Portugues

PicBasic Pro Compiler

11

próximo do início do seu programa. Qualquer PICmicro c/ entradas analógicas,tal como os da série PIC16C7xx irá ligar-se em modo analógico. Vocêdeve fixá-las p/ digital se é assim que você pretende usá-las:

ADCON1 = 7

Um outro exemplo de desastre em potencial é que o pino 4 de PORTA, mostraum comportamento incomum quando usado como saída. Isto é porque o pino temuma saída em coletor aberto ao invés do habitual estágio bipolar do resto dospinos de saída. Isto significa que ele pode ser puxado ao terra quando fixado em 0, mas simplesmente flutuará quando fixado em 1, ao invés de ir p/ nível alto. P/ fazer estepino agir da maneira esperada, adicione um resistor pull-up entre o pino e os5 volts. O valor do resistor poderá estar entre 1K e 33K,dependendo da excitação necessária p/ a entrada conectada. Este pino agecomo qualquer outro pino quando usado como entrada.

Todos os pinos do PICmicro estão fixados como entradas ao ligar-se. Se você precisaque um pino seja uma saída, fixe-o como saída antes de usá-lo, ou use um comandodo PicBasic Pro que o faça p/ você. Mais uma vez, revise as folhas de dadosdo PICmicro p/ familiarizar-se c/ as idiossincrasias de uma peça especí-fica.

Comece pequeno. Escreva programas curtos p/ testar características c/ as quais vocêesteja incerto ou tendo problemas. Uma vez que estes programas menores estejamfuncionando corretamente, você poderá trabalhá-los mais.

Tente fazer as coisas de outra maneira. Às vezes o que você está tentando fazerparece que deveria funcionar mas não o faz, não importa o quanto você batanele. Normalmente há mais de uma maneira de se descascar um programa. Tenteabordar o problema de um ângulo diferente e talvez istoresulte num esclarecimento.

2.6. Estilos de Código

Escrever programas legíveis e preserváveis é uma arte. Há algumastécnicas simples que você pode seguir que podem ajudá-lo a tornar-se um artista.

2.6.1. Comentários

Use muitos comentários. Mesmo que seja perfeitamente óbvio p/ você o que ocódigo está fazendo à medida que você o escreve, outra pessoa que esteja olhandop/ o programa (ou mesmo você quando tornar-se outra pessoa mais tarde na vida) pode

Page 22: Manual Picbasic em Portugues

PicBasic Pro Compiler

12

não ter qualquer idéia do que você estava tentando conseguir. Enquanto que oscomentários tomam espaço no seu arq. fonte BASIC, eles não tomam nenhumespaço adicional no PICmicro portanto use-os livremente.

Faça os comentários dizerem-lhe algo útil sobre o que o programa estáfazendo. Um comentário do tipo "Fixa o Pin0 em 1" somente explica a sintaxe dalinguagem mas não faz nada p/ dizer-lhe por quê você tem a necessidade de fazeristo. Algo do tipo "Liga o LED de Bateria Fraca" pode ser muito maisút i l .

Um bloco de comentários no início do programa e antes de cada seçãode código pode descrever o que está para acontecer em mais detalhesdo que só o espaço restante após cada declaração. Mas não inclua um blocode comentários ao invés de comentáros de linha individuais - use ambos.

No começo do programa descreva o que o programa pretende fazer,quem o escreveu e quando. Pode também ser útil listar informaçãode revisão e datas. Especificar a que cada pino está ligado pode ser deajuda p/ se lembrar em qual hardware este programa foi projetadop/ rodar. Se for pretendido que ele rode c/ um cristal fora de padrão ouopções especiais do compilador, esteja certo de listá-las.

2.6.2. Nomes de Pinos e Variáveis

Faça do nome de um pino ou variável algo mais coerente do que Pino0ou B1. Em acréscimo ao uso liberal de comentários, nomes descritivos de pinose variáveis podem melhorar grandemente a legibilidade. O seguinte fragmentode código demonstra:

BatLED var PORTB.0 ‘ LED de bateria fracanivel var byte ‘ A variável irá conter o

nível da bateria

If nivel < 10 Then ‘ Se o nível estiver baixoHigh BatLED ‘ Acenda o LED

Endif

2.6.3. Rótulos

Rótulos também devem ser mais significativos do que "rotulo1:" ou "aqui:". Até mesmoum 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ê

Page 23: Manual Picbasic em Portugues

PicBasic Pro Compiler

13

pelo menos uma pista de sua função c/ o rótulo, então prossiga c/ umcomentário.

2.6.4. GOTO

Finalmente, tente não usar muitos GOTOS. Enquanto GOTOS podem ser ummal necessário, tente minimizar seu uso o máximo possível. Tente escreverseu código em seções lógicas e não ficar pulando muito por aí.GOSUBS podem ajudá-lo a conseguir isto.

Page 24: Manual Picbasic em Portugues

PicBasic Pro Compiler

14

Page 25: Manual Picbasic em Portugues

PicBasic Pro Compiler

15

3. Opções de Linha de Comando

3.1. Utilização

O PicBasic Pro Compiler pode ser invocado a partir da linha de comando do DOSusando o seguinte formato de comando:

PBP Opções Nome_de_Arquivo

Zero ou mais Opções podem ser usadas p/ modificar a maneira na qual o PBPcompila o arq. especificado. Opções começam c/ um sinal de menos ( - ) ou umabarra normal (/). O caractere seguinte ao sinal de menos ou barra é uma letraque seleciona a Opção. Caracteres adicionais poderão vir a seguir se aOpçã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 linhade comando:

PBP -p16c71 -ampasm blink

irá fazer c/ que o arq. BLINK.BAS seja compilado usando MPASM comomontador e direcionado p/ um processador PIC16C71.

O primeiro ítem a não iniciar-se c/ um sinal de menos é assumido como Nome_de_Arquivo.Se nenhuma extensão é especificada a extensão padrão .BAS é usada. Se for espe-cificado um caminho, o arq. denominado é procurado naquele diretório. Independente-mente de onde o arq. fonte é encontrado, os arq. gerados pelo PBP são colocadosno diretório atual.

Por padrão, o PBP lança automaticamente o montador (PM.EXE) se a compi-lação é executada s/ erro. O PBP espera encontrar PM.EXE nomesmo diretório que PBP.EXE. Se a compilação tem erros ou a opção -sé usada, o montador não é lançado.

Se o PBP é invocado s/ parâmetros ou nome de arquivo, uma breve tela de ajuda émostrada.

Page 26: Manual Picbasic em Portugues

PicBasic Pro Compiler

16

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 oMPASM da Microchip e seu montador. Para especificar o MPASM (que deveser adquirido da Microchip), use -ampasm na linha de comando:

PBP -ampasm nome_de_arquivo

Se nenhum montador é especificado na linha de comando, o PM é usado. Veja a seção sobre programação em linguagem assembly p/ mais informação.

3.2.2. Opção -C

A opção -C faz c/ que o PBP insira linhas do arq. fonte PicBasic Pro comocomentários no arq. fonte em linguagem assembly. Isto pode ser útil comoferramenta de depuração ou aprendizado já que ela mostra a instruçãodo PicBasic Pro seguida pelas instruções em linguagem assembly que ela gera.

PBP -c nome_de_arquivo

Page 27: Manual Picbasic em Portugues

PicBasic Pro Compiler

17

3.2.3. Optção -H ou -?

A opção -H ou -? faz c/ que o PBP mostre uma breve tela de ajuda. Estatela 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

A opção -I lhe permite selecionar o caminho de inclusão p/ arq. usados peloPicBasic Pro.

3.2.5. Opção -L

A opção -L lhe permite selecionar a biblioteca usada pelo PicBasic Pro. Estaopção é geralmente desnecessária já que o arq. de biblioteca padrão está fixado emum arq. de configuração p/ cada microcontrolador. Para mais informação sobreas bibliotecas do PicBasic Pro, veja as seções avançadas mais tarde neste manual.

PBP -lpbpps2 nome_de_arquivo

Este exemplo diz ao PBP p/ compilar nome_de_arquivo usando a bibl. PicStic2.

3.2.6. Opção -O

A opção -O faz c/ que as letras que se seguem sejam passadas aomontador em sua linha de comando como opções. Algumas opções pertinentes ao PMestão listadas na seguinte tabela:

Opção PM Descrição

OD Gera Listagem, Tabela Simbólica e Arq. de Mapa

OL Gera apenas Listagem

PBP -ol nome_de_arquivo

Este exemplo diz ao PBP p/ gerar um nome_de_arquivo.1st após umacompilação bem-sucedida.

Mais de uma opção -O pode ser passada ao montador de uma vez.

Page 28: Manual Picbasic em Portugues

PicBasic Pro Compiler

18

O PICmicro Macro Assembler's manual em disco contém maisinformação sobre o montador e suas opções.

3.2.7. Opção -P

Se não for dito de outra maneira, o PBP compila programas p/ o PIC16F84. Se oprograma requer um processador diferente p/ seu alvo, seu nome deve serespecificado na linha de comando usando a opção -P.

Por exemplo, se o processador alvo desejado p/ o programa PBP é umPIC16C74, a linha de comando deverá parecer algo como o seguinte:

PBP -p16c74 nome_de_arquivo

3.2.8. Opção -S

Normalmente, quando o PBP compila um programa c/ sucesso, ele lançaautomaticamente o montador. Isto é feito p/ converter a saída do montadordo PBP p/ uma imagem executável. A opção -S previne isso, deixando asaída do PBP no arquivo .ASM gerado.

Já que -S previne o montador de ser invocado, as opções que sãosimplesmente passadas ao montador usando a opção -O são efetivamenteanuladas.

PBP -s nome_de_arquivo

3.2.9. Opção -V

A opção -V liga o modo verboso do PBP o qual apresenta maisinformação durante a compilação do programa.

PBP -v nome_de_arquivo

Page 29: Manual Picbasic em Portugues

PicBasic Pro Compiler

19

4. O Básico do PicBasic Pro

4.1. Identificadores

Um identificador é, bem simplesmente, um nome. Identificadores são usados no PBP p/rótulos e nomes de variáveis. Um identificador é qualquer seqüência de letras,dígitos e sublinhas, embora ele não deva começar c/ um dígito. Identificadoresnão são sensíveis a caixa, assim rótulo, RÓTULO e Rótulo são todos tratados comoequivalentes. E enquanto rótulos podem ter qualquer número de caracteres decomprimento, o PBP reconhece apenas os primeiros 32.

4.2. Rótulos de Linha

De forma a marcar declarações que o programa pode desejar referenciarc/ os comandos GOTO ou GOSUB, o PBP usa rótulos de linha. Ao contrário de muitosBASICs antigos, o PBP não permite números de linha e não requer que cadalinha seja rotulada. Ao invés disso, qualquer linha do PBP pode começar c/ um rótulo de linha,que é simplesmente um identificador seguido por dois pontos (:).

aqui: Serout 0,N2400,["Olah, Mundo!",13,10]Goto aqui

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 oupalavras. O espaço p/ cada variável é alocado automaticamente naRAM do microcontrolador pelo PBP. O formato p/ se criar uma variável é oseguinte:

Rótulo VAR Tamanho{.Modificadores}

Rótulo é qualquer identificador, excluindo palavras-chave, como descrito acima. Tamanhoé BIT, BYTE ou WORD. Modificadores opcionais adicionam maior controle sobrecomo a variável é criada. Alguns exemplos de criação de variável são:

cao var bytegato var bitw0 var word

Não há variáveis de usuário predefinidas no PicBasic Pro. Para o bemda compatibilidade, foram providos dois arquivos que criam as variáveis

Page 30: Manual Picbasic em Portugues

PicBasic Pro Compiler

20

padrão usadas c/ os BASIC Stamps: “bs1defs.bas” e“bs2defs.bas”. Para usar um destes arquivos, adicione a linha:

Include “bs1defs.bas”ou

Include “bs2defs.bas”

próximo ao topo do programa do PicBasic Pro. Estes arq. contém numerosasdeclarações VAR que criam todas as variáveis do BASIC Stamp e definiçõesde pinagem.

Entretanto, ao invés de usar estes arquivos "enlatados", nós recomendamos quevocê crie suas próprias variáveis usando nomes que tenham significado p/ você.

O número de variáveis disponível depende da quantidade de RAM em umdispositivo em particular e o tamanho das variáveis e conjuntos. O PBP reservaaproximadamente 24 posições da RAM p/ seu próprio uso. Ele pode também criarvariáveis temporárias adicionais p/ uso na ordenação de equações complexas.

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.

fido var cao ‘ fido eh um outro nomep/ cao

b0 var w0.byte0 ‘ b0 eh o primeiro byteda palavra w0

b1 var w0.byte1 ‘ b1 eh o segundo byteda palavra w0

pulga var cao.0 ‘ pulga eh o bit0 de cao

Page 31: Manual Picbasic em Portugues

PicBasic Pro Compiler

21

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

Conjuntos de variáveis podem ser criados de maneira similar às variáveis.

Rotulo VAR Tamanho(Numero de elementos)

Rotulo é qualquer identificador, excluindo palavras-chave, como descrito acima. Tamanhoé BIT, BYTE ou WORD. Numero de elementos são quantas posições dedo conjunto se deseja. Alguns exemplos de criação de conjuntos são:

tubaroes var byte[10]peixe var bit[8]

Page 32: Manual Picbasic em Portugues

PicBasic Pro Compiler

22

A primeira posição do conjunto é o elemento 0. No conjunto peixe definido acima,os elementos são numerados peixe[0] a peixe[7] rendendo 8 elementosno total.

Por causa da maneira c/ que os conjuntos são alocados na memória, há limites de tama-nho p/ cada tipo:

Tam. Número Máximo de elementos

BIT 128

BYTE 64

WORD 32

Veja a seção sobre alocação de memória p/ mais informação.

4.6. Constantes

Constantes nomeadas podem ser criadas numa maneira similar às variáveis.Pode ser mais conveniente usar um nome de constante ao invés de um númerode constante. Se o número precisa ser trocado, ele pode ser trocado em apenasum lugar no programa; onde a constante é definida. Dados de variáveis nãopodem ser guardados em uma constante.

Rotulo CON Expressao constante

Alguns exemplos de constantes são:

ratos con 3ratoeiras con ratos * 1000

4.7. Símbolos

SYMBOL provê ainda um outro método p/ se dar aliases a variáveis econstantes. SYMBOL não pode ser usado p/ criar uma variável. Use VAR p/criar uma variável.

SYMBOL leao = gato ‘ gato foi criado anteriormenteusando VAR

SYMBOL rato = 1 ‘ O mesmo que rato con 1

Page 33: Manual Picbasic em Portugues

PicBasic Pro Compiler

23

4.8. Constantes Numéricas

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 opadrão e não requerem prefixo.

100 ‘ Valor decimal 100%100 ‘ Valor binario p/ o decimal 4$100 ‘ Valor hexadecimal p/ o decimal 256

Para facilidade de programação, caracteres únicos são convertidos p/ seus equi-valentes ASCII. Constantes de caractere devem ser quoteadas usando aspase devem conter apenas um caractere (de outra forma, elas são cons-tantes alfanuméricas).

"A" ‘ Valor ASCII p/ o decimal 65"d" ‘ Valor ASCII p/ o decimal 100

4.9. Constantes Alfanuméricas

O PBP não provê capacidades de manuseio de séries de caracteres, mas elas podemser 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êmembutido este manuseio).

"Olah" ‘ String (Abrev. p/ "O","l","a","h")

Séries são normalmente tratadas como uma lista de valores de caractere individuais.

4.10. Pinos

Pinos podem ser acessados em um número de maneiras diferentes. O melhor jeitop/ especificar um pino p/ uma operação é simplesmente usar seu nome PORTe número de bit:

PORTB.1 = 1 ‘ Fixa PORTB, bit 1 p/ 1

Para tornar mais fácil de se lembrar p/ que um pino é usado, a ele deve-seatribuir um nome usando o comando VAR. Desta maneira, o nome podeentão ser usado em qualquer operação:

Page 34: Manual Picbasic em Portugues

PicBasic Pro Compiler

24

led var PORTA.0 ‘ Renomeia PORTA.0 como ledHigh led ‘ Fixa led (PORTA.0) p/ alto

Para compatibilidade c/ o BASIC Stamp, os pinos usados nos comandos doPicBasic Pro Compiler podem também ser referenciados por número, 0 - 15. Estespinos são fisicamente mapeados sobre portas de hardware do PICmicro diferentesdependendo de quantos pinos tem o microcontrolador.

Nº de pinos do PICmicro 0 - 7 8 - 15

8 pinos GPIO* GPIO*

18 pinos PORTB PORTA*

28 pinos (exceto 14C000) PORTB PORTC

28 pinos (14C000) PORTC PORTD

40 pinos PORTB PORTC*GPIO e PORTA não têm 8 pinos de I/O.

Se uma porta não tem 8 pinos, tal como PORTA, só os números dos pinosque existem podem ser usados, por exemplo 8 - 12. O uso dos pinos de número 13 - 15não causará efeito visível.

Esta numeração dos pinos, 0 - 15, nada tem a ver c/ a numeração física dos pinosde um PICmicro. Dependendo do PICmicro em particular, o pino número 0poderia 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 umdos arquivos bsdefs.bas estão inclusos ou você mesmo os definiu), ou onome do bit completo (ex. PORTA.1). Qualquer pino ou bit do microcontrolador podeser acessado usando o último método.

Os nomes dos pinos (ex. Pino0) não são automaticamente inclusos no seuprograma. Na maioria dos casos, você iria definir os nomes dos pinos como achar melhorusando o comando VAR:

led var PORTB.3

Entretanto, foram fornecidos dois arq. de definição p/ melhorar a compatibili-dade c/ o BASIC Stamp. O arq. “bs1defs.bas” ou “bs2defs.bas” pode serincluso no programa do PicBasic Pro p/ prover nomes de pinos e bit quecombinem c/ os nomes BASIC Stamp.

Page 35: Manual Picbasic em Portugues

PicBasic Pro Compiler

25

Include “bs1defs.bas”ou

Include “bs2defs.bas”

O BS1DEFS.BAS define Pins, B0-B13, W0-W6 e a maioria dos outros nomes depinos e variáveis do BS1.

BS2DEFS.BAS define Ins, Outs, B0-B25, W0-W12 e a maioria dos outrosnomes de pinos e variáveis do BS2.

Quando um PICmicro é ligado, todos os pinos são fixados como entradas. P/ usarum pino como saída, o pino ou porta deve ser fixado como uma saída ou deve ser usadoum 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. Fixandoum bit TRIS em 0 torna seu pino uma saída. Fixando um bit TRIS em 1 torna seupino uma entrada. Por exemplo:

TRISA = %00000000 ‘ Ou TRISA = 0

fixa todos os pinos em PORTA como saídas.

TRISB = %11111111 ‘ Ou TRISB = 255

fixa todos os pinos em PORTB como entradas.

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 pinosem PORTA permanecem inalteradas.

Os nomes de variáveis do BASIC Stamp Dirs, Dirh, Dirl e Dir0-Dir15não estão definidas e não devem ser usadas c/ o PicBasic Pro Compiler.O TRIS deverá ser usado no lugar, mas tem o estado oposto a Dirs.

Isto não dá certo c/ o PicBasic Pro:

Dir0 = 1 ‘ Não fixa o pino PORTB.0 como saída

Page 36: Manual Picbasic em Portugues

PicBasic Pro Compiler

26

Em lugar daquilo, faça isto:

TRISB.0 = 0 ‘ Fixa o pino PORTB.0 como saída

ou simplesmente use um comando que fixa automaticamente a direção do pino.

4.11. Comentários

Um comentário do PBP começa c/ a palavra-chave REM ou o apóstrofe(‘). Todos os caracteres seguintes nesta linha são ignorados.

Ao contrário de vários BASICs, REM é uma palavra-chave única e não uma abreviaçãop/ REMark. Assim, nomes de variáveis podem começar c/ REM (embora REMpor si só não seja válido).

4.12. Linhas c/ Declarações Múltiplas

De maneira a permitir programas mais compactos e agrupamento lógico de co-mandos relacionados, o PBP suporta o uso de dois pontos (:) p/ separardeclarações colocadas na mesma linha. Assim, os dois exemplos seguintessão equivalentes:

W2 = W0W0 = W1W1 = W2

é o mesmo que:

W2 = W0 : W0 = W1 : W1 = W2

Isto, entretanto, não altera o tamanho do código gerado.

4.13. Caractere de Extensão de Linha

O número máximo de caracteres que podem aparecer em uma linha do PBP é256. Declarações mais longas podem ser estendidas até a linha seguinte usando ocaractere de extensão de linha (_) ao final de cada linha a ser continuada.

Branch B0,[rotulo0,rotulo1,rotulo2,_rotulo3,rotulo4]

Page 37: Manual Picbasic em Portugues

PicBasic Pro Compiler

27

4.14. INCLUDE

Outros arq. fonte BASIC podem ser adicionados a um programa do PBP usandoINCLUDE. Você pode ter sub-rotinas padronizadas, definições ou outros ar-quivos que você deseje manter em separado. Os Stamp e arq. de definiçãode modo serial são exemplos disso. Estes arquivos podem ser incluídos emprogramas onde eles sejam necessários, mas deixados fora de programasonde eles não sejam precisos.

As linhas de código fonte do arq. incluído são inseridas no programaexatamente onde o INCLUDE é colocado.

INCLUDE “modedefs.bas”

4.15. DEFINE

Alguns elementos, como a freqüência de clock do oscilador e as posições dos pi-nos do LCD, são predefinidas no PBP. DEFINE permite que um programa doPBP altere estas definições, se desejado.

DEFINE pode ser usado p/ mudar o valor predefinido do oscilador, ospinos de DEBUG e baud rate, e as posições dos pinos do LCD, entre outrascoisas. Estas definições devem estar todas em maiúsculas. Veja asseções apropriadas do manual p/ informação específica sobre estasdefinições.

DEFINE PAUSA_BOTAO 10 'Atraso p/ repiquedo botao em ms

DEFINE PASSO_CARAC 1000 ‘passo do caractereserout em us

DEFINE REG_DEPURA PORTB 'Porta do pino de depuracaoDEFINE BIT_DEPURA 0 'Bit pino depura.DEFINE BAUD_DEPURA 2400 'Baud rate depura.DEFINE MODO_DEPURA 1 'Modo depura.: 0 =

Verd., 1 = InvertidoDEFINE PASSO_DEPURA 1000 'Passo caractere

depura. em us

DEFINE HSER_BAUD 2400 'Fixa baud rateDEFINE HSER_RCSTA 90h 'Fixa reg. rec.DEFINE HSER_TXSTA 20h 'Fixa reg. transm.

Page 38: Manual Picbasic em Portugues

PicBasic Pro Compiler

28

DEFINE HSER_PAR 1 'Use somente se dese-jar paridade par

DEFINE HSER_IMP 1 'Use somente se de-sejar parid. impar

DEFINE I2C_INTERNO 1 'Use p/ EEPROM in-terna em 16CExxxe 12CExxx

DEFINE I2C_LENTO 1 'Use p/ OSC >8mHzc/ dispositivosde veloc. padrao

DEFINE LCD_DREG PORTA 'Porta dados LCDDEFINE LCD_DBIT 0 'Bit de inicio

LCD 0 ou 4DEFINE LCD_RSREG PORTA 'Porta de selec.

registro LCDDEFINE LCD_RSBIT 4 'Bit de selec.

registro LCDDEFINE LCD_EREG PORTB 'Porta hab. LCDDEFINE LCD_EBIT 3 'Bit hab. LCDDEFINE LCD_BITS 4 'Tam. barram. LCD 4 ou

8DEFINE LCD_LINHAS 2 'Linhas numericas no

LCD

DEFINE OSC 4 '3 4 8 10 12 16 20

DEFINE OSCCAL_1K 1 'Fixa OSCCAL p/PIC12C671

DEFINE OSCCAL_2K 1 'Fixa OSCCAL p/PIC12C672

4.16. Operadores Matemáticos

Ao contrário do BASIC Stamp, o PicBasic Pro Compiler executa todas as operaçõesmatemáticas em ordem completamente hierárquica. Isto quer dizer que há precedênciap/ os operadores. Multiplicações e divisões são feitas antes das somas esubtrações, por exemplo. Para assegurar que as operações sejam levadas a cabo naordem que você quiser, use parênteses p/ agrupar as operações:

A = (B + C) * (D - E)

Page 39: Manual Picbasic em Portugues

PicBasic Pro Compiler

29

As operações matemáticas não são assinadas e são executadas c/ precisão de 16 bits.Os operadores suportados são:

Op. Matemáticos Descrição

+ Adição

- Subtração

* Multiplicação

** 16 Bits superiores da multiplicação

*/ 16 Bits do meio da multiplicação

/ Divisão

// Resto (Módulo)

<< Desl. Esq.

>> Desl. Dir.

ABS Valor Absoluto

COS Coseno

DCD Decodif. 2n

DIG Dígito

MAX Máx imo*

MIN Mín imo*

NCD Codifica

REV Inverte Bits

SIN Seno

SQR Raiz Quadrada

& AND Lógico

| OR Lógico

^ OR Exclusivo Lógico

~ NOT Lógico

&/ NOT AND Lógico

|/ NOT OR Lógico

^/ NOT OR Exclusivo Lógico

*Implementação difere do BASIC Stamp.

Page 40: Manual Picbasic em Portugues

PicBasic Pro Compiler

30

4.16.1. Multiplication

O PBP executa multiplicação 16x16. O operador '*' retorna os 16 bitsinferiores do resultado de 32 bits. Esta é a multiplicação típica encontrada namaioria das linguagens de programação. O operador '**' retorna os 16 bitssuperiores do resultado de 32 bits. Estes dois operadores podem ser usados em conjuntop/ executar multiplicações 16x16 que produzam resultados de 32 bits.

W1 = W0 * 1000 ‘ Multiplicar o valor em W0 por 1000e guardar o resultado em W1

W2 = W0 ** 1000 ‘ ultiplicar W0 por 1000guardar os 16 bits de maior ordem(que podem ser 0) em W2

O operador ‘*/’ retorna os 16 bits do meio do resultado de 32 bits.

W3 = W1 */ W0 ‘ Multiplicar W1 por W0 e guardaros 16 bits do meio em W3

4.16.2. Divisão

O PBP executa divisão 16x16. O operador '/' retorna o resultado de 16 bits.O operador '//' retorna o resto. Isto é às vezes referenciado comoo módulo do número.

W1 = W0 / 1000 ‘ Dividir o valor em W0 por 1000e guardar o resultado em W1

W2 = W0 // 1000 ‘ Dividir o valor em W0 por 1000e guardar o resto em W2

4.16.3. Deslocamento

Os operadores '<<' e '>>' deslocam um valor p/ esquerda ou p/ direita, respectivamente,1 a 15 vezes. Os bits já deslocados são fixados em 0.

B0 = B0 << 3 ‘ Desloca B0 3 casas p/ esquerda(o mesmo que multiplicar por 8)

W1 = W0 >> 1 ‘ Desloca W0 1 posicao p/ direitae guarda o resultado em W1 (o mesmoque dividir por 2)

Page 41: Manual Picbasic em Portugues

PicBasic Pro Compiler

31

4.16.4. ABS

ABS retorna o valor absoluto de um número. Se um byte é maior que127 (bit alto ligado), ABS irá retornar 256 - valor. Se uma palavra é maior que32767 (bit alto ligado), ABS irá retornar 65536 - valor.

B1 = ABS B0

4.16.5. COS

COS retorna o coseno de 8 bits de um valor. O resultado está na formade complemento de dois (ex. -127 p/ 127). Ele usa uma tabela de referência de quarto de ondap/ encontrar o resultado. O coseno inicia c/ um valor em radianos binários, 0 a 255,em oposição ao habitual 0 a 359 graus.

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ãofixados em 0.

B0 = DCD 2 ‘ Fixa B0 p/ %00000100

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, evoila.

B0 = 123 ‘ Fixa B0 em 123B1 = B0 DIG 1 ‘ Fixa B1 em 2 (dígito 1 de

123)

4.16.8. MAX e MIN

MAX e MIN retorna o máximo e mínimo, respectivamente, de doisnúmeros. Ele é normalmente usado p/ limitar números p/ um valor.

Page 42: Manual Picbasic em Portugues

PicBasic Pro Compiler

32

B1 = B0 MAX 100 ‘ Fixa B1 p/ o maior de B0e 100 (B1 estará entre100 & 255)

B1 = B0 MIN 100 ‘ Set B1 to the smaller of B0and 100 (B1 can’t be biggerthan 100)

4.16.9. NCD

NCD retorna o número de bit codificado prioritário (1 - 16) de um valor. Ele é usadop/ achar o bit mais alto ligado em um valor. Ele retorna 0 se nenhum bit estiver ligado.

B0 = NCD %01001000 ‘ Fixa B0 p/ 7

4.16.10. REV

REV inverte a ordem dos bits inferiores em um valor. O número de bitsa serem invertidos é de 1 a 16.

B0 = %10101100 REV 4 ‘ Fixa B0 em %10100011

4.16.11. SIN

SIN retorna o seno de 8 bits de um valor. O resultado é na forma de complemento dedois (ex. -127 a 127). Ele usa uma tabela de referência de quarto de onda p/ achar oresultado. O seno inicia c/ um valor em radianos binários, 0 a 255, em oposiçãoao habitual 0 a 359 graus.

B1 = SIN B0

4.16.12. SQR

SQR retorna a raiz quadrada de um valor. Já que o PicBasic Pro só trabalhac/ inteiros, o resultado será sempre um inteiro de 8 bits não maior do que oresultado real.

B0 = SQR W1 ‘ Fixa B0 p/ a raiz quadrada de W1

4.16.13. Operadores a Bit

Operadores a bit agem em cada bit de um valor de maneira booleana. Elespodem ser usados p/ isolar bits ou adicionar bits a um valor.

Page 43: Manual Picbasic em Portugues

PicBasic Pro Compiler

33

B0 = B0 & %00000001 ‘ Isola o bit 0 de B0B0 = B0 | %00000001 ‘ Liga o bit 0 de B0B0 = B0 ^ %00000001 ‘ Inverte o estado do bit 0

de B0

4.17. Operadores de Comparação

Operadores de comparação são usados em declarações IF..THEN p/ compararuma expressão c/ outra. Os operadores suportados são:

Operador de Comparação Descrição

= ou == Igual

<> ou != Não Igual

< Menor que

> Maior que

<= Menor ou Igual a

>= Maior ou Igual a

If i > 10 Then loop

4.18. Operadores Lógicos

Operadores lógicos diferem dos operadores a bit. Eles produzem um resultadoverdadeiro/falso de sua operação. Valores de 0 são tratados como falso. Qualquer outrovalor é tratado como verdadeiro. Eles são mais usados em conjunto c/ os operadoresde comparação em uma declaração IF..THEN. Os operadoressuportados são:

Page 44: Manual Picbasic em Portugues

PicBasic Pro Compiler

34

Operador Lógico Descrição

AND ou && AND Lógico

OR ou || OR Lógico

XOR ou ^^ OR Exclusivo Lógico

NOT AND NAND Lógico

NOT OR NOR Lógico

NOT XOR NXOR Lógico

If (A == maior) AND (B > medio) Then run

Esteja certo de usar parênteses p/ dizer ao PBP a ordem exata em que você querque as operações sejam executadas.

Page 45: Manual Picbasic em Portugues

PicBasic Pro Compiler

35

5. Referência de Declarações do PicBasic Pro

@ Insere uma linha de código em linguagem assembly.ASM..ENDASM Insere uma seção de código em ling. assembly.BRANCH GOTO computado (equiv. a ON..GOTO).BRANCHL BRANCH fora de página (BRANCH longo).BUTTON Tira o repique e auto-repete a entrada de um pino específico.CALL Chama subrotina em ling. assembly.CLEAR Zera todas as variáveis.COUNT Conta o número de pulsos em um pino.DATA Define conteúdo inicial da EEPROM no-chip.DEBUG Saída serial assíncrona p/ um pino fixo e baud.DISABLE Desabilita processamento ON INTERRUPT.DTMFOUT Produz tons de discagem em um pino.EEPROM Define conteúdo inicial p/ a EEPROM no-chip.ENABLE Habilita processamento ON INTERRUPT.END Para a execução e entra no modo baixo consumo.FOR..NEXT Executa declarações repetidamente.FREQOUT Produz até 2 freqüências em um pino.GOSUB Chama subrotina BASIC em um rótulo específico.GOTO Continua execução em um rótulo específico.HIGH Torna a saída do pino alta.HSERIN Entrada serial assíncrona de hardware.HSEROUT Saída serial assíncrona de hardware.I2CREAD Lê os bytes de um dispositivo I2C.I2CWRITE Escreve bytes em um dispositivo I2C.IF..THEN..ELSE..ENDIF Executa declarações condicionalmente.INPUT Torna o pino uma entrada.{LET} Atribui o resultado de uma expressão a uma variável.LCDOUT Mostra caracteres em um LCD.LOOKDOWN Procura por valor na tabela de constantes.LOOKDOWN2 Procura por valor na tabela de constantes / variáveis.LOOKUP Busca valor da constante da tabela.LOOKUP2 Busca valor da constante / variável da tabela.LOW Torna a saída do pino baixa.NAP Desliga o processador por um curto período de tempo.ON INTERRUPT Executa subrotina BASIC em uma interrupção.OUTPUT Torna o pino uma saída.PAUSE Atraso (resolução de 1mSeg).PAUSEUS Atraso (resolução de 1uSeg).

Page 46: Manual Picbasic em Portugues

PicBasic Pro Compiler

36

PEEK Lê o byte do registrador.POKE Escreve um byte no registrador.POT Lê o potenciômero em um pino específico.PULSIN Mede a largura do pulso em um pino.PULSOUT Gera pulso em um pino.PWM Coloca um trem de pulsos modulado por largura no pino.RANDOM Gera um número pseudo-aleatório.RCTIME Mede a largura do pulso em um pino.READ Lê o byte da EEPROM no-chip.RESUME Continua execução após tratar uma interrupção.RETURN Continua na declaração seguinte ao último GOSUB.REVERSE Torna pino de saída uma entrada ou pino de entrada uma saída.SERIN Entrada serial assíncrona (estilo BS1).SERIN2 Entrada serial assíncrona (estilo BS2).SEROUT Saída serial assíncrona (estilo BS1).SEROUT2 Saída serial assíncrona (estilo BS2).SHIFTIN Entrada serial síncrona.SHIFTOUT Saída serial síncrona.SLEEP Desliga o processador por um período de tempo.SOUND Gera tom ou ruído branco em um pino específico.STOP Para a execução de um programa.SWAP Troca os valores de duas variáveis.TOGGLE Torna o pino uma saída e muda o estado.WHILE..WEND Executa decl. enquanto a condição for verdadeira.WRITE Escreve byte na EEPROM no-chip.XIN Entrada X-10.XOUT Saída X-10.

Page 47: Manual Picbasic em Portugues

PicBasic Pro Compiler

37

5.1. @

@ Declaração

Quando usado no início de uma linha, @ provê um atalho p/ a inserçãode uma Declaração em ling. assembly no seu programa PBP. Você podeusar este atalho p/ misturar livremente código em ling. assembly c/ declaraçõesdo PicBasic Pro.

i var byterole-me var byte

For i = 1 to 4@ rlf _role-me, F ; Gira o bit uma vez p/ esq.

Next i

O atalho @ também pode ser usado p/ incluir rotinas em ling. assemblyem um outro arquivo. Por exemplo:

@ Include “fp.asm”

@ reinicializa a página do registrador p/ 0 antes de executar a instrução em ling.assembly. A página do registrador não deve ser alterada usando @.

Veja a seção sobre programação em linguagem assembly p/ maisinformação.

Page 48: Manual Picbasic em Portugues

PicBasic Pro Compiler

38

5.2. ASM..ENDASM

ASMENDASM

As instruções ASM e ENDASM dizem ao PBP que o código entre estasduas linhas está em ling. assembly e não deve ser interpretado comodeclarações do PicBasic Pro. Você pode usar estas duas instruções p/ misturarlivremente código em ling. assembly c/ declarações do PicBasic Pro.

O tamanho máximo p/ uma seção de texto em assembler é 8K. Isto é otamanho máximo p/ o fonte atual, incluindo comentários, não ocódigo gerado. Se o bloco de texto é maior do que isso, quebre-o em seçõesASM..ENDASM múltiplas ou simplesmente inclua-o em um arq. separado.

ASM reinicializa a pág. do registrador p/ 0. Você deve assegurar-se que a pág.do registrador seja reiniciada p/ 0 antes do ENDASM se o código de linguagemassembly o tiver alterado.

Veja a seção sobre programação em ling. assembly p/ maisinformação.

ASMbsf PORTA, 0 ; Fixa bit 0 em PORTAbcf PORTB, 0 ; Limpa bit 0 em PORTB

ENDASM

Page 49: Manual Picbasic em Portugues

PicBasic Pro Compiler

39

5.3. BRANCH

BRANCH Indice,[Rotulo{,Rotulo...}]

BRANCH faz o programa pular p/ um local diferente baseado em umíndice de variáveis. Isto é similar a On..Goto em outros BASICs.

Indice seleciona um de uma lista de rótulos. A execução é retomada no rótuloindexado. Por exemplo, se Indice é zero, o programa pula p/ o primeiro rótuloespecificado na lista, se Indice é um, o programa pula p/ o segundorótulo, e assim vai. Se Indice é maior que ou igual ao número derótulos, nenhuma ação é tomada e a execução continua c/ a declaraçãoseguinte ao BRANCH. Até 256 Rotulos podem ser usados em um BRANCH.

Rotulo deve estar na mesma página de código que a instrução BRANCH. Sevocê não puder ter certeza que eles estarão na mesma pág. de código, use BRANCHLabaixo.

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)

Page 50: Manual Picbasic em Portugues

PicBasic Pro Compiler

40

5.4. BRANCHL

BRANCHL Indice,[Rotulo{,Rotulo...}]

BRANCHL (BRANCH longo) funciona muito similarmente ao BRANCH em que ele fazo 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. decód. diferente da instrução BRANCHL e gera código que é quase o dobrodo 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 BRANCHou 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.

Indice seleciona um de uma lista de rotulos. A execução prossegue no rótuloindexado. Por exemplo, se Indice é zero, o programa pula p/ o primeiro rótuloespecificado na lista, se Indice é um, o programa pula p/ o segundo rótulo,e assim por diante. Se Indice é maior ou igual ao número de rótulos,nenhuma ação é tomada e a execução continua c/ a declaração seguinteao BRANCHL. Até 128 rotulos podem ser usados em um BRANCHL.

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)

Page 51: Manual Picbasic em Portugues

PicBasic Pro Compiler

41

5.5. BUTTON

BUTTON Pino,Down,Delay,Rate,BVar,Action,Rotulo

Lê Pino e opcionalmente executa anti-repique e auto-repetição. Pino éautomaticamente fixado como entrada. Pino pode ser uma constante, 0-15, ou umavariável que contenha um número 0-15 (ex. B0) ou um nome de pino (ex.PORTA.0).

Down Estado do pino quando o botão é pressionado (0..1).Delay Contagem cíclica antes do início da auto-repetição (0..255). Se 0,

nenhum anti-repique ou auto-repetição são executados. Se 255,é executado o anti-repique mas não a auto-repetição.

Rate Taxa de auto-repetição (0..255).BVar Variável de um byte usada internamente p/ contagem regr. de

atraso/repetição. Ela deve ser inicializada p/ 0 antes do uso enão ser usada em outro lugar no programa.

Action Estado do botão sobre o qual atuar (0 se não premido, 1 se premido).Rotulo A execução prossegue neste rótulo se Action for verdadeiro.

10K

I/O

10K

I/O

‘ Vai p/ naopremido se botao nao premido em Pin2BUTTON PORTB.2,0,100,10,B2,0,naopremido

BUTTON precisa ser usado dentro de um loop p/ a auto-repetição funcionar corretamente.

BUTTON realiza o anti-repique atrasando a execução do programa por um perí-odo de milisegundos p/ aguardar que os contatos se acomodem. O atrasopadrão de anti-repique é 10ms. Para alterar o anti-repique p/ um outrovalor, use DEFINE:

Page 52: Manual Picbasic em Portugues

PicBasic Pro Compiler

42

‘ Fixa o atraso do anti-repique p/ 50msDefine BUTTON_PAUSE 50

Certifique-se de que BUTTON_PAUSE esteja todo em maiúsculas.

Em geral, é mais fácil simplesmente ler o estado do pino em um IF..THENdo que usar o comando BUTTON como segue:

If PORTB.2 = 1 Then naopremido

Page 53: Manual Picbasic em Portugues

PicBasic Pro Compiler

43

5.6. CALL

CALL Rotulo

Executa a sub-rotina em linguagem assembler chamada Rotulo.

GOSUB é normalmente usado p/ executar uma sub-rotina do PicBasic Pro. Aprincipal diferença entre GOSUB e CALL é que c/ CALL, a existência de umRotulo não é checada até a hora da montagem. Usando CALL, um Rotulo emuma seção em linguagem assembly que de outra forma seria inacessívelao PBP pode ser acessado.

Veja a seção sobre programação em linguagem assembly p/ maisinformação sobre CALL.

CALL pass ‘ Executa sub-rotina em linguagemassembly chamada _pass

Page 54: Manual Picbasic em Portugues

PicBasic Pro Compiler

44

5.7. CLEAR

CLEAR

Fixa todos os registradores da RAM p/ zero.

CLEAR zera todos os registradores da RAM em cada banco. Isto irá fixartodas 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á numBASIC Stamp. Em geral, as variáveis devem ser fixadas no programa p/ um estadoinicial apropriado ao invés de se usar CLEAR.

CLEAR ‘ Limpa todas as variáveis p/ 0

Page 55: Manual Picbasic em Portugues

PicBasic Pro Compiler

45

5.8. COUNT

COUNT Pino,Periodo,Var

Conta o número de pulsos que ocorrem em Pino durante o Periodo eguarda o resultado em Var. Pino é automaticamente fixado como entrada. Pino podeser 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).

A resolução de Periodo é em milisegundos. Ele rastreia a freqüência dooscilador baseado no DEFINEd OSC.

COUNT checa o estado de Pino em um curto loop e conta as transições de low p/high. Com um oscilador de 4Mhz ele checa o estado do pino a cada 20us.Com um oscilador de 20Mhz ele checa o estado do pino a cada 4us. Partindo disto,pode-se determinar que a mais alta freqüência de pulsos que pode sercontada é 25Khz c/ um oscilador de 4Mhz e 125Khz c/ um osciladorde 20Mhz se a freqüência tem um ciclo ativo de 50% (o tempo de high é omesmo que o tempo de low).

‘ Conte # de pulsos em Pino1 em 100 milisegundosCOUNT PORTB.1, 100, W1

‘ Determine a frequencia em um pinoCOUNT PORTA.2, 1000, W1 ‘ Conte p/ 1 segundoSerout PORTB.0, N2400, [W1]

Page 56: Manual Picbasic em Portugues

PicBasic Pro Compiler

46

5.9. DATA

DATA {@Local,}Constante{,Constante...}

Guarde constantes na EEPROM não-volátil no-chip quando o dispositivo é programadopela primeira vez. Se o valor opcional Local é omitido, a primeira declaraçãoDATA começa a guardar no endereço 0 e declarações subseqüentes guardarãonas posições seguintes. Se o valor Local for especificado, ele denotaa posição inicial onde estes valores serão guardados. Um rótulo opcionalpode ser atribuído ao endereço inicial da EEPROM p/ futura referência peloprograma.

Constante pode ser uma constante numérica ou alfanumérica. Apenas obyte menos significativo de valores numéricos é guardado a não ser que omodificador WORD seja usado. Strings são guardadas como bytes consecutivosde valores ASCII. Nenhum comprimento ou terminador é automaticamente adicionado.

DATA funciona apenas c/ microcontroladores c/ EEPROM no-chip como oPIC16F84 e o PIC16C84. Já que EEPROM é memória não-volátil,os dados permanecerão intactos mesmo quando a força for desligada.

Os dados são guardados no espaço da EEPROM apenas uma vez na hora em queo microcontrolador é programado, não a cada vez que o programa é rodado.WRITE pode ser usado p/ fixar os valores da EEPROM no-chip em tempode execução.

‘ Guarde 10, 20 e 30 começando na posição 5DATA @5,10,20,30

‘ Atribua um rotulo a uma palavra na prox. pos.dlabel DATA word $1234 ‘ Guarda $34, $12

‘ Pule 4 posições e guarde 10 0sDATA (4), 0(10)

Page 57: Manual Picbasic em Portugues

PicBasic Pro Compiler

47

5.10. DEBUG

DEBUG Item{,Item...}

Envia um ou mais Itens p/ um pino predefinido a uma taxa de transf. predefinidano formato assíncrono padrão usando 8 bits de dados, s/ paridade e 1 bit de pa-rada (8N1). O pino é automaticamente fixado como saída.

Se um jogo-da-velha (#) precede um Item, a representação ASCII p/ cada dígitoé enviada serialmente. DEBUG também suporta os mesmos modificadores de dadosque SEROUT2. Refira-se à seção sobre SEROUT2 p/ esta informação.

DEBUG é uma de muitas funções seriais assíncronas embutidas. Ela é a menordas rotinas seriais geradas por software. Ela pode ser usada p/enviar informação de depuração (variáveis, marcadores de posição de programa, etc.)p/ um programa de terminal como o Hyperterm. Ela pode também ser usada a qualquerhora em que for desejada uma saída serial em um pino fixo a uma taxa de transf. fixa.

O pino serial e taxa de transf. são especificados usando DEFINEs:

‘ Fixa a porta de pinos p/ DebugDEFINE DEBUG_REG PORTB

‘ Fixa o bit de pinos p/ DebugDEFINE DEBUG_BIT 0

‘ Fixa a taxa de transf. p/ DebugDEFINE DEBUG_BAUD 2400

‘ Fixa o modo do Debug: 0 = verdadeiro, 1 = invertidoDEFINE DEBUG_MODE 1

DEBUG assume um oscilador de 4Mhz quando gera sua temporização de bit. Paramanter a temp. apropriada da taxa de transf. c/ outros valores do oscilador, esteja certode DEFINIR o ajuste do OSC p/ qualquer valor de oscilador diferente.

Em alguns casos, as taxas de transmissão das instruções do DEBUG podemapresentar os caracteres muito rapidamente p/ o dispositivo receptor. Um DEFINE adicionacadência aos caracteres às transmissões seriais de saída. Isto permitetempo adicional entre os caracteres à medida em que são transmitidos. Acadência dos caracteres DEFINE permite um atraso de 1 a 65.535 microsegundos(,001 a 65,535 milisegundos) entre cada caractere transmitido.

Page 58: Manual Picbasic em Portugues

PicBasic Pro Compiler

48

Por exemplo, p/ pausar 1 milisegundo entre a transmissão de cadacaractere:

DEFINE DEBUG_PACING 1000

Enquanto que conversores de nível RS-232 são comuns ebaratos, graças à implementação RS-232 atual e as excelentesespecificações de E/S do PICmicro, a maioria das aplicações não requer conversoresde nível. Ao invés disso, pode ser usado TTL invertido (DEBUG_MODE = 1). Umresistor limitador de corrente é sugerido (supõe-se que a RS-232 sejatolerante a curtos).

1KPino RS-232 RX

RS-232 GND

Pino 2

Pino 5 Pino 7

Pino 3

DB9 DB25

‘ Envie o texto “B0=” seguido pelo valor decimalde B0 e um avanco de linha serialmenteDEBUG “B0=“, dec B0, 10

Page 59: Manual Picbasic em Portugues

PicBasic Pro Compiler

49

5.11. DISABLE

DISABLE

DESABILITA o processam. de interr. seguinte a esta instrução. Interr. podemainda ocorrer mas o gerenciador de interr. BASIC no programa PicBasic Pronão será executado até que seja encontrado um ENABLE.

DISABLE e ENABLE são mais como pseudo-ops os quais dão asdireções ao compilador, ao invés de gerar código. Veja ONINTERRUPT p/ mais informação.

DISABLE ‘ Desabilita interrupções no gerenciadormyint: led = 1 ‘ Liga o LED quando interrompido

Resume ‘ Retorna ao programa principalEnable ‘ Habilita interrupções após gerenciador

Page 60: Manual Picbasic em Portugues

PicBasic Pro Compiler

50

5.12. DTMFOUT

DTMFOUT Pino,{Onms,Offms,}[Tom{,Tom...}]

Produz seqüência de tons DTMF em Pino. Pino é automaticamentefixado como saída. Pino pode ser uma constante, 0-15, ou variável quecontém um número 0-15 (ex. B0) ou um nome de pino (ex. PORTA.0).

Onms é o número de milisegundos p/ gerar cada tom e Offms é onúmero de milisegundos p/ pausar entre cada tom. Se eles não foremespecificados, Onms padroniza-se em 200ms e Offms padroniza-se em 50ms.

Tons são numerados 0-15. Tons 0-9 são os mesmos de um teclado detelefone. Tom 10 é a tecla *, Tom 11 é a tecla # e Tons 12-15correspondem às teclas estendidas A-D.

DTMFOUT usa FREQOUT p/ gerar os tons duplos. FREQOUTgera tons usando uma forma de modulação por largura de pulso. Os dados purosque saem do pino se parecem bem assustadores. Geralmente, é necessáriaalguma filtragem p/ alisar o sinal p/ uma onda senoidal e livrar-se de algunsharmônicos que são gerados:

DTMFOUT trabalha melhor c/ um oscilador de 20Mhz. Ela também pode trabalharc/ um oscilador de 10Mhz, e até a 4Mhz, embora comece a ficar muito difícilde filtrar e seja de amplitude razoavelmente baixa. Qualquer outra freqüência irá fazerc/ que DTMFOUT gere uma freqüência que é uma relação do oscilador realusado e 20Mhz o que não será muito útil p/ o envio de tons de discagem.

‘ Envia tons DTMF p/ 212 no Pino1DTMFOUT PORTB.1,[2,1,2]

Page 61: Manual Picbasic em Portugues

PicBasic Pro Compiler

51

5.13. EEPROM

EEPROM {Posicao,}[Constante{,Constante...}]

Guarda constantes na EEPROM no-chip. Se o valor da Posicao opcional éomitido, a primeira declaração da EEPROM começa a guardar no end. 0 edeclarações subseqüentes guardarão nas posições seguintes. Se ovalor da Posicao é especificado, ele denota a posição inicial onde estesvalores serão guardados.

Constante pode ser uma constante numérica ou alfanumérica. Apenas obyte menos significativo de valores numéricos é guardado. Strings são guardadas comobytes consecutivos de valores ASCII. Nenhum comprimento ou termi-nador são automaticamente adicionados.

EEPROM funciona apenas c/ microcontroladores c/ EEPROM no-chip tais comoo PIC16F84 e PIC16C84. Já que a EEPROM é memória não-volátil,os dados permanecerão intactos mesmo quando a força for desligada.

Os dados são guardados no espaço da EEPROM apenas uma vez na hora que omicrocontrolador é programado, não a cada vez que o programa é rodado.WRITE pode ser usado p/ fixar os valores da EEPROM no-chip em tempode execução.

‘ Guarde 10, 20 e 30 comecando na posicao 5EEPROM 5,[10,20,30]

Page 62: Manual Picbasic em Portugues

PicBasic Pro Compiler

52

5.14. ENABLE

ENABLE

HABILITE o processamento de interrupções que foi previamenteDESABILITADO (c/ DISABLE) seguinte a esta instrução.

DISABLE e ENABLE são mais parecidos com pseudo-ops no sentido de queeles dão direções ao compilador ao invés de gerar código. Veja ONINTERRUPT p/ mais informação.

Disable ‘ Desabilita interrupcoes no gerenciadormyint: led = 1 ‘ Liga o LED quando interrompido

Resume ‘ Retorna ao programa principalENABLE ‘ Habilita interrupcoes apos gerenciador

Page 63: Manual Picbasic em Portugues

PicBasic Pro Compiler

53

5.15. END

END

Para a execução do programa e entra em modo de baixo consumo. Todos os pinosde E/S ficam no estado atual. END trabalha executando uma instrução Sleepcontinuamente em um loop.

Um END ou STOP ou GOTO devem ser colocados no fim de cada programap/ evitar que ele caia para fora do fim da memória e recomece.

END

Page 64: Manual Picbasic em Portugues

PicBasic Pro Compiler

54

5.16. FOR..NEXT

FOR Conta = Inicio TO Fim {STEP {-} Inc}{Corpo}

NEXT {Conta}

O loop FOR..NEXT permite que os programas executem um número dedeclarações (o Corpo) por algumas vezes usando uma variável comocontador. Devido à sua complexidade e versatilidade, FOR..NEXT émelhor descrito passo a passo:

1) O valor de Inicio é atribuído à variável índice, Conta.Conta pode ser uma variável de qualquer tipo.

2) O Corpo é executado. O Corpo é opcional e pode ser omitido(talvez p/ um loop de atraso).

3) O valor de Inc é adicionado a (ou subtraído de se "-" éespecificado) Conta. Se nenhuma cláusula STEP é definida,Conta é incrementada uma vez.

4) Se Conta não tiver passado de Fim ou estourado o tipo de variável,a execução retorna ao Passo 2.

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 10Serout 0,N2400,[#i,” “] ‘ Envia cada numero p/

Pin0 serialmenteNEXT i ‘ Retorna e faz a proxima

contagemSerout 0,N2400,[10] ‘ Envia um avanco de linha

FOR B2 = 20 TO 10 STEP -2 ‘ Conta de 20 a 10de 2 em 2

Serout 0,N2400,[#B2,” “] ‘ Envia cada numeroa Pin0 serialmente

NEXT B2 ‘ Retorna e faz a proximacontagem

Serout 0,N2400,[10] ‘ Envia um avanco de linha

Page 65: Manual Picbasic em Portugues

PicBasic Pro Compiler

55

5.17. FREQOUT

FREQOUT Pino,Onms,Frequencia1{,Frequencia2}

Produz a(s) Frequencia(s) no Pino por Onms milisegundos. Pino éautomaticamente fixado como saída. Pino pode ser uma constante, 0-15, ou umavariável que contenha um número 0-15 (ex. B0) ou um nome de pino (ex.PORTA.0).

Uma ou duas freqüências diferentes de 0 a 32767 hertz podem ser produzidaspor vez.

FREQOUT gera tons usando uma forma de modulação por largura de pulso. Osdados puros que saem do pino parecem bem assustadores. Algum tipo de filtragemé geralmente necessária p/ alisar o sinal p/ uma onda senoidal livrando-sedos harmônicos que são gerados:

FREQOUT trabalha melhor c/ um oscilador de 20Mhz. Ele também pode trabalharc/ um oscilador de 10Mhz e até mesmo c/ 4Mhz, embora comece a ficar muito difícilde filtrar e seja de amplitude razoavelmente baixa. Qualquer outra freqüência iráfazer c/ que FREQOUT gere uma freqüência que é uma relação do osciladorusado e 20Mhz.

‘ Envia tom de 1Khz em Pino1 por 2 segundosFREQOUT PORTB.1,2000,1000

Page 66: Manual Picbasic em Portugues

PicBasic Pro Compiler

56

5.18. GOSUB

GOSUB Rotulo

Pula p/ a subrotina em Rotulo salvando seu endereço de retorno na pilha.Diferente de GOTO, quando uma declaração RETURN é alcançada, a execução seguec/ a declaração seguinte à última declaração GOSUB executada.

Um número ilimitado de subrotinas pode ser usado em um programa.Subrotinas também podem ser aninhadas. Em outras palavras, É possível p/ umasubrotina chamar outra subrotina. Tal aninhamento de subrotinas deve serestringir a não mais do que quatro níveis de profundidade.

GOSUB beep ‘ Execute subrotina chamada beep...

beep: High 0 ‘ Ligue o LED conectado a Pin0Sound 1,[80,10] ‘ Bipe o alto-falante conectado a

Pin1Low 0 ‘ Desligue o LED conectado a Pin0Return ‘ Voltar p/ a rotina principal que

nos chamou

Page 67: Manual Picbasic em Portugues

PicBasic Pro Compiler

57

5.19. GOTO

GOTO Rotulo

A execução do programa continua c/ as declarações em Rotulo.

GOTO send ‘ Pule p/ a declaracao chamada envia...

envia: Serout 0,N2400,[“Oi”] ‘ Envia “Oi” p/ Pin0serialmente

Page 68: Manual Picbasic em Portugues

PicBasic Pro Compiler

58

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).

HIGH 0 ‘ Fixa Pin0 como saida e o levaa nivel alto (~5 volts)

HIGH PORTA.0 ‘ Fixa PORTA, pino 0 como saidae o leva a alto (~5 volts)

led var PORTB.0 ‘ Define pino do LEDHIGH led ‘ Fixa pino do LED como saida e

o leva a alto (~5 volts)

Alternativamente, se o pino já for uma saída, uma maneira mais rápida e maiscurta (a partir de um ponto de parada de código gerado) de levá-lo a nível alto seria:

PORTB.0 = 1 ‘ Fixa PORTB pino 0 alto

Page 69: Manual Picbasic em Portugues

PicBasic Pro Compiler

59

5.21. HSERIN

HSERIN {RotuloParidade,}{Timeout,Rotulo,}[Item{,...}]

Receba um ou mais Items da porta serial do hardware em dispositivosque suportam comunicações seriais assíncronas em hardware.

HSERIN é uma das muitas funções seriais assíncronas embutidas. Ela podeapenas ser usada c/ dispositivos que tenham um USART no hardware. Veja afolha de dados do dispositivo p/ informação sobre o pino de entrada serial e outrosparâmetros. Os parâmetros seriais e baud rate são especificados usandoDEFINEs:

‘ Fixa registrador de recepcao p/ receptor habilitadoDEFINE HSER_RCSTA 90h

‘ Fixa registrador de transmissao p/ transmissor habilitadoDEFINE HSER_TXSTA 20h

‘ Fixa baud rateDEFINE HSER_BAUD 2400

HSERIN assume um oscilador de 4Mhz nos cálculos de baud rate. Paramanter a temporização de baud rate correta c/ outros valores de osciladores, certifique-se de definir (DEFINE) o ajuste OSC p/ o novo valor do oscilador.

Opcionalmente, Timeout e Rotulo podem ser incluídos p/ permitir que o progra-ma continue se um caractere não for recebido dentro de um certo tempo.Timeout é especificado em unidades de 1 milisegundo.

O formato dos dados seriais padrão é 8N1, 8 bits de dados, s/ bit de paridade e 1bit 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:

‘ Use apenas se desejada paridade parDEFINE HSER_EVEN 1

‘ Use apenas se desejada paridade ímparDEFINE HSER_ODD 1

O ajuste de paridade, juntamente c/ todos os outros DEFINEs HSER, afeta ambosHSERIN e HSEROUT.

Page 70: Manual Picbasic em Portugues

PicBasic Pro Compiler

60

Um RotuloParidade opcional pode ser incluído na declaração. Oprograma irá continuar nesta posição se um caractere c/ um erro de paridade érecebido. Ele deve ser usado apenas se a paridade estiver habilitada usando umdos defines precedentes.

Visto que a recepção serial é feita em hardware, não é possível fixaros níveis p/ um estado invertido p/ eliminar um driver RS-232. Portantoum driver apropriado deve ser usado c/ HSERIN.

HSERIN suporta os mesmos modificadores de dados que SERIN2. Refira-seà seção sobre SERIN2 p/ esta informação.

HSERIN [B0, dec W1]

Page 71: Manual Picbasic em Portugues

PicBasic Pro Compiler

61

5.22. HSEROUT

HSEROUT [Item{,Item...}]

Envie um ou mais Items ao hardware da porta serial em dispositivos quesuportem comunicações seriais assíncronas em hardware.

HSEROUT é uma das muitas funções seriais embutidas. Ela podeapenas ser usada c/ dispositivos que tenham um USART em hardware. Veja afolha de dados do dispositivo p/ informação sobre o pino de saída serial e outrosparâmetros. Os parâmetrros seriais e baud rate são especificados usandoDEFINEs:

‘ Fixa registrador de recepcao p/ receptor habilitadoDEFINE HSER_RCSTA 90h

‘ Fixa registrador de transmissao p/ transmissor habilitadoDEFINE HSER_TXSTA 20h

‘ Fixa baud rateDEFINE HSER_BAUD 2400

HSEROUT assume um oscilador de 4Mhz nos cálculos de baud rate. Paramanter a temporização de baud rate correta c/ outros valores de osciladores, certifique-se de definir (DEFINE) o ajuste OSC p/ o novo valor do oscilador.

O formato dos dados seriais padrão é 8N1, 8 bits de dados, s/ bit de paridade e 1bit 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:

‘ Use apenas se desejada paridade parDEFINE HSER_EVEN 1

‘ Use apenas se desejada paridade ímparDEFINE HSER_ODD 1

O ajuste de paridade, juntamente c/ todos os outros DEFINEs HSER, afeta ambosHSERIN e HSEROUT.

Visto que a recepção serial é feita em hardware, não é possível fixaros níveis p/ um estado invertido p/ eliminar um driver RS-232. Portantoum driver apropriado deve ser usado c/ HSEROUT.

Page 72: Manual Picbasic em Portugues

PicBasic Pro Compiler

62

HSEROUT suporta os mesmos modificadores de dados que SEROUT2. Refira-seà seção sobre SEROUT2 p/ esta informação.

‘ Envie o valor decimal de B0 seguido por um avancode linha p/ o hardware da USARTHSEROUT [dec B0,10]

Page 73: Manual Picbasic em Portugues

PicBasic Pro Compiler

63

5.23. I2CREAD

I2CREAD PinoDados,PinoClock,Controle,{Endereco,}[Var{,Var...}]{,Rotulo}

Envie bytes de Controle e Endereco opcional p/ o PinoClock ePinoDados e guarde o(s) byte(s) recebido(s) na Var. PinoClock ePinoDados podem ser uma constante, 0-15, ou uma variável que contenha umnúmero 0-15 (ex. B0) ou um nome de pino (ex. PORTA.0).

I2CREAD e I2CWRITE podem ser usados p/ ler e escrever dados p/ uma EEPROM c/ uma interface I2C de dois fios como a Microchip 24LC01Be dispositivos similares. Isto permite que os dados sejam guardados em memóriaexterna não-volátil de forma que possam ser mantidos mesmo depois que a forçaseja desligada. Estes comandos operam no modo mestre I2C e tambémpodem ser usados p/ falar c/ outros dispositivos c/ uma interface I2C comosensores de temperatura e conversores A/D.

Os 7 bits superiores do byte Controle contém o código de controle juntamentec/ seleção de pastilha ou informação adicional de endereço, dependendo dodispositivo em particular. O bit de ordem inferior é uma flag interna indicando se ocomando é de leitura ou escrita e deve ser mantido livre.

Este formato p/ o byte Controle é diferente do formato usado pelo PicBasicCompiler original. Esteja certo de usar este formato c/ operaçõesPBP I2C.

Por exemplo, quando se comunicar c/ um 24LC01B, o código de controle é%1010 e a seleção de pastilha não é utilizada de forma que o byte Controle seria%10100000 ou $A0. Seguem formatos de bytes Controle p/ algumasdas diferentes peças:

Page 74: Manual Picbasic em Portugues

PicBasic Pro Compiler

64

Dispos. Capacid. Controle Tam. de End.

24LC01B 128 bytes %1010xxx0 1 byte

24LC02B 256 bytes %1010xxx0 1 byte

24LC04B 512 bytes %1010xxb0 1 byte

24LC08B 1K bytes %1010xbb0 1 byte

24LC16B 2K bytes %1010bbb0 1 byte

24LC32B 4K bytes %1010ddd0 2 bytes

24LC65 8K bytes %1010ddd0 2 bytes

bbb = bits de sel. de bloco (end. de ordem superior)ddd = bits de seleção de dispositivoxxx = irrelevante

O tamanho do Endereco enviado (byte ou palavra) é determinado pelo tamanhoda variável que é usada. Se uma variável de tamanho de byte é usada p/ o En-dereco, um endereco de 8 bits é enviado. Se uma variável de tamanho de palavra é usada,é enviado um endereço de 16 bits. Esteja certo de usar a variável corretamente dimen-sionada p/ o dispositivo c/ o qual deseja se comunicar.

Se uma Var de tamanho de palavra é especificada, 2 bytes são lidos e guardados nobyte superior de Var primeiro, seguidos pelo byte inferior. Esta ordem é diferente damaneira que as variáveis são normalmente guardadas, byte inferior primeiro.

Se o Rotulo opcional é incluído, o programa pulará p/ este rótulo se nãofor recebido um acknowledge do dispositivo I2C.

As instruções I2C podem ser usadas p/ acessar a EEPROM serial no-chip nosdispositivos 12CExxx e 16CExxx. Simplesmente especifique os nomes dos pinosp/ as linhas internas apropriadas como parte do comando I2C e coloqueo seguinte DEFINE no topo do programa:

DEFINE I2C_INTERNAL 1

Veja as folhas de dados da Microchip sobre estes dispositivos p/ mais informação.

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

Page 75: Manual Picbasic em Portugues

PicBasic Pro Compiler

65

de modo rápido (400Khz) podem ser usados até 20Mhz. Se for desejado acessarum dispositivo de velocidade padrão acima de 8Mhz, o seguinte DEFINE deve seradicionado ao programa:

DEFINE I2C_SLOW 1

As linhas de clock e dados do I2C devem ser levadas ao Vcc c/ um resistorde 4,7K de acordo c/ o seguinte esquema já que elas são ambasmanipuladas em modo bidirecional de coletor aberto.

addr var bytecont con %10100000

addr = 17 ‘ Fixa endereco em 17‘ Le dados no endereco 17 em B2I2CREAD PORTA.0,PORTA.1,cont,addr,[B2]

Veja o “Non-Volatile Memory Products Data Book” da Microchip p/ maisinformação sobre estes e outros dispositivos que podem ser usados c/ oscomandos I2CREAD e I2CWRITE.

Page 76: Manual Picbasic em Portugues

PicBasic Pro Compiler

66

5.24. I2CWRITE

I2CWRITE PinoDados,PinoClock,Controle,{Endereco,}[Valor{,Valor...}]{,Rotulo}

I2CWRITE envia Controle e Endereco opcional p/ o PinoClocke PinoDados do I2C seguidos por Valor. PinoClock e PinoDadospodem 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).

O tamanho do Endereco enviado (byte ou palavra) é determinado pelo tamanho davariável que é usada. Se uma variável de tamanho de byte é usada p/ o Endereco,um endereço de 8 bits é enviado. Se uma variável de tamanho de palavra é usada, um end.de 16 bits é enviado. Esteja certo de usar o tamanho apropriado de variável p/ odispositivo c/ o qual você deseja se comunicar.

Quando for escrever em uma EEPROM serial é necessário esperar 10ms (depende dodispositivo) p/ a escrita completar-se antes de tentar comunicaçãoc/ 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últiplosbytes de uma vez, fazendo assim poderá violar os requisitos de tempo acima p/EEPROMs seriais. Algumas EEPROMS seriais lhe permitem escrever múltiplos bytesem uma única página antes de necessitar a espera. Cheque a folha de dadosp/ o dispositivo específico que você está usando p/ estes detalhes. A característica deescrita em múltiplos bytes também pode ser útil c/ dispositivos I2C além dasEEPROMs seriais que não têm que esperar entre escritas.

Se um Valor de tamanho de palavra é especificado, 2 bytes são enviados, primeiroo byte superior seguido pelo byte inferior. Esta ordem é diferente do modo que asvariáveis são normalmente guardadas, c/ o byte inferior primeiro.

Se o Rotulo opcional é incluído, este rótulo será endereçado se nenhumreconhecimento for recebido do dispositivo I2C.

As instruções I2C podem ser usadas p/ acessar a EEPROM serial no-chipnos dispositivos 12CExxx e 16CExxx. Simplesmente especifique os nomes dos pinosp/ as linhas internas apropriadas como parte do comando I2C e coloqueo seguinte DEFINE no topo do programa:

DEFINE I2C_INTERNAL 1

Page 77: Manual Picbasic em Portugues

PicBasic Pro Compiler

67

Veja as folhas de dados da Microchip p/ estes dipspositivos p/ mais informação.

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 demodo rápido (400Khz) podem ser usados até 20Mhz. Se for desejado acessar umdispositivo de velocidade padrão acima de 8Mhz, o seguinte DEFINE deve seradicionado ao programa:

DEFINE I2C_SLOW 1

Veja o comando I2CREAD acima p/ obter o resto da história.

addr var bytecont con %10100000

addr = 17 ‘ Fixa endereco em 17‘ Envia o byte 6 ao endereco 17I2CWRITE PORTA.0,PORTA.1,cont,addr,[6]Pause 10 ‘ Espera 10ms p/ a escrita se

completaraddr = 1 ‘ Fixa endereco em 1‘ Envia o byte em B2 ao endereco 1I2CWRITE PORTA.0,PORTA.1,cont,addr,[B2]Pause 10 ‘ Espera 10ms p/ a escrita se

completar

Page 78: Manual Picbasic em Portugues

PicBasic Pro Compiler

68

5.25. IF..THEN

IF Comp {AND/OR Comp...} THEN RotuloIF Comp {AND/OR Comp...} THEN

Declaracao...ELSE

Declaracao...ENDIF

Efetua uma ou mais comparações. Cada termo Comp pode relacionar umavariável a uma constante ou outra variável e inclui um dosoperadores de comparação listados anteriormente.

If..Then avalia os termos da comparação p/ verdadeiro ou falso. Seele for verdadeiro, a operação após o Then é executada. Se eleresultar em falso, a operação após o Then não é executada.Comparações que resultem em 0 são consideradas falsas. Qualquer outro valor éconsiderado verdadeiro. Todas as comparações estão s/ assinatura já que o PBPapenas suporta tipos s/ assinatura.

Esteja certo de usar parênteses p/ especificar a ordem em que as operações devem sertestadas. De outra forma, a precedência de um operador irá determiná-la p/ você eo resultado pode não sair como esperado.

IF..THEN pode operar de 2 maneiras. Em uma forma, o THEN em umIF..THEN é essencialmente um GOTO. Se a condição é verdadeira, o programafará GOTO até o rótulo após o THEN. Se a condição resultar em falso, oprograma continuará na próxima linha após o IF..THEN. Uma outradeclaração não poderá ser colocada após o THEN, deverá ser um rótulo.

If Pin0 = 0 Then pushd ‘ Se o botao conectado aoPin0 é pressionado (0), pulep/ o rotulo pushd

If B0 >= 40 Then old ‘ Se o valor navariavel B0 eh maiorque ou igual a 40,pule p/ old

If PORTB.0 Then itson ‘ Se PORTB, pino 0 éalto (1), pule p/ itson

If (B0 = 10) AND (B1 = 20) Then loop

Page 79: Manual Picbasic em Portugues

PicBasic Pro Compiler

69

Na segunda forma, IF..THEN pode executar condicionalmente um grupo deDeclaracoes seguintes ao THEN. As Declaracoes devem ser seguidaspor um ELSE ou ENDIF p/ completar a estrutura.

If B0 <> 10 ThenB0 = B0 + 1B1 = B1 - 1

Endif

If B0 = 20 Thenled = 1

Elseled = 0

Endif

Page 80: Manual Picbasic em Portugues

PicBasic Pro Compiler

70

5.26. INPUT

INPUT Pino

Torna o Pino especificado uma entrada. Pino pode ser uma constante, 0-15, ou umavariável que contenha um número 0-15 (ex. B0) ou um nome de pino (ex.PORTA.0).

INPUT 0 ‘ Fixa Pino0 como entradaINPUT PORTA.0 ‘ Fixa PORTA, pino 0 como entrada

Alternativamente, o pino pode ser fixado como entrada de forma mais rápida ecurta (a partir de um standpoint de código gerado):

TRISB.0 = 1 ‘ Fixa PORTB, pino 0 como entrada

Todos os pinos em uma porta podem ser fixados como entradas ajustando-setodo o registrador TRIS de uma vez:

TRISB = %11111111 ‘ Fixa todo o PORTB como entrada

Page 81: Manual Picbasic em Portugues

PicBasic Pro Compiler

71

5.27. {LET}

{LET} Var = Valor

Atribui um Valor a uma Variável. O Valor pode ser uma constante, uma outravariável ou o resultado de uma expressão. Refira-se à seção anterior sobreoperadores p/ mais informação. A palavra-chave LET é opcional.

LET B0 = B1 * B2 + B3B0 = Sqr W1

Page 82: Manual Picbasic em Portugues

PicBasic Pro Compiler

72

5.28. LCDOUT

LCDOUT Item{,Item...}

Mostra Items em um Display de Cristal Líquido inteligente. O PBP suportamódulos LCD c/ um controlador Hitachi 44780 ou equivalente. EstesLCDs geralmente têm um cabeçalho de 14 ou 16 pinos em linha simples oudupla em uma extremidade.

Se um jogo-da-velha (#) precede um Item, a representação ASCII p/ cadadígito é enviada ao LCD. LCDOUT também pode usar qualquer um dos modificadoresusados c/ SEROUT2. Veja a seção sobre SEROUT2 p/ esta informação.

Um programa deve esperar por pelo menos meio segundo antes de enviar o primeirocomando a um LCD. Pode levar um bom tempo p/ um LCD se inicializar.

São enviados comandos ao LCD enviando-se um $FE seguido pelocomando. Alguns comandos úteis estão listados na seguinte tabela:

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

Note que há um comando p/ mover o cursor p/ o início da segunda linhade um display de 2 linhas. Para a maioria dos LCDs, os caracteres mostradose linhas não são consecutivos na memória do display - pode haver uma interrupçãoentre posições. Para a maioria dos displays de 16x2, a primeira linha inicia em $0e a segunda linha inicia em $40. O comando:

LCDOUT $FE, $C0ajusta o display p/ começar a escrever caracteres no início da segundalinha. Displays de 16x1 geralmente são formatados como displays de 8x2 c/ uma

Page 83: Manual Picbasic em Portugues

PicBasic Pro Compiler

73

interrupção entre as posições de memória p/ os primeiros e segundos 8 caracteres.Displays de 4 linhas também têm um mapa de memória misturado.

Veja a folha de dados p/ o dispositivo LCD em particular p/ as posições dememória de caracteres e comandos adicionais.

LCDOUT $FE, 1, “Alo” ‘ Limpa display e mostra“Alo”

LCDOUT B0, #B1

O LCD pode estar conectado ao PICmicro usando barramentos de 4 bits oude 8 bit. Se o de 8 bits for usado, todos os 8 bits devem estar em uma porta. Se ode 4 bits for usado, ele deve estar conectado aos 4 bits inferiores ou aos 4 bits su-periores de uma porta. Habil. e Sel. de Registrador podem estar conectados a qualquerpino da porta. R/W deve ser aterrado já que o comando LCDOUT é apenas deescrita.

PBP assume que o LCD está conectado a pinos específicos a não ser que seja ditode outra forma. Ele assume que o LCD será usado c/ um barram. de 4 bits c/ as linhasde dados DB4 - DB7 conectadas à PORTA.0 - PORTA.3 do PICmicro, Sel. deRegistrador à PORTA.4 e Habilitação à PORTB.3.

Ele também é pré-ajustado p/ inicializar o LCD p/ um display de 2 linhas.

Para alterar esta configuração, coloque um ou mais dos seguintes DEFINEs, todos emmaiúsculas, no topo do seu programa PicBasic Pro:

‘ Fixa porta de Dados do LCDDEFINE LCD_DREG PORTB‘ Fixa bit de Dados inicial (0 ou 4) se o barram. for de 4 bitsDEFINE LCD_DBIT 4‘ Fixa porta de Selecao de Registrador do LCDDEFINE LCD_RSREG PORTB‘ Fixa bit de Selecao do Registrador do LCDDEFINE LCD_RSBIT 1‘ Fixa porta de Habilitacao do LCDDEFINE LCD_EREG PORTB‘ Fixa bit de Habilitacao do LCDDEFINE LCD_EBIT 0‘ Fixa tamanho do barramento do LCD (4 or 8 bits)DEFINE LCD_BITS 4‘ Fixa o numero de linhas no LCDDEFINE LCD_LINES 2

Page 84: Manual Picbasic em Portugues

PicBasic Pro Compiler

74

Este arranjo dirá ao PBP que um LCD de 2 linhas está ligado no modo de 4 bits c/ obarram. de dados nos 4 bits superiores de PORTB, Sel. de Reg. em PORTB.1, eHabilitação em PORTB.0.

O seguinte esquema mostra uma maneira de se ligar um LCD a umPICmicro:

Page 85: Manual Picbasic em Portugues

PicBasic Pro Compiler

75

5.29. LOOKDOWN

LOOKDOWN Pesquisa,[Constante{,Constante...}],Var

A declaração LOOKDOWN pesquisa uma lista de valores de Constante de 8 bits p/a presença de um valor Pesquisa. Se encontrado, o índice da constante coin-cidente é guardado em Var. Assim, se o valor encontrado for o primeiro da lista, Varé fixado em zero. Se for o segundo da lista, Var é fixado em um. E assim vai. Se nãofor encontrado, nenhuma ação é tomada e Var permanece inalterado.

A lista de constantes pode ser uma mistura de constantes numéricas e string. Cada caractere em uma string é tratado como uma constante separada c/ ovalor ASCII do caractere. Cadeias de variáveis c/ um índice de variável não podemser usadas em LOOKDOWN embora cadeias de variáveis c/ um índice constante sãopermitidas.

Serin 1,N2400,B0 ‘ Pega o caractere hexadecimaldo Pino1 serialmente

LOOKDOWN B0,[“0123456789ABCDEF”],B1 ‘ Convertecaracterehexadecimal emB0 p/valordecimal B1

Serout 0,N2400,[#B1] ‘ Envia valor decimal p/Pino0 serialmente

Page 86: Manual Picbasic em Portugues

PicBasic Pro Compiler

76

5.30. LOOKDOWN2

LOOKDOWN2 Pesquisa,{Teste}[Valor{,Valor...}],Var

A declaração LOOKDOWN2 pesquisa uma lista de Valores p/ a presençado valor Pesquisa. Se encontrado, o índice da constante coincidente éguardado em Var. Assim, se o valor encontrado for o primeiro da lista, Var é fixado emzero. Se for o segundo da lista, Var é fixado em um. E assim vai. Se não for encontrado,nenhuma ação é tomada e Var permanece inalterado.

O parâmetro opcional Test pode ser usado p/ executar um teste que nãoseja igual a (“=”) quando pesquisar a lista. Por exemplo, a lista poderiaser pesquisada p/ o primeiro Valor maior que o parâmetro Pesquisausando “>” 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 bitsand variáveis. Cada caractere numa string é tratado como uma constanteseparada igual ao valor ASCII do caractere. Expressões não podem serusadas 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 LOOKDOWN2embora cadeias de variáveis c/ um índice constante sejam permitidas.

LOOKDOWN2 gera código que é cerca de 3 vezes maior do queLOOKDOWN. Se a lista de pesquisa é feita apenas de constantes de 8 bits estrings, use LOOKDOWN.

LOOKDOWN2 W0,[512,W1,1024],B0LOOKDOWN2 W0,<[10,100,1000],B0

Page 87: Manual Picbasic em Portugues

PicBasic Pro Compiler

77

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 primeiraConstante. Se Indice é um, Var é fixado como o valor da segundaConstante. E assim vai. Se Indice é maior que ou igual ao númerode entradas na lista constantes, nenhuma ação é tomada e Var permaneceinalterado.

A lista de constantes pode ser uma mistura de constantes numéricas e string.Cada caractere numa string é tratado como uma constante separada igual aovalor ASCII do caractere. Cadeias de variáveis c/ um índice variável não podemser usadas em LOOKUP embora cadeias de variáveis c/ um índice constante sãopermitidas.

For B0 = 0 to 5 ‘ Conta de 0 a 5LOOKUP B0,[“A l o !”],B1 ‘ Pega caractere

numero B0 dastring p/ variavelB1

Serout 0,N2400,[B1] ‘ Envia caractereem B1 p/ Pino0serialmente

Next B0 ‘ Faz proximo caractere

Page 88: Manual Picbasic em Portugues

PicBasic Pro Compiler

78

5.32. LOOKUP2

LOOKUP2 Indice,[Valor{,Valor...}],Var

A declaração LOOKUP2 pode ser usada p/ recuperar entradas de uma tabela deValores. Se Indice é zero, Var é fixado ao primeiro Valor. Se Indice é um,Var é fixado ao segundo Valor. E assim vai. Se Indice é maior que ouigual ao número de entradas na lista, nenhuma ação é tomada e Varpermanece inalterado.

A lista Valor pode ser uma mistura de constantes numéricas e string de 16 bitse variáveis. Cada caractere numa string é tratado como uma constanteseparada igual ao valor ASCII do caractere. Expressões não podem serusadas 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 LOOKUP2embora cadeias de variáveis c/ um índice constante sejam permitidas.

LOOKUP2 gera código que é cerca de 3 vezes maior do que LOOKUP. Sea lista Valor é feita apenas de constantes e strings de 8 bits, useLOOKUP.

LOOKUP2 B0,[256,512,1024],W1

Page 89: Manual Picbasic em Portugues

PicBasic Pro Compiler

79

5.33. LOW

LOW Pino

Leva o Pino especificado a nível baixo. Pino é automaticamente fixado como saída. Pinopode 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).

LOW 0 ‘ Fixa Pino0 como saída e o leva a nível baixo(0 volts)

LOW PORTA.0 ‘ Torna PORTA, pino 0 uma saída eo leva a nível baixo (0 volts)

led var PORTB.0 ‘ Define pino do LEDLOW led ‘ Torna pino do LED uma saída e

o leva a nível baixo (0 volts)

Alternativamente, se o pino já for uma saída, um meio mais rápido e curto(partindo de um standpoint de código gerado) de levá-lo a nível baixo seria:

PORTB.0 = 0 ‘ Leva PORTB, pino 0 p/ nivel baixo

Page 90: Manual Picbasic em Portugues

PicBasic Pro Compiler

80

5.34. NAP

NAP Periodo

Coloca o microcontrolador em modo de baixo consumo por curtos períodos de tempo.Durante este NAP, o consumo de força é reduzido ao mínimo. Os períodoslistados são apenas aproximações porque a temporização é derivada doTimer de Watchdog o qual é comandado via R/C e pode variar muito de chip p/chip e com a temperatura. Já que o NAP usa o Timer de Watchdog, suatemporização é independente da freqüência do oscillator.

Periodo Atraso (Aprox.)

0 18 milisegundos

1 36 milisegundos

2 72 milisegundos

3 144 milisegundos

4 288 milisegundos

5 576 milisegundos

6 1.152 segundos

7 2.304 segundos

NAP 7 ‘ Pausa em baixo consumo por cerca de 2.3 segundos

Page 91: Manual Picbasic em Portugues

PicBasic Pro Compiler

81

5.35. ON INTERRUPT

ON INTERRUPT GOTO Rotulo

ON INTERRUPT permite a manipulação das interrupções do microcon-trolador por uma subrotina do PicBasic Pro.

Há 2 maneiras de manipular interrupções usando o PicBasic Pro Compiler. A primeira é escrever uma rotina de interrupções em linguagem assembly. Esta é amaneira de manipular interrupções c/ a menor latência e menor overhead.Este método é discutido em tópicos avançados em uma seção mais tarde.

O segundo método é escrever um manipulador de interrupções em PicBasic Pro. Istose parece c/ uma subrotina do PicBasic Pro mas termina c/ um RESUME.

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 deinterrupçõ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 estavaquando a interrupção ocorreu, continuando de onde ele havia parado.

DISABLE e ENABLE permitem que diferentes seções de um programa doPicBasic Pro executem s/ a possibilidade de serem interrompidas. Olugar mais notável p/ se usar DISABLE é logo antes do próprio manipuladorde interrupções. Ou o manipulador de interrupções pode ser colocado antes dadeclaração ON INTERRUPT já que a flag de interrupções não é checada antes doprimeiro ON INTERRUPT num programa.

Latência é o tempo que leva da hora da própria interrupção àhora que o manipulador de interrupções entra. Já que as decl. do PicBasic Pro nãosão re-entrantes (ex. você não pode executar uma outra declaração do PicBasic Proenquanto uma estiver sendo executada), pode haver considerável latência antesda rotina de interrupções ser introduzida.

O PBP não introduzirá o manipulador de interrupções BASIC até que tenha acabadoa 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. Oprograma deve ser projetado c/ esta latência em mente. Se forinaceitável e as interrupções precisarem ser manipuladas mais rapidamente,uma rotina de interrupção em linguagem assembly deve ser usada.

Page 92: Manual Picbasic em Portugues

PicBasic Pro Compiler

82

O overhead é um outro problema. ON INTERRUPT irá adicionar uma instruçãoapós cada declaração p/ checar se uma interrupção ocorreu ou não.DISABLE desliga a adição desta instrução. ENABLE a liga novamente.Geralmente a instrução adicional não será um grandeproblema, mas programas longos em microcontroladores pequenos podem sofrer.

Mais do que um ON INTERRUPT podem ser usados em um programa.

ON INTERRUPT GOTO myint ‘ Manip. de interruções émyint

INTCON = %10010000 ‘ Habil. interrupção RB0

. . .

DISABLE ‘ Desab. interrupções nomanipulador

myint: led = 1 ‘ Liga o LED quando interrompidoRESUME ‘ Retorna ao progr. principalENABLE ‘ Habilita interrupções após

manipulador

Para desligar as interrupções permanentemente (ou até serem necessáriasnovamente) uma vez que ON INTERRUPT tenha sido usado, fixe INTCON em $80:

INTCON = $80

Page 93: Manual Picbasic em Portugues

PicBasic Pro Compiler

83

5.36. OUTPUT

OUTPUT Pino

Torna o Pino especificado uma saída. Pino pode ser uma constante, 0 - 15, ouuma variável que contenha um número 0 - 15 (ex. B0) ou um nome de pino (ex.PORTA.0).

OUTPUT 0 ‘ Torna Pino0 uma saídaOUTPUT PORTA.0 ‘ Torna PORTA, pino 0 uma saída

Alternativamente, o pino pode ser fixado como saída de uma maneira maisrápida e curta (partindo de um standpoint de código gerado):

TRISB.0 = 0 ‘ Fixa PORTB, pino 0 comosaída

Todos os pinos numa porta podem ser fixados como saídas ajustando-se todoo registrador TRIS de uma só vez:

TRISB = %00000000 ‘ Fixa todo o PORTB como saída

Page 94: Manual Picbasic em Portugues

PicBasic Pro Compiler

84

5.37. PAUSE

PAUSE Periodo

Pausa o programa por Periodo milisegundos. Periodo é de 16 bits, entãoatrasos podem ser de até 65,535 milisegundos (pouco mais de um minuto). Dife-rente das outras funções de atraso (NAP e SLEEP), PAUSE não põe omicrocontrolador em modo de baixo consumo. Assim, PAUSE consome maispotência mas é também muito mais preciso. Ele tem a mesma precisão que oclock do sistema.

PAUSE assume uma freqüência de oscilador de 4Mhz. Se um oscilador diferentede 4Mhz é usado, o PBP deve ser informado usando um comando DEFINE OSC. Veja a seção sobre velocidade p/ mais informação.

PAUSE 1000 ‘ Atraso de 1 segundo

Page 95: Manual Picbasic em Portugues

PicBasic Pro Compiler

85

5.38. PAUSEUS

PAUSEUS Periodo

Pausa o programa por Periodo microsegundos. Periodo é de 16 bits, entãoatrasos podem ser de até 65,535 microsegundos. Diferente das outras funçõesde atraso (NAP e SLEEP), PAUSEUS não põe o microcontroladorem modo de baixo consumo. Assim, PAUSEUS consome mais potência mas étambém muito mais preciso. Ele tem a mesma precisão que o clockdo sistema.

PAUSEUS toma um número mínimo de ciclos p/ operar. Por causa distoe dependendo da freqüência do oscilador, atrasos de menos que umnúmero mínimo de microsegundos não são possíveis usando PAUSEUS.Para obter atrasos precisos menores que isto, use uma rotina em linguagemassembly em uma construção ASM..ENDASM. A tabela abaixo lista onúmeo mínimo de microsegundos obteníveis em uma freqüência de osciladorparticular.

OSC Atraso mínimo

3 (3.58) 20us

4 24us

8 12us

10 8us

12 7us

16 5us

20 3us

PAUSEUS assume uma freqüência de oscilador de 4Mhz. Se um oscilador diferentede 4Mhz é usado, o PBP deve ser informado usando um comando DEFINE OSCVeja a seção sobre velocidade p/ mais informação.

PAUSEUS 1000 ‘ Atraso de 1 milisegundo

Page 96: Manual Picbasic em Portugues

PicBasic Pro Compiler

86

5.39. PEEK

PEEK Endereco,Var

Lê o registrador do microcontrolador no Endereco especificado e guardao resultado em Var. Características especiais do PICmicro como os conversores A/De portas adicionais de E/S podem ser lidas usando PEEK.

PEEK e POKE permitem acesso direto a todos os registradores num PICmicroincluindo PORTA, PORTB, PORTC, PORTD, PORTE e seusregistradores de direção de dados (TRIS) associados. PEEK e POKE operam emtodos os bits, ex. o byte inteiro, do registrador em particular de uma vez. Quandovocê POKEa dados ao PORTA, a porta inteira é atualizada, não apenasum bit individual.

PEEK PORTA,B0 ‘ Pega estado atual dos pinos em PORTAp/ variavel B0

O PicBasic Pro Compiler pode acessar diretamente os registradores e bitss/ a necessidade de PEEK e POKE. É recomendado que este acessodireto seja usado em vez de PEEK e POKE.

B0 = PORTA ‘ Pega estado atual dos pinos em PORTAp/ B0

Page 97: Manual Picbasic em Portugues

PicBasic Pro Compiler

87

5.40. POKE

POKE Endereco,Valor

Escreve Valor no registrador do microcontrolador no Endereco especificado.Características especiais do PICmicro como conversores A/D e portas de E/Sadicionais podem ser escritas usando POKE.

POKE $85,0 ‘ Escreve 0 no registrador hexadecimal 85(Fixa todo o PORTA como saidas)

O PicBasic Pro Compiler pode acessar diretamente os registradores e bitss/ a necessidade de PEEK e POKE. É recomendado que este acessodireto seja usado em vez de PEEK e POKE.

TRISA = 0 ‘ Fixa todo o PORTA como saidasPORTA.0 = 1 ‘ Leva o bit 0 de PORTA a nivel alto

Page 98: Manual Picbasic em Portugues

PicBasic Pro Compiler

88

5.41. POT

POT Pino,Escala,Var

Lê um potenciômetro (ou algum outro dispositivo resistivo) em Pino. Pinopode 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).

A resistência é medida contando a descarga de um capacitoratravés do resistor (tipicamente 5K a 50K). Escala é usado p/ ajuste deconstantes RC variantes. Para constantes RC maiores, Escala deve serabaixado (um valor mínimo de um). Para constantes RC menores, Escala deveser fixado em seu valor máximo (255). Se Escala for ajustado corretamente, Vardeverá ser zero perto da resistência mínima e 255 perto da resistência máxima.

Infelizmente, Escala deve ser determinado experimentalmente. Para isto, fixeo dispositivo sob medição p/ a resistência máxima e leia-o c/Escala fixo em 255. Sob estas condições, Var irá produzir umvalor apropriado p/ Escala. (NOTA: Este é o mesmo tipo de processorealizado pela opção Alt-P do ambiente BS1).

0.1uF

5-50KPin

POT 3,255,B0 ‘ Lê o potenciômetro noPino3 p/ determinar escala

Serout 0,N2400,[#B0] ‘ Envia valor do potserialmente ao Pino0

Page 99: Manual Picbasic em Portugues

PicBasic Pro Compiler

89

5.42. PULSIN

PULSIN Pino,Estado,Var

Mede a largura do pulso em Pino. Se Estado é zero, a larg. de um pulso baixoé medida. Se Estado é um, a largura de um pulso alto é medida.A largura medida é colocada em Var. Se a borda do pulso nunca aconteceou a largura do pulso é grande demais p/ medir, Var é fixo em zero. Seuma variável de 8 bits é usada, somente o LSB da medição de 16 bits éusada. Pino pode ser uma constante, 0 - 15, ou uma variável que contenha umnúmero 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).

A resolução de PULSIN é dependente da freqüência do oscilador. Seum oscilador de 4Mhz é usado, a largura do pulso é retornada em incrementosde 10us. Se um oscilador de 20Mhz é usado, a largura do pulso terá umaresolução de 2us. Definir um valor OSC não tem efeito em PULSIN. Aresolução sempre muda c/ a velocidade atual do oscilador.

‘ Mede pulso alto em Pino4 guardado em W3PULSIN PORTB.4,1,W3

Page 100: Manual Picbasic em Portugues

PicBasic Pro Compiler

90

5.43. PULSOUT

PULSOUT Pino,Periodo

Gera um pulso em Pino de Periodo especificado. O pulso é geradocomutando o pino duas vezes, assim o estado inicial do pino determina apolaridade do pulso. Pino é automaticamente fixado como saída. Pino pode seruma constante, 0 - 15, ou uma variável que contenha um número 0 - 15 (ex. B0)ou um nome de pino (ex. PORTA.0).

A resolução de PULSOUT é dependente da freqüência do oscillator.Se um oscilador de 4Mhz é usado, o Periodo do pulso gerado será emincrementos de 10us. Se um oscilador de 20Mhz é usado, Periodo terá uma re-solução de 2us. Definir um valor OSC não tem efeito em PULSOUT. Aresolução sempre muda c/ a velocidade atual do oscilador.

‘ Envia um pulso de 1mSec (em 4Mhz) ao Pino5PULSOUT PORTB.5,100

Page 101: Manual Picbasic em Portugues

PicBasic Pro Compiler

91

5.44. PWM

PWM Pino,Duty,Ciclo

Produz um trem de pulsos em modulação por largura de pulso em Pino. Cada ciclo dePWM consiste de 256 passos. O Duty cycle p/ cada ciclo PWMvai de 0 (0%) a 255 (100%). Este ciclo PWM é repetido Ciclovezes. Pino pode ser uma constante, 0 - 15, ou uma variável que contenhaum número 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).

O tempo do Ciclo do PWM é dependente da freqüência do oscilador. Se umoscilador de 4Mhz é usado, cada Ciclo duraria cerca de 5ms. Se umoscilador de 20Mhz é usado, cada Ciclo teria cerca de 1ms de comprimento.Definir um valuor OSC não tem nenhum efeito em PWM. O tempo de Ciclosempre muda c/ a velocidade atual do oscilador.

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 tantocom sujeira, e não uma linda série de ondas quadradas. Algum tipo defiltro é necessário p/ tornar o sinal em algo útil. Um circuito RCpode ser usado como um simples conversor D/A:

10K

1uF

Pino Saída Analóg.

PWM PORTB.7,127,100 ‘ Envia um sinal PWM com50% duty cycle ao Pino7 por100 ciclos

Page 102: Manual Picbasic em Portugues

PicBasic Pro Compiler

92

5.45. RANDOM

RANDOM Var

Executa uma iteração de pseudo-randomização em Var. Var deve seruma variável de 16 bits. Cadeias de variáveis c/ um índice variável não podem serusadas em RANDOM embora cadeias de variáveis c/ um índice constante sejam permitidas. Var é usado tanto como a semente e p/ guardar o resultado. O algoritmopseudo-randômico usado tem um comprimento de caminhada de 65535(somente o zero não é produzido).

RANDOM W4 ‘ Pega um número randômico p/ W4

Page 103: Manual Picbasic em Portugues

PicBasic Pro Compiler

93

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ávelque 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 dacarga (ou vice versa) de um capacitor através do resistor (tipicamente 5K a50K).

A resolução de RCTIME é dependente da freqüência do oscilador. Seum oscilador de 4Mhz é usado, o tempo no estado é retornado em incre-mentos de 10us. Se um oscilador de 20Mhz é usado, o tempo no estado terá umaresolução de 2us. Definir um valor OSC não tem nenhum efeito em RCTIME. Aresolução sempre muda c/ a velocidade atual do oscilador.

Se o pino nunca mudar de estado, 0 é retornado.

Low PORTB.3 ‘ Descarrega cap p/ iniciarPause 10 ‘ Descarrega por 10msRCTIME PORTB.3,0,W0 ‘ Lê potenciômetro no

Pino3

Page 104: Manual Picbasic em Portugues

PicBasic Pro Compiler

94

5.47. READ

READ Endereco,Var

Lê a EEPROM no-chip no Endereco especificado e guarda oresultado em Var. Esta instrução só pode ser usada c/ um PICmicro quetenha uma área de dados de EEPROM no-chip tal como o PIC16F84 ouPIC16C84.

READ 5,B2 ‘ Coloca o valor da posicao 5 da EEPROMem B2

Page 105: Manual Picbasic em Portugues

PicBasic Pro Compiler

95

5.48. RESUME

RESUME {Rotulo}

Prossegue de onde o programa deixou após manipular uma interrupção. RESUMEsimilar a RETURN mas é usado ao final de uma interrupção do manipuladordo PicBasic Pro.

Se o Rotulo opcional é usado, a execução do programa irá continuar noRotulo ao invés de onde estava quando foi interrompida. Neste caso, quaisqueroutros endereços de retorno na pilha não serão mais acessíveis.

Veja ON INTERRUPT p/ mais informação.

clockint: seconds = seconds + 1 ‘ Conta tempoRESUME ‘ Retorna ao programa apos

interrupcao

error: High errorled ‘ Liga LED de erroRESUME restart ‘ Continua em outro lugar

Page 106: Manual Picbasic em Portugues

PicBasic Pro Compiler

96

5.49. RETURN

RETURN

Retorna da subrotina. RETURN continua a execução na declaraçãoseguinte ao GOSUB que chamou a subrotina.

Gosub sub1 ‘ Vai p/ subrotina rotulada sub1...

sub1: Serout 0,N2400,[“Almoco”] ‘ Envia “Almoco” aoPino0 serialmente

RETURN ‘ Retorna ao programa principal apos o Gosub

Page 107: Manual Picbasic em Portugues

PicBasic Pro Compiler

97

5.50. REVERSE

REVERSE Pino

Se Pino é uma entrada, ele é fixado como saída. Se Pino é uma saída, ele é fixadocomo entrada. Pino pode ser uma constante, 0 - 15, ou uma variável que contenhaum número 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).

Output 4 ‘ Fixa Pino4 como saidaREVERSE 4 ‘ Altera Pino4 p/ entrada

Page 108: Manual Picbasic em Portugues

PicBasic Pro Compiler

98

5.51. SERIN

SERINPino,Modo,{Timeout,Rotulo,}{[Qual...],}{Item...}

Recebe um ou mais Items no Pino no formato assíncrono padrãousando 8 bits de dados, s/ paridade e um stop bit (8N1). SERIN é similar aocomando Serin do BS1 c/ a adição de um Timeout. Pino éautomaticamente 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 depino (ex.PORTA.0).

Os nomes Mode (ex. T2400) são definidos no arquivo MODEDEFS.BAS.Para usá-los, adicione a linha:

Include “modedefs.bas”

ao topo do programa PicBasic Pro. BS1DEFS.BAS eBS2DEFS.BAS já incluem MODEDEFS.BAS. Não o inclua denovo se um destes arquivos já estiver incluso. Os números Mode podemser usado s/ a inclusão deste arquivo.

Mode No. Mode Baud Rate Estado

T2400 0 2400

VerdadeiroT1200 1 1200

T9600 2 9600

T300 3 300

N2400 4 2400

InvertidoN1200 5 1200

N9600 6 9600N300 7 300

Um Timeout e Label opcionais podem ser inclusos p/ permitir ao programacontinuar se um caractere não for recebido dentro de um certo tempo.Timeout é especificado em unidades de 1 milisegundo.

A lista de ítens de dados a serem recebidos pode ser precedida por um ou maisqualificadores contidos entre colchetes. SERIN deve receber estes bytes na

Page 109: Manual Picbasic em Portugues

PicBasic Pro Compiler

99

ordem exata antes de receber os ítens de dados. Se qualquer byte recebido nãocoincidir c/ o próximo byte na seqüência do qualificador, o processo dequalificação recomeça (ex. o próximo byte recebido é comparado ao primeiroítem na lista do qualificador). Um Qualificador pode ser uma constante, variávelou uma constante string. Cada caractere de uma string é tratado como umqualificador individual.

Uma vez que os qualificadores são satisfeitos, SERIN começa a guardar dados nasvariáveis associadas c/ cada Item. Se o nome da variável é usadosozinho, o valor do caractere ASCII recebido é guardado navariável. Se a variável é precedida por um jogo-da-velha ( # ), SERIN converte umvalor 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 edescartados. Os caracteres não-dígito que terminarem o valor decimaltambém são descartados.

SERIN assume um oscilador de 4Mhz quando gerar sua temporização de bit. Paramanter a temporização de baud rate apropriada c/ outros valores de oscilador, estejacerto de definir (DEFINE) o ajuste OSC ao novo valor do oscilador.

Enquanto conversores de nível RS-232 de um só chip são comuns ebaratos, as excelentes especificações de E/S do PICmicro permitem que a maioriadas aplicações rodem s/ conversores de nível. Ao invés disso, entradas invertidas(N300..N9600) podem ser usadas em conjunto c/ um resistorlimitador de corrente.

22KPino RS-232 TX

RS-232 GND

Pino 3

Pino 5 Pino 7

Pino 2

DB9 DB25

SERIN 1,N2400,[“A”],B0 ‘ Aguarda até que ocaractere “A” sejarecebido serialmente noPino1 e colocado proximoao caractere em B0

Page 110: Manual Picbasic em Portugues

PicBasic Pro Compiler

100

5.52. SERIN2

SERIN2 PinoDados{\PinoFluxo},Mode,{RotuloParidade,}{Timeout,Rotulo,}[Item...]

Recebe um ou mais Items no Pino em formato assíncrono padrão.SERIN2 é similar ao comando Serin do BS2. PinoDados é automaticamentefixado como entrada. O PinoFluxo opcional é automaticamente fixadao como saída.PinoDados e PinoFluxo podem ser uma constante, 0 - 15, ou uma variável quecontenha um número 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).

O pino de controle de fluxo optional, PinoFluxo, pode ser incluso p/ ajudar a evitarque os dados sobrecarreguem o receptor. Se for usado, PinoFluxo éautomaticamente levado ao estado habilitado p/ permitir a transmissão de cadacaractere. Este estado habilitado é determinado pela polaridade dos dadosespecificados por Mode.

Mode é usado p/ especificar o baud rate e parâmetros de operação datransferência serial. Os 13 bits de ordem inferior selecionam o baud rate. O bit 13 selecionaparidade ou s/ paridade. O bit 14 seleciona invertido ou nível real. O bit 15 não éusado.

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

Alguns baud rates padrão estão listados na seguinte tabela.

Baud Rate Bits 0 - 12

300 3313

600 1646

1200 813

2400 396

4800 188

9600 84

19200 32

Page 111: Manual Picbasic em Portugues

PicBasic Pro Compiler

101

O bit 13 seleciona paridade par (bit 13 = 1) ou s/ paridade (bit 13 = 0). Normalmente,as transmissões seriais são 8N1 (8 bits de dados, s/ paridade e 1 bit de parada). Sea paridade é selecionada, os dados são recebidos como 7E1 (7 bits de dados,paridade par e 1 bit de parada).

O bit 14 seleciona o nível dos dados e pinos de controle de fluxo. Se o bit 14 = 0,os dados são recebidos na forma real p/ uso c/ drivers RS-232. Se o bit 14 =1, os dados são recebidos invertidos. Este modo pode ser usado p/ evitara instalação de drivers RS-232.

Alguns exemplos de Mode são: Mode = 84 (9600 bauds, s/ paridade, real),Mode = 16780 (2400 bauds, s/ paridade, invertido), Mode = 27889 (300bauds, paridade par, invertido).

Se RotuloParidade é incluso, este rótulo será endereçado se um caracterec/ erro de paridade é recebido. Ele deve somente ser usado se a paridadepar é selecionada (bit 13 = 1).

Um Timeout e Rotulo opcionais podem ser inclusos p/ permitir ao programacontinuar se um caractere não é recebido dentro de um certo tempo.Timeout é especificado em unidades de 1 milisegundo.

SERIN2 suporta muitos modificadores de dados diferentes que podem ser misturadose combinados livremente dentro de uma única declaração SERIN2 p/ prover váriasformataçõ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 caracteresopcionalmente terminados c/ caractere c

WAIT ( ) Espera por seqüência de caracteres

WAITSTR CadeiaVar{\n} Espera por cadeia de caracteres

1) Uma variável precedida por BIN irá receber a represen-tação ASCII de seu valor binário. Por exemplo, se BIN B0 éespecificado e “1000" é recebido, B0 será fixado em 8.

Page 112: Manual Picbasic em Portugues

PicBasic Pro Compiler

102

2) Uma variável precedida por DEC irá receber a represen-tatção ASCII de seu valor decimal. Por exemplo, se DEC B0 éespecificado e “123" é recebido, B0 será fixado em 123.

3) Uma variável precedida por HEX irá receber a represen-tação ASCII de seu valor hexadecimal. Por exemplo, se HEXB0 é especificado e “FE" é recebido, B0 será fixado em 254.

4) SKIP seguido por uma contagem irá pular aquela quantia de caracteresna corrente de entrada. Por exemplo, SKIP 4 irá pular 4 caracteres..

5) STR seguido por uma variável de cadeia de byte, contagem e caractere termi-nador opcional irá receber uma cadeia de caracteres. O compr. da cadeia édeterminado pela contagem ou quando o caractere opcional éencontrado na entrada.

6) A lista de ítens de dados a serem recebidos pode ser precedida por um oumais qualificadores entre parênteses após WAIT. SERIN2 devereceber estes bytes na ordem exata antes de receber os ítens dedados. Se qualquer byte recebido não coincidir c/ o próx. byte naseqüência do qualificador, o processo de qualificação recomeça (ex. opróx. byte recebido é comparado ao primeiro ítem na lista doqualificador). Um Qualificador pode ser uma constante, variávelou uma constante de string. Cada caractere de uma string é tratado comoum qualificador individual.

7) WAITSTR pode ser usado como WAIT acima p/ forçar SERIN2 aesperar por uma cadeia de caracteres de um compr. opcional antesde proceder.

Uma vez que quaisquer qualificadores WAIT ou WAITSTR são satisfeitos, SERIN2 começaa guardar dados nas variáveis associadas c/ cada Item. Se o nome davariável é usado sozinho, o valor do caractere ASCII recebido é guardadona variável. Se a variável é precedida por BIN, DEC ou HEX, entãoSERIN2 converte um valor binário, decimal ou hexadecimal em ASCII eguarda o resultado naquela variável. Todos os não-dígitos recebidos antes do primeirodígito do valor decimal são ignorados e descartados. O caracterenão-dígito que termina o valor é também descartado.

BIN, DEC e HEX podem ser seguidos por um número. Normalmente, estesmodificadores recebem tantos dígitos quanto há na entrada. Entretanto, se umnúmero segue o modificador, SERIN2 irá sempre receber aquele número dedígitos, pulando dígitos adicionais conforme necessário.

Page 113: Manual Picbasic em Portugues

PicBasic Pro Compiler

103

SERIN2 assume um oscilador de 4Mhz enquanto genera sua temporização de bit. Paramanter a temporização de baud rate apropriada c/ outros valores de oscilador, esteja certode fazer o DEFINE do parâmetro OSC p/ o novo valor do oscilador.

Enquanto que conversores de nível RS-232 num só chip são comuns ebaratos, graças à atual implementação da RS-232 e as excelentesespecificações de E/S do PICmicro, a maioria das aplicações não requerem conver-sores de nível. Em lugar disso, TTL invertido (Mode bit 14 = 1) pode ser usado. Umresistor limitador de corrente é sugerido (supõe-se que a RS-232 sejatolerante a curtos).

22KPino RS-232 TX

RS-232 GND

Pino 3

Pino 5 Pino 7

Pino 2

DB9 DB25

‘ Espera até que o caractere “A” seja recebidoserialmente no Pino1 e coloca prox. caractere em B0SERIN2 1,16780,[wait (“A”),B0]

‘ Pula 2 caracteres e pega um número decimal de 4 digitosSERIN2 PORTA.1,84,[skip 2,dec4 B0]

SERIN2 PORTA.1\PORTA.0,84,100,tlabel,[wait (“x”,b0), str ar]

Page 114: Manual Picbasic em Portugues

PicBasic Pro Compiler

104

5.53. SEROUT

SEROUT Pino,Modo,[Item{,Item...}]

Envia um ou mais ítens ao Pino em formato assíncrono padrão usando8 bits de dados, s/ paridade e uma parada (8N1). SEROUT é similar ao comandoSerout do BS1. Pino é automaticamente fixado como saída. Pino pode ser umaconstante, 0 - 15, ou uma variável que contenha um número 0 - 15 (ex. B0) ouum nome de pino (ex. PORTA.0).

Os nomes Mode (ex. T2400) são definidos no arquivo MODEDEFS.BAS. Para usá-los, adicione a linha:

Include “modedefs.bas”

no topo do programa PicBasic Pro. BS1DEFS.BAS eBS2DEFS.BAS já incluem MODEDEFS.BAS. Não inclua-onovamente se um destes arquivos já estiver incluso. Os números Mode podemser usados s/ incluir este arquivo.

Page 115: Manual Picbasic em Portugues

PicBasic Pro Compiler

105

Mode No. Mode Baud Rate Estado

T2400 0 2400

Acionam. RealT1200 1 1200

T9600 2 9600

T300 3 300

N2400 4 2400

Acionam.Invertido

N1200 5 1200

N9600 6 9600

N300 7 300

OT2400 8 2400

Aberto RealOT1200 9 1200

OT9600 10 9600

OT300 11 300

ON2400 12 2400

Aberto InvertidoON1200 13 1200

ON9600 14 9600

ON300 15 300

SEROUT suporta três tipos de dados diferentes que podem ser misturados ecombinados livremente dentro de uma única declaração SEROUT.

1) Uma constante string é enviada como uma string de caracteres literal.2) Um valor numérico (uma variável ou uma constante) irá enviar o

caractere ASCII correspondente. Mais notavelmente, 13 é o retornodo carro e 10 é o avanço de linha.

3) Um valor numérico precedido por um jogo-da-velha ( # ) irá enviar arepresentação ASCII de seu valor decimal. Por exemplo, se W0 =123, então #W0 (ou #123) irá enviar '1', '2', '3'.

SEROUT assume um oscilador de 4Mhz enquanto gera sua temporização de bit. Paramanter a temporização de baud rate apropriada c/ outros valores de oscilador, estejacerto de fazer o DEFINE do parâmetro OSC p/ o novo valor do oscilador.

Page 116: Manual Picbasic em Portugues

PicBasic Pro Compiler

106

Em alguns casos, as taxas de transmissão das instruções SEROUT podemapresentar caracteres muito rapidamente ao dispositivo receptor. Um DEFINEadiciona cadência de caractere às transmissões de saída serial. Isto permitetempo adicional entre os caracteres à medida em que são transmitidos. UmDEFINE de cadência de caracteres permite um atraso de 1 a 65,535 micro-segundos (.001 a 65.535 milisegundos) entre cada caractere transmitido.

Por exemplo, p/ pausar 1 milisegundo entre a transmissão de cadacaractere:

DEFINE CHAR_PACING 1000

Enquanto que conversores de nível RS-232 de um só chip são comuns ebaratos, graças à atual implementação RS-232 e as excelentesespecificações de E/S do PICmicro, a maioria das aplicações não requerem conver-sores de nível. Em lugar disso, TTL invertido (N300..N9600) pode ser usado.Um resistor limitador de corrente é sugerido (supõe-se que o RS-232 sejatolerante a curtos).

1KPino RS-232 RX

RS-232 GND

Pino 2

Pino 5 Pino 7

Pino 3

DB9 DB25

SEROUT 0,N2400,[#B0,10] ‘ Envia o valor ASCIIde B0 seguido por um avan-co de linha ao Pino0serialmente

Page 117: Manual Picbasic em Portugues

PicBasic Pro Compiler

107

5.54. SEROUT2

SEROUT2 PinoDados{\PinoFluxo},Modo,{Passo,}{Timeout,Rotulo,}[Item...]

Envia um ou mais Items ao PinoDados em formato assíncrono padrão.SEROUT2 é similar ao comando Serout do BS2. PinoDados éautomaticamente fixado como saída. O PinoFluxo opcional é automaticamentefixado como entrada. PinoDados e PinoFluxo podem 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).

O pino de controle de fluxo opcional, PinoFluxo, pode ser incluído p/ ajudar a impedirque os dados sobrecarreguem o receptor. Se ele é usado, os dados seriais não serãoenviados até que PinoFluxo esteja no estado apropriado. Este estado é determinadopela polaridade dos dados especificados por Mode.

Um Timeout e Label opcionais podem ser incluídos p/ permitir que o programacontinue se o PinoFluxo não mudar p/ o estado habilitado dentro deum certo tempo. Timeout é especificado em unidades de 1 milisegundo.

Em alguns casos, as taxas de transmissão das instruções SEROUT2 podemapresentar caracteres muito rapidamente p/ o dispositivo receptor. Pode não serdesejável usar um pino extra p/ controle de fluxo. Um Passo opcional pode serusado p/ adicionar cadência de caractere às transmissões de saída seriais. Istopermite tempo adicional entre os caracteres à medida em que eles são transmitidos.O cadenciamento de caractere permite um atraso de 1 a 65,535 milisegundosentre cada caractere transmitido.

Mode é usado p/ especificar o baud rate e parâmetros operacionais datransferência serial. Os 13 bits de ordem inferior selecionam o baud rate. O bit 13seleciona paridade ou s/ paridade. O bit 14 seleciona invertido ou nível real. O bit 15seleciona se é por acionamento ou aberto.

Os bits de baud rate especificam o tempo de bit em microsegundos - 20. Para acharo valor p/ um dado baud rate, use a equação:

(1000000 / baud) - 20

Alguns baud rates padrão estão listados na seguinte tabela.

Page 118: Manual Picbasic em Portugues

PicBasic Pro Compiler

108

Baud Rate Bits 0 - 12

300 3313

600 1646

1200 813

2400 396

4800 188

9600 84

19200 32

O bit 13 seleciona paridade par (bit 13 = 1) ou s/ paridade (bit 13 = 0). Normalmente,as transmissões seriais são 8N1 (8 bits de dados, s/ paridade e 1 bit de parada). Sea paridade é selecionada, os dados são enviados como 7E1 (7 bits de dados,paridade par e 1 bit de parada).

O bit 14 seleciona o nível dos dados e pinos de controle de fluxo. Se o bit 14 = 0,os dados são enviados na forma real p/ uso c/ drivers RS-232. Se o bit14 = 1, osdados são enviados invertidos. Este modo pode ser usado p/ evitar instalardrivers RS-232.

O bit 15 seleciona se o pino de dados é sempre acionado (bit 15 = 0), ou éaberto em um dos estados (bit 15 = 1). O modo aberto pode ser usado p/encadear muitos dispositivos juntos no mesmo barramento serial.

Alguns exemplos de Modo são: Modo = 84 (9600 bauds, s/ paridade, real,sempre acionado), Modo = 16780 (2400 bauds, s/ paridade, invertido, acionado),Modo = 60657 (300 bauds, paridade par, invertido, aberto).

SEROUT2 suporta muitos modificadores de dados diferentes que podem sermisturados e combinados livremente dentro de uma única declaração SEROUT2p/ prover vários formatos de saída.

Page 119: Manual Picbasic em Portugues

PicBasic Pro Compiler

109

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

1) Uma constante de string é enviada como uma cadeia de caracteres literal.2) Um valor numérico (uma variável ou uma constante) irá enviar o

caractere ASCII correspondente. Mais notavelmente, 13 é o retornodo carro e 10 é o avanço de linha.

3) Um valor numérico precedido por BIN irá enviar a representaçãoASCII de seu valor binário. Por exemplo, se B0 = 8, entãoBIN B0 (ou BIN 8) irá enviar “1000".

4) Um valor numérico precedido por DEC irá enviar a representaçãoASCII de seu valor decimal. Por exemplo, se B0 = 123,então DEC B0 (ou DEC 123) irá enviar “123".

5) Um valor numérico precedido por HEX irá enviar a representaçãoASCII de seu valor hexadecimal. Por exemplo, se B0 =254, então HEX B0 (ou HEX 254) irá enviar “FE”.

6) REP seguido por um caractere e contagem irá repetir o caractere,tempo de contagem. Por exemplo, REP “0"\4 irá enviar “0000".

7) STR seguido por uma variável de cadeia de bytes e contagem opcional iráenviar uma cadeia de caracteres. O tamanho da cadeia é determinadopela contagem ou quando um caractere 0 é encontrado na cadeia.

BIN, DEC e HEX podem ser precedidos ou seguidos por muitos parâmetrosopcionais. Se qualquer um deles for precedido por um I (p/ indicado), asaída será precedida por um “%”, “#” ou “$” p/ indicar que o valorseguinte é binário, decimal ou hexadecimal.

Se qualquer um for precedido por um S (p/ assinado), a saída será enviadaprecedida por um “-“ se the o bit de ordem superior dos dados é ligado. Isto permitea transmissão de números negativos. Tenha em mente que toda a aritméticae comparações no PBP não são assinadas. Entretanto, aritmética não-assinadapode render resultados assinados. Por exemplo, pegue o caso de B0 = 9 - 10.O resultado de DEC B0 seria “255". Enviando SDEC B0 daria “-

Page 120: Manual Picbasic em Portugues

PicBasic Pro Compiler

110

1" desde que o bit de ordem superior seja enviado. Então c/ um pouco de manha, aaritmética não-assinada do PBP pode render resultados assinados.

BIN, DEC e HEX podem também serem seguidos por um número. Normalmente, estesmodificadores 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. Porexemplo, BIN6 8 enviaria “001000" e BIN2 8 enviaria “00".

Qualquer uma ou todas as combinações de modificadores podem ser usadasde uma vez. Por exemplo, ISDEC4 B0.

SEROUT2 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.

Enquanto que conversores de nível RS-232 de um só chip são comuns ebaratos, graças à atual implementação da RS-232 e as excelentesespecificações de E/S do PICmicro, a maioria das aplicações não requer conversoresde nível. Em lugar disso, TTL invertido (Mode bit 14 = 1) pode ser usado. Umresistor limitador de corrente é sugerido (supõe-se que a RS-232seja tolerante a curtos).

1KPino RS-232 RX

RS-232 GND

Pino 2

Pino 5 Pino 7

Pino 3

DB9 DB25

‘ Envia o valor ASCII de B0 seguido por umavanco de linha ao Pino0 serialmente a 2400 baudsSEROUT2 0,16780,[dec B0,10]

‘ Envia “B0 =” seguido pelo valor binário de B0p/ PORTA pino 1 serialmente a 9600 baudsSEROUT2 PORTA.1,84,[“B0=”, ihex4 B0]

Page 121: Manual Picbasic em Portugues

PicBasic Pro Compiler

111

5.55. SHIFTIN

SHIFTIN PinoDados,PinoClock,Modo,[Var{\Bits}...]

Clock em PinoClock, desloca os bits de forma síncrona e p/ dentro em PinoDados e guardao(s) byte(s) recebidos em Var. PinoClock e PinoDados podem 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).

\Bits opcionalmente especifica o número de bits a serem deslocados. Se não forespecificado, são deslocados 8 bits, independente do tipo de variável.

Os nomes Modo (ex. MSBPRE) são definidos no arquivo MODEDEFS.BAS.Para usá-los, adicione a linha:

Include “modedefs.bas”

ao topo do programa PicBasic Pro. BS1DEFS.BAS eBS2DEFS.BAS já incluem MODEDEFS.BAS. Não inclua-o novamente seum destes arquivos já estiver incluso. Os números Modo podemser usados s/ a inclusão deste arquivo.

Modo No. Modo Operação

MSBPRE 0 Desloca dados no bit superior primeiro,Lê dados antes de enviar o clock

LSBPRE 1 Desloca dados no bit inferior primeiro,Lê dados antes de enviar o clock

MSBPOST 2 Desloca dados no bit superior primeiro,Lê dados após enviar o clock

LSBPOST 3 Desloca dados no bit inferior primeiro,Lê dados após enviar o clock

SHIFTIN 0,1,MSBPRE,[B0]

Page 122: Manual Picbasic em Portugues

PicBasic Pro Compiler

112

5.56. SHIFTOUT

SHIFTOUT PinoDados,PinoClock,Modo,[Var{\Bits}...]

Desloca de forma síncrona e p/ fora Var em PinoClock e PinoDados. PinoClocke PinoDados podem ser uma constante, 0-15, ou uma variável que contenha umnúmero 0-15 (ex. B0) ou um nome de pino (ex. PORTA.0).

\Bits opcionalmente especifica o número de bits a serem deslocados. Se não forespecificado, são deslocados 8 bits, independente do tipo de variável.

Os nomes Modo (ex. LSBFIRST) são definidos no arquivoMODEDEFS.BAS. Para usá-los, adicione a linha:

Include “modedefs.bas”

ao topo do programa PicBasic Pro. BS1DEFS.BAS eBS2DEFS.BAS já incluem MODEDEFS.BAS. Não inclua-o novamente seum destes arquivos já estiver incluso. Os números Modo podemser usados s/ a inclusão deste arquivo.

Modo No. Modo Operação

LSBFIRST 0 Desl. dados bit inferior primeiro

MSBFIRST 1 Desl. dados bit superior primeiro

SHIFTOUT 0,1,MSBFIRST,[B0]SHIFTOUT PORTA.1, PORTA.2, 1,[wordvar\4]

Page 123: Manual Picbasic em Portugues

PicBasic Pro Compiler

113

5.57. SLEEP

SLEEP Periodo

Coloca o microcontrolador em modo de baixo consumo por Periodo segundos. Periodo é de 16 bits, então atrasos podem ser de até 65,535 segundos(pouco acima de 18 horas).

SLEEP usa o Timer de Watchdog então ele é independente da própriafreqüência do oscilador. A granularidade é de cerca de 2.3 segundos e pode variarbaseada em especificações do dispositivo e temperatura. Esta variação é incomumao BASIC Stamp. A alteração foi necessária porque quando oPICmicro executa um reset do Timer de Watchdog, ele reseta muitos dosregistradores internos p/ valores predefinidos. Estes valores podem diferir muitodaquilo que o seu programa pode esperar. Ao se rodar o comando SLEEPnão calibrado, este problema é contornado.

SLEEP 60 ‘ Descansa por cerca de 1 minuto

Page 124: Manual Picbasic em Portugues

PicBasic Pro Compiler

114

5.58. SOUND

SOUND Pino,[Nota,Duracao{,Nota,Duracao...}]

Gera tons e/ou ruído branco no Pino especificado. Pino éautomaticamente fixado como saída. Pino pode ser uma constante, 0 - 15, ouuma variável que contenha um número 0 - 15 (ex. B0) ou um nome de pino(ex. PORTA.0).

Nota 0 é silêncio. Notas 1-127 são tons. Notas 128-255 são ruídobranco. Tons e ruídos brancos estão em ordem ascendente (ex. 1 e 128sã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.

Duracao é 0-255 e determina por quanto tempo a Nota é tocada emincrementos de cerca de 12 milisegundos. Nota e Duração nãoprecisam ser constantes.

SOUND manda ondas quadradas de nível TTL. Graças às excelentes caracte-rísticas de E/S do PICmicro, um alto-falante pode ser acionado através de umcapacitor. O valor do capacitor deve ser determinado c/ base nasfreqüências de interesse e da carga do alto-falante. Alto-falantes piezo-elétricospodem ser acionados diretamente.

Pin

10uF

SOUND PORTB.7,[100,10,50,10] ‘ Envia 2 sonsconsecutivamenteao Pino7

Page 125: Manual Picbasic em Portugues

PicBasic Pro Compiler

115

5.59. STOP

STOP

Para a execução do programa executando um loop infinito. Isto nãocoloca o microcontrolador em modo de baixo consumo. O microcontroladorainda está trabalhando como nunca. Ele apenas não está fazendo muito.

STOP ‘ Faz o programa andar s/ sair do lugar.

Page 126: Manual Picbasic em Portugues

PicBasic Pro Compiler

116

5.60. SWAP

SWAP Variavel,Variavel

Troca os valores entre 2 variáveis. Geralmente, é um processo tediosotrocar o valor de 2 variáveis. SWAP o faz em uma declaração s/ usar nenhumavariável intermediária. Ele pode ser usado c/ variáveis tipo bit, bytee word. Cadeias de variáveis c/ um índice variável não podem serusadas em SWAP embora caddeias de variáveis c/ um índice constantesejam permitidas.

temp = B0 ‘ Maneira antigaB0 = B1B1 = temp

SWAP B0, B1 ‘ Maneira nova

Page 127: Manual Picbasic em Portugues

PicBasic Pro Compiler

117

5.61. TOGGLE

TOGGLE Pino

Inverte o estado do Pino especificado. Pino é automaticamente fixadocomo saída. Pino pode ser uma constante, 0 - 15, ou uma variável quecontenha um número 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).

Low 0 ‘ Inicia Pino0 como nivel baixoTOGGLE 0 ‘ Altera estado do Pino0 p/ alto

Page 128: Manual Picbasic em Portugues

PicBasic Pro Compiler

118

5.62. WHILE..WEND

WHILE CondicaoDeclaracao...

WEND

Executa repetidamente Declaracaoões WHILE (ENQUANTO) Condicao é verdadeira. Quando a Condicao não for mais verdadeira, a execução continua na declaraçãoseguinte ao WEND. Condicao pode ser qualquer expressão de comparação.

i = 1WHILE i <= 10

Serout 0,N2400,[”No:”,#i,13,10]i = i + 1

WEND

Page 129: Manual Picbasic em Portugues

PicBasic Pro Compiler

119

5.63. WRITE

WRITE Endereco,Valor

Escreve Valor na EEPROM no-chip no Endereco especificado. Estainstrução pode somente ser usada c/ um PICmicro que tenha uma áreade dados de EEPROM no-chip tal como o PIC16F84 ou PIC16C84.

WRITE é usado p/ fixar os valores da EEPROM no-chip em tempo de execução.Para fixar os valores da EEPROM no-chip em tempo de programação,use a declaração DATA ou EEPROM.

Cada WRITE é auto-temporizado e leva cerca de 10 milisegundos p/ executarem um PICmicro.

WRITE 5,B0 ‘ Envia valor de B0 p/ posicao 5da EEPROM

Page 130: Manual Picbasic em Portugues

PicBasic Pro Compiler

120

5.64. XIN

XIN PinoDados,PinoZero,{Timeout,Rotulo,}[Var{,...}]

Recebe dados X-10 e guarda o House Code e o Key Code em Var.

XIN é usado p/ receber informação dos dispositivos X-10 que podem enviartal informação. Módulos X-10 estão disponíveis em uma larga variedade defontes 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 deforç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.

PinoDados é automaticamente fixado como entrada p/ receber dados da inter-face X-10. PinoZero é automaticamente fixado como entrada p/ receber atemporização de instante zero da interface X-10. Ambos os pinos devem ser liga-dos aos 5 volts c/ resistores de 4.7K. PinoDados e PinoZero podem serconstantes, 0-15, ou uma variável que contenha um número 0-15 (ex. B0) ouum nome de pino (ex. PORTA.0).

Um Timeout opcional e Rotulo podem ser incluídos p/ permitir ao programacontinuar se dados X-10 não forem recebidos dentro de um certo tempo.Timeout é especificado em meio-ciclos da linha de força CA (aproximada-mente 8.33 milisegundos).

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, XINirá efetivamente esperar p/ sempre.

Se Var tiver tamanho de palavra, cada House Code recebido é guardado no bytesuperior da palavra. Cada Key Code recebido é guardado no byte inferior dapalavra. Se Var for um byte, apenas o Key Code é guardado.

O House Code é um número entre 0 e 15 que corresponde aoHouse Code fixado no módulo X-10 A até P.

O Key Code tanto pode ser o número de um módulo X-10 específico oua função que for ser executada por um módulo. Na prática normal, primeiro umcomando especificando o número do módulo X-10 é enviado, seguido por umcomando especificando a função desejada. Algumas funções operam em todosos módulos de uma vez assim o número do módulo é desnecessário. Esperamos

Page 131: Manual Picbasic em Portugues

PicBasic Pro Compiler

121

que futuros exemplos irão clarear as coisas. Números de Key Code 0-15correspondem aos números 1-16 do módulo.

XOUT abaixo lista as funções bem como a informação de fiação.

housekey var word

‘ Pega dados X-10loop: XIN PORTA.2,PORTA.0,[housekey]

‘ Mostra dados X-10 no LCDLcdout $fe,1,“House=”,#housekey.byte1,“Key=”,#housekey.byte0

Goto loop ‘ Faz isso p/ sempre

‘ Checa por dados X-10, vai p/ semdados se nenhumXIN PORTA.2,PORTA.0,1,semdados,[housekey]

Page 132: Manual Picbasic em Portugues

PicBasic Pro Compiler

122

5.65. XOUT

XOUT PinoDados,PinoZero,[HouseCode\KeyCode{\Repeticao}{,...}]

Envia o HouseCode seguido pelo KeyCode, Repeticao número de vezes em for-mato X-10. Se a Repeticao opcional é desconsiderada, 2 vezes (o mínimo)é assumido. Repeticao é geralmente reservado p/ uso c/ os comandosAumento e Redução do Brilho.

XOUT é usado p/ enviar informação de controle aos módulos X-10. Estesmódulos estão disponíveis em uma larga variedade de fontes sob muitasmarcas. Uma interface é requerida p/ conectar o microcontrolador àlinha de força CA. Tanto a PL-513 p/ somente envio, ou a TW-523 p/comunicações X-10 bidirecionais são requeridas. Estes dispositivos contém ainterface de linha de força e isolam o microcontrolador da linha CA.Já que o formato X-10 é patenteado, estas interfaces também cobremas taxas de licença.

PinoDados é automaticalmente fixado como saída p/ enviar dados à interfaceX-10. PinoZero é automaticamente fixado como entrada p/ receber a tempori-zação de instante zero da interface X-10. Ele deve ser ligado aos 5 voltsc/ um resistor de 4.7K. PinoDados e PinoZero podem ser constantes, 0-15,ou uma variável que contenha um número 0-15 (ex. B0) ou um nome de pino(ex. PORTA.0).

XOUT apenas processa dados a cada instante zero da linha de força AC conformerecebido no PinoZero. Se não houver transições nesta linha, XOUT iráefetivamente esperar para sempre.

HouseCode é um número entre 0 e 15 que corresponde aoHouse Code fixado no módulo X-10 A até P. O HouseCodeapropriado deve ser enviado como parte de cada comando.

O KeyCode tanto pode ser o número de um módule X-10 específico ou afunção que for ser executada por um módulo. Na prática normal, primeiro umcomando especificando o número do módulo X-10 é enviado, seguido por umcomando especificando a função desejada. Algumas funções operam emtodos os módulos de uma vez de forma que o número do módulo é desnecessário.Esperamos que exemplos futuros irão clarear as coisas. Os números KeyCode0-15 correspondem aos números de módulo 1-16.

Page 133: Manual Picbasic em Portugues

PicBasic Pro Compiler

123

Os nomes (ex. unitOn) KeyCode (função) são definidos no arquivoMODEDEFS.BAS. Para usá-los, adicione a linha:

Include “modedefs.bas”

ao topo do programa PicBasic Pro. BS1DEFS.BAS eBS2DEFS.BAS já incluem MODEDEFS.BAS. Não inclua-o novamentese um destes arquivos já estiver incluso. Os números KeyCodepodem ser usados s/ a inclusão deste arquivo.

KeyCode No. KeyCode Operação

unitOn %10010 Liga o módulo

unitOff %11010 Desliga o módulo

unitsOff %11100 Desliga todos os módulos

lightsOn %10100 Liga todos os mód. de luz

lightsOff %10000 Desl. todos os mód. de luz

bright %10110 Mais brilho no mód. de luz

dim %11110 Reduz o brilho do módulo de luz

A conexão às interfaces X-10 requer 4 ligações. Saída da interface X-10(instante zero e recepção de dados) são coletor aberto e requerem umresistor pull up de cerca de 4.7K a 5 volts. Tabelas de fiação p/cada interface são mostradas abaixo:

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

Page 134: Manual Picbasic em Portugues

PicBasic Pro Compiler

124

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

house var byteunit var byte

Include “modedefs.bas”

house = 0 ‘ Set house to 0 (A)unit = 8 ‘ Set unit to 8 (9)‘ Liga unidade 8 na casa 0XOUT PORTA.1,PORTA.0,[house\unit,house\unitOn]

‘ Desliga todas as luzes na casa 0XOUT PORTA.1,PORTA.0,[house\lightsOff]

‘ Pisca luz 0 a cada 10 segundosXOUT PORTA.1,PORTA.0,[house\0]

loop: XOUT PORTA.1,PORTA.0,[house\unitOn]Pause 10000 ‘ Espera 10 segundos

XOUT PORTA.1,PORTA.0,[house\unitOff]Pause 10000 ‘ Espera 10 segundos

Goto loop

Page 135: Manual Picbasic em Portugues

PicBasic Pro Compiler

125

6. Estrutura de Um Programa Compilado

O PBP é desenhado p/ ser fácil de usar. Programas podem ser compilados e rodadosc/ pouca preocupação c/ o funcionamento interno do PBP. Algumas pessoas,entretanto, apenas têm confiança num produto quando elas entendem seufuncionamento interno. Outras são somente curiosas.

Esta seção é p/ elas. Ela descreve os arquivos usados e a saídagerada pelo PBP e dá alguma idéia do que exatamente está acontecendo.

6.1. Cabeçalhos de Alvo Específico

Três arquivos de cabeçalho de alvo específico são usados quando um programa écompilado. Um é usado pelo PBP, os outros dois são incluídos p/ uso peloassembler.

Um arquivo c/ o nome do microcontrolador seguido pela extensão.BAS contém informação específica do chip necessária ao PBP. Isto incluio perfil da memória do chip, qual biblioteca ele usa, e inclui as definições dasvariáveis de que ele necessita. Para o PIC16F84, o microcontroladorpadrão, o arquivo é chamado 16F84.BAS.

Um arquivo c/ o nome do microcontrolador seguido pela extensão.INC é incluído no arquivo .ASM gerado p/ dar a informação doassembler sobre o chip, incluindo os parâmetros de configuração. Parao PIC16F84, o arquivo é chamado 16F84.INC.

Finalmente, o assembler tem seu próprio arquivo include que define os endereçosdos registradores do microcontrolador. Este arquivo é geralmente chamado dealgo da ordem de P16F84.INC.

6.2. Os Arquivos de Bibliotecas

O PBP inclui um conjunto de arquivos de biblioteca que contém todo o código earquivos de definição p/ um grupo particular de microcontroladores. No caso dePICmicros de núcleo de 14 bits, estes arquivos começam c/ o nome PBPPIC14.

PBPPIC14.LIB contém todas as subrotinas em linguagem assembly usadaspelo compilador. PBPPIC14.MAC contém todas as macros que chamamestas subrotinas. A maioria dos comandos do PicBasic Pro consistem de umamacro e uma subrotina de biblioteca associada.

Page 136: Manual Picbasic em Portugues

PicBasic Pro Compiler

126

PBPPIC14.RAM contém as declarações VAR que alocam a memórianecessária pela biblioteca.

PIC14EXT.BAS contém as definições externas que dizem ao PBP todos osnomes dos registradores do PICmicro de núcleo de 14 bits.

6.3. Código Gerado pelo PBP

Um programa compilado pelo PicBasic Pro é construído em muitos estágios. Primeiroo PBP cria o arq. .ASM. Ele então constrói um arq. .MAC personalizado que contémsomente as macros da biblioteca que são usadas no arq. .ASM. Setudo estiver livre de erros até este ponto, ele lança o assembler.

O assembler gera seu próprio conjunto de arquivos. Estes incluem o arq. de saídafinal .HEX e possivelmente arquivos de listagem e depuração.

6.4. Estrutura do Arquivo .ASM

O arquivo .ASM tem uma estrutura muito específica. As coisas precisam serfeitas numa ordem particular p/ que tudo funcione apropriadamente.

O primeiro ítem colocado no arquivo é um equate definindo qual assemblerserá usado, seguido por um INCLUDE p/ dizer ao assembler qualmicroprocessador é o alvo e dar a ele alguma informação básica, tal comoos dados de configuração.

Depois, todas as alocações de variável e apelidos são listados. Em seguidavem a inicialização da EEPROM, se for chamada.

Um INCLUDE p/ o arquivo de macro é então colocado no arquivo, seguido porum INCLUDE p/ as subrotinas de biblioteca.

Finalmente, o código do programa é incorporado. Este código de programa ésimplesmente uma lista de macros que foram geradas pelas linhas do PicBasic Pro.

Page 137: Manual Picbasic em Portugues

PicBasic Pro Compiler

127

7. Outras Considerações do PicBasic Pro

7.1. Quão Rápido é Bastante Rápido?

Por padrão, o PicBasic Pro Compiler gera programas p/ serem rodados numPICmicro c/ um cristal de 4Mhz ou ressonador cerâmico. Todas as instru-ções tempo-sensíveis assumem um tempo de instrução de 1 microssegundop/ seus atrasos. Isto permite um PAUSE 1000, por exemplo, p/ esperar 1segundo e as baud rates dos comandos SERIN e SEROUT seremprecisas.

Existem horas, entretanto, quando seria útil rodar o PICmicro a uma freqüênciadiferente de 4Mhz. Ainda que os programas compilados andem a umpasso 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,200bauds em vez da velocidade máxima atual de 9600 bauds.

Os programas PicBasic Pro podem ser rodados em freqüências de clock diferentes de4Mhz em um par de maneiras diferentes. A primeira é simplesmente usar um osciladordiferente de 4Mhz e não contar ao PBP. Isto pode ser uma técnica útil sevocê prestar atenção ao que acontece c/ as instruções dependentes do tempo.

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 umcristal de 4Mhz. Isto, c/ efeito, faz tudo rodar duas vezes mais rápido,incluindo os comandos SERIN e SEROUT. Se você dizer ao SERIN ouSEROUT p/ rodarem a 9600 bauds, o dobramento da velocidade do cristalirá dobrar a baud rate atual p/ 19,200 bauds.

Entretanto, tenha em mente que comandos como PAUSE e SOUND também irãorodar duas vezes mais rápido. O PAUSE 1000 mencionado acima iria esperarapenas .5 segundos c/ um cristal de 8Mhz antes de permitir que a execução doprograma continue.

A outra técnica é usar uma freqüência de oscilador diferente e contarao PBP as suas intenções. Isto é feito através do uso de um DEFINE.DEFINE, como demonstrado no comando LCDOUT em uma seçãoanterior, é usado p/ dizer ao PBP p/ usar algo diferente dos seus padrões.

Normalmente, o padrão do PBP é usar um oscilador de 4Mhz. Adicionandoa declaração:

Page 138: Manual Picbasic em Portugues

PicBasic Pro Compiler

128

DEFINE OSC 8

próximo ao começo do programa PicBasic Pro diz ao PBP p/ assumir que umoscilador de 8Mhz será usado no lugar. As definições de oscillatoraceitáveis são:

Valor OSC Oscilador Usado

3 3.58Mhz

4 4Mhz

8 8Mhz

10 10Mhz

12 12Mhz

16 16Mhz

20 20Mhz

Dizer ao PBP a freqüência do oscilador o permite compensar eproduzir a temporização correta p/ COUNT, DEBUG, DTMFOUT, FREQOUT,HSERIN, HSEROUT, I2CREAD, I2CWRITE, LCDOUT, PAUSE, PAUSEUS,SERIN, SERIN2, SEROUT, SEROUT2, SHIFTIN, SHIFTOUT, SOUND, XINe XOUT.

Alterações na freqüência do oscilador podem também ser usadas p/ melhorara resolução das instruções PULSIN, PULSOUT e RCTIME. A 4Mhz estasinstruções operam c/ uma resolução de 10 microsegundos. Se um cristal de20Mhz é usado, a resolução é aumentada 5 vezes p/ 2 microsegundos.Existe uma troca entretanto. A largura do pulso é ainda medida c/ relação a umavariável de palavra de 16 bits. Com uma resolução de 2 microsegundos, alargura de pulso máxima mensurável seria 131,070 microsegundos.

Indo na outra direção e rodando c/ um oscilador de 32.768Khz éproblemático. Pode ser desejável tentar isto por razões de redução deconsumo de força e poderá funcionar até certo ponto. Os comandos SERIN eSEROUT serão inúteis e o Timer de Watchdog pode fazer o programareiniciar periodicamente. Experimente p/ descobrir se sua aplicaçãoparticular é possível nesta velocidade de clock. Não dói nadatentar.

Page 139: Manual Picbasic em Portugues

PicBasic Pro Compiler

129

7.2. Ajustes de Configuração

Como mencionado antes, os ajustes de configuração padrão p/ um dispositivoem particular estão fixados no arq. .INC c/ o mesmo nome do dispositivo, ex.16F84.INC. Estes ajustes podem ser alterados na hora em que o dispositivoé fisicamente programado.

O oscilador padrão é XT na maioria dos dispositivos. Este é o ajuste p/ o osciladorpadrão de 4Mhz. Se um oscilador mais rápido é usado, este ajuste precisa seralterado p/ HS. Dispositivos c/ osciladores internos têm por padrão INTRC.

O Timer de Watchdog é habilitado pelo PBP. Ele é usado, juntamente c/ oprescaler TMR0, p/ suportar as instruções NAP e SLEEP. Se nenhumadas instruções são usadas em um progama, o Timer de Watchdog podeser desabilitado e o prescaler usado p/ outra coisa qualquer.

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.

Veja a folha de dados da Microchip p/ o dispositivo em particular p/os dados de configuração específicos àquela peça.

7.3. Utilização da RAM

Em geral não é necessário saber como a RAM é alocada pelo PBP nomicrocontrolador. O PBP cuida de todos os detalhes assim o programadornão precisará fazê-lo. Entretanto há vezes quando este conhecimentopoderia ser útil.

Variáveis são guardadas nos registradores da RAM do PICmicro. A primeiraposição da RAM disponível é $0C p/ o PIC16F84 e alguns dosPICmicros menores, e $20 p/ o PIC16C74 e outros PICmicrosmaiores. Refira-se aos data books PICmicro da Microchip p/ a posiçãoreal do início dos registradores da RAM p/ um dado microcontrolador.

As variáveis são atribuídas à RAM seqüencialmente numa ordem particular.A ordem é cadeias de palavras primeiro (se houver), seguido por cadeias de byte e bit.Então é alocado o espaço p/ palavras, bytes e finalmente bits individuais. Bitssão acondicionados em bytes como possível. Esta ordem faz o melhor usoda RAM disponível.

Page 140: Manual Picbasic em Portugues

PicBasic Pro Compiler

130

Cadeias precisam caber num único banco. Elas não podem cruzar os limites de umbanco. Isto efetivamente limita o comprimento de uma cadeia individual. Vejaa seção anterior sobre cadeias p/ estes limites.

Você pode sugerir ao PBP um banco em particular no qual colocar a variável:

penny VAR WORD BANK0nickel VAR BYTE BANK1

Se requisições de banco específicas forem feitas, estas são manipuladas primeiro.Se não houver suficiente espaço num banco requisitado, o primeiro espaço disponívelé usado e um aviso é lançado.

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 algunscasos, tais como armazenamento do registrador W num manipulador de interrup-ções, é necessário definir um endereço fixo. Isto pode ser feito numa maneirasimilar à seleção de bancos:

w_store VAR BYTE $20

Muitas variáveis de sistema, usando cerca de 24 bytes de RAM, sãoautomaticamente alocadas pelo compilador p/ uso por subrotinas de biblio-teca. Estas variáveis são alocadas no arquivo PBPPIC14.RAM e devem estarno banco 0.

Variáveis de usuário são precedidas de um underscore (_) enquanto variá-veis de sistema não têm underscore assim elas não interferem uma àoutra.

R0 VAR WORD SYSTEM

Variáveis BASIC Stamp B0 - B25 e W0 - W12 não são automaticamentealocadas. É melhor criar suas próprias variáveis usando a instrução VAR.Entretanto se você quer que estas variáveis sejam criadas p/ você,simplesmente inclua o arquivo apropriado, BS1DEFS.BAS ou BS2DEFS.BAS,no início do programa PicBasic Pro. Estas variáveis alocam espaçoseparado e longe de quaisquer outras variáveis que você pode criar mais tarde.Isto é diferente do BS2 onde usar as variáveis pré-concebidas evariáveis criadas pelo usuário pode lhe causar inconvenientes.

Variáveis temporárias adicionais podem ser geradas automaticamente pelocompilador p/ ajudá-lo a sortear equações. Uma lista destas variáveis, assim

Page 141: Manual Picbasic em Portugues

PicBasic Pro Compiler

131

como todo o mapa de memória, pode ser vista no arquivo .ASM ou.LST gerados.

7.4. Palavras Reservadas

Palavras reservadas são simplesmente isto - palavras que são reservadas p/ uso pelocompilador 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.

Os pseudo-ops, tipos de variáveis e palavras-chave de comandos são listadosnas suas seções apropriadas. Os nomes dos registradores do PICmicrosão definidos no arquivo PIC14EXT.BAS. Se os arquivos BS1DEFS.BAS,BS2DEFS.BAS ou MODEDEFS.BAS estão inclusos, as definições dentro delesessencialmente tornam-se palavras reservadas e não podem ser redefinidas.

7.5. Vida Após 2K

Sim, há vida após 2K usando o PicBasic Pro Compiler.

PICmicros têm espaço de código segmentado. Instruções do PICmicro comoCall e Goto têm apenas bits suficientes dentro delas p/ endereçar 2K deespaço de programa. Para conseguir programar fora dos limites de 2K, oregistrador PCLATH deve ser fixado antes de cada Call ou Goto.

O PBP automaticamente fixa estes bits PCLATH p/ você. Há are algumasrestrições impostas, entretanto. A biblioteca do PicBasic Pro precisa caber inteirana página 0 do espaço de código. Normalmente isto não é um problema já que abiblioteca é a primeira coisa num programa do PicBasic Pro e a biblioteca inteiraé menor que 2K. Entretanto, deve-se prestar atenção a este assunto sebibliotecas adicionais são usadas.

Manipuladores de interrupção de linguagem assembly também precisam caberna página 0 do espaço de código. Colocá-las no início do programaPicBasic Pro deve funcionar. Veja a seção a seguir sobre linguagemassembly para mais informação.

A adição de instruções p/ fixar os bits do PCLATH não adiciona overheadao código produzido. O PBP irá fixar os bits do PCLATH p/ qualquer códigoPICmicro que cruze o limite de 2K ou p/ qualquer referências à frente emPICmicros c/ mais que 2K de espaço de código.

Page 142: Manual Picbasic em Portugues

PicBasic Pro Compiler

132

Há instruções do PicBasic Pro específicas p/ assistir os problemas de 2K.

BRANCHL foi criada p/ permitir ramificações p/ rótulos que podem estar dooutro lado de um limite de 2K. Se o PICmicro tem 2K ou menos de espaço deprograma, BRANCH deve ser usado já que ele toma menos espaço que BRANCHL.Se o microcontrolador tem mais que 2K de espaço de código, e você nãopode estar certo de que BRANCH irá agir sempre dentro da mesma página, useBRANCHL.

O assembler pode lançar um aviso de que um limite de página foicruzado. Isto é normal e está lá p/ sugerir que você cheque por quaisquerBRANCHes que possam cruzar um limite de página.

Page 143: Manual Picbasic em Portugues

PicBasic Pro Compiler

133

8. Programação em Linguagem Assembly

Rotinas em linguagem assembly podem ser um útil adjunto ao programa doPicBasic Pro Compiler. Enquanto em geral a maioria das tarefas podem ser feitascompletamente em PicBasic Pro, há vezes quando pode ser necessário fazer umadeterminada tarefa mais rápido, ou usando uma quantia menor de espaço de código,ou só diferentemente de como o compilador o faz. Nessas horas é útil teras capabcidades de um assembler em-linha.

Pode ser benéfico escrever a maioria de um programa rapidamente usando alinguagem PicBasicPro e então enfiar algumas linhas de código assembly p/aumentar a funcionalidade. Este código adicional pode ser inserido diretamenteno programa PBP ou incluso como um outro arquivo.

8.1. Dois Assemblers - Sem Espera

Na execução, o PBP primeiro compila o programa em linguagemassembly e então automaticamente lança um montador. Isto convertea saída assembler no arquivo final .HEX que pode ser programadoem um microcontrolador.

Dois montadores diferentes podem ser usados c/ o PBP: PM, nosso PICmicroMacro Assembler, e MPASM, o montador da Microchip. O PM é incluídoc/ o compilador enquanto o MPASM deve ser obtido diretamente daMicrochip através do seu web site ou é incluído c/ seus programadoresPICmicro.

Há benefícios e desvantagens em se usar cada montador. PM éacessível porque está incluso como parte do PBP. Ele é também muito mais rápidodo que o MPASM e pode montar programas muito maiores no DOS. O PM incluium conj. de instruções no estilo 8051 que é mais intuitivo que os mnemônicosMicrochip. Para informação completa sobre o PICmicro MacroAssembler, veja o arquivo PM.TXT em disco.

O MPASM, por outro lado, tem a capacidade de criar um arquivo .COD. Este arquivo contém informação adicional que pode ser muito útil c/simuladores e emuladores. O MPASM é também mais compatível c/ alarga variedade de examplos em linguagem assembly encontrados na webe nos data books da Microchip.

Page 144: Manual Picbasic em Portugues

PicBasic Pro Compiler

134

PBP defaults to using PM. To use MPASM with PBP, simply copy all ofthe 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 tocomplete the process. MPASM will display its own screen with itsprogress.

PBP -ampasm filename

Alternatively, the command line option "-amp" will launch MPASM inquiet mode and only display any errors. However, the launcherconsumes additional memory that is therefore not available to MPASM.

PBP -amp filename

For maximum memory availability to MPASM, the command line option"-ampasm" should be used or the Windows version of MPASM shouldbe used.

In any case, MPASM is not included with PBP and must be obtainedfrom Microchip.

8.2. Programming in Assembly Language

PBP programs may contain a single line of assembly languagepreceded by an “at” symbol (@), or one or more lines of assembly codepreceded by the ASM keyword and ended by the ENDASM keyword. Bothkeywords appear on their lines alone.

@ bsf PORTA,0

Asmbsf STATUS,RP0bcf TRISA,0bcf 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, thePICmicro Macro Assembler. This also, however, requires that theprogrammer have some familiarity with the PBP libraries. PBP’s

Page 145: Manual Picbasic em Portugues

PicBasic Pro Compiler

135

notational conventions are similar to other commercial compilers andshould come as no shock to programmers experienced enough toattempt in-line assembly.

All identifier names defined in a PBP program are similarly defined inassembly, but with the name preceded with an underscore ( _ ). Thisallows access to user variables, constants, and even labeled locations,in assembly.

Thus, any name defined in assembly starting with an underscore hasthe possibility of conflicting with a PBP generated symbol. If conflict isavoided, can these underscored assembly values be accessed fromPBP? No. Remember, the underscored names generated by PBP areonly shadows of the actual information defined in the compiler. Sincein-line assembly is copied directly to the output file and not processed bythe compiler, the compiler not only lacks any type or value informationabout assembly symbols, it is completely unaware that they exist. Ifvariables are to be shared between assembly and PBP, you must definethe variables in PBP.

Just as underscored symbols have possible conflicts, so do symbols notstarting with underscores. The problem is internal library identifiers. Luckily, most library identifiers contain a '?' or make reference to one ofthe working registers (such as R0). Avoiding such names should bereduce problems. If you should have a name collision, the compiler willreport the duplicate definitions as an error.

In assembly language the comment designator changes from the singlequote (‘) in PicBasic Pro to a semicolon (;).

‘ PicBasic Pro comment; Assembly language comment

8.3. Placement of In-line Assembly

PBP statements execute in order of appearance in the source. Theorganization of the code is as follows: Starting at location 0, the resetvector, PBP inserts some startup code followed by a jump to INIT. Next, the called-for library subroutines are stuffed in. At the end of thelibrary is INIT, where any additional initialization is completed. Finally,at the label MAIN, the compiled PicBasic Pro statement code is added.

Page 146: Manual Picbasic em Portugues

PicBasic Pro Compiler

136

The first executable line that appears in the PicBasic Pro source iswhere the program starts execution. That statement literally appears inmemory right behind the controller’s startup and library code, right afterthe MAIN label.

The tendency of programmers is to place their own library functionswritten using the in-line assembler either before or after their code. Inlight of the above explanation, this could create some obvious problems. If they appear early in the program, the assembly routines execute priorto any PBP instructions (some programmers will invariably exploit thisfeature). If they appear at the tail of the program, execution which "fallsoff the end" of the PBP statements may mysteriously find themselvesunintentionally executing assembly routines.

There are a couple of deciding factors as to where might be the bestplace to insert assembly language subroutines. If the entire program fitsinto 2K (one code page), place your assembly routines after your PBPcode. If you need to terminate your program, explicitly place an END orSTOP statement at the end of your code rather than floating off intospace.

If the program is longer than 2K, it could make more sense to put theassembly language routines at the beginning of the PBP program. Thisshould ensure them of being in the first code page so that you knowwhere to find them. This is the way assembly language interruptroutines 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 sectionon interrupts for an example of this.

The actual code for the assembly language routines may be included inyour program or in a separate file. If a routine is used by only oneparticular PicBasic Pro program, it would make sense to include theassembler code within the PBP source file. This routine can then beaccessed using the CALL command.

If it is used by several different PBP programs, a separate file containingthe assembly routines can simply be included at the appropriate place inthe PicBasic Pro source:

Asm

Page 147: Manual Picbasic em Portugues

PicBasic Pro Compiler

137

Include “myasm.inc”Endasm

8.4. Another Assembly Issue

PICmicro registers are banked. PBP keeps track of which register bankit 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 accessa PORT.

It also knows to reset the bank select bits to 0 before making a Call or aJump. It does this because it can’t know the state of the bank select bitsat the new location. So anytime there is a change of locale or a labelthat can be called or jumped to, the bank select bits are zeroed.

It also resets the bank select bits before each ASM and the @ assemblershortcut. Once again, the assembler routine won’t know the currentstate of the bits so they are set to a known state. The assembler codemust be sure to reset the bank select bits before it exits, if it has alteredthem.

Page 148: Manual Picbasic em Portugues

PicBasic Pro Compiler

138

Page 149: Manual Picbasic em Portugues

PicBasic Pro Compiler

139

9. Interrupts

Interrupts can be a scary and useful way to make your program reallydifficult to debug.

Interrupts are triggered by hardware events, either an I/O pin changingstate or a timer timing out and so forth. If enabled (which by default theyaren’t), an interrupt causes the processor to stop whatever it is doingand jump to a specific routine in the microcontroller called an interrupthandler.

Interrupts are not for the faint of heart. They can be very tricky toimplement properly, but at the same time they can provide very usefulfunctions. For example, an interrupt could be used to buffer serial inputdata behind the scenes while the main PicBasic Pro program is offdoing something else. (This particular usage would require amicrocontroller with a hardware serial port.)

There are many ways to avoid using interrupts. Quickly polling a pin orregister bit instead is usually fast enough to get the job done. Or youcan check the value of an interrupt flag without actually enablinginterrupts.

However, if you just gotta do it, here are some hints on how to go aboutit.

The PicBasic Pro Compiler has two different mechanisms to handleinterrupts. The first is simply to write the interrupt handler in assemblerand tack it onto the front of a PBP program. The second method is touse the PicBasic Pro statement ON INTERRUPT. Each method will becovered separately, after we talk about interrupts in general.

9.1. Interrupts in General

When an interrupt occurs, the PICmicro stores the address of the nextinstruction it was supposed to execute on the stack and jumps tolocation 4. The first thing this means is that you need an extra locationon the hardware stack, which is only 8 deep to begin with.

The PicBasic Pro library routines can use up to 4 stack locationsthemselves. The remaining 4 are reserved for CALLs and nestedBASIC GOSUBs. You must make sure that your GOSUBs are only nested

Page 150: Manual Picbasic em Portugues

PicBasic Pro Compiler

140

3 deep at most with no CALLs within them in order to have a stacklocation available for the return address. If your interrupt handler usesthe stack (by doing a Call or GOSUB itself for example), you’ll need tohave additional stack space available.

Once you have dealt with the stack issues, you need to enable theappropriate interrupts. This usually means setting the INTCON register. Set the necessary enable bits along with Global Interrupt Enable. Forexample:

INTCON = %10010000

enables the interrupt for RB0/INT. Depending on the actual interruptdesired, you may also need to set the PIE register.

Refer to the Microchip PICmicro data books for additional information onhow to use interrupts. They give examples of storing processor contextas well as all the necessary information to enable a particular interrupt. This data is invaluable to your success.

Finally, select the best technique with which to handle your particularinterrupts.

9.2. Interrupts in BASIC

The easiest way to write an interrupt handler is to write it in PicBasic Proin conjunction with the ON INTERRUPT statement. ON INTERRUPT tellsPBP to activate its internal interrupt handling and to jump to your BASICinterrupt handler as soon as it can after receiving an interrupt. Whichbrings us the first issue.

Using ON INTERRUPT, when an interrupt occurs PBP simply flags theevent and immediately goes back to what it was doing. It does notimmediately vector to your interrupt handler. Since PBP statements arenot re-entrant (PBP must finish the statement that is being executedbefore it can begin a new one) there could be considerable delay(latency) before the interrupt is handled.

As an example, lets say that the PicBasic Pro program just startedexecution of a Pause 10000 when an interrupt occurs. PBP will flagthe interrupt and continue with the PAUSE. It could be up to 10 seconds

Page 151: Manual Picbasic em Portugues

PicBasic Pro Compiler

141

later before the interrupt handler is executed. If it is buffering charactersfrom a serial port, many characters will be missed.

To minimize the problem, use only statements that don’t take very longto execute. For example, instead of Pause 10000, use Pause 1 in along FOR..NEXT loop. This will allow PBP to complete each statementmore quickly and handle any pending interrupts.

If interrupt processing needs to occur more quicky than can be providedby ON INTERRUPT, interrupts in assembly language should be used.

Exactly what happens when ON INTERRUPT is used is this: A shortinterrupt handler is placed at location 4 in the PICmicro. This interrupthandler is simply a Return. What this does is send the program back towhat it was doing before the interrupt occurred. It doesn’t require anyprocessor context saving. What it doesn’t do is re-enable GlobalInterrupts as happens using an Retfie.

A Call to a short subroutine is placed after each statement in thePicBasic Pro program once an ON INTERRUPT is encountered. Thisshort subroutine checks the state of the Global Interrupt Enable bit. If itis off, an interrupt is pending so it vectors to the users interrupt handler. If it is still set, the program continues with the next BASIC statement,after which, the GIE bit is checked again, and so forth.

When the RESUME statement is encountered at the end of the BASICinterrupt handler, it sets the GIE bit to re-enable interrupts and returns towhere the program was before the interrupt occurred. If RESUME isgiven a label to jump to, execution will continue at that location instead. All previous return addresses will be lost in this case.

DISABLE stops PBP from inserting the Call to the interrupt checker aftereach statement. This allows sections of code to execute without thepossibility of being interrupted. ENABLE allows the insertion to continue.

A DISABLE should be placed before the interrupt handler so that it willnot keep getting restarted every time the GIE bit is checked.

If it is desired to turn off interrupts for some reason after ON INTERRUPTis encountered, you must not turn off the GIE bit. Turning off this bit tellsPBP an interrupt has happened and it will execute the interrupt handlerforever. Instead set:

Page 152: Manual Picbasic em Portugues

PicBasic Pro Compiler

142

INTCON = $80

This disables all the individual interrupts but leaves the Global InterruptEnable bit set.

One final note about interrupts in BASIC: If the program uses the form:

loop: Goto loop

and expects to be interrupted, it isn’t going to happen. Keep in mind theinterrupt flag is checked after each instruction. There really isn’t a placefor the check after a GOTO. It immediately jumps to the loop with nointerrupt check. Some other statement must be placed in the loop forthe interrupt check to happen.

9.3. Interrupts in Assembler

Interrupts in assembly language are a little trickier.

Since you have no idea of what the processor was doing when it wasinterrupted, you have no idea of the state of the W register, the STATUSflags, PCLATH or even what register page you are pointing to. If youneed to alter any of these, and you probably will, you must save thecurrent values so that you can restore them before allowing theprocessor to go back to what it was doing before it was so rudelyinterrupted. This is called saving and restoring the processor context.

If the processor context, upon return from the interrupt, is not left exactlythe way you found it, all kinds of subtle bugs and even major systemcrashes can and will occur.

This of course means that you cannot even safely use the compiler’sinternal variables for storing the processor context. You cannot tellwhich variables are in use by the library routines at any given time.

You should create variables in the PicBasic Pro program for the expresspurpose of saving W, the STATUS register and any other register thatmay need to be altered by the interrupt handler. These variables shouldnot be otherwise used in the BASIC program.

While it seems a simple matter to save W in any RAM register, it isactually somewhat more complicated. The problem occurs in that youhave no way of knowing what register bank you are pointing to when the

Page 153: Manual Picbasic em Portugues

PicBasic Pro Compiler

143

interrupt happens. If you have reserved a location in Bank0 and thecurrent register pointers are set to Bank1, for example, you couldoverwrite an unintended location. Therefore you must reserve a RAMregister location in each bank of the device at the same offset.

As an example, let's choose the 16C74(A). It has 2 banks of RAMregisters starting at $20 and $A0 respectively. To be safe, we need toreserve the same location in each bank. In this case we will choose thefirst location in each bank. A special construct has been added to theVAR command to allow this:

wsave var byte $20 systemwsave1 var byte $a0 system

This instructs the compiler to place the variable at a particular location inRAM. In this manner, if the save of W "punches through" to anotherbank, it will not corrupt other data.

The interrupt routine should be as short and fast as you can possiblymake it. If it takes too long to execute, the Watchdog Timer couldtimeout and really make a mess of things.

The routine should end with an Retfie instruction to return from theinterrupt and allow the processor to pick up where it left off in yourPicBasic Pro program.

The best place to put the assembly language interrupt handler isprobably at the very beginning of your PicBasic Pro program. Thisshould ensure that it is in the first 2K to minimize boundary issues. AGOTO needs to be inserted before it to make sure it won’t be executedwhen the program starts. See the example below for a demonstration ofthis.

If the PICmicro has more than 2K of code space, an interrupt stub isautomatically added that saves the W, STATUS and PCLATH registersinto the variables wsave, ssave and psave, before going to yourinterrupt handler. Storage for these variables must be allocated in theBASIC program:

wsave var byte $20 systemwsave1 var byte $a0 system ‘ If device has

RAM in bank1

Page 154: Manual Picbasic em Portugues

PicBasic Pro Compiler

144

wsave2 var byte $120 system ‘ If device hasRAM in bank2

wsave3 var byte $1a0 system ‘ If device hasRAM in bank3

ssave var byte bank0 systempsave var byte bank0 system

You must restore these registers at the end of your assembler interrupthandler. If the PICmicro has 2K or less of code space, the registers arenot saved. Your interrupt handler must save and restore any usedregisters.

Finally, you need to tell PBP that you are using an assembly languageinterrupt handler and where to find it. This is accomplished with aDEFINE:

Define INTHAND Label

Label is the beginning of your interrupt routine. PBP will place a jumpto this Label at location 4 in the PICmicro.

' Assembly language interrupt example

led var PORTB.1

wsave var byte $20 systemssave var byte bank0 systempsave var byte bank0 system

Goto start ' Skip around interrupt handler

‘ Define interrupt handlerdefine INTHAND myint

‘ Assembly language interrupt handlerasm; Save W, STATUS and PCLATH registersmyint movwf wsave

swapf STATUS, Wclrf STATUSmovwf ssavemovf PCLATH, Wmovwf psave

Page 155: Manual Picbasic em Portugues

PicBasic Pro Compiler

145

; Insert interrupt code here; Save and restore FSR if used

bsf _led ; Turn on LED (for example)

; Restore PCLATH, STATUS and W registersmovf psave, Wmovwf PCLATHswapf ssave, Wmovwf STATUSswapf wsave, Fswapf wsave, Wretfie

endasm

‘ PicBasic Pro program starts herestart: Low led ‘ Turn LED off

‘ Enable interrupt on PORTB.0INTCON = %10010000

loop: Goto loop ‘ Wait here till interrupted

Page 156: Manual Picbasic em Portugues

PicBasic Pro Compiler

146

Page 157: Manual Picbasic em Portugues

PicBasic Pro Compiler

147

10. PicBasic Pro / PicBasic / Stamp Differences

Compatibility is a two-edged sword. And then there is the pointy end. PicBasic Pro has made some concessions to usability and code size. Therefore we call it “BASIC Stamp like” rather than BASIC Stampcompatible. PBP has most of the BASIC Stamp I and II instruction setand syntax. However there are some significant differences.

The following sections discuss the implementation details of PBPprograms that might present problems. It is hoped that if you doencounter problems, these discussions will help illuminate thedifferences and possible solutions.

10.1. Execution Speed

The largest potential problem is speed. Without the overhead ofreading instructions from the EEPROM, many PBP instructions (such asGOTO and GOSUB) execute hundreds of times faster than their BASICStamp equivalents. While in many cases this is a benefit, programswhose timing has been developed empirically may experienceproblems.

The solution is simple - good programs don't rely on statement timingsuch as FOR..NEXT loops. Whenever possible, a program should usehandshaking and other non-temporal synchronization methods. Ifdelays are needed, statements specifically generating delays (PAUSE,PAUSEUS, NAP or SLEEP) should be used.

10.2. Digital I/O

Unlike the BASIC Stamp, PBP programs operate directly on the PORTand TRIS registers. While this has speed and RAM/ROM sizeadvantages, 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 suchoperations are performed too close together and the output is driving aninductive or capacitive load, it is possible the operation will fail.

Suppose, for example, that a speaker is driven though a 10uF cap (justas with the SOUND command). Also suppose the pin is initially low andthe programmer is attempting to generate a pulse using TOGGLE

Page 158: Manual Picbasic em Portugues

PicBasic Pro Compiler

148

statements. The first command reads the pin's low level and outputs itscomplement. The output driver (which is now high) begins to charge thecap. If the second operation is performed too quickly, it still reads thepin's level as low, even though the output driver is high. As such, thesecond operation will also drive the pin high.

In practice, this is not much of a problem. And those commandsdesigned for these types of interfacing (SOUND and POT, for example)have built-in protection. This problem is not specific to PBP programs. This is a common problem for PICmicro (and other microcontroller)programs and is one of the realities of programming hardware directly.

10.3. Low Power Instructions

When the Watchdog Timer time-out wakes a PICmicro from sleepmode, execution resumes without disturbing the state of the I/O pins. For unknown reasons, when the BASIC Stamp resumes execution aftera low power instruction (NAP or SLEEP), the I/O pins are disturbed forapproximately 18 mSec. PBP programs make use of the PIC's I/Ocoherency. The NAP and SLEEP instructions do not disturb the I/O pins.

10.4. Missing PC Interface

Since PBP generated programs run directly on a PICmicro, there is noneed for the Stamp's PC interface pins (PCO and PCI). The lack of aPC interface does introduce some differences.

Without the Stamp’s IDE running on a PC, there is no place to senddebugging information. Debugging can still be accomplished by usingone of the serial output instructions like DEBUG or SEROUT in conjunctionwith a terminal program running on the PC such as Hyperterm.

Without the PC to wake the PICmicro from an END or STOP statement, itremains idle until /MCLR is lowered, an interrupt occurs or power iscycled.

Page 159: Manual Picbasic em Portugues

PicBasic Pro Compiler

149

10.5. No Automatic Variables

The PicBasic Pro Compiler does not automatically create any variableslike B0 or W0. They must be defined using VAR. Two files areprovided: BS1DEFS.BAS and BS2DEFS.BAS that will define thestandard BS1 or BS2 variables. However, it is recommended that youassign your own variables with meaningful names rather than usingeither of these files.

10.6. No Nibble Variable Types

The BS2's nibble variable type is not implemented in the PicBasic ProCompiler. As PBP allows many more variables than a BS2, simplychange nibble variable types to bytes.

10.7. Math Operators

Mathematical expressions now have precedence of operation. Thismeans they are not evaluated in strict left to right order as they are inthe BASIC Stamp and original PicBasic Compiler. This precedencemeans that multiplication and division are done before adds andsubtracts, for example.

Parenthesis should be used to group operations into the order in whichthey are to be performed. In this manner, there will be no doubt aboutthe order of the operations.

The following table list the operators in hierarchal order:

Highest Precedence

( )

NOT

~

-

SQR ABS DCD NCD COS SIN

*

Page 160: Manual Picbasic em Portugues

PicBasic Pro Compiler

Highest Precedence

150

**

*/

/

//

+

-

<<

>>

MIN

MAX

DIG

REV

&

^

|

&/

/|

^/

&& AND

^^ XOR

|| OR

Lowest Precedence

Page 161: Manual Picbasic em Portugues

PicBasic Pro Compiler

151

10.8. [ ] Versus ( )

PBP uses square brackets, [], in statements where parenthesis, (),were previously used. This is more in keeping with BASIC Stamp IIsyntax.

For example, the BS1 and original PicBasic Compiler SEROUTinstruction looks something like:

Serout 0,T2400,(B0)

The PicBasic Pro Compiler SEROUT instruction looks like:

Serout 0,T2400,[B0]

Any instructions that previously used parenthesis in their syntax shouldbe changed to include square brackets instead.

10.9. DATA, EEPROM, READ and WRITE

The BASIC Stamp allows EEPROM not used for program storage tostore non-volatile data. Since PBP programs execute directly from thePICmicro's ROM space, EEPROM storage must be implemented insome other manner.

The PIC16F84 (the default target for PBP programs), PIC16F83 andPIC16C84 have 64 bytes of on-chip EEPROM. PBP programs may usethis for EEPROM operations and supports the Stamp's DATA, EEPROM,READ and WRITE commands.

To access off-chip non-volatile data storage, the I2CREAD andI2CWRITE instructions have been added. These instructions allow 2-wire communications with serial EEPROMs like Microchip Technology’s24LC01B.

10.10. DEBUG

DEBUG in PBP is not a special case of SEROUT as it is on the Stamps. Ithas its own much shorter routine that works with a fixed pin and baudrate. It can be used in the same manner to send debugging informationto a terminal program or other serial device.

Page 162: Manual Picbasic em Portugues

PicBasic Pro Compiler

152

Question marks (?) in DEBUG statements are ignored. The modifierASC? should not be used.

10.11. GOSUB and RETURN

Subroutines are implemented via the GOSUB and RETURN statements. User variable W6 is used by the BS1 as a four nibble stack. Thus,Stamp programs may have up to 16 GOSUBs and subroutines can benested up to four levels deep.

The PICmicros have Call and Return instructions as well as an eightlevel stack. PBP programs make use of these instructions and may usefour levels of this stack, with the other four levels being reserved forlibrary routines. Thus, W6 is still available, subroutines may still benested up to four levels deep and the number of GOSUBs is limited onlyby the PICmicro's code space.

10.12. I2CREAD and I2CWRITE

The I2CREAD and I2CWRITE commands differ from the originalPicBasic Compiler’s I2CIN and I2COUT commands. The most obviousdifference is that the data and clock pin numbers are now specified aspart of the command. They are no longer fixed to specific pins.

The other difference is that the control byte format has changed. Youno longer set the address size as part of the control byte. Instead, theaddress size is determined by the type of the address variable. If abyte-sized variable is used, an 8-bit address is sent. If a word-sizedvariable is used, a 16-bit address is sent.

10.13. IF..THEN

The BASIC Stamps and the original PicBasic compiler only allow a labelto be specified after an IF..THEN. PicBasic Pro additionally allows anIF..THEN..ELSE..ENDIF construct as well as allowing actual code tobe executed as a result of an IF or ELSE.

10.14. MAX and MIN

The MAX and MIN operator’s function have been altered somewhat fromthe way they work on the Stamp and the original PicBasic Compiler.

Page 163: Manual Picbasic em Portugues

PicBasic Pro Compiler

153

MAX will return the maximum of two values. MIN will return the minimumof two values. This corresponds more closely to most other BASICs anddoes not have the 0 and 65535 limit problems of the Stamp’s MIN andMAX instructions.

In most cases, you need only change MIN to MAX and MAX to MIN inyour Stamp programs for them to work properly with PBP.

10.15. SERIN and SEROUT

SERIN and SEROUT use BS1 syntax. SERIN2 and SEROUT2 use BS2syntax. A BS2 style timeout has been added to the SERIN command.

SERIN and SEROUT have been altered to run up to 9600 baud from theBS1 limit of 2400 baud. This has been accomplished by replacing thelittle used rate of 600 baud with 9600 baud. Modes of T9600, N9600,OT9600 and ON9600 may now be used.

600 baud is no longer available and will cause a compilation error if anattempt is made to use it.

10.16. SLEEP

PBP’s SLEEP command is based solely on the Watchdog Timer. It is nolonger calibrated using the system clock oscillator. This change wasnecessitated by the effect Watchdog Timer resets have on thePICmicro.

Whenever the PICmicro was reset during SLEEP calibration, it alteredthe states of some of the internal registers. For smaller PICmicros withfew registers, these registers could be saved before and restored aftercalibration resets. However, since PBP may be used on many differentPICmicros with many registers that are altered upon reset, this save andrestore proved to be too unwieldy.

Therefore it has been decided to run SLEEP in an uncalibrated modebased strictly upon the accuracy of the Watchdog Timer. This ensuresthe stability of the PICmicro registers and I/O ports. However, since theWatchdog Timer is driven by an internal R/C oscillator, its period canvary significantly based on temperature and individual chip variations. If

Page 164: Manual Picbasic em Portugues

PicBasic Pro Compiler

154

greater accuracy is needed, PAUSE, which is not a low-power command,should be used.

Page 165: Manual Picbasic em Portugues

PicBasic Pro Compiler

155

Appendix A

Summary of Microchip Assembly Instruction Set

ADDLW kADDWF f,dANDLW kANDWF f,dBCF f,bBSF f,bBTFSC f,bBTFSS f,bCALL kCLRF fCLRWCLRWDTCOMF f,dDECF f,dDECFSZ f,dGOTO kINCF f,dINCFSZ f,dIORLW kIORWF f,dMOVF f,dMOVLW kMOVWFfNOPRETFIERETLW kRETURNRLF f,dRRF f,dSLEEPSUBLW kSUBWF f,dSWAPF f,dXORLW kXORWF f,d

b - bit addressd - destination; 0 = w, 1 = ff - register file addressk - literal constant

Page 166: Manual Picbasic em Portugues

PicBasic Pro Compiler

156

Page 167: Manual Picbasic em Portugues

PicBasic Pro Compiler

157

Appendix B

Contact Information

Technical support and sales may be reached at:

microEngineering Labs, Inc.Box 7532Colorado Springs CO 80933-7532(719) 520-5323(719) 520-1867 faxhttp://www.melabs.comemail:[email protected]

PICmicro data sheets, CD-ROMs and literature may be obtained from:

Microchip Technology Inc.2355 W. Chandler Blvd.Chandler AZ 85224-6199(602) 786-7200(602) 899-9210 faxhttp://www.microchip.comemail:[email protected]

Page 168: Manual Picbasic em Portugues

READ THE FOLLOWING TERMS AND CONDITIONS CAREFULLYBEFORE OPENING THIS PACKAGE.microEngineering Labs, Inc. ("the Company") is willing to license theenclosed software to the purchaser of the software ("Licensee") only onthe condition that Licensee accepts all of the terms and conditions setforth below. By opening this sealed package, Licensee is agreeing tobe bound by these terms and conditions.

Disclaimer of Liability

THE COMPANY DISCLAIMS ALL WARRANTIES, EXPRESS ORIMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIEDWARRANTY OF FITNESS FOR A PARTICULAR PURPOSE AND THEIMPLIED WARRANTY OF MERCHANTABILITY. IN NO EVENTSHALL THE COMPANY OR ITS EMPLOYEES, AGENTS, SUPPLIERSOR CONTRACTORS BE LIABLE FOR ANY INCIDENTAL, INDIRECT,SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR INCONNECTION WITH LICENSE GRANTED UNDER THISAGREEMENT, INCLUDING WITHOUT LIMITATION, LOST PROFITS,DOWNTIME, GOODWILL, DAMAGE TO OR REPLACEMENT OFEQUIPMENT OR PROPERTY, OR ANY COSTS FOR RECOVERING,REPROGRAMMING OR REPRODUCING ANY DATA USED WITHTHE COMPANY'S PRODUCTS.

Software License

In consideration of Licensee's payment of the license fee, which is partof the price Licensee paid for this product, and Licensee's agreement toabide by the terms and conditions on this page, the Company grantsLicensee a nonexclusive right to use and display the copy of theenclosed software on a single computer at a single location. Licenseeowns only the enclosed disk on which the software is recorded or fixed,and the Company retains all right, title and ownership (including thecopyright) to the software recorded on the original disk copy and allsubsequent copies of the software. Licensee may not network thesoftware or otherwise use it on more than one computer terminal at thesame time. Copies may only be made for archival or backup purposes. The enclosed software is licensed only to the Licensee and may not betransferred to anyone else, nor may copies be given to anyone else. Any violation of the terms and conditions of this software license shallresult in the immediate termination of the license.