Você está na página 1de 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.
Copyrights e Marcas Registradas
Copyright 1999 microEngineering Labs, Inc.
Todos os direitos reservados.
EPIC e PicBasic Pro so marcas registradas da microEngineering Labs, Inc.
BASIC Stamp marca registrada da Parallax, Inc.
PICmicro marca registrada da Microchip Technology Inc.
2/99
PicBasic Pro Compiler
microEngineering Labs, Inc.
PicBasic Pro Compiler
i
CONTEDO
1. Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1. Os PICmicros . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Sobre Este Manual . . . . . . . . . . . . . . . . . . . . . . . . 3
2. I n i c i a n d o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1. Instalao do Software. . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Seu Primeiro Programa. . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Programe Este PicMicro . . . . . . . . . . . . . . . . . . . . 7
2.4. Ele Vive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5. Eu Tive Problemas . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6. Estilos de Cdigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6.1. Comentrios . . . . . . . . . . . . . . . . . . . . . . 11
2.6.2. Nomes de Pinos e Variveis . . . . . . . . . . . 12
2.6.3. Rtulos . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6.4. GOTO . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. Opes de Linha de Comando. . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1. Utilizao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. Opes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.1. Opo -A . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.2. Opo -C . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.3. Opo -H ou -? . . . . . . . . . . . . . . . . . . 17
3.2.4. Opo -I . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.5. Opo -L . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.6. Opo -O . . . . . . . . . . . . . . . . . . . . . . 17
3.2.7. Opo -P . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.8. Opo -S . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.9. Opo -V . . . . . . . . . . . . . . . . . . . . . . . 18
4. O Bsico do PicBasic Pro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1. Identificadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2. Rtulos de Linha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3. Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.4. Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.5. Conjuntos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.6. Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.7. Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.8. Constantes Numricas . . . . . . . . . . . . . . . . . . . . . . . 23
4.9. Constantes Alfanum. . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.10. Pinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.11. Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
PicBasic Pro Compiler
ii
4.12. Linhas c/ Decl. Mltiplas . . . . . . . . . . . . . . . . . . . . 26
4.13. Caractere de Extenso de Linha. . . . . . . . . . . . . . . . . 26
4.14. INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.15. DEFINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.16. Op. Matemticos. . . . . . . . . . . . . . . . . . . . . . . . . 28
4.16.1. Multiplicao . . . . . . . . . . . . . . . . . . . 30
4.16.2. Diviso . . . . . . . . . . . . . . . . . . . . . . . 30
4.16.3. Desl. . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.16.4. ABS . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.16.5. COS . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.16.6. DCD . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.16.7. DIG . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.16.8. MAX e MIN . . . . . . . . . . . . . . . . . . 31
4.16.9. NCD . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.16.10. REV . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.16.11. SIN . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.16.12. SQR . . . . . . . . . . . . . . . . . . . . . . . . 32
4.16.13. Operadores a Bit . . . . . . . . . . . . . . 32
4.17. Operadores de Comparao. . . . . . . . . . . . . . . . . . . 33
4.18. Operadores Lgicos. . . . . . . . . . . . . . . . . . . . . . . 33
5. Referncia de Declaraes do PicBasic Pro. . . . . . . . . . . . . . . . . . 35
5.1. @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2. ASM..ENDASM . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.3. BRANCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.4. BRANCHL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.5. BUTTON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.6. CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.7. CLEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.8. COUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.9. DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.10. DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.11. DISABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.12. DTMFOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.13. EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.14. ENABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.15. END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.16. FOR..NEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.17. FREQOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.18. GOSUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.19. GOTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.20. HIGH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.21. HSERIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
PicBasic Pro Compiler
iii
5.22. HSEROUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.23. I2CREAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.24. I2CWRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.25. IF..THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.26. INPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.27. {LET} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.28. LCDOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.29. LOOKDOWN . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.30. LOOKDOWN2 . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.31. LOOKUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.32. LOOKUP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.33. LOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.34. NAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.35. ON INTERRUPT . . . . . . . . . . . . . . . . . . . . . . . . 81
5.36. OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.37. PAUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.38. PAUSEUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.39. PEEK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.40. POKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.41. POT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.42. PULSIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.43. PULSOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
5.44. PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.45. RANDOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.46. RCTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.47. READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.48. RESUME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.49. RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.50. REVERSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.51. SERIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.52. SERIN2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.53. SEROUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.54. SEROUT2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.55. SHIFTIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.56. SHIFTOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.57. SLEEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.58. SOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.59. STOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.60. SWAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.61. TOGGLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.62. WHILE..WEND . . . . . . . . . . . . . . . . . . . . . . . . 118
5.63. WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.64. XIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
PicBasic Pro Compiler
iv
5.65. XOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6. Estrutura de Um Programa Compilado . . . . . . . . . . . . . . . . . . . 125
6.1. Cabealhos de Alvo Especfico . . . . . . . . 125
6.2. Os Arq. de Bibliotecas. . . . . . . . . . . . . . . . . . . . . . . . 125
6.3. Cdigo Gerado pelo PBP . . . . . . . . . . . . . . . . . . . . 126
6.4. Estrutura do Arq. .ASM. . . . . . . . . . . . . . . . . . . . . . 126
7. Outras Consideraes do PicBasic Pro . . . . . . . . . . . . . . . . . 127
7.1. Quo Rpido Bastante Rpido?. . . . . . . . . . . . . . . . 127
7.2. Ajustes de Configurao . . . . . . . . . . . . . . . . . . . 129
7.3. Utiliz. da RAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.4. Pal. Reservadas . . . . . . . . . . . . . . . . . . . . . . . . 131
7.5. Vida Aps 2K . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
8. Programao em Linguagem Assembly . . . . . . . . . . . . . . . . . 133
8.1. Dois Assemblers - S/ Espera . . . . . . . . . . . . . 133
8.2. Programando em Linguagem Assembly . . . . . . . 134
8.3. Insero do Assembly Em-Linha . . . . . . . . . . . . . 135
8.4. Outro Detalhe do Assembly . . . . . . . . . . . . . . . . . . 137
9. Interrupes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
9.1. Interrupes em Geral . . . . . . . . . . . . . . . . . . . . . 139
9.2. Interrupes em BASIC. . . . . . . . . . . . . . . . . . . . . . 140
9.3. Interrupes em Assembler. . . . . . . . . . . . . . . . . . . 142
10. Diferenas do PicBasic Pro / PicBasic / Stamp . . . . . . . . . 147
10.1. Veloc. de Execuo . . . . . . . . . . . . . . . . . . . . . . . 147
10.2. I/O Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.3. Instrues p/ Baixo Consumo. . . . . . . . . . . . . . . . . . 148
10.4. Interface PC Faltante . . . . . . . . . . . . . . . . . . . . 148
10.5. S/ Variveis Automticas . . . . . . . . . . . . . . . . . 149
10.6. S/ Variveis do Tipo Nibble . . . . . . . . . . . . . . . . 149
10.7. Op. Matemticos. . . . . . . . . . . . . . . . . . . . . . . . 149
10.8. [ ] Versus ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.9. DATA, EEPROM, READ e WRITE . . . . . . . 151
10.10. DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.11. GOSUB e RETURN . . . . . . . . . . . . . . . . . 152
10.12. I2CREAD e I2CWRITE . . . . . . . . . . . . . . . 152
10.13. IF..THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
10.14. MAX e MIN . . . . . . . . . . . . . . . . . . . . . . . . 152
10.15. SERIN e SEROUT . . . . . . . . . . . . . . . . . . 153
10.16. SLEEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
PicBasic Pro Compiler
v
Apndice A
Sumrio do Conj. de Instrues do Microchip Assembly. . . 155
Apndice B
Informao Para Contato. . . . . . . . . . . . . . . . . . . . . . . . . 157
PicBasic Pro Compiler
vi
PicBasic Pro Compiler
1
1. Introduo
O PicBasic Pro Compiler (ou PBP) nossa linguagem de programao
de prxima gerao que torna mais rpido e fcil para voc programar
os poderosos microcontroladores PICmicro da Microchip Technology.
A linguagem BASIC semelhante ao ingls mais fcil de ler e escrever que a
a ardilosa linguagem Microchip Assembly.
O PicBasic Pro Compiler "igual ao BASIC Stamp II" e tem a maioria das biblio-
tecas e funes do BASIC Stamp I e II. Sendo ele um verdadeiro compilador,
os programas rodam mais rpido e podem ser maiores do que em seus
equivalentes Stamp.
O PBP no to compatvel c/ os BASIC Stamps como nosso PicBasic
Compiler original c/ o BS1. Foram tomadas decises que esperamos
melhorem a linguagem em geral. Uma delas foi adicionar um
IF..THEN..ELSE..ENDIF real em vez de IF..THEN(GOTO) dos
Stamps. Estas diferenas sero detalhadas mais adiante neste manual.
O PBP cria por padro arquivos que rodam em um PIC16F84-04/P de clock
4Mhz. Apenas um mnimo de outras peas necessrio: 2 capacitores de 22pf
p/ o cristal de 4Mhz, um resistor pull-up de 4.7K ligado ao pino /MCLR e uma
fonte apropriada de 5 volts. Vrios PICmicros que no o 16F84, bem
como osciladores de freqncias diferentes de 4Mhz, podem ser usados c/ o
PicBasic Pro Compiler.
1.1. Os PICmicros
O PicBasic Pro Compiler produz cdigo que pode ser programado em
uma variedade de microcontroladores PICmicro tendo de 8 a 68 pinos
e vrias caractersticas em-chip incluindo conversores A/D, timers de hardware
e portas seriais.
H alguns PICmicros que no iro funcionar c/ o PicBasic Pro
Compiler, notavelmente a srie PIC16C5x, incluindo o PIC16C54 e o
PIC16C58. Estes PICmicros baseiam-se no antigo ncleo de 12 bits ao invs
do ncleo mais atual de 14 bits. O PicBasic Pro Compiler requer algumas
das caractersticas apenas disponveis com o ncleo de 14 bits, sendo a mais
destacada a pilha de 8 nveis.
H vrios, vrios PICmicros, alguns compatveis em pinagem c/ a srie
'5x, que podem ser usados com o PicBasic Pro Compiler. Atualmente, a
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 Microchip
adicionando mais a uma taxa rpida. Para substituio direta de um PIC16C54 ou
58, o PIC16C554, 558, 620 e 622 trabalham bem c/ o compilador e
tm preos muito prximos.*
Para projetos de uso geral em PICmicro utilizando o PicBasic Pro
Compiler, o PIC16F84 (ou PIC16C84 se o 'F84 no estiver disponvel) o
PICmicro atual p/ se escolher. Este microcontrolador de 18 pinos usa tecnologia
flash (ou EEPROM) p/ permitir rpido apagamento e reprogramao p/
uma rpida depurao. Com o clique do mouse no software de
programao, o PIC16F84 pode ser instantaneamente apagado e ento re-
programado por vrias e vrias vezes. Outros PICmicros nas sries 12C67x,
16C55x, 16C6xx, 16C7xx e 16C9xx tanto podem ser programveis uma
nica vez (OTP) ou ter uma janela de quartzo no topo (JW) p/ permitir
apagamento por exposio luz ultravioleta por vrios minutos.
O PIC16F84 (e 'C84) contm tambm 64 bytes de memria de dados
que pode ser usada p/ armazenar dados de programa e outros parmetros
mesmo quando a fora estiver desligada. Esta rea de dados pode ser acessada
simplesmente usando-se os comandos READ e WRITE do PicBasic
Pro Compiler. (O cdigo estar sempre permanentemente guardado no
espao de cdigo do PICmicro estando a fora ligada ou no.
Usando-se o 'F84 p/ teste inicial de um programa, o processo de depurao poder
ser acelerado. Uma vez que as rotinas principais estejam operando
satisfatoriamente, um PICmicro c/ mais capacidades ou caractersticas expandidas
do compilador poder ser usado.
Enquanto muitas caractersticas do PICmicro sero discutidas neste manual, p/
total informao sobre o PICmicro necessrio obter-se as folhas de dados do
PICmicro apropriadas ou o CD-ROM da Microchip Technology. Refira-se
ao Apndice B p/ informao de contato.
*O preo de venda ditado pela Microchip Technology Inc. e seus
distribuidores.
PicBasic Pro Compiler
3
1.2. Sobre Este Manual
Este manual no pode ser um tratado completo na linguagem BASIC. Ele
descreve o conj. de instrues do PicBasic Pro e prov exemplos em
como us-lo. Se voc no est familiarizado c/ programao BASIC, voc
deve adquirir um livro sobre o tema. Ou apenas mergulhe de cabea. O BASIC
projetado p/ ser uma linguagem fcil de usar e h programas de exemplo
adicionais no disco que podem ajud-lo a comear.
A prxima seo deste manual cobre a instalao do PicBasic Pro
Compiler e voc escrever seu primeiro programa. A seguir h uma seo que
descreve diferentes opes p/ compilar programas.
A seguir, ser coberto o bsico de programao, seguido por uma seo de referncia
listando cada comando do PicBasic Pro em detalhe. A seo de referncia
mostra cada prottipo do comando, uma descrio do comando e
alguns exemplos. As chaves, { }, indicam parmetros opcionais.
O resto do manual prov informao p/ programadores
avanados - todo o funcionamento interno do compilador.
PicBasic Pro Compiler
4
PicBasic Pro Compiler
5
2. I n i c i a n d o
2.1. Instalao do Software
Os arquivos do PicBasic Pro esto compactados em um arquivo auto-extravel no
disquete. Eles precisam ser descompactados antes do uso. Para descompactar os
arquivos, crie um sub-diretrio no seu disco rgido chamado PBP ou outro
nome de sua escolha, digitando:
md PBP
no prompt do DOS. Mude p/ o diretrio:
cd PBP
Assumindo que o disquete de distribuio est no drive a:, descompacte os
arquivos no diretrio PBP:
a:\pbpxxx -d
No esquea da opo -d ao final do comando. Isto assegura que os
sub-diretrios apropriados dentro de PBP sejam criados.
Certifique-se de que FILES e BUFFERS estejam ajustados p/ ao menos 50 no
seu arquivo CONFIG.SYS. Dependendo de quantos FILES e BUFFERS j
estiverem em uso pelo seu sistema, poder ser necessrio alocar um nme-
ro maior.
2.2. Seu Primeiro Programa
Para a operao do PicBasic Pro Compiler voc precisar de um editor de texto ou
processador de texto p/ a criao do arquivo fonte do seu programa, algum tipo
de programador de PICmicro como o nosso EPIC Plus Pocket PICmicro
Programmer, e o PicBasic Pro Compiler propriamente dito. Claro que voc
tambm precisar de um PC p/ rodar tudo isso.
A seqncia de eventos mais ou menos a seguinte:
Primeiro crie o arq. fonte em BASIC p/ o programa usando o seu editor de texto
ou processador de texto favorito. Se voc no tem um favorito, o EDIT do DOS
(incluso no MS-DOS) ou o NOTEPAD do Windows (incluso no Windows
PicBasic Pro Compiler
6
e Windows 95/98) podem substituir. O nome do arq. fonte deve termi-
nar c/ (mas no requerido) a extenso .BAS.
O arquivo texto criado precisa ser texto ASCII puro. Ele no pode conter quais-
quer cdigos especiais que possam ser inseridos por processadores de texto p/
seus propsitos. Normalmente lhe dada a opo de salvar o arquivo como
DOS puro ou texto ASCII pela maioria dos processadores.
O seguinte programa prov um bom teste inicial de um PICmicro no mundo
real. Voc pode digit-lo ou simplesmente peg-lo do sub-diretrio
SAMPLES incluso no disquete de distribuio do PicBasic
Pro Compiler. O nome do arq. BLINK.BAS. O arq. fonte BASIC
deve ser criado ou movido p/ o mesmo diretrio onde o arquivo
PBP.EXE estiver.
' Programa exemplo p/ piscar um LED ligado ao PORTB.0 aprox.
uma vez por segundo
loop: High PORTB.0 Liga o LED
Pause 500 Atraso de .5 segundos
Low PORTB.0 Desliga o LED
Pause 500 Atraso de .5 segundos
Goto loop Voltar ao loop e piscar
o LED indefinidamente
End
Uma vez satisfeito que o programa que voc escreveu funcionar s/
falhas, voc pode executar o PicBasic Pro Compiler entrando PBP
seguido pelo nome do seu arquivo texto no prompt do DOS. Por exemplo, se
o arquivo texto que voc criou chama-se BLINK.BAS, no prompt de comando
do DOS entre:
PBP blink
O compilador ir mostrar uma mensagem de inicializao (copyright) e
processar seu arq. Se ele gostar do seu arq., ele ir criar um arq. de cd. fonte
assembler (nesse caso chamado BLINK.ASM) e automaticamente invocar seu
montador p/ completar a tarefa. Se tudo correr bem, o arq. final de cdigo
do PICmicro ser criado (nesse caso, BLINK.HEX). Se voc tiver deixado o
compilador infeliz, ele enviar uma srie de erros que precisaro ser
corrigidos no seu arq. fonte BASIC antes de voc tentar compilar novamente.
PicBasic Pro Compiler
7
P/ ajudar a ter certeza de que seu arq. original no tem erros, melhor comear
escrevendo e testando um pequeno pedao de seu programa, ao invs de escrever
um bloco inteiro de 100.000 linhas de uma s vez e ento tentar depur-lo de ponta
a ponta.
Se voc no especificar de outra maneira, o PicBasic Pro Compiler ir
criar cdigo p/ o PIC16F84 por padro. Para compilar cdigos p/ PICmicros que
no o 'F84, simplesmente use a opo de linha de comando -p descrita mais
tarde 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 no
microcontrolador PICmicro e test-lo.
O PicBasic Pro Compiler gera arquivos padro de 8 bits Merged Intel HEX
(.HEX) que podem ser usados c/ qualquer programador PICmicro incluindo
nosso EPIC Plus Pocket PICmicro Programmer. Os PICmicros no podem ser
programados c/ cabos de programao do BASIC Stamp.
O seguinte um exemplo de como um PICmicro pode ser programado usando
nosso EPIC Programmer c/ o software de programao DOS. Se o
Windows95/98/NT estiver disponvel, recomendado usar a verso Win-
dows do EPIC.
Certifique-se de que no haja PICmicros instalados no soquete de programao
do EPIC Programmer ou quaisquer adaptadores.
Conecte o EPIC Programmer porta de impressora paralela do PC usando um
cabo de extenso DB25 macho p/ DB25 fmea.
Plugue o adaptador CA na parede e ento no EPIC Programmer
(ou encaixe 2 baterias novas de 9 volts no programador e conecte o
jumper Batt ON).
O LED no EPIC Programmer poder estar aceso ou no neste ponto. No
insira um PICmicro no soquete de programao quando o LED estiver aceso
ou antes do software de programao ter sido iniciado.
PicBasic Pro Compiler
8
Entre:
EPIC
no prompt de comando do DOS p/ iniciar o software de programao. O
software EPIC deve ser rodado de uma sesso DOS pura ou de uma seo
de tela cheia do DOS sob Windows ou OS/2. (Desencorajamos
rodar sob Windows. O Windows (todas as variantes) altera o tempo do sis-
tema e brinca c/ a porta quando voc no est olhando, o que pode causar
erros de programao).
O software EPIC ir dar uma olhada ao redor p/ encontrar onde o EPIC
Programmer est ligado e prepar-lo p/ programar um PICmicro. Se o EPIC
Programmer no for encontrado, cheque todas as conexes acima e veri-
fique que no haja nenhum PICmicro ou adaptador conectado ao
programador. Digitando:
EPIC /?
no prompt de comando do DOS ir mostrar uma lista de opes disponveis
p/ o software EPIC.
Uma vez que a tel de programao mostrada, use o mouse p/ clicar em
Open file ou pressione Alt-O no seu teclado. Use o mouse (ou
teclado) p/ selecionar BLINK.HEX ou qualquer outro arq. que voc quiser
programar no PICmicro a partir da caixa de dilogo.
O arquivo ir carregar e voc dever ver uma lista de nmeros na janela es-
querda. Este seu programa em cdigo PICmicro. direita da tela h
um mostrador da informao de configurao que ir ser
programada no PICmicro. Verifique que isto esteja correto antes de
prosseguir.
Em geral, o Oscillator dever ser ajustado p/ XT p/ um cristal de 4Mhz e o
Watchdog Timer dever ser ajustado p/ ON p/ programas PicBasic Pro. Mais
importante, Code Protect dever estar em OFF quando for programar
qualquer PICmicro c/ janela (JW). Voc no conseguir apagar um PICmicro
c/ janela qu tenha sido protegido contra cpia.
Quando tudo parecer maravilhoso, hora de inserir um PICmicro no soquete
de programao e clicar em Program ou pressionar Alt-P no
teclado. O PICmicro ser primeiramente checado p/ ter certeza que est apagado
e ento seu cdigo ser programado nele. Se o PICmicro no estiver
PicBasic Pro Compiler
9
LED
470
+5V +5V
22pf 22pf
4Mhz
4.7K
.1uf
PIC16F84
1
MCLR
Vss
OSC1
OSC2
Vdd
4
5 14
15
16
17
18
RA0
RA1 RA2
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 programao esteja completa e o LED esteja apagado, hora
de testar seu programa.
2.4. Ele Vive
O esquema de amostra abaixo lhe d uma idia do pouco que precisa
ser 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/ 2
capacitores, e algum tipo de fonte de alimentao de 5 volts. Ns acrescen-
tamos um LED e um resistor p/ prover a sada p/ o programa BLINK.
Monte e cheque duplamente este simples circuito em um breadboard e encaixe
o PICmicro que voc acabou de programar. Nossa linha PICProto de placas de
prototipagem perfeita p/ este tipo de coisa.
Conecte uma fonte de alimentao. Seu PICmicro dever ganhar vida e comear
a piscar o LED cerca de uma vez por segundo. Se ele no piscar, cheque todas
as conexes e certifique-se de que os 5 volts esto presentes nos pinos apropri-
ados no PICmicro.
Partindo destas simples iniciaes, voc poder criar sua prpria apli-
cao que conquistar o mundo.
PicBasic Pro Compiler
10
2.5. Eu Tive Problemas
Os problemas mais comuns em fazer rodar os PICmicros envolvem ter
certeza de que os poucos componentes externos so de valor apropriado e
esto corretamente ligados ao PICmicro. A seguir esto algumas sugestes
p/ ajudar a conseguir que as coisas funcionem.
Certifique-se de que o pino /MCLR esteja ligado aos 5 volts atravs de algum tipo
de circuito de reset protegido contra tenso ou simplesmente c/ um resistor de 4,7K.
Se voc deixar o pino s/ ligao, seu nvel flutuar e algumas vezes o
PICmicro funcionar mas normalmente no. O PICmicro tem um circuito de
power-on-reset em-chip assim em geral apenas um resistor de pull-up externo
adequado. Mas em alguns casos o PICmicro poder no se ligar cor-
retamente e um circuito externo poder ser necessrio. Veja os PICmicro
data books da Microchip p/ mais informaes.
Esteja certo de que voc tem um bom cristal c/ capacitores de valores corretos
ligados a ele. Valores de capacitores podem ser difceis de ler. Se os valores esti-
verem muito fora, o oscilador no partir e rodar corretamente. Um cristal
de 4MHz c/ 2 capacitores de disco cermico de 22pf (picofarads) um bom comeo 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 o
PICmicro consome muito pouca potncia, a fonte deve ser bastante bem fil-
trada. Se o PICmicro est controlando dispositivos que puxam muita corrente da
sua fonte, medida em que se ligam e desligam eles podem pr rudo sufi-
ciente nas linhas de alimentao p/ fazer o PICmicro parar de funcionar
corretamente. At mesmo um mostrador a LED pode criar dreno instantneo sufi-
ciente p/ derrubar momentneamente uma fonte pequena (como uma bateria de
9 volts) e fazer o PICmicro perder a cabea.
Cheque as folhas de dados do PICmicro. Alguns dispositivos tm caractersticas que
podem interferir c/ operaes de pinos esperadas. As peas PIC16C62x (os
16C620, 621 e 622) so um bom exemplo disto. Estes PICmicros tm
comparadores analgicos no PORTA. Quando estes chips iniciam-se,
PORTA ajustado p/ o modo analgico. Isto faz c/ que as funes dos pinos no PORTA
trabalhem numa maneira inesperada. Para mudar os pinos p/ digital, simplesmente
adicione a linha:
CMCON = 7
PicBasic Pro Compiler
11
prximo do incio do seu programa. Qualquer PICmicro c/ entradas analgicas,
tal como os da srie PIC16C7xx ir ligar-se em modo analgico. 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, mostra
um comportamento incomum quando usado como sada. Isto porque o pino tem
uma sada em coletor aberto ao invs do habitual estgio bipolar do resto dos
pinos de sada. Isto significa que ele pode ser puxado ao terra quando fixado em 0,
mas simplesmente flutuar quando fixado em 1, ao invs de ir p/ nvel alto. P/ fazer este
pino agir da maneira esperada, adicione um resistor pull-up entre o pino e os
5 volts. O valor do resistor poder estar entre 1K e 33K,
dependendo da excitao necessria p/ a entrada conectada. Este pino age
como qualquer outro pino quando usado como entrada.
Todos os pinos do PICmicro esto fixados como entradas ao ligar-se. Se voc precisa
que um pino seja uma sada, fixe-o como sada antes de us-lo, ou use um comando
do PicBasic Pro que o faa p/ voc. Mais uma vez, revise as folhas de dados
do PICmicro p/ familiarizar-se c/ as idiossincrasias de uma pea espec-
fica.
Comece pequeno. Escreva programas curtos p/ testar caractersticas c/ as quais voc
esteja incerto ou tendo problemas. Uma vez que estes programas menores estejam
funcionando corretamente, voc poder trabalh-los mais.
Tente fazer as coisas de outra maneira. s vezes o que voc est tentando fazer
parece que deveria funcionar mas no o faz, no importa o quanto voc bata
nele. Normalmente h mais de uma maneira de se descascar um programa. Tente
abordar o problema de um ngulo diferente e talvez isto
resulte num esclarecimento.
2.6. Estilos de Cdigo
Escrever programas legveis e preservveis uma arte. H algumas
tcnicas simples que voc pode seguir que podem ajud-lo a tornar-se um artista.
2.6.1. Comentrios
Use muitos comentrios. Mesmo que seja perfeitamente bvio p/ voc o que o
cdigo est fazendo medida que voc o escreve, outra pessoa que esteja olhando
p/ o programa (ou mesmo voc quando tornar-se outra pessoa mais tarde na vida) pode
PicBasic Pro Compiler
12
no ter qualquer idia do que voc estava tentando conseguir. Enquanto que os
comentrios tomam espao no seu arq. fonte BASIC, eles no tomam nenhum
espao adicional no PICmicro portanto use-os livremente.
Faa os comentrios dizerem-lhe algo til sobre o que o programa est
fazendo. Um comentrio do tipo "Fixa o Pin0 em 1" somente explica a sintaxe da
linguagem mas no faz nada p/ dizer-lhe por qu voc tem a necessidade de fazer
isto. Algo do tipo "Liga o LED de Bateria Fraca" pode ser muito mais
t i l .
Um bloco de comentrios no incio do programa e antes de cada seo
de cdigo pode descrever o que est para acontecer em mais detalhes
do que s o espao restante aps cada declarao. Mas no inclua um bloco
de comentrios ao invs de comentros de linha individuais - use ambos.
No comeo do programa descreva o que o programa pretende fazer,
quem o escreveu e quando. Pode tambm ser til listar informao
de reviso e datas. Especificar a que cada pino est ligado pode ser de
ajuda p/ se lembrar em qual hardware este programa foi projetado
p/ rodar. Se for pretendido que ele rode c/ um cristal fora de padro ou
opes especiais do compilador, esteja certo de list-las.
2.6.2. Nomes de Pinos e Variveis
Faa do nome de um pino ou varivel algo mais coerente do que Pino0
ou B1. Em acrscimo ao uso liberal de comentrios, nomes descritivos de pinos
e variveis podem melhorar grandemente a legibilidade. O seguinte fragmento
de cdigo demonstra:
BatLED var PORTB.0 LED de bateria fraca
nivel var byte A varivel ir conter o
nvel da bateria
If nivel < 10 Then Se o nvel estiver baixo
High BatLED Acenda o LED
Endif
2.6.3. Rtulos
Rtulos tambm devem ser mais significativos do que "rotulo1:" ou "aqui:". At mesmo
um rtulo 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
PicBasic Pro Compiler
13
pelo menos uma pista de sua funo c/ o rtulo, ento prossiga c/ um
comentrio.
2.6.4. GOTO
Finalmente, tente no usar muitos GOTOS. Enquanto GOTOS podem ser um
mal necessrio, tente minimizar seu uso o mximo possvel. Tente escrever
seu cdigo em sees lgicas e no ficar pulando muito por a.
GOSUBS podem ajud-lo a conseguir isto.
PicBasic Pro Compiler
14
PicBasic Pro Compiler
15
3. Opes de Linha de Comando
3.1. Utilizao
O PicBasic Pro Compiler pode ser invocado a partir da linha de comando do DOS
usando o seguinte formato de comando:
PBP Opes Nome_de_Arquivo
Zero ou mais Opes podem ser usadas p/ modificar a maneira na qual o PBP
compila o arq. especificado. Opes comeam c/ um sinal de menos ( - ) ou uma
barra normal (/). O caractere seguinte ao sinal de menos ou barra uma letra
que seleciona a Opo. Caracteres adicionais podero vir a seguir se a
Opo requerer mais informao. Cada Opo deve ser separada por
por um espao, embora nenhum espao poder ocorrer de dentro de uma Opo.
Mltiplas Opes podem ser usadas ao mesmo tempo. Por exemplo, a linha
de comando:
PBP -p16c71 -ampasm blink
ir fazer c/ que o arq. BLINK.BAS seja compilado usando MPASM como
montador e direcionado p/ um processador PIC16C71.
O primeiro tem a no iniciar-se c/ um sinal de menos assumido como Nome_de_Arquivo.
Se nenhuma extenso especificada a extenso padro .BAS usada. Se for espe-
cificado um caminho, o arq. denominado procurado naquele diretrio. Independente-
mente de onde o arq. fonte encontrado, os arq. gerados pelo PBP so colocados
no diretrio atual.
Por padro, o PBP lana automaticamente o montador (PM.EXE) se a compi-
lao executada s/ erro. O PBP espera encontrar PM.EXE no
mesmo diretrio que PBP.EXE. Se a compilao tem erros ou a opo -s
usada, o montador no lanado.
Se o PBP invocado s/ parmetros ou nome de arquivo, uma breve tela de ajuda
mostrada.
PicBasic Pro Compiler
16
3.2. Options
Opo Descrio
A Usa um Montador diferente
C Insere linhas de fonte como Comentrios no arq. montador
H(?) Mostra tela de Ajuda
I Usa um caminho de Incluso diferente
L Usa um arq. de Biblioteca diferente
O Passa Opo p/ montador
P Especifica Processador alvo
S Pula execuo do montador quando terminado
V Modo Verboso
3.2.1. Opo -A
O PBP tem a capacidade de usar tanto o PM, que includo c/ o PBP, como o
MPASM da Microchip e seu montador. Para especificar o MPASM (que deve
ser adquirido da Microchip), use -ampasm na linha de comando:
PBP -ampasm nome_de_arquivo
Se nenhum montador especificado na linha de comando, o PM usado. Veja a
seo sobre programao em linguagem assembly p/ mais informao.
3.2.2. Opo -C
A opo -C faz c/ que o PBP insira linhas do arq. fonte PicBasic Pro como
comentrios no arq. fonte em linguagem assembly. Isto pode ser til como
ferramenta de depurao ou aprendizado j que ela mostra a instruo
do PicBasic Pro seguida pelas instrues em linguagem assembly que ela gera.
PBP -c nome_de_arquivo
PicBasic Pro Compiler
17
3.2.3. Opto -H ou -?
A opo -H ou -? faz c/ que o PBP mostre uma breve tela de ajuda. Esta
tela de ajuda tambm mostrada se nenhuma opo e nome de arq. so espe-
cificados na linha de comando.
3.2.4. Opo -I
A opo -I lhe permite selecionar o caminho de incluso p/ arq. usados pelo
PicBasic Pro.
3.2.5. Opo -L
A opo -L lhe permite selecionar a biblioteca usada pelo PicBasic Pro. Esta
opo geralmente desnecessria j que o arq. de biblioteca padro est fixado em
um arq. de configurao p/ cada microcontrolador. Para mais informao sobre
as bibliotecas do PicBasic Pro, veja as sees avanadas 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. Opo -O
A opo -O faz c/ que as letras que se seguem sejam passadas ao
montador em sua linha de comando como opes. Algumas opes pertinentes ao PM
esto listadas na seguinte tabela:
Opo PM Descrio
OD Gera Listagem, Tabela Simblica 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 aps uma
compilao bem-sucedida.
Mais de uma opo -O pode ser passada ao montador de uma vez.
PicBasic Pro Compiler
18
O PICmicro Macro Assembler's manual em disco contm mais
informao sobre o montador e suas opes.
3.2.7. Opo -P
Se no for dito de outra maneira, o PBP compila programas p/ o PIC16F84. Se o
programa requer um processador diferente p/ seu alvo, seu nome deve ser
especificado na linha de comando usando a opo -P.
Por exemplo, se o processador alvo desejado p/ o programa PBP um
PIC16C74, a linha de comando dever parecer algo como o seguinte:
PBP -p16c74 nome_de_arquivo
3.2.8. Opo -S
Normalmente, quando o PBP compila um programa c/ sucesso, ele lana
automaticamente o montador. Isto feito p/ converter a sada do montador
do PBP p/ uma imagem executvel. A opo -S previne isso, deixando a
sada do PBP no arquivo .ASM gerado.
J que -S previne o montador de ser invocado, as opes que so
simplesmente passadas ao montador usando a opo -O so efetivamente
anul adas.
PBP -s nome_de_arquivo
3.2.9. Opo -V
A opo -V liga o modo verboso do PBP o qual apresenta mais
informao durante a compilao do programa.
PBP -v nome_de_arquivo
PicBasic Pro Compiler
19
4. O Bsico do PicBasic Pro
4.1. Identificadores
Um identificador , bem simplesmente, um nome. Identificadores so usados no PBP p/
rtulos e nomes de variveis. Um identificador qualquer seqncia de letras,
dgitos e sublinhas, embora ele no deva comear c/ um dgito. Identificadores
no so sensveis a caixa, assim rtulo, RTULO e Rtulo so todos tratados como
equivalentes. E enquanto rtulos podem ter qualquer nmero de caracteres de
comprimento, o PBP reconhece apenas os primeiros 32.
4.2. Rtulos de Linha
De forma a marcar declaraes que o programa pode desejar referenciar
c/ os comandos GOTO ou GOSUB, o PBP usa rtulos de linha. Ao contrrio de muitos
BASICs antigos, o PBP no permite nmeros de linha e no requer que cada
linha seja rotulada. Ao invs disso, qualquer linha do PBP pode comear c/ um rtulo de linha,
que simplesmente um identificador seguido por dois pontos (:).
aqui: Serout 0,N2400,["Olah, Mundo!",13,10]
Goto aqui
4.3. Variveis
Variveis so onde dados temporrios so guardados num programa do PicBasic Pro.
Elas so criadas usando a palavra-chave VAR. Variveis podem ser bits, bytes ou
palavras. O espao p/ cada varivel alocado automaticamente na
RAM do microcontrolador pelo PBP. O formato p/ se criar uma varivel o
seguinte:
Rtulo VAR Tamanho{.Modificadores}
Rtulo qualquer identificador, excluindo palavras-chave, como descrito acima. Tamanho
BIT, BYTE ou WORD. Modificadores opcionais adicionam maior controle sobre
como a varivel criada. Alguns exemplos de criao de varivel so:
cao var byte
gato var bit
w0 var word
No h variveis de usurio predefinidas no PicBasic Pro. Para o bem
da compatibilidade, foram providos dois arquivos que criam as variveis
PicBasic Pro Compiler
20
padro 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
prximo ao topo do programa do PicBasic Pro. Estes arq. contm numerosas
declaraes VAR que criam todas as variveis do BASIC Stamp e definies
de pinagem.
Entretanto, ao invs de usar estes arquivos "enlatados", ns recomendamos que
voc crie suas prprias variveis usando nomes que tenham significado p/ voc.
O nmero de variveis disponvel depende da quantidade de RAM em um
dispositivo em particular e o tamanho das variveis e conjuntos. O PBP reserva
aproximadamente 24 posies da RAM p/ seu prprio uso. Ele pode tambm criar
variveis temporrias adicionais p/ uso na ordenao de equaes complexas.
4.4. Aliases
VAR pode tambm ser usado p/ criar um alias (um outro nome) p/ uma varivel.
Isto mais til p/ acessar-se as vsceras de uma varivel.
fido var cao fido eh um outro nome
p/ cao
b0 var w0.byte0 b0 eh o primeiro byte
da palavra w0
b1 var w0.byte1 b1 eh o segundo byte
da palavra w0
pulga var cao.0 pulga eh o bit0 de cao
PicBasic Pro Compiler
21
Modificador Descrio
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 variveis podem ser criados de maneira similar s variveis.
Rotulo VAR Tamanho(Numero de elementos)
Rotulo qualquer identificador, excluindo palavras-chave, como descrito acima. Tamanho
BIT, BYTE ou WORD. Numero de elementos so quantas posies de
do conjunto se deseja. Alguns exemplos de criao de conjuntos so:
tubaroes var byte[10]
peixe var bit[8]
PicBasic Pro Compiler
22
A primeira posio do conjunto o elemento 0. No conjunto peixe definido acima,
os elementos so numerados peixe[0] a peixe[7] rendendo 8 elementos
no total.
Por causa da maneira c/ que os conjuntos so alocados na memria, h limites de tama-
nho p/ cada tipo:
Tam. Nmero Mximo de elementos
BIT
128
BYTE
64
WORD
32
Veja a seo sobre alocao de memria p/ mais informao.
4.6. Constantes
Constantes nomeadas podem ser criadas numa maneira similar s variveis.
Pode ser mais conveniente usar um nome de constante ao invs de um nmero
de constante. Se o nmero precisa ser trocado, ele pode ser trocado em apenas
um lugar no programa; onde a constante definida. Dados de variveis no
podem ser guardados em uma constante.
Rotulo CON Expressao constante
Alguns exemplos de constantes so:
ratos con 3
ratoeiras con ratos * 1000
4.7. Smbolos
SYMBOL prov ainda um outro mtodo p/ se dar aliases a variveis e
constantes. SYMBOL no pode ser usado p/ criar uma varivel. Use VAR p/
criar uma varivel.
SYMBOL leao = gato gato foi criado anteriormente
usando VAR
SYMBOL rato = 1 O mesmo que rato con 1
PicBasic Pro Compiler
23
4.8. Constantes Numricas
O PBP permite que constantes numricas sejam definidas nas trs bases: decimal,
binria e hexadecimal. Valores binrios so definidos usando o prefixo '%'
e valores hexadecimais usando o prefixo '$'. Valores decimais so o
padro e no requerem prefixo.
100 Valor decimal 100
%100 Valor binario p/ o decimal 4
$100 Valor hexadecimal p/ o decimal 256
Para facilidade de programao, caracteres nicos so convertidos p/ seus equi-
valentes ASCII. Constantes de caractere devem ser quoteadas usando aspas
e devem conter apenas um caractere (de outra forma, elas so cons-
tantes alfanumricas).
"A" Valor ASCII p/ o decimal 65
"d" Valor ASCII p/ o decimal 100
4.9. Constantes Alfanumricas
O PBP no prov capacidades de manuseio de sries de caracteres, mas elas podem
ser usadas c/ alguns comandos. Uma srie contm um ou mais caracteres e
delimitada por aspas. No so suportadas seqncias de escape p/
caracteres no-ASCII (embora a maioria dos comandos do PBP tm
embutido este manuseio).
"Olah" String (Abrev. p/ "O","l","a","h")
Sries so normalmente tratadas como uma lista de valores de caractere individuais.
4.10. Pinos
Pinos podem ser acessados em um nmero de maneiras diferentes. O melhor jeito
p/ especificar um pino p/ uma operao simplesmente usar seu nome PORT
e nmero de bit:
PORTB.1 = 1 Fixa PORTB, bit 1 p/ 1
Para tornar mais fcil de se lembrar p/ que um pino usado, a ele deve-se
atribuir um nome usando o comando VAR. Desta maneira, o nome pode
ento ser usado em qualquer operao:
PicBasic Pro Compiler
24
led var PORTA.0 Renomeia PORTA.0 como led
High led Fixa led (PORTA.0) p/ alto
Para compatibilidade c/ o BASIC Stamp, os pinos usados nos comandos do
PicBasic Pro Compiler podem tambm ser referenciados por nmero, 0 - 15. Estes
pinos so fisicamente mapeados sobre portas de hardware do PICmicro diferentes
dependendo 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 no tm 8 pinos de I/O.
Se uma porta no tem 8 pinos, tal como PORTA, s os nmeros dos pinos
que existem podem ser usados, por exemplo 8 - 12. O uso dos pinos de nmero 13 - 15
no causar efeito visvel.
Esta numerao dos pinos, 0 - 15, nada tem a ver c/ a numerao fsica dos pinos
de um PICmicro. Dependendo do PICmicro em particular, o pino nmero 0
poderia ser o pino fsico 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 nmeros (0 - 15), nome (ex. Pino0, se um
dos arquivos bsdefs.bas esto inclusos ou voc mesmo os definiu), ou o
nome do bit completo (ex. PORTA.1). Qualquer pino ou bit do microcontrolador pode
ser acessado usando o ltimo mtodo.
Os nomes dos pinos (ex. Pino0) no so automaticamente inclusos no seu
programa. Na maioria dos casos, voc iria definir os nomes dos pinos como achar melhor
usando o comando VAR:
led var PORTB.3
Entretanto, foram fornecidos dois arq. de definio p/ melhorar a compatibili-
dade c/ o BASIC Stamp. O arq. bs1defs.bas ou bs2defs.bas pode ser
incluso no programa do PicBasic Pro p/ prover nomes de pinos e bit que
combinem c/ os nomes BASIC Stamp.
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 de
pinos e variveis do BS1.
BS2DEFS.BAS define Ins, Outs, B0-B25, W0-W12 e a maioria dos outros
nomes de pinos e variveis do BS2.
Quando um PICmicro ligado, todos os pinos so fixados como entradas. P/ usar
um pino como sada, o pino ou porta deve ser fixado como uma sada ou deve ser usado
um comando que automaticamente fixa um pino como sada.
Para fixar um pino ou porta como sada (ou entrada), fixe o seu registrador TRIS. Fixando
um bit TRIS em 0 torna seu pino uma sada. Fixando um bit TRIS em 1 torna seu
pino uma entrada. Por exemplo:
TRISA = %00000000 Ou TRISA = 0
fixa todos os pinos em PORTA como sadas.
TRISB = %11111111 Ou TRISB = 255
fixa todos os pinos em PORTB como entradas.
TRISC = %10101010
Fixa todos os pinos pares em PORTC como sadas e os pinos mpares como entradas.
Direes individuais de bit podem ser fixadas da mesma maneira.
TRISA.0 = 0
fixa PORTA, pino 0 como uma sada. Todas as demais direes de pinos
em PORTA permanecem inalteradas.
Os nomes de variveis do BASIC Stamp Dirs, Dirh, Dirl e Dir0-Dir15
no esto definidas e no devem ser usadas c/ o PicBasic Pro Compiler.
O TRIS dever ser usado no lugar, mas tem o estado oposto a Dirs.
Isto no d certo c/ o PicBasic Pro:
Dir0 = 1 No fixa o pino PORTB.0 como sada
PicBasic Pro Compiler
26
Em lugar daquilo, faa isto:
TRISB.0 = 0 Fixa o pino PORTB.0 como sada
ou simplesmente use um comando que fixa automaticamente a direo do pino.
4.11. Comentrios
Um comentrio do PBP comea c/ a palavra-chave REM ou o apstrofe
(). Todos os caracteres seguintes nesta linha so ignorados.
Ao contrrio de vrios BASICs, REM uma palavra-chave nica e no uma abreviao
p/ REMark. Assim, nomes de variveis podem comear c/ REM (embora REM
por si s no seja vlido).
4.12. Linhas c/ Declaraes Mltiplas
De maneira a permitir programas mais compactos e agrupamento lgico de co-
mandos relacionados, o PBP suporta o uso de dois pontos (:) p/ separar
declaraes colocadas na mesma linha. Assim, os dois exemplos seguintes
so equivalentes:
W2 = W0
W0 = W1
W1 = W2
o mesmo que:
W2 = W0 : W0 = W1 : W1 = W2
Isto, entretanto, no altera o tamanho do cdigo gerado.
4.13. Caractere de Extenso de Linha
O nmero mximo de caracteres que podem aparecer em uma linha do PBP
256. Declaraes mais longas podem ser estendidas at a linha seguinte usando o
caractere de extenso de linha (_) ao final de cada linha a ser continuada.
Branch B0,[rotulo0,rotulo1,rotulo2,_
rotulo3,rotulo4]
PicBasic Pro Compiler
27
4.14. INCLUDE
Outros arq. fonte BASIC podem ser adicionados a um programa do PBP usando
INCLUDE. Voc pode ter sub-rotinas padronizadas, definies ou outros ar-
quivos que voc deseje manter em separado. Os Stamp e arq. de definio
de modo serial so exemplos disso. Estes arquivos podem ser includos em
programas onde eles sejam necessrios, mas deixados fora de programas
onde eles no sejam precisos.
As linhas de cdigo fonte do arq. includo so inseridas no programa
exatamente onde o INCLUDE colocado.
INCLUDE modedefs.bas
4.15. DEFINE
Alguns elementos, como a freqncia de clock do oscilador e as posies dos pi-
nos do LCD, so predefinidas no PBP. DEFINE permite que um programa do
PBP altere estas definies, se desejado.
DEFINE pode ser usado p/ mudar o valor predefinido do oscilador, os
pinos de DEBUG e baud rate, e as posies dos pinos do LCD, entre outras
coisas. Estas definies devem estar todas em maisculas. Veja as
sees apropriadas do manual p/ informao especfica sobre estas
definies.
DEFINE PAUSA_BOTAO 10 'Atraso p/ repique
do botao em ms
DEFINE PASSO_CARAC 1000 passo do caractere
serout em us
DEFINE REG_DEPURA PORTB 'Porta do pino de depuracao
DEFINE BIT_DEPURA 0 'Bit pino depura.
DEFINE BAUD_DEPURA 2400 'Baud rate depura.
DEFINE MODO_DEPURA 1 'Modo depura.: 0 =
Verd., 1 = Invertido
DEFINE PASSO_DEPURA 1000 'Passo caractere
depura. em us
DEFINE HSER_BAUD 2400 'Fixa baud rate
DEFINE HSER_RCSTA 90h 'Fixa reg. rec.
DEFINE HSER_TXSTA 20h 'Fixa reg. transm.
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 16CExxx
e 12CExxx
DEFINE I2C_LENTO 1 'Use p/ OSC >8mHz
c/ dispositivos
de veloc. padrao
DEFINE LCD_DREG PORTA 'Porta dados LCD
DEFINE LCD_DBIT 0 'Bit de inicio
LCD 0 ou 4
DEFINE LCD_RSREG PORTA 'Porta de selec.
registro LCD
DEFINE LCD_RSBIT 4 'Bit de selec.
registro LCD
DEFINE LCD_EREG PORTB 'Porta hab. LCD
DEFINE LCD_EBIT 3 'Bit hab. LCD
DEFINE LCD_BITS 4 'Tam. barram. LCD 4 ou
8
DEFINE 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 Matemticos
Ao contrrio do BASIC Stamp, o PicBasic Pro Compiler executa todas as operaes
matemticas em ordem completamente hierrquica. Isto quer dizer que h precedncia
p/ os operadores. Multiplicaes e divises so feitas antes das somas e
subtraes, por exemplo. Para assegurar que as operaes sejam levadas a cabo na
ordem que voc quiser, use parnteses p/ agrupar as operaes:
A = (B + C) * (D - E)
PicBasic Pro Compiler
29
As operaes matemticas no so assinadas e so executadas c/ preciso de 16 bits.
Os operadores suportados so:
Op. Matemticos Descrio
+
Adi o
-
Subtrao
*
Multiplicao
** 16 Bits superiores da multiplicao
*/
16 Bits do meio da multiplicao
/
Diviso
//
Resto (Mdulo)
<<
Desl. Esq.
>>
Desl. Dir.
ABS
Valor Absoluto
COS
Coseno
DCD
Decodif. 2n
DIG Dgito
MAX
Mxi mo*
MIN
M ni mo*
NCD
Codifica
REV
Inverte Bits
SIN
Seno
SQR
Raiz Quadrada
&
AND Lgico
|
OR Lgico
^
OR Exclusivo Lgico
~
NOT Lgico
&/
NOT AND Lgico
|/
NOT OR Lgico
^/
NOT OR Exclusivo Lgico
*Implementao difere do BASIC Stamp.
PicBasic Pro Compiler
30
4.16.1. Multiplication
O PBP executa multiplicao 16x16. O operador '*' retorna os 16 bits
inferiores do resultado de 32 bits. Esta a multiplicao tpica encontrada na
maioria das linguagens de programao. O operador '**' retorna os 16 bits
superiores do resultado de 32 bits. Estes dois operadores podem ser usados em conjunto
p/ executar multiplicaes 16x16 que produzam resultados de 32 bits.
W1 = W0 * 1000 Multiplicar o valor em W0 por 1000
e guardar o resultado em W1
W2 = W0 ** 1000 ultiplicar W0 por 1000
guardar 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 guardar
os 16 bits do meio em W3
4.16.2. Diviso
O PBP executa diviso 16x16. O operador '/' retorna o resultado de 16 bits.
O operador '//' retorna o resto. Isto s vezes referenciado como
o mdulo do nmero.
W1 = W0 / 1000 Dividir o valor em W0 por 1000
e guardar o resultado em W1
W2 = W0 // 1000 Dividir o valor em W0 por 1000
e 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 so 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/ direita
e guarda o resultado em W1 (o mesmo
que dividir por 2)
PicBasic Pro Compiler
31
4.16.4. ABS
ABS retorna o valor absoluto de um nmero. Se um byte maior que
127 (bit alto ligado), ABS ir retornar 256 - valor. Se uma palavra maior que
32767 (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 forma
de complemento de dois (ex. -127 p/ 127). Ele usa uma tabela de referncia de quarto de onda
p/ encontrar o resultado. O coseno inicia c/ um valor em radianos binrios, 0 a 255,
em oposio ao habitual 0 a 359 graus.
B1 = COS B0
4.16.6. DCD
DCD retorna o valor decodificado de um nmero de bit. Ele altera o nmero de bit
(0 - 15) p/ um nmero binrio c/ apenas aquele bit fixado em 1. Todos os demais bits so
fixados em 0.
B0 = DCD 2 Fixa B0 p/ %00000100
4.16.7. DIG
DIG retorna o valor de um dgito decimal. Simplesmente diga a ele o nmero do dgito
(0 - 4 c/ 0 sendo o dgito mais direita) do qual voc gostaria de saber o valor, e
voila.
B0 = 123 Fixa B0 em 123
B1 = B0 DIG 1 Fixa B1 em 2 (dgito 1 de
123)
4.16.8. MAX e MIN
MAX e MIN retorna o mximo e mnimo, respectivamente, de dois
nmeros. Ele normalmente usado p/ limitar nmeros p/ um valor.
PicBasic Pro Compiler
32
B1 = B0 MAX 100 Fixa B1 p/ o maior de B0
e 100 (B1 estar entre
100 & 255)
B1 = B0 MIN 100 Set B1 to the smaller of B0
and 100 (B1 cant be bigger
than 100)
4.16.9. NCD
NCD retorna o nmero de bit codificado prioritrio (1 - 16) de um valor. Ele usado
p/ achar o bit mais alto ligado em um valor. Ele retorna 0 se nenhum bit estiver ligado.
B0 = NCD %01001000 Fixa B0 p/ 7
4.16.10. REV
REV inverte a ordem dos bits inferiores em um valor. O nmero de bits
a 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 de
dois (ex. -127 a 127). Ele usa uma tabela de referncia de quarto de onda p/ achar o
resultado. O seno inicia c/ um valor em radianos binrios, 0 a 255, em oposio
ao 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 trabalha
c/ inteiros, o resultado ser sempre um inteiro de 8 bits no maior do que o
resultado 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. Eles
podem ser usados p/ isolar bits ou adicionar bits a um valor.
PicBasic Pro Compiler
33
B0 = B0 & %00000001 Isola o bit 0 de B0
B0 = B0 | %00000001 Liga o bit 0 de B0
B0 = B0 ^ %00000001 Inverte o estado do bit 0
de B0
4.17. Operadores de Comparao
Operadores de comparao so usados em declaraes IF..THEN p/ comparar
uma expresso c/ outra. Os operadores suportados so:
Operador de Comparao Descrio
= ou == Igual
<> ou != No Igual
<
Menor que
>
Maior que
<=
Menor ou Igual a
>=
Maior ou Igual a
If i > 10 Then loop
4.18. Operadores Lgicos
Operadores lgicos diferem dos operadores a bit. Eles produzem um resultado
verdadeiro/falso de sua operao. Valores de 0 so tratados como falso. Qualquer outro
valor tratado como verdadeiro. Eles so mais usados em conjunto c/ os operadores
de comparao em uma declarao IF..THEN. Os operadores
suportados so:
PicBasic Pro Compiler
34
Operador Lgico Descrio
AND ou && AND Lgico
OR ou || OR Lgico
XOR ou ^^ OR Exclusivo Lgico
NOT AND
NAND Lgico
NOT OR
NOR Lgico
NOT XOR
NXOR Lgico
If (A == maior) AND (B > medio) Then run
Esteja certo de usar parnteses p/ dizer ao PBP a ordem exata em que voc quer
que as operaes sejam executadas.
PicBasic Pro Compiler
35
5. Referncia de Declaraes do PicBasic Pro
@ Insere uma linha de cdigo em linguagem assembly.
ASM..ENDASM Insere uma seo de cdigo em ling. assembly.
BRANCH GOTO computado (equiv. a ON..GOTO).
BRANCHL BRANCH fora de pgina (BRANCH longo).
BUTTON Tira o repique e auto-repete a entrada de um pino especfico.
CALL Chama subrotina em ling. assembly.
CLEAR Zera todas as variveis.
COUNT Conta o nmero de pulsos em um pino.
DATA Define contedo inicial da EEPROM no-chip.
DEBUG Sada serial assncrona p/ um pino fixo e baud.
DISABLE Desabilita processamento ON INTERRUPT.
DTMFOUT Produz tons de discagem em um pino.
EEPROM Define contedo inicial p/ a EEPROM no-chip.
ENABLE Habilita processamento ON INTERRUPT.
END Para a execuo e entra no modo baixo consumo.
FOR..NEXT Executa declaraes repetidamente.
FREQOUT Produz at 2 freqncias em um pino.
GOSUB Chama subrotina BASIC em um rtulo especfico.
GOTO Continua execuo em um rtulo especfico.
HIGH Torna a sada do pino alta.
HSERIN Entrada serial assncrona de hardware.
HSEROUT Sada serial assncrona de hardware.
I2CREAD L os bytes de um dispositivo I
2
C.
I2CWRITE Escreve bytes em um dispositivo I
2
C.
IF..THEN..ELSE..ENDIF Executa declaraes condicionalmente.
INPUT Torna o pino uma entrada.
{LET} Atribui o resultado de uma expresso a uma varivel.
LCDOUT Mostra caracteres em um LCD.
LOOKDOWN Procura por valor na tabela de constantes.
LOOKDOWN2 Procura por valor na tabela de constantes / variveis.
LOOKUP Busca valor da constante da tabela.
LOOKUP2 Busca valor da constante / varivel da tabela.
LOW Torna a sada do pino baixa.
NAP Desliga o processador por um curto perodo de tempo.
ON INTERRUPT Executa subrotina BASIC em uma interrupo.
OUTPUT Torna o pino uma sada.
PAUSE Atraso (resoluo de 1mSeg).
PAUSEUS Atraso (resoluo de 1uSeg).
PicBasic Pro Compiler
36
PEEK L o byte do registrador.
POKE Escreve um byte no registrador.
POT L o potencimero em um pino especfico.
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 nmero pseudo-aleatrio.
RCTIME Mede a largura do pulso em um pino.
READ L o byte da EEPROM no-chip.
RESUME Continua execuo aps tratar uma interrupo.
RETURN Continua na declarao seguinte ao ltimo GOSUB.
REVERSE Torna pino de sada uma entrada ou pino de entrada uma sada.
SERIN Entrada serial assncrona (estilo BS1).
SERIN2 Entrada serial assncrona (estilo BS2).
SEROUT Sada serial assncrona (estilo BS1).
SEROUT2 Sada serial assncrona (estilo BS2).
SHIFTIN Entrada serial sncrona.
SHIFTOUT Sada serial sncrona.
SLEEP Desliga o processador por um perodo de tempo.
SOUND Gera tom ou rudo branco em um pino especfico.
STOP Para a execuo de um programa.
SWAP Troca os valores de duas variveis.
TOGGLE Torna o pino uma sada e muda o estado.
WHILE..WEND Executa decl. enquanto a condio for verdadeira.
WRITE Escreve byte na EEPROM no-chip.
XIN Entrada X-10.
XOUT Sada X-10.
PicBasic Pro Compiler
37
5.1. @
@ Declarao
Quando usado no incio de uma linha, @ prov um atalho p/ a insero
de uma Declarao em ling. assembly no seu programa PBP. Voc pode
usar este atalho p/ misturar livremente cdigo em ling. assembly c/ declaraes
do PicBasic Pro.
i var byte
role-me var byte
For i = 1 to 4
@ rlf _role-me, F ; Gira o bit uma vez p/ esq.
Next i
O atalho @ tambm pode ser usado p/ incluir rotinas em ling. assembly
em um outro arquivo. Por exemplo:
@ Include fp.asm
@ reinicializa a pgina do registrador p/ 0 antes de executar a instruo em ling.
assembly. A pgina do registrador no deve ser alterada usando @.
Veja a seo sobre programao em linguagem assembly p/ mais
informao.
PicBasic Pro Compiler
38
5.2. ASM..ENDASM
ASM
ENDASM
As instrues ASM e ENDASM dizem ao PBP que o cdigo entre estas
duas linhas est em ling. assembly e no deve ser interpretado como
declaraes do PicBasic Pro. Voc pode usar estas duas instrues p/ misturar
livremente cdigo em ling. assembly c/ declaraes do PicBasic Pro.
O tamanho mximo p/ uma seo de texto em assembler 8K. Isto o
tamanho mximo p/ o fonte atual, incluindo comentrios, no o
cdigo gerado. Se o bloco de texto maior do que isso, quebre-o em sees
ASM..ENDASM mltiplas ou simplesmente inclua-o em um arq. separado.
ASM reinicializa a pg. do registrador p/ 0. Voc deve assegurar-se que a pg.
do registrador seja reiniciada p/ 0 antes do ENDASM se o cdigo de linguagem
assembly o tiver alterado.
Veja a seo sobre programao em ling. assembly p/ mais
informao.
ASM
bsf PORTA, 0 ; Fixa bit 0 em PORTA
bcf PORTB, 0 ; Limpa bit 0 em PORTB
ENDASM
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 variveis. Isto similar a On..Goto em outros BASICs.
Indice seleciona um de uma lista de rtulos. A execuo retomada no rtulo
indexado. Por exemplo, se Indice zero, o programa pula p/ o primeiro rtulo
especificado na lista, se Indice um, o programa pula p/ o segundo
rtulo, e assim vai. Se Indice maior que ou igual ao nmero de
rtulos, nenhuma ao tomada e a execuo continua c/ a declarao
seguinte ao BRANCH. At 256 Rotulos podem ser usados em um BRANCH.
Rotulo deve estar na mesma pgina de cdigo que a instruo BRANCH. Se
voc no puder ter certeza que eles estaro na mesma pg. de cdigo, use BRANCHL
abaixo.
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)
PicBasic Pro Compiler
40
5.4. BRANCHL
BRANCHL Indice,[Rotulo{,Rotulo...}]
BRANCHL (BRANCH longo) funciona muito similarmente ao BRANCH em que ele faz
o programa pular p/ um local diferente baseado em um ndice de variveis.
As principais diferenas so que ele pode pular p/ um Rotulo que est em uma pg. de
cd. diferente da instruo BRANCHL e gera cdigo que quase o dobro
do tamanho do cdigo gerado pela instruo BRANCH. Se voc
estiver certo de que os rtulos esto na mesma pg. que a instruo BRANCH
ou se o microcontrolador no tiver mais do que uma pg. de cd. (2K ou me-
nos de ROM), usar BRANCH ao invs de BRANCHL ir minimizar a utili-
zao da memria.
Indice seleciona um de uma lista de rotulos. A execuo prossegue no rtulo
indexado. Por exemplo, se Indice zero, o programa pula p/ o primeiro rtulo
especificado na lista, se Indice um, o programa pula p/ o segundo rtulo,
e assim por diante. Se Indice maior ou igual ao nmero de rtulos,
nenhuma ao tomada e a execuo continua c/ a declarao seguinte
ao 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)
PicBasic Pro Compiler
41
5.5. BUTTON
BUTTON Pino,Down,Delay,Rate,BVar,Action,Rotulo
L Pino e opcionalmente executa anti-repique e auto-repetio. Pino
automaticamente fixado como entrada. Pino pode ser uma constante, 0-15, ou uma
varivel que contenha um nmero 0-15 (ex. B0) ou um nome de pino (ex.
PORTA.0).
Down Estado do pino quando o boto pressionado (0..1).
Delay Contagem cclica antes do incio da auto-repetio (0..255). Se 0,
nenhum anti-repique ou auto-repetio so executados. Se 255,
executado o anti-repique mas no a auto-repetio.
Rate Taxa de auto-repetio (0..255).
BVar Varivel de um byte usada internamente p/ contagem regr. de
atraso/repetio. Ela deve ser inicializada p/ 0 antes do uso e
no ser usada em outro lugar no programa.
Action Estado do boto sobre o qual atuar (0 se no premido, 1 se premido).
Rotulo A execuo prossegue neste rtulo se Action for verdadeiro.
10K
I/O
10K
I/O
Vai p/ naopremido se botao nao premido em Pin2
BUTTON PORTB.2,0,100,10,B2,0,naopremido
BUTTON precisa ser usado dentro de um loop p/ a auto-repetio funcionar corretamente.
BUTTON realiza o anti-repique atrasando a execuo do programa por um per-
odo de milisegundos p/ aguardar que os contatos se acomodem. O atraso
padro de anti-repique 10ms. Para alterar o anti-repique p/ um outro
valor, use DEFINE:
PicBasic Pro Compiler
42
Fixa o atraso do anti-repique p/ 50ms
Define BUTTON_PAUSE 50
Certifique-se de que BUTTON_PAUSE esteja todo em maisculas.
Em geral, mais fcil simplesmente ler o estado do pino em um IF..THEN
do que usar o comando BUTTON como segue:
If PORTB.2 = 1 Then naopremido
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. A
principal diferena entre GOSUB e CALL que c/ CALL, a existncia de um
Rotulo no checada at a hora da montagem. Usando CALL, um Rotulo em
uma seo em linguagem assembly que de outra forma seria inacessvel
ao PBP pode ser acessado.
Veja a seo sobre programao em linguagem assembly p/ mais
informao sobre CALL.
CALL pass Executa sub-rotina em linguagem
assembly chamada _pass
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 fixar
todas as variveis, inclusive as variveis internas de sistema p/ zero. Isto no
feito automaticamente quando um programa do PBP inicia como est num
BASIC Stamp. Em geral, as variveis devem ser fixadas no programa p/ um estado
inicial apropriado ao invs de se usar CLEAR.
CLEAR Limpa todas as variveis p/ 0
PicBasic Pro Compiler
45
5.8. COUNT
COUNT Pino,Periodo,Var
Conta o nmero de pulsos que ocorrem em Pino durante o Periodo e
guarda o resultado em Var. Pino automaticamente fixado como entrada. Pino pode
ser uma constante, 0-15, ou uma varivel que contenha um nmero 0-15 (ex. B0)
ou um nome de pino (ex. PORTA.0).
A resoluo de Periodo em milisegundos. Ele rastreia a freqncia do
oscilador baseado no DEFINEd OSC.
COUNT checa o estado de Pino em um curto loop e conta as transies 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 freqncia de pulsos que pode ser
contada 25Khz c/ um oscilador de 4Mhz e 125Khz c/ um oscilador
de 20Mhz se a freqncia tem um ciclo ativo de 50% (o tempo de high o
mesmo que o tempo de low).
Conte # de pulsos em Pino1 em 100 milisegundos
COUNT PORTB.1, 100, W1
Determine a frequencia em um pino
COUNT PORTA.2, 1000, W1 Conte p/ 1 segundo
Serout PORTB.0, N2400, [W1]
PicBasic Pro Compiler
46
5.9. DATA
DATA {@Local,}Constante{,Constante...}
Guarde constantes na EEPROM no-voltil no-chip quando o dispositivo programado
pela primeira vez. Se o valor opcional Local omitido, a primeira declarao
DATA comea a guardar no endereo 0 e declaraes subseqentes guardaro
nas posies seguintes. Se o valor Local for especificado, ele denota
a posio inicial onde estes valores sero guardados. Um rtulo opcional
pode ser atribudo ao endereo inicial da EEPROM p/ futura referncia pelo
programa.
Constante pode ser uma constante numrica ou alfanumrica. Apenas o
byte menos significativo de valores numricos guardado a no ser que o
modificador WORD seja usado. Strings so guardadas como bytes consecutivos
de valores ASCII. Nenhum comprimento ou terminador automaticamente adicionado.
DATA funciona apenas c/ microcontroladores c/ EEPROM no-chip como o
PIC16F84 e o PIC16C84. J que EEPROM memria no-voltil,
os dados permanecero intactos mesmo quando a fora for desligada.
Os dados so guardados no espao da EEPROM apenas uma vez na hora em que
o microcontrolador programado, no a cada vez que o programa rodado.
WRITE pode ser usado p/ fixar os valores da EEPROM no-chip em tempo
de execuo.
Guarde 10, 20 e 30 comeando na posio 5
DATA @5,10,20,30
Atribua um rotulo a uma palavra na prox. pos.
dlabel DATA word $1234 Guarda $34, $12
Pule 4 posies e guarde 10 0s
DATA (4), 0(10)
PicBasic Pro Compiler
47
5.10. DEBUG
DEBUG Item{,Item...}
Envia um ou mais Itens p/ um pino predefinido a uma taxa de transf. predefinida
no formato assncrono padro usando 8 bits de dados, s/ paridade e 1 bit de pa-
rada (8N1). O pino automaticamente fixado como sada.
Se um jogo-da-velha (#) precede um Item, a representao ASCII p/ cada dgito
enviada serialmente. DEBUG tambm suporta os mesmos modificadores de dados
que SEROUT2. Refira-se seo sobre SEROUT2 p/ esta informao.
DEBUG uma de muitas funes seriais assncronas embutidas. Ela a menor
das rotinas seriais geradas por software. Ela pode ser usada p/
enviar informao de depurao (variveis, marcadores de posio de programa, etc.)
p/ um programa de terminal como o Hyperterm. Ela pode tambm ser usada a qualquer
hora em que for desejada uma sada serial em um pino fixo a uma taxa de transf. fixa.
O pino serial e taxa de transf. so especificados usando DEFINEs:
Fixa a porta de pinos p/ Debug
DEFINE DEBUG_REG PORTB
Fixa o bit de pinos p/ Debug
DEFINE DEBUG_BIT 0
Fixa a taxa de transf. p/ Debug
DEFINE DEBUG_BAUD 2400
Fixa o modo do Debug: 0 = verdadeiro, 1 = invertido
DEFINE DEBUG_MODE 1
DEBUG assume um oscilador de 4Mhz quando gera sua temporizao de bit. Para
manter a temp. apropriada da taxa de transf. c/ outros valores do oscilador, esteja certo
de DEFINIR o ajuste do OSC p/ qualquer valor de oscilador diferente.
Em alguns casos, as taxas de transmisso das instrues do DEBUG podem
apresentar os caracteres muito rapidamente p/ o dispositivo receptor. Um DEFINE adiciona
cadncia aos caracteres s transmisses seriais de sada. Isto permite
tempo adicional entre os caracteres medida em que so transmitidos. A
cadncia dos caracteres DEFINE permite um atraso de 1 a 65.535 microsegundos
(,001 a 65,535 milisegundos) entre cada caractere transmitido.
PicBasic Pro Compiler
48
Por exemplo, p/ pausar 1 milisegundo entre a transmisso de cada
caractere:
DEFINE DEBUG_PACING 1000
Enquanto que conversores de nvel RS-232 so comuns e
baratos, graas implementao RS-232 atual e as excelentes
especificaes de E/S do PICmicro, a maioria das aplicaes no requer conversores
de nvel. Ao invs disso, pode ser usado TTL invertido (DEBUG_MODE = 1). Um
resistor limitador de corrente sugerido (supe-se que a RS-232 seja
tolerante a curtos).
1K
Pino RS-232 RX
RS-232 GND
Pino 2
Pino 5 Pino 7
Pino 3
DB9 DB25
Envie o texto B0= seguido pelo valor decimal
de B0 e um avanco de linha serialmente
DEBUG B0=, dec B0, 10
PicBasic Pro Compiler
49
5.11. DISABLE
DISABLE
DESABILITA o processam. de interr. seguinte a esta instruo. Interr. podem
ainda ocorrer mas o gerenciador de interr. BASIC no programa PicBasic Pro
no ser executado at que seja encontrado um ENABLE.
DISABLE e ENABLE so mais como pseudo-ops os quais do as
direes ao compilador, ao invs de gerar cdigo. Veja ON
INTERRUPT p/ mais informao.
DISABLE Desabilita interrupes no gerenciador
myint: led = 1 Liga o LED quando interrompido
Resume Retorna ao programa principal
Enable Habilita interrupes aps gerenciador
PicBasic Pro Compiler
50
5.12. DTMFOUT
DTMFOUT Pino,{Onms,Offms,}[Tom{,Tom...}]
Produz seqncia de tons DTMF em Pino. Pino automaticamente
fixado como sada. Pino pode ser uma constante, 0-15, ou varivel que
contm um nmero 0-15 (ex. B0) ou um nome de pino (ex. PORTA.0).
Onms o nmero de milisegundos p/ gerar cada tom e Offms o
nmero de milisegundos p/ pausar entre cada tom. Se eles no forem
especificados, Onms padroniza-se em 200ms e Offms padroniza-se em 50ms.
Tons so numerados 0-15. Tons 0-9 so os mesmos de um teclado de
telefone. Tom 10 a tecla *, Tom 11 a tecla # e Tons 12-15
correspondem s teclas estendidas A-D.
DTMFOUT usa FREQOUT p/ gerar os tons duplos. FREQOUT
gera tons usando uma forma de modulao por largura de pulso. Os dados puros
que saem do pino se parecem bem assustadores. Geralmente, necessria
alguma filtragem p/ alisar o sinal p/ uma onda senoidal e livrar-se de alguns
harmnicos que so gerados:
DTMFOUT trabalha melhor c/ um oscilador de 20Mhz. Ela tambm pode trabalhar
c/ um oscilador de 10Mhz, e at a 4Mhz, embora comece a ficar muito difcil
de filtrar e seja de amplitude razoavelmente baixa. Qualquer outra freqncia ir fazer
c/ que DTMFOUT gere uma freqncia que uma relao do oscilador real
usado e 20Mhz o que no ser muito til p/ o envio de tons de discagem.
Envia tons DTMF p/ 212 no Pino1
DTMFOUT PORTB.1,[2,1,2]
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 declarao da EEPROM comea a guardar no end. 0 e
declaraes subseqentes guardaro nas posies seguintes. Se o
valor da Posicao especificado, ele denota a posio inicial onde estes
valores sero guardados.
Constante pode ser uma constante numrica ou alfanumrica. Apenas o
byte menos significativo de valores numricos guardado. Strings so guardadas como
bytes consecutivos de valores ASCII. Nenhum comprimento ou termi-
nador so automaticamente adicionados.
EEPROM funciona apenas c/ microcontroladores c/ EEPROM no-chip tais como
o PIC16F84 e PIC16C84. J que a EEPROM memria no-voltil,
os dados permanecero intactos mesmo quando a fora for desligada.
Os dados so guardados no espao da EEPROM apenas uma vez na hora que o
microcontrolador programado, no a cada vez que o programa rodado.
WRITE pode ser usado p/ fixar os valores da EEPROM no-chip em tempo
de execuo.
Guarde 10, 20 e 30 comecando na posicao 5
EEPROM 5,[10,20,30]
PicBasic Pro Compiler
52
5.14. ENABLE
ENABLE
HABILITE o processamento de interrupes que foi previamente
DESABILITADO (c/ DISABLE) seguinte a esta instruo.
DISABLE e ENABLE so mais parecidos com pseudo-ops no sentido de que
eles do direes ao compilador ao invs de gerar cdigo. Veja ON
INTERRUPT p/ mais informao.
Disable Desabilita interrupcoes no gerenciador
myint: led = 1 Liga o LED quando interrompido
Resume Retorna ao programa principal
ENABLE Habilita interrupcoes apos gerenciador
PicBasic Pro Compiler
53
5.15. END
END
Para a execuo do programa e entra em modo de baixo consumo. Todos os pinos
de E/S ficam no estado atual. END trabalha executando uma instruo Sleep
continuamente em um loop.
Um END ou STOP ou GOTO devem ser colocados no fim de cada programa
p/ evitar que ele caia para fora do fim da memria e recomece.
END
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 nmero de
declaraes (o Corpo) por algumas vezes usando uma varivel como
contador. Devido sua complexidade e versatilidade, FOR..NEXT
melhor descrito passo a passo:
1) O valor de Inicio atribudo varivel ndice, Conta.
Conta pode ser uma varivel 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 subtrado de se "-"
especificado) Conta. Se nenhuma clusula STEP definida,
Conta incrementada uma vez.
4) Se Conta no tiver passado de Fim ou estourado o tipo de varivel,
a execuo retorna ao Passo 2.
Se o loop necessitar Contar mais do que 255, uma varivel dimensionada por pa-
lavra deve ser usada.
FOR i = 1 TO 10 Conta de 1 a 10
Serout 0,N2400,[#i, ] Envia cada numero p/
Pin0 serialmente
NEXT i Retorna e faz a proxima
contagem
Serout 0,N2400,[10] Envia um avanco de linha
FOR B2 = 20 TO 10 STEP -2 Conta de 20 a 10
de 2 em 2
Serout 0,N2400,[#B2, ] Envia cada numero
a Pin0 serialmente
NEXT B2 Retorna e faz a proxima
contagem
Serout 0,N2400,[10] Envia um avanco de linha
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 sada. Pino pode ser uma constante, 0-15, ou uma
varivel que contenha um nmero 0-15 (ex. B0) ou um nome de pino (ex.
PORTA.0).
Uma ou duas freqncias diferentes de 0 a 32767 hertz podem ser produzidas
por vez.
FREQOUT gera tons usando uma forma de modulao por largura de pulso. Os
dados puros que saem do pino parecem bem assustadores. Algum tipo de filtragem
geralmente necessria p/ alisar o sinal p/ uma onda senoidal livrando-se
dos harmnicos que so gerados:
FREQOUT trabalha melhor c/ um oscilador de 20Mhz. Ele tambm pode trabalhar
c/ um oscilador de 10Mhz e at mesmo c/ 4Mhz, embora comece a ficar muito difcil
de filtrar e seja de amplitude razoavelmente baixa. Qualquer outra freqncia ir
fazer c/ que FREQOUT gere uma freqncia que uma relao do oscilador
usado e 20Mhz.
Envia tom de 1Khz em Pino1 por 2 segundos
FREQOUT PORTB.1,2000,1000
PicBasic Pro Compiler
56
5.18. GOSUB
GOSUB Rotulo
Pula p/ a subrotina em Rotulo salvando seu endereo de retorno na pilha.
Diferente de GOTO, quando uma declarao RETURN alcanada, a execuo segue
c/ a declarao seguinte ltima declarao GOSUB executada.
Um nmero ilimitado de subrotinas pode ser usado em um programa.
Subrotinas tambm podem ser aninhadas. Em outras palavras, possvel p/ uma
subrotina chamar outra subrotina. Tal aninhamento de subrotinas deve se
restringir a no mais do que quatro nveis de profundidade.
GOSUB beep Execute subrotina chamada beep
...
beep: High 0 Ligue o LED conectado a Pin0
Sound 1,[80,10] Bipe o alto-falante conectado a
Pin1
Low 0 Desligue o LED conectado a Pin0
Return Voltar p/ a rotina principal que
nos chamou
PicBasic Pro Compiler
57
5.19. GOTO
GOTO Rotulo
A execuo do programa continua c/ as declaraes em Rotulo.
GOTO send Pule p/ a declaracao chamada envia
...
envia: Serout 0,N2400,[Oi] Envia Oi p/ Pin0
serialmente
PicBasic Pro Compiler
58
5.20. HIGH
HIGH Pino
Pe o Pino especificado em nvel alto. Pino fixado automaticamente como sada.
Pino pode ser uma constante, 0-15, ou uma varivel que contenha um nmero 0-15
(ex. B0) ou um nome de pino (ex. PORTA.0).
HIGH 0 Fixa Pin0 como saida e o leva
a nivel alto (~5 volts)
HIGH PORTA.0 Fixa PORTA, pino 0 como saida
e o leva a alto (~5 volts)
led var PORTB.0 Define pino do LED
HIGH led Fixa pino do LED como saida e
o leva a alto (~5 volts)
Alternativamente, se o pino j for uma sada, uma maneira mais rpida e mais
curta (a partir de um ponto de parada de cdigo gerado) de lev-lo a nvel alto seria:
PORTB.0 = 1 Fixa PORTB pino 0 alto
PicBasic Pro Compiler
59
5.21. HSERIN
HSERIN {RotuloParidade,}{Timeout,Rotulo,}[Item{,...}]
Receba um ou mais Items da porta serial do hardware em dispositivos
que suportam comunicaes seriais assncronas em hardware.
HSERIN uma das muitas funes seriais assncronas embutidas. Ela pode
apenas ser usada c/ dispositivos que tenham um USART no hardware. Veja a
folha de dados do dispositivo p/ informao sobre o pino de entrada serial e outros
parmetros. Os parmetros seriais e baud rate so especificados usando
DEFINEs:
Fixa registrador de recepcao p/ receptor habilitado
DEFINE HSER_RCSTA 90h
Fixa registrador de transmissao p/ transmissor habilitado
DEFINE HSER_TXSTA 20h
Fixa baud rate
DEFINE HSER_BAUD 2400
HSERIN assume um oscilador de 4Mhz nos clculos de baud rate. Para
manter a temporizao 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 includos p/ permitir que o progra-
ma continue se um caractere no for recebido dentro de um certo tempo.
Timeout especificado em unidades de 1 milisegundo.
O formato dos dados seriais padro 8N1, 8 bits de dados, s/ bit de paridade e 1
bit de parada. 7E1 (7 bits de dados, paridade par, 1 bit de parada) ou 7O1 (7 bits de dados,
paridade mpar, 1 bit de parada) podem ser habilitados usando um dos seguintes DEFINEs:
Use apenas se desejada paridade par
DEFINE HSER_EVEN 1
Use apenas se desejada paridade mpar
DEFINE HSER_ODD 1
O ajuste de paridade, juntamente c/ todos os outros DEFINEs HSER, afeta ambos
HSERIN e HSEROUT.
PicBasic Pro Compiler
60
Um RotuloParidade opcional pode ser includo na declarao. O
programa ir continuar nesta posio se um caractere c/ um erro de paridade
recebido. Ele deve ser usado apenas se a paridade estiver habilitada usando um
dos defines precedentes.
Visto que a recepo serial feita em hardware, no possvel fixar
os nveis p/ um estado invertido p/ eliminar um driver RS-232. Portanto
um driver apropriado deve ser usado c/ HSERIN.
HSERIN suporta os mesmos modificadores de dados que SERIN2. Refira-se
seo sobre SERIN2 p/ esta informao.
HSERIN [B0, dec W1]
PicBasic Pro Compiler
61
5.22. HSEROUT
HSEROUT [Item{,Item...}]
Envie um ou mais Items ao hardware da porta serial em dispositivos que
suportem comunicaes seriais assncronas em hardware.
HSEROUT uma das muitas funes seriais embutidas. Ela pode
apenas ser usada c/ dispositivos que tenham um USART em hardware. Veja a
folha de dados do dispositivo p/ informao sobre o pino de sada serial e outros
parmetros. Os parmetrros seriais e baud rate so especificados usando
DEFINEs:
Fixa registrador de recepcao p/ receptor habilitado
DEFINE HSER_RCSTA 90h
Fixa registrador de transmissao p/ transmissor habilitado
DEFINE HSER_TXSTA 20h
Fixa baud rate
DEFINE HSER_BAUD 2400
HSEROUT assume um oscilador de 4Mhz nos clculos de baud rate. Para
manter a temporizao 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 padro 8N1, 8 bits de dados, s/ bit de paridade e 1
bit de parada. 7E1 (7 bits de dados, paridade par, 1 bit de parada) ou 7O1 (7 bits de dados,
paridade mpar, 1 bit de parada) podem ser habilitados usando um dos seguintes DEFINEs:
Use apenas se desejada paridade par
DEFINE HSER_EVEN 1
Use apenas se desejada paridade mpar
DEFINE HSER_ODD 1
O ajuste de paridade, juntamente c/ todos os outros DEFINEs HSER, afeta ambos
HSERIN e HSEROUT.
Visto que a recepo serial feita em hardware, no possvel fixar
os nveis p/ um estado invertido p/ eliminar um driver RS-232. Portanto
um driver apropriado deve ser usado c/ HSEROUT.
PicBasic Pro Compiler
62
HSEROUT suporta os mesmos modificadores de dados que SEROUT2. Refira-se
seo sobre SEROUT2 p/ esta informao.
Envie o valor decimal de B0 seguido por um avanco
de linha p/ o hardware da USART
HSEROUT [dec B0,10]
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 e
PinoDados e guarde o(s) byte(s) recebido(s) na Var. PinoClock e
PinoDados podem ser uma constante, 0-15, ou uma varivel que contenha um
nmero 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 EE
PROM c/ uma interface I
2
C de dois fios como a Microchip 24LC01B
e dispositivos similares. Isto permite que os dados sejam guardados em memria
externa no-voltil de forma que possam ser mantidos mesmo depois que a fora
seja desligada. Estes comandos operam no modo mestre I
2
C e tambm
podem ser usados p/ falar c/ outros dispositivos c/ uma interface I
2
C como
sensores de temperatura e conversores A/D.
Os 7 bits superiores do byte Controle contm o cdigo de controle juntamente
c/ seleo de pastilha ou informao adicional de endereo, dependendo do
dispositivo em particular. O bit de ordem inferior uma flag interna indicando se o
comando de leitura ou escrita e deve ser mantido livre.
Este formato p/ o byte Controle diferente do formato usado pelo PicBasic
Compiler original. Esteja certo de usar este formato c/ operaes
PBP I
2
C.
Por exemplo, quando se comunicar c/ um 24LC01B, o cdigo de controle
%1010 e a seleo de pastilha no utilizada de forma que o byte Controle seria
%10100000 ou $A0. Seguem formatos de bytes Controle p/ algumas
das diferentes peas:
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 seleo de dispositivo
xxx = irrelevante
O tamanho do Endereco enviado (byte ou palavra) determinado pelo tamanho
da varivel que usada. Se uma varivel de tamanho de byte usada p/ o En-
dereco, um endereco de 8 bits enviado. Se uma varivel de tamanho de palavra usada,
enviado um endereo de 16 bits. Esteja certo de usar a varivel corretamente dimen-
sionada p/ o dispositivo c/ o qual deseja se comunicar.
Se uma Var de tamanho de palavra especificada, 2 bytes so lidos e guardados no
byte superior de Var primeiro, seguidos pelo byte inferior. Esta ordem diferente da
maneira que as variveis so normalmente guardadas, byte inferior primeiro.
Se o Rotulo opcional includo, o programa pular p/ este rtulo se no
for recebido um acknowledge do dispositivo I
2
C.
As instrues I
2
C podem ser usadas p/ acessar a EEPROM serial no-chip nos
dispositivos 12CExxx e 16CExxx. Simplesmente especifique os nomes dos pinos
p/ as linhas internas apropriadas como parte do comando I2C e coloque
o seguinte DEFINE no topo do programa:
DEFINE I2C_INTERNAL 1
Veja as folhas de dados da Microchip sobre estes dispositivos p/ mais informao.
A temporizao das instues I2C fixada de forma que dispositivos de veloc. padro
(100Khz) sero acessveis a velocidades de clock de at 8Mhz. Dispositivos
PicBasic Pro Compiler
65
de modo rpido (400Khz) podem ser usados at 20Mhz. Se for desejado acessar
um dispositivo de velocidade padro acima de 8Mhz, o seguinte DEFINE deve ser
adicionado ao programa:
DEFINE I2C_SLOW 1
As linhas de clock e dados do I
2
C devem ser levadas ao Vcc c/ um resistor
de 4,7K de acordo c/ o seguinte esquema j que elas so ambas
manipuladas em modo bidirecional de coletor aberto.
addr var byte
cont con %10100000
addr = 17 Fixa endereco em 17
Le dados no endereco 17 em B2
I2CREAD PORTA.0,PORTA.1,cont,addr,[B2]
Veja o Non-Volatile Memory Products Data Book da Microchip p/ mais
informao sobre estes e outros dispositivos que podem ser usados c/ os
comandos I2CREAD e I2CWRITE.
PicBasic Pro Compiler
66
5.24. I2CWRITE
I2CWRITE PinoDados,PinoClock,Controle,{Endereco,}
[Valor{,Valor...}]{,Rotulo}
I2CWRITE envia Controle e Endereco opcional p/ o PinoClock
e PinoDados do I2C seguidos por Valor. PinoClock e PinoDados
podem ser uma constante, 0-15, Ou uma varivel que contenha um nmero 0-15 (ex.
B0) ou um nome de pino (ex. PORTA.0).
O tamanho do Endereco enviado (byte ou palavra) determinado pelo tamanho da
varivel que usada. Se uma varivel de tamanho de byte usada p/ o Endereco,
um endereo de 8 bits enviado. Se uma varivel de tamanho de palavra usada, um end.
de 16 bits enviado. Esteja certo de usar o tamanho apropriado de varivel p/ o
dispositivo c/ o qual voc deseja se comunicar.
Quando for escrever em uma EEPROM serial necessrio esperar 10ms (depende do
dispositivo) p/ a escrita completar-se antes de tentar comunicao
c/ o dispositivo novamente. Se um I2CREAD ou I2CWRITE subseqente
tentado antes da escrita ser completada, o acesso ser ignorado.
Enquanto que uma simples declarao I2CWRITE pode ser usada p/ escrever mltiplos
bytes de uma vez, fazendo assim poder violar os requisitos de tempo acima p/
EEPROMs seriais. Algumas EEPROMS seriais lhe permitem escrever mltiplos bytes
em uma nica pgina antes de necessitar a espera. Cheque a folha de dados
p/ o dispositivo especfico que voc est usando p/ estes detalhes. A caracterstica de
escrita em mltiplos bytes tambm pode ser til c/ dispositivos I
2
C alm das
EEPROMs seriais que no tm que esperar entre escritas.
Se um Valor de tamanho de palavra especificado, 2 bytes so enviados, primeiro
o byte superior seguido pelo byte inferior. Esta ordem diferente do modo que as
variveis so normalmente guardadas, c/ o byte inferior primeiro.
Se o Rotulo opcional includo, este rtulo ser endereado se nenhum
reconhecimento for recebido do dispositivo I
2
C.
As instrues I
2
C podem ser usadas p/ acessar a EEPROM serial no-chip
nos dispositivos 12CExxx e 16CExxx. Simplesmente especifique os nomes dos pinos
p/ as linhas internas apropriadas como parte do comando I
2
C e coloque
o seguinte DEFINE no topo do programa:
DEFINE I2C_INTERNAL 1
PicBasic Pro Compiler
67
Veja as folhas de dados da Microchip p/ estes dipspositivos p/ mais informao.
A temporizao das instrues I
2
C feita de forma que dispositivos de veloc. padro
(100Khz) sejam acessveis a velocidades de clock de at 8Mhz. Dispositivos de
modo rpido (400Khz) podem ser usados at 20Mhz. Se for desejado acessar um
dispositivo de velocidade padro acima de 8Mhz, o seguinte DEFINE deve ser
adicionado ao programa:
DEFINE I2C_SLOW 1
Veja o comando I2CREAD acima p/ obter o resto da histria.
addr var byte
cont con %10100000
addr = 17 Fixa endereco em 17
Envia o byte 6 ao endereco 17
I2CWRITE PORTA.0,PORTA.1,cont,addr,[6]
Pause 10 Espera 10ms p/ a escrita se
completar
addr = 1 Fixa endereco em 1
Envia o byte em B2 ao endereco 1
I2CWRITE PORTA.0,PORTA.1,cont,addr,[B2]
Pause 10 Espera 10ms p/ a escrita se
completar
PicBasic Pro Compiler
68
5.25. IF..THEN
IF Comp {AND/OR Comp...} THEN Rotulo
IF Comp {AND/OR Comp...} THEN
Declaracao...
ELSE
Declaracao...
ENDIF
Efetua uma ou mais comparaes. Cada termo Comp pode relacionar uma
varivel a uma constante ou outra varivel e inclui um dos
operadores de comparao listados anteriormente.
If..Then avalia os termos da comparao p/ verdadeiro ou falso. Se
ele for verdadeiro, a operao aps o Then executada. Se ele
resultar em falso, a operao aps o Then no executada.
Comparaes que resultem em 0 so consideradas falsas. Qualquer outro valor
considerado verdadeiro. Todas as comparaes esto s/ assinatura j que o PBP
apenas suporta tipos s/ assinatura.
Esteja certo de usar parnteses p/ especificar a ordem em que as operaes devem ser
testadas. De outra forma, a precedncia de um operador ir determin-la p/ voc e
o resultado pode no sair como esperado.
IF..THEN pode operar de 2 maneiras. Em uma forma, o THEN em um
IF..THEN essencialmente um GOTO. Se a condio verdadeira, o programa
far GOTO at o rtulo aps o THEN. Se a condio resultar em falso, o
programa continuar na prxima linha aps o IF..THEN. Uma outra
declarao no poder ser colocada aps o THEN, dever ser um rtulo.
If Pin0 = 0 Then pushd Se o botao conectado ao
Pin0 pressionado (0), pule
p/ o rotulo pushd
If B0 >= 40 Then old Se o valor na
variavel B0 eh maior
que 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
PicBasic Pro Compiler
69
Na segunda forma, IF..THEN pode executar condicionalmente um grupo de
Declaracoes seguintes ao THEN. As Declaracoes devem ser seguidas
por um ELSE ou ENDIF p/ completar a estrutura.
If B0 <> 10 Then
B0 = B0 + 1
B1 = B1 - 1
Endif
If B0 = 20 Then
led = 1
Else
led = 0
Endif
PicBasic Pro Compiler
70
5.26. INPUT
INPUT Pino
Torna o Pino especificado uma entrada. Pino pode ser uma constante, 0-15, ou uma
varivel que contenha um nmero 0-15 (ex. B0) ou um nome de pino (ex.
PORTA.0).
INPUT 0 Fixa Pino0 como entrada
INPUT PORTA.0 Fixa PORTA, pino 0 como entrada
Alternativamente, o pino pode ser fixado como entrada de forma mais rpida e
curta (a partir de um standpoint de cdigo gerado):
TRISB.0 = 1 Fixa PORTB, pino 0 como entrada
Todos os pinos em uma porta podem ser fixados como entradas ajustando-se
todo o registrador TRIS de uma vez:
TRISB = %11111111 Fixa todo o PORTB como entrada
PicBasic Pro Compiler
71
5.27. {LET}
{LET} Var = Valor
Atribui um Valor a uma Varivel. O Valor pode ser uma constante, uma outra
varivel ou o resultado de uma expresso. Refira-se seo anterior sobre
operadores p/ mais informao. A palavra-chave LET opcional.
LET B0 = B1 * B2 + B3
B0 = Sqr W1
PicBasic Pro Compiler
72
5.28. LCDOUT
LCDOUT Item{,Item...}
Mostra Items em um Display de Cristal Lquido inteligente. O PBP suporta
mdulos LCD c/ um controlador Hitachi 44780 ou equivalente. Estes
LCDs geralmente tm um cabealho de 14 ou 16 pinos em linha simples ou
dupla em uma extremidade.
Se um jogo-da-velha (#) precede um Item, a representao ASCII p/ cada
dgito enviada ao LCD. LCDOUT tambm pode usar qualquer um dos modificadores
usados c/ SEROUT2. Veja a seo sobre SEROUT2 p/ esta informao.
Um programa deve esperar por pelo menos meio segundo antes de enviar o primeiro
comando a um LCD. Pode levar um bom tempo p/ um LCD se inicializar.
So enviados comandos ao LCD enviando-se um $FE seguido pelo
comando. Alguns comandos teis esto listados na seguinte tabela:
Command Operation
$FE, 1
Limpa display
$FE, 2
Retorno (incio da primeira linha)
$FE, $0C
Cursor desligado
$FE, $0E
Cursor sublinhado ligado
$FE, $0F
Cursor piscante ligado
$FE, $10
Move cursor uma posio esquerda
$FE, $14
Move cursor uma posio direita
$FE, $C0
Move cursor ao incio da segunda linha
Note que h um comando p/ mover o cursor p/ o incio da segunda linha
de um display de 2 linhas. Para a maioria dos LCDs, os caracteres mostrados
e linhas no so consecutivos na memria do display - pode haver uma interrupo
entre posies. Para a maioria dos displays de 16x2, a primeira linha inicia em $0
e a segunda linha inicia em $40. O comando:
LCDOUT $FE, $C0
ajusta o display p/ comear a escrever caracteres no incio da segunda
linha. Displays de 16x1 geralmente so formatados como displays de 8x2 c/ uma
PicBasic Pro Compiler
73
interrupo entre as posies de memria p/ os primeiros e segundos 8 caracteres.
Displays de 4 linhas tambm tm um mapa de memria misturado.
Veja a folha de dados p/ o dispositivo LCD em particular p/ as posies de
memria 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 ou
de 8 bit. Se o de 8 bits for usado, todos os 8 bits devem estar em uma porta. Se o
de 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 qualquer
pino da porta. R/W deve ser aterrado j que o comando LCDOUT apenas de
escrita.
PBP assume que o LCD est conectado a pinos especficos a no ser que seja dito
de outra forma. Ele assume que o LCD ser usado c/ um barram. de 4 bits c/ as linhas
de dados DB4 - DB7 conectadas PORTA.0 - PORTA.3 do PICmicro, Sel. de
Registrador PORTA.4 e Habilitao PORTB.3.
Ele tambm pr-ajustado p/ inicializar o LCD p/ um display de 2 linhas.
Para alterar esta configurao, coloque um ou mais dos seguintes DEFINEs, todos em
maisculas, no topo do seu programa PicBasic Pro:
Fixa porta de Dados do LCD
DEFINE LCD_DREG PORTB
Fixa bit de Dados inicial (0 ou 4) se o barram. for de 4 bits
DEFINE LCD_DBIT 4
Fixa porta de Selecao de Registrador do LCD
DEFINE LCD_RSREG PORTB
Fixa bit de Selecao do Registrador do LCD
DEFINE LCD_RSBIT 1
Fixa porta de Habilitacao do LCD
DEFINE LCD_EREG PORTB
Fixa bit de Habilitacao do LCD
DEFINE LCD_EBIT 0
Fixa tamanho do barramento do LCD (4 or 8 bits)
DEFINE LCD_BITS 4
Fixa o numero de linhas no LCD
DEFINE LCD_LINES 2
PicBasic Pro Compiler
74
Este arranjo dir ao PBP que um LCD de 2 linhas est ligado no modo de 4 bits c/ o
barram. de dados nos 4 bits superiores de PORTB, Sel. de Reg. em PORTB.1, e
Habilitao em PORTB.0.
O seguinte esquema mostra uma maneira de se ligar um LCD a um
PICmicro:
PicBasic Pro Compiler
75
5.29. LOOKDOWN
LOOKDOWN Pesquisa,[Constante{,Constante...}],Var
A declarao LOOKDOWN pesquisa uma lista de valores de Constante de 8 bits p/
a presena 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 no
for encontrado, nenhuma ao tomada e Var permanece inalterado.
A lista de constantes pode ser uma mistura de constantes numricas e string.
Cada caractere em uma string tratado como uma constante separada c/ o
valor ASCII do caractere. Cadeias de variveis c/ um ndice de varivel no podem
ser usadas em LOOKDOWN embora cadeias de variveis c/ um ndice constante so
permitidas.
Serin 1,N2400,B0 Pega o caractere hexadecimal
do Pino1 serialmente
LOOKDOWN B0,[0123456789ABCDEF],B1 Converte
caractere
hexadecimal em
B0 p/
valor
decimal B1
Serout 0,N2400,[#B1] Envia valor decimal p/
Pino0 serialmente
PicBasic Pro Compiler
76
5.30. LOOKDOWN2
LOOKDOWN2 Pesquisa,{Teste}[Valor{,Valor...}],Var
A declarao LOOKDOWN2 pesquisa uma lista de Valores p/ a presena
do valor Pesquisa. Se encontrado, o ndice da constante coincidente
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 no for encontrado,
nenhuma ao tomada e Var permanece inalterado.
O parmetro opcional Test pode ser usado p/ executar um teste que no
seja igual a (=) quando pesquisar a lista. Por exemplo, a lista poderia
ser pesquisada p/ o primeiro Valor maior que o parmetro Pesquisa
usando > como o parmetro de Teste. Se Teste deixado de fora, = assumido.
A lista de Valor pode ser uma mistura de constantes numricas e string de 16 bits
and variveis. Cada caractere numa string tratado como uma constante
separada igual ao valor ASCII do caractere. Expresses no podem ser
usadas na lista de Valor, embora elas possam ser usadas como o valor Pesquisa.
Cadeias de variveis c/ um ndice varivel no podem ser usadas em LOOKDOWN2
embora cadeias de variveis c/ um ndice constante sejam permitidas.
LOOKDOWN2 gera cdigo que cerca de 3 vezes maior do que
LOOKDOWN. Se a lista de pesquisa feita apenas de constantes de 8 bits e
strings, use LOOKDOWN.
LOOKDOWN2 W0,[512,W1,1024],B0
LOOKDOWN2 W0,<[10,100,1000],B0
PicBasic Pro Compiler
77
5.31. LOOKUP
LOOKUP Indice,[Constante{,Constante...}],Var
A declarao LOOKUP pode ser usada p/ recuperar valores de uma tabela de cons-
tantes de 8 bits. Se Indice zero, Var fixado como o valor da primeira
Constante. Se Indice um, Var fixado como o valor da segunda
Constante. E assim vai. Se Indice maior que ou igual ao nmero
de entradas na lista constantes, nenhuma ao tomada e Var permanece
inalterado.
A lista de constantes pode ser uma mistura de constantes numricas e string.
Cada caractere numa string tratado como uma constante separada igual ao
valor ASCII do caractere. Cadeias de variveis c/ um ndice varivel no podem
ser usadas em LOOKUP embora cadeias de variveis c/ um ndice constante so
permitidas.
For B0 = 0 to 5 Conta de 0 a 5
LOOKUP B0,[A l o !],B1 Pega caractere
numero B0 da
string p/ variavel
B1
Serout 0,N2400,[B1] Envia caractere
em B1 p/ Pino0
serialmente
Next B0 Faz proximo caractere
PicBasic Pro Compiler
78
5.32. LOOKUP2
LOOKUP2 Indice,[Valor{,Valor...}],Var
A declarao LOOKUP2 pode ser usada p/ recuperar entradas de uma tabela de
Valores. Se Indice zero, Var fixado ao primeiro Valor. Se Indice um,
Var fixado ao segundo Valor. E assim vai. Se Indice maior que ou
igual ao nmero de entradas na lista, nenhuma ao tomada e Var
permanece inalterado.
A lista Valor pode ser uma mistura de constantes numricas e string de 16 bits
e variveis. Cada caractere numa string tratado como uma constante
separada igual ao valor ASCII do caractere. Expresses no podem ser
usadas na lista Valor, embora elas possam ser usadas como o valor Indice.
Cadeias de variveis c/ um ndice varivel no podem ser usadas em LOOKUP2
embora cadeias de variveis c/ um ndice constante sejam permitidas.
LOOKUP2 gera cdigo que cerca de 3 vezes maior do que LOOKUP. Se
a lista Valor feita apenas de constantes e strings de 8 bits, use
LOOKUP.
LOOKUP2 B0,[256,512,1024],W1
PicBasic Pro Compiler
79
5.33. LOW
LOW Pino
Leva o Pino especificado a nvel baixo. Pino automaticamente fixado como sada. Pino
pode ser uma constante, 0 - 15, ou uma varivel que contenha um nmero 0 - 15
(ex. B0) ou um nome de pino (ex. PORTA.0).
LOW 0 Fixa Pino0 como sada e o leva a nvel baixo
(0 volts)
LOW PORTA.0 Torna PORTA, pino 0 uma sada e
o leva a nvel baixo (0 volts)
led var PORTB.0 Define pino do LED
LOW led Torna pino do LED uma sada e
o leva a nvel baixo (0 volts)
Alternativamente, se o pino j for uma sada, um meio mais rpido e curto
(partindo de um standpoint de cdigo gerado) de lev-lo a nvel baixo seria:
PORTB.0 = 0 Leva PORTB, pino 0 p/ nivel baixo
PicBasic Pro Compiler
80
5.34. NAP
NAP Periodo
Coloca o microcontrolador em modo de baixo consumo por curtos perodos de tempo.
Durante este NAP, o consumo de fora reduzido ao mnimo. Os perodos
listados so apenas aproximaes porque a temporizao derivada do
Timer 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, sua
temporizao independente da freqncia 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
PicBasic Pro Compiler
81
5.35. ON INTERRUPT
ON INTERRUPT GOTO Rotulo
ON INTERRUPT permite a manipulao das interrupes do microcon-
trolador por uma subrotina do PicBasic Pro.
H 2 maneiras de manipular interrupes usando o PicBasic Pro Compiler.
A primeira escrever uma rotina de interrupes em linguagem assembly. Esta a
maneira de manipular interrupes c/ a menor latncia e menor overhead.
Este mtodo discutido em tpicos avanados em uma seo mais tarde.
O segundo mtodo escrever um manipulador de interrupes em PicBasic Pro. Isto
se parece c/ uma subrotina do PicBasic Pro mas termina c/ um RESUME.
Quando uma interrupo ocorre, ela bandeirada. Logo que a execuo da de-
clarao atual do PicBasic Pro est completa, o programa pula p/ o manipulador de
interrupes BASIC em Rotulo. Uma vez que o manipulador de interrupes est
completo, a declarao RESUME envia o programa de volta p/ onde ele estava
quando a interrupo ocorreu, continuando de onde ele havia parado.
DISABLE e ENABLE permitem que diferentes sees de um programa do
PicBasic Pro executem s/ a possibilidade de serem interrompidas. O
lugar mais notvel p/ se usar DISABLE logo antes do prprio manipulador
de interrupes. Ou o manipulador de interrupes pode ser colocado antes da
declarao ON INTERRUPT j que a flag de interrupes no checada antes do
primeiro ON INTERRUPT num programa.
Latncia o tempo que leva da hora da prpria interrupo
hora que o manipulador de interrupes entra. J que as decl. do PicBasic Pro no
so re-entrantes (ex. voc no pode executar uma outra declarao do PicBasic Pro
enquanto uma estiver sendo executada), pode haver considervel latncia antes
da rotina de interrupes ser introduzida.
O PBP no introduzir o manipulador de interrupes BASIC at que tenha acabado
a execuo da declarao atual. Se a declarao for PAUSE ou SERIN,
poder levar um bom tempo antes da interrupo ser reconhecida. O
programa deve ser projetado c/ esta latncia em mente. Se for
inaceitvel e as interrupes precisarem ser manipuladas mais rapidamente,
uma rotina de interrupo em linguagem assembly deve ser usada.
PicBasic Pro Compiler
82
O overhead um outro problema. ON INTERRUPT ir adicionar uma instruo
aps cada declarao p/ checar se uma interrupo ocorreu ou no.
DISABLE desliga a adio desta instruo. ENABLE a liga novamente.
Geralmente a instruo adicional no ser um grande
problema, 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 interrues
myint
INTCON = %10010000 Habil. interrupo RB0
. . .
DISABLE Desab. interrupes no
manipulador
myint: led = 1 Liga o LED quando interrompido
RESUME Retorna ao progr. principal
ENABLE Habilita interrupes aps
manipulador
Para desligar as interrupes permanentemente (ou at serem necessrias
novamente) uma vez que ON INTERRUPT tenha sido usado, fixe INTCON em $80:
INTCON = $80
PicBasic Pro Compiler
83
5.36. OUTPUT
OUTPUT Pino
Torna o Pino especificado uma sada. Pino pode ser uma constante, 0 - 15, ou
uma varivel que contenha um nmero 0 - 15 (ex. B0) ou um nome de pino (ex.
PORTA.0).
OUTPUT 0 Torna Pino0 uma sada
OUTPUT PORTA.0 Torna PORTA, pino 0 uma sada
Alternativamente, o pino pode ser fixado como sada de uma maneira mais
rpida e curta (partindo de um standpoint de cdigo gerado):
TRISB.0 = 0 Fixa PORTB, pino 0 como
sada
Todos os pinos numa porta podem ser fixados como sadas ajustando-se todo
o registrador TRIS de uma s vez:
TRISB = %00000000 Fixa todo o PORTB como sada
PicBasic Pro Compiler
84
5.37. PAUSE
PAUSE Periodo
Pausa o programa por Periodo milisegundos. Periodo de 16 bits, ento
atrasos podem ser de at 65,535 milisegundos (pouco mais de um minuto). Dife-
rente das outras funes de atraso (NAP e SLEEP), PAUSE no pe o
microcontrolador em modo de baixo consumo. Assim, PAUSE consome mais
potncia mas tambm muito mais preciso. Ele tem a mesma preciso que o
clock do sistema.
PAUSE assume uma freqncia de oscilador de 4Mhz. Se um oscilador diferente
de 4Mhz usado, o PBP deve ser informado usando um comando DEFINE OSC.
Veja a seo sobre velocidade p/ mais informao.
PAUSE 1000 Atraso de 1 segundo
PicBasic Pro Compiler
85
5.38. PAUSEUS
PAUSEUS Periodo
Pausa o programa por Periodo microsegundos. Periodo de 16 bits, ento
atrasos podem ser de at 65,535 microsegundos. Diferente das outras funes
de atraso (NAP e SLEEP), PAUSEUS no pe o microcontrolador
em modo de baixo consumo. Assim, PAUSEUS consome mais potncia mas
tambm muito mais preciso. Ele tem a mesma preciso que o clock
do sistema.
PAUSEUS toma um nmero mnimo de ciclos p/ operar. Por causa disto
e dependendo da freqncia do oscilador, atrasos de menos que um
nmero mnimo de microsegundos no so possveis usando PAUSEUS.
Para obter atrasos precisos menores que isto, use uma rotina em linguagem
assembly em uma construo ASM..ENDASM. A tabela abaixo lista o
nmeo mnimo de microsegundos obtenveis em uma freqncia de oscilador
particular.
OSC
Atraso mnimo
3 (3.58) 20us
4 24us
8 12us
10 8us
12 7us
16 5us
20 3us
PAUSEUS assume uma freqncia de oscilador de 4Mhz. Se um oscilador diferente
de 4Mhz usado, o PBP deve ser informado usando um comando DEFINE OSC
Veja a seo sobre velocidade p/ mais informao.
PAUSEUS 1000 Atraso de 1 milisegundo
PicBasic Pro Compiler
86
5.39. PEEK
PEEK Endereco,Var
L o registrador do microcontrolador no Endereco especificado e guarda
o resultado em Var. Caractersticas especiais do PICmicro como os conversores A/D
e portas adicionais de E/S podem ser lidas usando PEEK.
PEEK e POKE permitem acesso direto a todos os registradores num PICmicro
incluindo PORTA, PORTB, PORTC, PORTD, PORTE e seus
registradores de direo de dados (TRIS) associados. PEEK e POKE operam em
todos os bits, ex. o byte inteiro, do registrador em particular de uma vez. Quando
voc POKEa dados ao PORTA, a porta inteira atualizada, no apenas
um bit individual.
PEEK PORTA,B0 Pega estado atual dos pinos em PORTA
p/ variavel B0
O PicBasic Pro Compiler pode acessar diretamente os registradores e bits
s/ a necessidade de PEEK e POKE. recomendado que este acesso
direto seja usado em vez de PEEK e POKE.
B0 = PORTA Pega estado atual dos pinos em PORTA
p/ B0
PicBasic Pro Compiler
87
5.40. POKE
POKE Endereco,Valor
Escreve Valor no registrador do microcontrolador no Endereco especificado.
Caractersticas especiais do PICmicro como conversores A/D e portas de E/S
adicionais 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 bits
s/ a necessidade de PEEK e POKE. recomendado que este acesso
direto seja usado em vez de PEEK e POKE.
TRISA = 0 Fixa todo o PORTA como saidas
PORTA.0 = 1 Leva o bit 0 de PORTA a nivel alto
PicBasic Pro Compiler
88
5.41. POT
POT Pino,Escala,Var
L um potencimetro (ou algum outro dispositivo resistivo) em Pino. Pino
pode ser uma constante, 0 - 15, ou uma varivel que contenha um nmero 0 - 15
(ex. B0) ou um nome de pino (ex. PORTA.0).
A resistncia medida contando a descarga de um capacitor
atravs do resistor (tipicamente 5K a 50K). Escala usado p/ ajuste de
constantes RC variantes. Para constantes RC maiores, Escala deve ser
abaixado (um valor mnimo de um). Para constantes RC menores, Escala deve
ser fixado em seu valor mximo (255). Se Escala for ajustado corretamente, Var
dever ser zero perto da resistncia mnima e 255 perto da resistncia mxima.
Infelizmente, Escala deve ser determinado experimentalmente. Para isto, fixe
o dispositivo sob medio p/ a resistncia mxima e leia-o c/
Escala fixo em 255. Sob estas condies, Var ir produzir um
valor apropriado p/ Escala. (NOTA: Este o mesmo tipo de processo
realizado pela opo Alt-P do ambiente BS1).
0.1uF
5-50K
Pin
POT 3,255,B0 L o potencimetro no
Pino3 p/ determinar escala
Serout 0,N2400,[#B0] Envia valor do pot
serialmente ao Pino0
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 acontece
ou a largura do pulso grande demais p/ medir, Var fixo em zero. Se
uma varivel de 8 bits usada, somente o LSB da medio de 16 bits
usada. Pino pode ser uma constante, 0 - 15, ou uma varivel que contenha um
nmero 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
A resoluo de PULSIN dependente da freqncia do oscilador. Se
um oscilador de 4Mhz usado, a largura do pulso retornada em incrementos
de 10us. Se um oscilador de 20Mhz usado, a largura do pulso ter uma
resoluo de 2us. Definir um valor OSC no tem efeito em PULSIN. A
resoluo sempre muda c/ a velocidade atual do oscilador.
Mede pulso alto em Pino4 guardado em W3
PULSIN PORTB.4,1,W3
PicBasic Pro Compiler
90
5.43. PULSOUT
PULSOUT Pino,Periodo
Gera um pulso em Pino de Periodo especificado. O pulso gerado
comutando o pino duas vezes, assim o estado inicial do pino determina a
polaridade do pulso. Pino automaticamente fixado como sada. Pino pode ser
uma constante, 0 - 15, ou uma varivel que contenha um nmero 0 - 15 (ex. B0)
ou um nome de pino (ex. PORTA.0).
A resoluo de PULSOUT dependente da freqncia do oscillator.
Se um oscilador de 4Mhz usado, o Periodo do pulso gerado ser em
incrementos de 10us. Se um oscilador de 20Mhz usado, Periodo ter uma re-
soluo de 2us. Definir um valor OSC no tem efeito em PULSOUT. A
resoluo sempre muda c/ a velocidade atual do oscilador.
Envia um pulso de 1mSec (em 4Mhz) ao Pino5
PULSOUT PORTB.5,100
PicBasic Pro Compiler
91
5.44. PWM
PWM Pino,Duty,Ciclo
Produz um trem de pulsos em modulao por largura de pulso em Pino. Cada ciclo de
PWM consiste de 256 passos. O Duty cycle p/ cada ciclo PWM
vai de 0 (0%) a 255 (100%). Este ciclo PWM repetido Ciclo
vezes. Pino pode ser uma constante, 0 - 15, ou uma varivel que contenha
um nmero 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
O tempo do Ciclo do PWM dependente da freqncia do oscilador. Se um
oscilador de 4Mhz usado, cada Ciclo duraria cerca de 5ms. Se um
oscilador de 20Mhz usado, cada Ciclo teria cerca de 1ms de comprimento.
Definir um valuor OSC no tem nenhum efeito em PWM. O tempo de Ciclo
sempre muda c/ a velocidade atual do oscilador.
Pino fixado como sada logo antes da gerao dos pulsos e reverte p/ en-
trada aps parar a gerao. A sada PWM num pino se parece tanto
com sujeira, e no uma linda srie de ondas quadradas. Algum tipo de
filtro necessrio p/ tornar o sinal em algo til. Um circuito RC
pode ser usado como um simples conversor D/A:
10K
1uF
Pino Sada Analg.
PWM PORTB.7,127,100 Envia um sinal PWM com
50% duty cycle ao Pino7 por
100 ciclos
PicBasic Pro Compiler
92
5.45. RANDOM
RANDOM Var
Executa uma iterao de pseudo-randomizao em Var. Var deve ser
uma varivel de 16 bits. Cadeias de variveis c/ um ndice varivel no podem ser
usadas em RANDOM embora cadeias de variveis c/ um ndice constante sejam permitidas.
Var usado tanto como a semente e p/ guardar o resultado. O algoritmo
pseudo-randmico usado tem um comprimento de caminhada de 65535
(somente o zero no produzido).
RANDOM W4 Pega um nmero randmico p/ W4
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 varivel
que contenha um nmero 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
RCTIME pode ser usado p/ ler um potencimetro (ou algum outro dispositivo re-
sistivo). Resistncia pode ser medida pela descarga e cronometragem da
carga (ou vice versa) de um capacitor atravs do resistor (tipicamente 5K a
50K).
A resoluo de RCTIME dependente da freqncia do oscilador. Se
um 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 uma
resoluo de 2us. Definir um valor OSC no tem nenhum efeito em RCTIME. A
resoluo sempre muda c/ a velocidade atual do oscilador.
Se o pino nunca mudar de estado, 0 retornado.
Low PORTB.3 Descarrega cap p/ iniciar
Pause 10 Descarrega por 10ms
RCTIME PORTB.3,0,W0 L potencimetro no
Pino3
PicBasic Pro Compiler
94
5.47. READ
READ Endereco,Var
L a EEPROM no-chip no Endereco especificado e guarda o
resultado em Var. Esta instruo s pode ser usada c/ um PICmicro que
tenha uma rea de dados de EEPROM no-chip tal como o PIC16F84 ou
PIC16C84.
READ 5,B2 Coloca o valor da posicao 5 da EEPROM
em B2
PicBasic Pro Compiler
95
5.48. RESUME
RESUME {Rotulo}
Prossegue de onde o programa deixou aps manipular uma interrupo. RESUME
similar a RETURN mas usado ao final de uma interrupo do manipulador
do PicBasic Pro.
Se o Rotulo opcional usado, a execuo do programa ir continuar no
Rotulo ao invs de onde estava quando foi interrompida. Neste caso, quaisquer
outros endereos de retorno na pilha no sero mais acessveis.
Veja ON INTERRUPT p/ mais informao.
clockint: seconds = seconds + 1 Conta tempo
RESUME Retorna ao programa apos
interrupcao
error: High errorled Liga LED de erro
RESUME restart Continua em outro lugar
PicBasic Pro Compiler
96
5.49. RETURN
RETURN
Retorna da subrotina. RETURN continua a execuo na declarao
seguinte ao GOSUB que chamou a subrotina.
Gosub sub1 Vai p/ subrotina rotulada sub1
...
sub1: Serout 0,N2400,[Almoco] Envia Almoco ao
Pino0 serialmente
RETURN Retorna ao programa principal apos o Gosub
PicBasic Pro Compiler
97
5.50. REVERSE
REVERSE Pino
Se Pino uma entrada, ele fixado como sada. Se Pino uma sada, ele fixado
como entrada. Pino pode ser uma constante, 0 - 15, ou uma varivel que contenha
um nmero 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
Output 4 Fixa Pino4 como saida
REVERSE 4 Altera Pino4 p/ entrada
PicBasic Pro Compiler
98
5.51. SERIN
SERIN
Pino,Modo,{Timeout,Rotulo,}{[Qual...],}{Item...}
Recebe um ou mais Items no Pino no formato assncrono padro
usando 8 bits de dados, s/ paridade e um stop bit (8N1). SERIN similar ao
comando Serin do BS1 c/ a adio de um Timeout. Pino
automaticamente fixado como entrada. Pino pode ser uma constante, 0 - 15,
ou uma varivel que contenha um nmero 0 - 15 (ex. B0) ou um nome de
pino (ex.PORTA.0).
Os nomes Mode (ex. T2400) so definidos no arquivo MODEDEFS.BAS.
Para us-los, adicione a linha:
Include modedefs.bas
ao topo do programa PicBasic Pro. BS1DEFS.BAS e
BS2DEFS.BAS j incluem MODEDEFS.BAS. No o inclua de
novo se um destes arquivos j estiver incluso. Os nmeros Mode podem
ser usado s/ a incluso deste arquivo.
Mode No. Mode Baud Rate Estado
T2400
0 2400
Verdadeiro
T1200
1 1200
T9600
2 9600
T300
3 300
N2400
4 2400
Invertido
N1200
5 1200
N9600
6 9600
N300
7 300
Um Timeout e Label opcionais podem ser inclusos p/ permitir ao programa
continuar se um caractere no 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 mais
qualificadores contidos entre colchetes. SERIN deve receber estes bytes na
PicBasic Pro Compiler
99
ordem exata antes de receber os tens de dados. Se qualquer byte recebido no
coincidir c/ o prximo byte na seqncia do qualificador, o processo de
qualificao recomea (ex. o prximo byte recebido comparado ao primeiro
tem na lista do qualificador). Um Qualificador pode ser uma constante, varivel
ou uma constante string. Cada caractere de uma string tratado como um
qualificador individual.
Uma vez que os qualificadores so satisfeitos, SERIN comea a guardar dados nas
variveis associadas c/ cada Item. Se o nome da varivel usado
sozinho, o valor do caractere ASCII recebido guardado na
varivel. Se a varivel precedida por um jogo-da-velha ( # ), SERIN converte um
valor decimal em ASCII e guarda o resultado naquela varivel. Todos os no-
dgitos recebidos antes do primeiro dgito do valor decimal so ignorados e
descartados. Os caracteres no-dgito que terminarem o valor decimal
tambm so descartados.
SERIN assume um oscilador de 4Mhz quando gerar sua temporizao de bit. Para
manter a temporizao de baud rate apropriada c/ outros valores de oscilador, esteja
certo de definir (DEFINE) o ajuste OSC ao novo valor do oscilador.
Enquanto conversores de nvel RS-232 de um s chip so comuns e
baratos, as excelentes especificaes de E/S do PICmicro permitem que a maioria
das aplicaes rodem s/ conversores de nvel. Ao invs disso, entradas invertidas
(N300..N9600) podem ser usadas em conjunto c/ um resistor
limitador de corrente.
22K
Pino RS-232 TX
RS-232 GND
Pino 3
Pino 5 Pino 7
Pino 2
DB9 DB25
SERIN 1,N2400,[A],B0 Aguarda at que o
caractere A seja
recebido serialmente no
Pino1 e colocado proximo
ao caractere em B0
PicBasic Pro Compiler
100
5.52. SERIN2
SERIN2 PinoDados{\PinoFluxo},Mode,{RotuloParidade,}
{Timeout,Rotulo,}[Item...]
Recebe um ou mais Items no Pino em formato assncrono padro.
SERIN2 similar ao comando Serin do BS2. PinoDados automaticamente
fixado como entrada. O PinoFluxo opcional automaticamente fixadao como sada.
PinoDados e PinoFluxo podem ser uma constante, 0 - 15, ou uma varivel que
contenha um nmero 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 evitar
que os dados sobrecarreguem o receptor. Se for usado, PinoFluxo
automaticamente levado ao estado habilitado p/ permitir a transmisso de cada
caractere. Este estado habilitado determinado pela polaridade dos dados
especificados por Mode.
Mode usado p/ especificar o baud rate e parmetros de operao da
transferncia serial. Os 13 bits de ordem inferior selecionam o baud rate. O bit 13 seleciona
paridade ou s/ paridade. O bit 14 seleciona invertido ou nvel real. O bit 15 no
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 equao:
(1000000 / baud) - 20
Alguns baud rates padro esto listados na seguinte tabela.
Baud Rate Bits 0 - 12
300
3313
600
1646
1200
813
2400
396
4800
188
9600
84
19200
32
PicBasic Pro Compiler
101
O bit 13 seleciona paridade par (bit 13 = 1) ou s/ paridade (bit 13 = 0). Normalmente,
as transmisses seriais so 8N1 (8 bits de dados, s/ paridade e 1 bit de parada). Se
a paridade selecionada, os dados so recebidos como 7E1 (7 bits de dados,
paridade par e 1 bit de parada).
O bit 14 seleciona o nvel dos dados e pinos de controle de fluxo. Se o bit 14 = 0,
os dados so recebidos na forma real p/ uso c/ drivers RS-232. Se o bit 14 =
1, os dados so recebidos invertidos. Este modo pode ser usado p/ evitar
a instalao de drivers RS-232.
Alguns exemplos de Mode so: Mode = 84 (9600 bauds, s/ paridade, real),
Mode = 16780 (2400 bauds, s/ paridade, invertido), Mode = 27889 (300
bauds, paridade par, invertido).
Se RotuloParidade incluso, este rtulo ser endereado se um caractere
c/ erro de paridade recebido. Ele deve somente ser usado se a paridade
par selecionada (bit 13 = 1).
Um Timeout e Rotulo opcionais podem ser inclusos p/ permitir ao programa
continuar se um caractere no recebido dentro de um certo tempo.
Timeout especificado em unidades de 1 milisegundo.
SERIN2 suporta muitos modificadores de dados diferentes que podem ser misturados
e combinados livremente dentro de uma nica declarao SERIN2 p/ prover vrias
formataes de entrada.
Modificador Operao
BIN{1..16}
Recebe dgitos binrios
DEC{1..5}
Recebe dgitos decimais
HEX{1..4}
Recebe dgitos hexadecimais
SKIP n
Pula n caracteres recebidos
STR CadeiaVar\n{\c}
Recebe cadeia de n caracteres
opcionalmente terminados c/ caractere c
WAIT ( ) Espera por seqncia de caracteres
WAITSTR CadeiaVar{\n} Espera por cadeia de caracteres
1) Uma varivel precedida por BIN ir receber a represen-
tao ASCII de seu valor binrio. Por exemplo, se BIN B0
especificado e 1000" recebido, B0 ser fixado em 8.
PicBasic Pro Compiler
102
2) Uma varivel precedida por DEC ir receber a represen-
tato ASCII de seu valor decimal. Por exemplo, se DEC B0
especificado e 123" recebido, B0 ser fixado em 123.
3) Uma varivel precedida por HEX ir receber a represen-
tao ASCII de seu valor hexadecimal. Por exemplo, se HEX
B0 especificado e FE" recebido, B0 ser fixado em 254.
4) SKIP seguido por uma contagem ir pular aquela quantia de caracteres
na corrente de entrada. Por exemplo, SKIP 4 ir pular 4 caracteres..
5) STR seguido por uma varivel 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 ou
mais qualificadores entre parnteses aps WAIT. SERIN2 deve
receber estes bytes na ordem exata antes de receber os tens de
dados. Se qualquer byte recebido no coincidir c/ o prx. byte na
seqncia do qualificador, o processo de qualificao recomea (ex. o
prx. byte recebido comparado ao primeiro tem na lista do
qualificador). Um Qualificador pode ser uma constante, varivel
ou uma constante de string. Cada caractere de uma string tratado como
um qualificador individual.
7) WAITSTR pode ser usado como WAIT acima p/ forar SERIN2 a
esperar por uma cadeia de caracteres de um compr. opcional antes
de proceder.
Uma vez que quaisquer qualificadores WAIT ou WAITSTR so satisfeitos, SERIN2 comea
a guardar dados nas variveis associadas c/ cada Item. Se o nome da
varivel usado sozinho, o valor do caractere ASCII recebido guardado
na varivel. Se a varivel precedida por BIN, DEC ou HEX, ento
SERIN2 converte um valor binrio, decimal ou hexadecimal em ASCII e
guarda o resultado naquela varivel. Todos os no-dgitos recebidos antes do primeiro
dgito do valor decimal so ignorados e descartados. O caractere
no-dgito que termina o valor tambm descartado.
BIN, DEC e HEX podem ser seguidos por um nmero. Normalmente, estes
modificadores recebem tantos dgitos quanto h na entrada. Entretanto, se um
nmero segue o modificador, SERIN2 ir sempre receber aquele nmero de
dgitos, pulando dgitos adicionais conforme necessrio.
PicBasic Pro Compiler
103
SERIN2 assume um oscilador de 4Mhz enquanto genera sua temporizao de bit. Para
manter a temporizao de baud rate apropriada c/ outros valores de oscilador, esteja certo
de fazer o DEFINE do parmetro OSC p/ o novo valor do oscilador.
Enquanto que conversores de nvel RS-232 num s chip so comuns e
baratos, graas atual implementao da RS-232 e as excelentes
especificaes de E/S do PICmicro, a maioria das aplicaes no requerem conver-
sores de nvel. Em lugar disso, TTL invertido (Mode bit 14 = 1) pode ser usado. Um
resistor limitador de corrente sugerido (supe-se que a RS-232 seja
tolerante a curtos).
22K
Pino RS-232 TX
RS-232 GND
Pino 3
Pino 5 Pino 7
Pino 2
DB9 DB25
Espera at que o caractere A seja recebido
serialmente no Pino1 e coloca prox. caractere em B0
SERIN2 1,16780,[wait (A),B0]
Pula 2 caracteres e pega um nmero decimal de 4 digitos
SERIN2 PORTA.1,84,[skip 2,dec4 B0]
SERIN2 PORTA.1\PORTA.0,84,100,tlabel,[wait (x,
b0), str ar]
PicBasic Pro Compiler
104
5.53. SEROUT
SEROUT Pino,Modo,[Item{,Item...}]
Envia um ou mais tens ao Pino em formato assncrono padro usando
8 bits de dados, s/ paridade e uma parada (8N1). SEROUT similar ao comando
Serout do BS1. Pino automaticamente fixado como sada. Pino pode ser uma
constante, 0 - 15, ou uma varivel que contenha um nmero 0 - 15 (ex. B0) ou
um nome de pino (ex. PORTA.0).
Os nomes Mode (ex. T2400) so definidos no arquivo MODEDEFS.BAS.
Para us-los, adicione a linha:
Include modedefs.bas
no topo do programa PicBasic Pro. BS1DEFS.BAS e
BS2DEFS.BAS j incluem MODEDEFS.BAS. No inclua-o
novamente se um destes arquivos j estiver incluso. Os nmeros Mode podem
ser usados s/ incluir este arquivo.
PicBasic Pro Compiler
105
Mode No. Mode Baud Rate Estado
T2400
0 2400
Acionam. Real
T1200
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 Real
OT1200
9 1200
OT9600
10 9600
OT300
11 300
ON2400
12 2400
Aberto Invertido
ON1200
13 1200
ON9600
14 9600
ON300
15 300
SEROUT suporta trs tipos de dados diferentes que podem ser misturados e
combinados livremente dentro de uma nica declarao SEROUT.
1) Uma constante string enviada como uma string de caracteres literal.
2) Um valor numrico (uma varivel ou uma constante) ir enviar o
caractere ASCII correspondente. Mais notavelmente, 13 o retorno
do carro e 10 o avano de linha.
3) Um valor numrico precedido por um jogo-da-velha ( # ) ir enviar a
representao ASCII de seu valor decimal. Por exemplo, se W0 =
123, ento #W0 (ou #123) ir enviar '1', '2', '3'.
SEROUT assume um oscilador de 4Mhz enquanto gera sua temporizao de bit. Para
manter a temporizao de baud rate apropriada c/ outros valores de oscilador, esteja
certo de fazer o DEFINE do parmetro OSC p/ o novo valor do oscilador.
PicBasic Pro Compiler
106
Em alguns casos, as taxas de transmisso das instrues SEROUT podem
apresentar caracteres muito rapidamente ao dispositivo receptor. Um DEFINE
adiciona cadncia de caractere s transmisses de sada serial. Isto permite
tempo adicional entre os caracteres medida em que so transmitidos. Um
DEFINE de cadncia 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 transmisso de cada
caractere:
DEFINE CHAR_PACING 1000
Enquanto que conversores de nvel RS-232 de um s chip so comuns e
baratos, graas atual implementao RS-232 e as excelentes
especificaes de E/S do PICmicro, a maioria das aplicaes no requerem conver-
sores de nvel. Em lugar disso, TTL invertido (N300..N9600) pode ser usado.
Um resistor limitador de corrente sugerido (supe-se que o RS-232 seja
tolerante a curtos).
1K
Pino RS-232 RX
RS-232 GND
Pino 2
Pino 5 Pino 7
Pino 3
DB9 DB25
SEROUT 0,N2400,[#B0,10] Envia o valor ASCII
de B0 seguido por um avan-
co de linha ao Pino0
serialmente
PicBasic Pro Compiler
107
5.54. SEROUT2
SEROUT2 PinoDados{\PinoFluxo},Modo,{Passo,}
{Timeout,Rotulo,}[Item...]
Envia um ou mais Items ao PinoDados em formato assncrono padro.
SEROUT2 similar ao comando Serout do BS2. PinoDados
automaticamente fixado como sada. O PinoFluxo opcional automaticamente
fixado como entrada. PinoDados e PinoFluxo podem ser uma constante, 0 - 15,
ou uma varivel que contenha um nmero 0 - 15 (ex. B0) ou um nome de pino (ex.
PORTA.0).
O pino de controle de fluxo opcional, PinoFluxo, pode ser includo p/ ajudar a impedir
que os dados sobrecarreguem o receptor. Se ele usado, os dados seriais no sero
enviados at que PinoFluxo esteja no estado apropriado. Este estado determinado
pela polaridade dos dados especificados por Mode.
Um Timeout e Label opcionais podem ser includos p/ permitir que o programa
continue se o PinoFluxo no mudar p/ o estado habilitado dentro de
um certo tempo. Timeout especificado em unidades de 1 milisegundo.
Em alguns casos, as taxas de transmisso das instrues SEROUT2 podem
apresentar caracteres muito rapidamente p/ o dispositivo receptor. Pode no ser
desejvel usar um pino extra p/ controle de fluxo. Um Passo opcional pode ser
usado p/ adicionar cadncia de caractere s transmisses de sada seriais. Isto
permite tempo adicional entre os caracteres medida em que eles so transmitidos.
O cadenciamento de caractere permite um atraso de 1 a 65,535 milisegundos
entre cada caractere transmitido.
Mode usado p/ especificar o baud rate e parmetros operacionais da
transferncia serial. Os 13 bits de ordem inferior selecionam o baud rate. O bit 13
seleciona paridade ou s/ paridade. O bit 14 seleciona invertido ou nvel real. O bit 15
seleciona se por acionamento ou aberto.
Os bits de baud rate especificam o tempo de bit em microsegundos - 20. Para achar
o valor p/ um dado baud rate, use a equao:
(1000000 / baud) - 20
Alguns baud rates padro esto listados na seguinte tabela.
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 transmisses seriais so 8N1 (8 bits de dados, s/ paridade e 1 bit de parada). Se
a paridade selecionada, os dados so enviados como 7E1 (7 bits de dados,
paridade par e 1 bit de parada).
O bit 14 seleciona o nvel dos dados e pinos de controle de fluxo. Se o bit 14 = 0,
os dados so enviados na forma real p/ uso c/ drivers RS-232. Se o bit14 = 1, os
dados so enviados invertidos. Este modo pode ser usado p/ evitar instalar
drivers 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 so: 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 ser
misturados e combinados livremente dentro de uma nica declarao SEROUT2
p/ prover vrios formatos de sada.
PicBasic Pro Compiler
109
Modificador Operao
{I}{S}BIN{1..16}
Envia dgitos binrios
{I}{S}DEC{1..5}
Envia dgitos decimais
{I}{S}HEX{1..4}
Envia dgitos 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 numrico (uma varivel ou uma constante) ir enviar o
caractere ASCII correspondente. Mais notavelmente, 13 o retorno
do carro e 10 o avano de linha.
3) Um valor numrico precedido por BIN ir enviar a representao
ASCII de seu valor binrio. Por exemplo, se B0 = 8, ento
BIN B0 (ou BIN 8) ir enviar 1000".
4) Um valor numrico precedido por DEC ir enviar a representao
ASCII de seu valor decimal. Por exemplo, se B0 = 123,
ento DEC B0 (ou DEC 123) ir enviar 123".
5) Um valor numrico precedido por HEX ir enviar a representao
ASCII de seu valor hexadecimal. Por exemplo, se B0 =
254, ento 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 varivel de cadeia de bytes e contagem opcional ir
enviar uma cadeia de caracteres. O tamanho da cadeia determinado
pela contagem ou quando um caractere 0 encontrado na cadeia.
BIN, DEC e HEX podem ser precedidos ou seguidos por muitos parmetros
opcionais. Se qualquer um deles for precedido por um I (p/ indicado), a
sada ser precedida por um %, # ou $ p/ indicar que o valor
seguinte binrio, decimal ou hexadecimal.
Se qualquer um for precedido por um S (p/ assinado), a sada ser enviada
precedida por um - se the o bit de ordem superior dos dados ligado. Isto permite
a transmisso de nmeros negativos. Tenha em mente que toda a aritmtica
e comparaes no PBP no so assinadas. Entretanto, aritmtica no-assinada
pode render resultados assinados. Por exemplo, pegue o caso de B0 = 9 - 10.
O resultado de DEC B0 seria 255". Enviando SDEC B0 daria -
PicBasic Pro Compiler
110
1" desde que o bit de ordem superior seja enviado. Ento c/ um pouco de manha, a
aritmtica no-assinada do PBP pode render resultados assinados.
BIN, DEC e HEX podem tambm serem seguidos por um nmero. Normalmente, estes
modificadores mostram exatamente quantos dgitos forem necessrios, zero apagado
(zeros esquerda no so enviados). Entretanto, se um nmero segue o modificador,
SEROUT2 ir sempre enviar aquele nmero de dgitos, adicionando zeros esquerda con-
forme necessrio. Ele tambm ir ajustar quaisquer dgitos de ordem superior extra. Por
exemplo, BIN6 8 enviaria 001000" e BIN2 8 enviaria 00".
Qualquer uma ou todas as combinaes de modificadores podem ser usadas
de uma vez. Por exemplo, ISDEC4 B0.
SEROUT2 assume um oscilador de 4Mhz enquanto gera sua temporizao de bit.
Para manter a temporizao de baud rate apropriada c/ outros valores de oscilador,
esteja certo de fazer o DEFINE do parmetro OSC p/ o novo valor do oscilador.
Enquanto que conversores de nvel RS-232 de um s chip so comuns e
baratos, graas atual implementao da RS-232 e as excelentes
especificaes de E/S do PICmicro, a maioria das aplicaes no requer conversores
de nvel. Em lugar disso, TTL invertido (Mode bit 14 = 1) pode ser usado. Um
resistor limitador de corrente sugerido (supe-se que a RS-232
seja tolerante a curtos).
1K
Pino RS-232 RX
RS-232 GND
Pino 2
Pino 5 Pino 7
Pino 3
DB9 DB25
Envia o valor ASCII de B0 seguido por um
avanco de linha ao Pino0 serialmente a 2400 bauds
SEROUT2 0,16780,[dec B0,10]
Envia B0 = seguido pelo valor binrio de B0
p/ PORTA pino 1 serialmente a 9600 bauds
SEROUT2 PORTA.1,84,[B0=, ihex4 B0]
PicBasic Pro Compiler
111
5.55. SHIFTIN
SHIFTIN PinoDados,PinoClock,Modo,[Var{\Bits}...]
Clock em PinoClock, desloca os bits de forma sncrona e p/ dentro em PinoDados e guarda
o(s) byte(s) recebidos em Var. PinoClock e PinoDados podem ser uma constante,
0-15, ou uma varivel que contenha um nmero 0-15 (ex. B0) ou um nome de pino
(ex. PORTA.0).
\Bits opcionalmente especifica o nmero de bits a serem deslocados. Se no for
especificado, so deslocados 8 bits, independente do tipo de varivel.
Os nomes Modo (ex. MSBPRE) so definidos no arquivo MODEDEFS.BAS.
Para us-los, adicione a linha:
Include modedefs.bas
ao topo do programa PicBasic Pro. BS1DEFS.BAS e
BS2DEFS.BAS j incluem MODEDEFS.BAS. No inclua-o novamente se
um destes arquivos j estiver incluso. Os nmeros Modo podem
ser usados s/ a incluso deste arquivo.
Modo No. Modo Operao
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 aps enviar o clock
LSBPOST
3 Desloca dados no bit inferior primeiro,
L dados aps enviar o clock
SHIFTIN 0,1,MSBPRE,[B0]
PicBasic Pro Compiler
112
5.56. SHIFTOUT
SHIFTOUT PinoDados,PinoClock,Modo,[Var{\Bits}...]
Desloca de forma sncrona e p/ fora Var em PinoClock e PinoDados. PinoClock
e PinoDados podem ser uma constante, 0-15, ou uma varivel que contenha um
nmero 0-15 (ex. B0) ou um nome de pino (ex. PORTA.0).
\Bits opcionalmente especifica o nmero de bits a serem deslocados. Se no for
especificado, so deslocados 8 bits, independente do tipo de varivel.
Os nomes Modo (ex. LSBFIRST) so definidos no arquivo
MODEDEFS.BAS. Para us-los, adicione a linha:
Include modedefs.bas
ao topo do programa PicBasic Pro. BS1DEFS.BAS e
BS2DEFS.BAS j incluem MODEDEFS.BAS. No inclua-o novamente se
um destes arquivos j estiver incluso. Os nmeros Modo podem
ser usados s/ a incluso deste arquivo.
Modo No. Modo Operao
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]
PicBasic Pro Compiler
113
5.57. SLEEP
SLEEP Periodo
Coloca o microcontrolador em modo de baixo consumo por Periodo segundos.
Periodo de 16 bits, ento atrasos podem ser de at 65,535 segundos
(pouco acima de 18 horas).
SLEEP usa o Timer de Watchdog ento ele independente da prpria
freqncia do oscilador. A granularidade de cerca de 2.3 segundos e pode variar
baseada em especificaes do dispositivo e temperatura. Esta variao incomum
ao BASIC Stamp. A alterao foi necessria porque quando o
PICmicro executa um reset do Timer de Watchdog, ele reseta muitos dos
registradores internos p/ valores predefinidos. Estes valores podem diferir muito
daquilo que o seu programa pode esperar. Ao se rodar o comando SLEEP
no calibrado, este problema contornado.
SLEEP 60 Descansa por cerca de 1 minuto
PicBasic Pro Compiler
114
5.58. SOUND
SOUND Pino,[Nota,Duracao{,Nota,Duracao...}]
Gera tons e/ou rudo branco no Pino especificado. Pino
automaticamente fixado como sada. Pino pode ser uma constante, 0 - 15, ou
uma varivel que contenha um nmero 0 - 15 (ex. B0) ou um nome de pino
(ex. PORTA.0).
Nota 0 silncio. Notas 1-127 so tons. Notas 128-255 so rudo
branco. Tons e rudos brancos esto em ordem ascendente (ex. 1 e 128
so as freqncias mais baixas, 127 e 255 so 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 em
incrementos de cerca de 12 milisegundos. Nota e Durao no
precisam ser constantes.
SOUND manda ondas quadradas de nvel TTL. Graas s excelentes caracte-
rsticas de E/S do PICmicro, um alto-falante pode ser acionado atravs de um
capacitor. O valor do capacitor deve ser determinado c/ base nas
freqncias de interesse e da carga do alto-falante. Alto-falantes piezo-eltricos
podem ser acionados diretamente.
Pin
10uF
SOUND PORTB.7,[100,10,50,10] Envia 2 sons
consecutivamente
ao Pino7
PicBasic Pro Compiler
115
5.59. STOP
STOP
Para a execuo do programa executando um loop infinito. Isto no
coloca o microcontrolador em modo de baixo consumo. O microcontrolador
ainda est trabalhando como nunca. Ele apenas no est fazendo muito.
STOP Faz o programa andar s/ sair do lugar.
PicBasic Pro Compiler
116
5.60. SWAP
SWAP Variavel,Variavel
Troca os valores entre 2 variveis. Geralmente, um processo tedioso
trocar o valor de 2 variveis. SWAP o faz em uma declarao s/ usar nenhuma
varivel intermediria. Ele pode ser usado c/ variveis tipo bit, byte
e word. Cadeias de variveis c/ um ndice varivel no podem ser
usadas em SWAP embora caddeias de variveis c/ um ndice constante
sejam permitidas.
temp = B0 Maneira antiga
B0 = B1
B1 = temp
SWAP B0, B1 Maneira nova
PicBasic Pro Compiler
117
5.61. TOGGLE
TOGGLE Pino
Inverte o estado do Pino especificado. Pino automaticamente fixado
como sada. Pino pode ser uma constante, 0 - 15, ou uma varivel que
contenha um nmero 0 - 15 (ex. B0) ou um nome de pino (ex. PORTA.0).
Low 0 Inicia Pino0 como nivel baixo
TOGGLE 0 Altera estado do Pino0 p/ alto
PicBasic Pro Compiler
118
5.62. WHILE..WEND
WHILE Condicao
Declaracao...
WEND
Executa repetidamente Declaracaoes WHILE (ENQUANTO) Condicao verdadeira.
Quando a Condicao no for mais verdadeira, a execuo continua na declarao
seguinte ao WEND. Condicao pode ser qualquer expresso de comparao.
i = 1
WHILE i <= 10
Serout 0,N2400,[No:,#i,13,10]
i = i + 1
WEND
PicBasic Pro Compiler
119
5.63. WRITE
WRI TE Endereco, Valor
Escreve Valor na EEPROM no-chip no Endereco especificado. Esta
instruo pode somente ser usada c/ um PICmicro que tenha uma rea
de dados de EEPROM no-chip tal como o PIC16F84 ou PIC16C84.
WRITE usado p/ fixar os valores da EEPROM no-chip em tempo de execuo.
Para fixar os valores da EEPROM no-chip em tempo de programao,
use a declarao DATA ou EEPROM.
Cada WRITE auto-temporizado e leva cerca de 10 milisegundos p/ executar
em um PICmicro.
WRITE 5,B0 Envia valor de B0 p/ posicao 5
da EEPROM
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 informao dos dispositivos X-10 que podem enviar
tal informao. Mdulos X-10 esto disponveis em uma larga variedade de
fontes sob muitas marcas. Uma interface requerida p/ conectar o micro-
controlador linha de fora CA. O TW-523 p/ comunicaes X-10 bidire-
cionais requerido pelo XIN. Este dispositivo contm a interface de linha de
fora e isola o microcontrolador da linha CA. J que o formato X-10
patenteado, esta interface tambm cobre as taxas de licena.
PinoDados automaticamente fixado como entrada p/ receber dados da inter-
face X-10. PinoZero automaticamente fixado como entrada p/ receber a
temporizao 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 ser
constantes, 0-15, ou uma varivel que contenha um nmero 0-15 (ex. B0) ou
um nome de pino (ex. PORTA.0).
Um Timeout opcional e Rotulo podem ser includos p/ permitir ao programa
continuar se dados X-10 no forem recebidos dentro de um certo tempo.
Timeout especificado em meio-ciclos da linha de fora CA (aproximada-
mente 8.33 milisegundos).
XIN apenas processa dados a cada instante zero da linha de fora CA confor-
me recebido no PinoZero. Se no houverem transies nesta linha, XIN
ir efetivamente esperar p/ sempre.
Se Var tiver tamanho de palavra, cada House Code recebido guardado no byte
superior da palavra. Cada Key Code recebido guardado no byte inferior da
palavra. Se Var for um byte, apenas o Key Code guardado.
O House Code um nmero entre 0 e 15 que corresponde ao
House Code fixado no mdulo X-10 A at P.
O Key Code tanto pode ser o nmero de um mdulo X-10 especfico ou
a funo que for ser executada por um mdulo. Na prtica normal, primeiro um
comando especificando o nmero do mdulo X-10 enviado, seguido por um
comando especificando a funo desejada. Algumas funes operam em todos
os mdulos de uma vez assim o nmero do mdulo desnecessrio. Esperamos
PicBasic Pro Compiler
121
que futuros exemplos iro clarear as coisas. Nmeros de Key Code 0-15
correspondem aos nmeros 1-16 do mdulo.
XOUT abaixo lista as funes bem como a informao de fiao.
housekey var word
Pega dados X-10
loop: XIN PORTA.2,PORTA.0,[housekey]
Mostra dados X-10 no LCD
Lcdout $fe,1,House=,#housekey.byte1,
Key=,#housekey.byte0
Goto loop Faz isso p/ sempre
Checa por dados X-10, vai p/ semdados se nenhum
XIN PORTA.2,PORTA.0,1,semdados,[housekey]
PicBasic Pro Compiler
122
5.65. XOUT
XOUT PinoDados,PinoZero,
[HouseCode\KeyCode{\Repeticao}{,...}]
Envia o HouseCode seguido pelo KeyCode, Repeticao nmero de vezes em for-
mato X-10. Se a Repeticao opcional desconsiderada, 2 vezes (o mnimo)
assumido. Repeticao geralmente reservado p/ uso c/ os comandos
Aumento e Reduo do Brilho.
XOUT usado p/ enviar informao de controle aos mdulos X-10. Estes
mdulos esto disponveis em uma larga variedade de fontes sob muitas
marcas. Uma interface requerida p/ conectar o microcontrolador
linha de fora CA. Tanto a PL-513 p/ somente envio, ou a TW-523 p/
comunicaes X-10 bidirecionais so requeridas. Estes dispositivos contm a
interface de linha de fora e isolam o microcontrolador da linha CA.
J que o formato X-10 patenteado, estas interfaces tambm cobrem
as taxas de licena.
PinoDados automaticalmente fixado como sada p/ enviar dados interface
X-10. PinoZero automaticamente fixado como entrada p/ receber a tempori-
zao de instante zero da interface X-10. Ele deve ser ligado aos 5 volts
c/ um resistor de 4.7K. PinoDados e PinoZero podem ser constantes, 0-15,
ou uma varivel que contenha um nmero 0-15 (ex. B0) ou um nome de pino
(ex. PORTA.0).
XOUT apenas processa dados a cada instante zero da linha de fora AC conforme
recebido no PinoZero. Se no houver transies nesta linha, XOUT ir
efetivamente esperar para sempre.
HouseCode um nmero entre 0 e 15 que corresponde ao
House Code fixado no mdulo X-10 A at P. O HouseCode
apropriado deve ser enviado como parte de cada comando.
O KeyCode tanto pode ser o nmero de um mdule X-10 especfico ou a
funo que for ser executada por um mdulo. Na prtica normal, primeiro um
comando especificando o nmero do mdulo X-10 enviado, seguido por um
comando especificando a funo desejada. Algumas funes operam em
todos os mdulos de uma vez de forma que o nmero do mdulo desnecessrio.
Esperamos que exemplos futuros iro clarear as coisas. Os nmeros KeyCode
0-15 correspondem aos nmeros de mdulo 1-16.
PicBasic Pro Compiler
123
Os nomes (ex. unitOn) KeyCode (funo) so definidos no arquivo
MODEDEFS.BAS. Para us-los, adicione a linha:
Include modedefs.bas
ao topo do programa PicBasic Pro. BS1DEFS.BAS e
BS2DEFS.BAS j incluem MODEDEFS.BAS. No inclua-o novamente
se um destes arquivos j estiver incluso. Os nmeros KeyCode
podem ser usados s/ a incluso deste arquivo.
KeyCode No. KeyCode Operao
unitOn
%10010 Liga o mdulo
unitOff
%11010 Desliga o mdulo
unitsOff
%11100 Desliga todos os mdulos
lightsOn
%10100 Liga todos os md. de luz
lightsOff
%10000 Desl. todos os md. de luz
bright
%10110 Mais brilho no md. de luz
dim
%11110 Reduz o brilho do mdulo de luz
A conexo s interfaces X-10 requer 4 ligaes. Sada da interface X-10
(instante zero e recepo de dados) so coletor aberto e requerem um
resistor pull up de cerca de 4.7K a 5 volts. Tabelas de fiao p/
cada interface so mostradas abaixo:
Fiao PL-513
No. Fio Cor do Fio Conexo
1 Preto Sada instante zero
2 Vermelho Comum instante zero
3 Verde Comum transmisso X-10
4 Amarelo Entrada transmisso X-10
PicBasic Pro Compiler
124
FiaoTW-523
No. Fio Cor do Fio Conexo
1 Preto Sada instante zero
2 Vermelho Comum
3 Verde Sada recepo X-10
4 Amarelo Entrada transmisso X-10
house var byte
unit var byte
Include modedefs.bas
house = 0 Set house to 0 (A)
unit = 8 Set unit to 8 (9)
Liga unidade 8 na casa 0
XOUT PORTA.1,PORTA.0,[house\unit,house\unitOn]
Desliga todas as luzes na casa 0
XOUT PORTA.1,PORTA.0,[house\lightsOff]
Pisca luz 0 a cada 10 segundos
XOUT 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
PicBasic Pro Compiler
125
6. Estrutura de Um Programa Compilado
O PBP desenhado p/ ser fcil de usar. Programas podem ser compilados e rodados
c/ pouca preocupao c/ o funcionamento interno do PBP. Algumas pessoas,
entretanto, apenas tm confiana num produto quando elas entendem seu
funcionamento interno. Outras so somente curiosas.
Esta seo p/ elas. Ela descreve os arquivos usados e a sada
gerada pelo PBP e d alguma idia do que exatamente est acontecendo.
6.1. Cabealhos de Alvo Especfico
Trs arquivos de cabealho de alvo especfico so usados quando um programa
compilado. Um usado pelo PBP, os outros dois so includos p/ uso pelo
assembler.
Um arquivo c/ o nome do microcontrolador seguido pela extenso
.BAS contm informao especfica do chip necessria ao PBP. Isto inclui
o perfil da memria do chip, qual biblioteca ele usa, e inclui as definies das
variveis de que ele necessita. Para o PIC16F84, o microcontrolador
padro, o arquivo chamado 16F84.BAS.
Um arquivo c/ o nome do microcontrolador seguido pela extenso
.INC includo no arquivo .ASM gerado p/ dar a informao do
assembler sobre o chip, incluindo os parmetros de configurao. Para
o PIC16F84, o arquivo chamado 16F84.INC.
Finalmente, o assembler tem seu prprio arquivo include que define os endereos
dos registradores do microcontrolador. Este arquivo geralmente chamado de
algo da ordem de P16F84.INC.
6.2. Os Arquivos de Bibliotecas
O PBP inclui um conjunto de arquivos de biblioteca que contm todo o cdigo e
arquivos de definio p/ um grupo particular de microcontroladores. No caso de
PICmicros de ncleo de 14 bits, estes arquivos comeam c/ o nome PBPPIC14.
PBPPIC14.LIB contm todas as subrotinas em linguagem assembly usadas
pelo compilador. PBPPIC14.MAC contm todas as macros que chamam
estas subrotinas. A maioria dos comandos do PicBasic Pro consistem de uma
macro e uma subrotina de biblioteca associada.
PicBasic Pro Compiler
126
PBPPIC14.RAM contm as declaraes VAR que alocam a memria
necessria pela biblioteca.
PIC14EXT.BAS contm as definies externas que dizem ao PBP todos os
nomes dos registradores do PICmicro de ncleo de 14 bits.
6.3. Cdigo Gerado pelo PBP
Um programa compilado pelo PicBasic Pro construdo em muitos estgios. Primeiro
o PBP cria o arq. .ASM. Ele ento constri um arq. .MAC personalizado que contm
somente as macros da biblioteca que so usadas no arq. .ASM. Se
tudo estiver livre de erros at este ponto, ele lana o assembler.
O assembler gera seu prprio conjunto de arquivos. Estes incluem o arq. de sada
final .HEX e possivelmente arquivos de listagem e depurao.
6.4. Estrutura do Arquivo .ASM
O arquivo .ASM tem uma estrutura muito especfica. As coisas precisam ser
feitas numa ordem particular p/ que tudo funcione apropriadamente.
O primeiro tem colocado no arquivo um equate definindo qual assembler
ser usado, seguido por um INCLUDE p/ dizer ao assembler qual
microprocessador o alvo e dar a ele alguma informao bsica, tal como
os dados de configurao.
Depois, todas as alocaes de varivel e apelidos so listados. Em seguida
vem a inicializao da EEPROM, se for chamada.
Um INCLUDE p/ o arquivo de macro ento colocado no arquivo, seguido por
um INCLUDE p/ as subrotinas de biblioteca.
Finalmente, o cdigo do programa incorporado. Este cdigo de programa
simplesmente uma lista de macros que foram geradas pelas linhas do PicBasic Pro.
PicBasic Pro Compiler
127
7. Outras Consideraes do PicBasic Pro
7.1. Quo Rpido Bastante Rpido?
Por padro, o PicBasic Pro Compiler gera programas p/ serem rodados num
PICmicro c/ um cristal de 4Mhz ou ressonador cermico. Todas as instru-
es tempo-sensveis assumem um tempo de instruo de 1 microssegundo
p/ seus atrasos. Isto permite um PAUSE 1000, por exemplo, p/ esperar 1
segundo e as baud rates dos comandos SERIN e SEROUT serem
precisas.
Existem horas, entretanto, quando seria til rodar o PICmicro a uma freqncia
diferente de 4Mhz. Ainda que os programas compilados andem a um
passo muito bom, poderia ser bom rod-los ainda mais rpido.
Ou talvez seja desejvel fazer a entrada ou sada serial a 19,200
bauds em vez da velocidade mxima atual de 9600 bauds.
Os programas PicBasic Pro podem ser rodados em freqncias de clock diferentes de
4Mhz em um par de maneiras diferentes. A primeira simplesmente usar um oscilador
diferente de 4Mhz e no contar ao PBP. Isto pode ser uma tcnica til se
voc prestar ateno ao que acontece c/ as instrues 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 um
cristal de 4Mhz. Isto, c/ efeito, faz tudo rodar duas vezes mais rpido,
incluindo os comandos SERIN e SEROUT. Se voc dizer ao SERIN ou
SEROUT p/ rodarem a 9600 bauds, o dobramento da velocidade do cristal
ir dobrar a baud rate atual p/ 19,200 bauds.
Entretanto, tenha em mente que comandos como PAUSE e SOUND tambm iro
rodar duas vezes mais rpido. O PAUSE 1000 mencionado acima iria esperar
apenas .5 segundos c/ um cristal de 8Mhz antes de permitir que a execuo do
programa continue.
A outra tcnica usar uma freqncia de oscilador diferente e contar
ao PBP as suas intenes. Isto feito atravs do uso de um DEFINE.
DEFINE, como demonstrado no comando LCDOUT em uma seo
anterior, usado p/ dizer ao PBP p/ usar algo diferente dos seus padres.
Normalmente, o padro do PBP usar um oscilador de 4Mhz. Adicionando
a declarao:
PicBasic Pro Compiler
128
DEFINE OSC 8
prximo ao comeo do programa PicBasic Pro diz ao PBP p/ assumir que um
oscilador de 8Mhz ser usado no lugar. As definies de oscillator
aceitveis so:
Valor OSC Oscilador Usado
3
3.58Mhz
4
4Mhz
8
8Mhz
10
10Mhz
12
12Mhz
16
16Mhz
20
20Mhz
Dizer ao PBP a freqncia do oscilador o permite compensar e
produzir a temporizao correta p/ COUNT, DEBUG, DTMFOUT, FREQOUT,
HSERIN, HSEROUT, I2CREAD, I2CWRITE, LCDOUT, PAUSE, PAUSEUS,
SERIN, SERIN2, SEROUT, SEROUT2, SHIFTIN, SHIFTOUT, SOUND, XIN
e XOUT.
Alteraes na freqncia do oscilador podem tambm ser usadas p/ melhorar
a resoluo das instrues PULSIN, PULSOUT e RCTIME. A 4Mhz estas
instrues operam c/ uma resoluo de 10 microsegundos. Se um cristal de
20Mhz usado, a resoluo aumentada 5 vezes p/ 2 microsegundos.
Existe uma troca entretanto. A largura do pulso ainda medida c/ relao a uma
varivel de palavra de 16 bits. Com uma resoluo de 2 microsegundos, a
largura de pulso mxima mensurvel seria 131,070 microsegundos.
Indo na outra direo e rodando c/ um oscilador de 32.768Khz
problemtico. Pode ser desejvel tentar isto por razes de reduo de
consumo de fora e poder funcionar at certo ponto. Os comandos SERIN e
SEROUT sero inteis e o Timer de Watchdog pode fazer o programa
reiniciar periodicamente. Experimente p/ descobrir se sua aplicao
particular possvel nesta velocidade de clock. No di nada
tentar.
PicBasic Pro Compiler
129
7.2. Ajustes de Configurao
Como mencionado antes, os ajustes de configurao padro p/ um dispositivo
em particular esto 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 padro XT na maioria dos dispositivos. Este o ajuste p/ o oscilador
padro de 4Mhz. Se um oscilador mais rpido usado, este ajuste precisa ser
alterado p/ HS. Dispositivos c/ osciladores internos tm por padro INTRC.
O Timer de Watchdog habilitado pelo PBP. Ele usado, juntamente c/ o
prescaler TMR0, p/ suportar as instrues NAP e SLEEP. Se nenhuma
das instrues so usadas em um progama, o Timer de Watchdog pode
ser desabilitado e o prescaler usado p/ outra coisa qualquer.
A Proteo por Cdigo desligada por padro mas pode ser ligada quando o dis-
positivo fisicamente programado. No proteja por cdigo um dispositivo c/ janela.
Veja a folha de dados da Microchip p/ o dispositivo em particular p/
os dados de configurao especficos quela pea.
7.3. Utilizao da RAM
Em geral no necessrio saber como a RAM alocada pelo PBP no
microcontrolador. O PBP cuida de todos os detalhes assim o programador
no precisar faz-lo. Entretanto h vezes quando este conhecimento
poderia ser til.
Variveis so guardadas nos registradores da RAM do PICmicro. A primeira
posio da RAM disponvel $0C p/ o PIC16F84 e alguns dos
PICmicros menores, e $20 p/ o PIC16C74 e outros PICmicros
maiores. Refira-se aos data books PICmicro da Microchip p/ a posio
real do incio dos registradores da RAM p/ um dado microcontrolador.
As variveis so atribudas RAM seqencialmente numa ordem particular.
A ordem cadeias de palavras primeiro (se houver), seguido por cadeias de byte e bit.
Ento alocado o espao p/ palavras, bytes e finalmente bits individuais. Bits
so acondicionados em bytes como possvel. Esta ordem faz o melhor uso
da RAM disponvel.
PicBasic Pro Compiler
130
Cadeias precisam caber num nico banco. Elas no podem cruzar os limites de um
banco. Isto efetivamente limita o comprimento de uma cadeia individual. Veja
a seo anterior sobre cadeias p/ estes limites.
Voc pode sugerir ao PBP um banco em particular no qual colocar a varivel:
penny VAR WORD BANK0
nickel VAR BYTE BANK1
Se requisies de banco especficas forem feitas, estas so manipuladas primeiro.
Se no houver suficiente espao num banco requisitado, o primeiro espao disponvel
usado e um aviso lanado.
Voc pode at fixar endereos especficos p/ variveis. Na maioria dos casos,
melhor deixar o PBP manipular o mapeamento de memria p/ voc. Mas em alguns
casos, tais como armazenamento do registrador W num manipulador de interrup-
es, necessrio definir um endereo fixo. Isto pode ser feito numa maneira
similar seleo de bancos:
w_store VAR BYTE $20
Muitas variveis de sistema, usando cerca de 24 bytes de RAM, so
automaticamente alocadas pelo compilador p/ uso por subrotinas de biblio-
teca. Estas variveis so alocadas no arquivo PBPPIC14.RAM e devem estar
no banco 0.
Variveis de usurio so precedidas de um underscore (_) enquanto vari-
veis de sistema no tm underscore assim elas no interferem uma
outra.
R0 VAR WORD SYSTEM
Variveis BASIC Stamp B0 - B25 e W0 - W12 no so automaticamente
alocadas. melhor criar suas prprias variveis usando a instruo VAR.
Entretanto se voc quer que estas variveis sejam criadas p/ voc,
simplesmente inclua o arquivo apropriado, BS1DEFS.BAS ou BS2DEFS.BAS,
no incio do programa PicBasic Pro. Estas variveis alocam espao
separado e longe de quaisquer outras variveis que voc pode criar mais tarde.
Isto diferente do BS2 onde usar as variveis pr-concebidas e
variveis criadas pelo usurio pode lhe causar inconvenientes.
Variveis temporrias adicionais podem ser geradas automaticamente pelo
compilador p/ ajud-lo a sortear equaes. Uma lista destas variveis, assim
PicBasic Pro Compiler
131
como todo o mapa de memria, pode ser vista no arquivo .ASM ou
.LST gerados.
7.4. Palavras Reservadas
Palavras reservadas so simplesmente isto - palavras que so reservadas p/ uso pelo
compilador e no podem ser definidas nem como nomes de varivel ou rtulos.
Estas palavras reservadas podem ser os nomes de comandos, pseudo-ops,
tipos de variveis ou os nomes dos registradores do PICmicro.
Os pseudo-ops, tipos de variveis e palavras-chave de comandos so listados
nas suas sees apropriadas. Os nomes dos registradores do PICmicro
so definidos no arquivo PIC14EXT.BAS. Se os arquivos BS1DEFS.BAS,
BS2DEFS.BAS ou MODEDEFS.BAS esto inclusos, as definies dentro deles
essencialmente tornam-se palavras reservadas e no podem ser redefinidas.
7.5. Vida Aps 2K
Sim, h vida aps 2K usando o PicBasic Pro Compiler.
PICmicros tm espao de cdigo segmentado. Instrues do PICmicro como
Call e Goto tm apenas bits suficientes dentro delas p/ enderear 2K de
espao de programa. Para conseguir programar fora dos limites de 2K, o
registrador PCLATH deve ser fixado antes de cada Call ou Goto.
O PBP automaticamente fixa estes bits PCLATH p/ voc. H are algumas
restries impostas, entretanto. A biblioteca do PicBasic Pro precisa caber inteira
na pgina 0 do espao de cdigo. Normalmente isto no um problema j que a
biblioteca a primeira coisa num programa do PicBasic Pro e a biblioteca inteira
menor que 2K. Entretanto, deve-se prestar ateno a este assunto se
bibliotecas adicionais so usadas.
Manipuladores de interrupo de linguagem assembly tambm precisam caber
na pgina 0 do espao de cdigo. Coloc-las no incio do programa
PicBasic Pro deve funcionar. Veja a seo a seguir sobre linguagem
assembly para mais informao.
A adio de instrues p/ fixar os bits do PCLATH no adiciona overhead
ao cdigo produzido. O PBP ir fixar os bits do PCLATH p/ qualquer cdigo
PICmicro que cruze o limite de 2K ou p/ qualquer referncias frente em
PICmicros c/ mais que 2K de espao de cdigo.
PicBasic Pro Compiler
132
H instrues do PicBasic Pro especficas p/ assistir os problemas de 2K.
BRANCHL foi criada p/ permitir ramificaes p/ rtulos que podem estar do
outro lado de um limite de 2K. Se o PICmicro tem 2K ou menos de espao de
programa, BRANCH deve ser usado j que ele toma menos espao que BRANCHL.
Se o microcontrolador tem mais que 2K de espao de cdigo, e voc no
pode estar certo de que BRANCH ir agir sempre dentro da mesma pgina, use
BRANCHL.
O assembler pode lanar um aviso de que um limite de pgina foi
cruzado. Isto normal e est l p/ sugerir que voc cheque por quaisquer
BRANCHes que possam cruzar um limite de pgina.
PicBasic Pro Compiler
133
8. Programao em Linguagem Assembly
Rotinas em linguagem assembly podem ser um til adjunto ao programa do
PicBasic Pro Compiler. Enquanto em geral a maioria das tarefas podem ser feitas
completamente em PicBasic Pro, h vezes quando pode ser necessrio fazer uma
determinada tarefa mais rpido, ou usando uma quantia menor de espao de cdigo,
ou s diferentemente de como o compilador o faz. Nessas horas til ter
as capabcidades de um assembler em-linha.
Pode ser benfico escrever a maioria de um programa rapidamente usando a
linguagem PicBasicPro e ento enfiar algumas linhas de cdigo assembly p/
aumentar a funcionalidade. Este cdigo adicional pode ser inserido diretamente
no programa PBP ou incluso como um outro arquivo.
8.1. Dois Assemblers - Sem Espera
Na execuo, o PBP primeiro compila o programa em linguagem
assembly e ento automaticamente lana um montador. Isto converte
a sada assembler no arquivo final .HEX que pode ser programado
em um microcontrolador.
Dois montadores diferentes podem ser usados c/ o PBP: PM, nosso PICmicro
Macro Assembler, e MPASM, o montador da Microchip. O PM includo
c/ o compilador enquanto o MPASM deve ser obtido diretamente da
Microchip atravs do seu web site ou includo c/ seus programadores
PICmicro.
H benefcios e desvantagens em se usar cada montador. PM
acessvel porque est incluso como parte do PBP. Ele tambm muito mais rpido
do que o MPASM e pode montar programas muito maiores no DOS. O PM inclui
um conj. de instrues no estilo 8051 que mais intuitivo que os mnemnicos
Microchip. Para informao completa sobre o PICmicro Macro
Assembler, veja o arquivo PM.TXT em disco.
O MPASM, por outro lado, tem a capacidade de criar um arquivo .COD.
Este arquivo contm informao adicional que pode ser muito til c/
simuladores e emuladores. O MPASM tambm mais compatvel c/ a
larga variedade de examplos em linguagem assembly encontrados na web
e nos data books da Microchip.
PicBasic Pro Compiler
134
PBP defaults to using PM. To use MPASM with PBP, simply copy all of
the MPASM files into their own subdirectory, perhaps named MPASM.
This subdirectory must also be in the DOS PATH.
MPASM may be used with PBP in two ways. If the command line option
"-ampasm" is used, MPASM will be launched following compilation to
complete the process. MPASM will display its own screen with its
progress.
PBP -ampasm filename
Alternatively, the command line option "-amp" will launch MPASM in
quiet mode and only display any errors. However, the launcher
consumes 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 should
be used.
In any case, MPASM is not included with PBP and must be obtained
from Microchip.
8.2. Programming in Assembly Language
PBP programs may contain a single line of assembly language
preceded by an at symbol (@), or one or more lines of assembly code
preceded by the ASM keyword and ended by the ENDASM keyword. Both
keywords appear on their lines alone.
@ bsf PORTA,0
Asm
bsf STATUS,RP0
bcf TRISA,0
bcf STATUS,RP0
Endasm
The lines of assembly are copied verbatim into the assembly output file.
This allows the PBP program to use all of the facilities of PM, the
PICmicro Macro Assembler. This also, however, requires that the
programmer have some familiarity with the PBP libraries. PBPs
PicBasic Pro Compiler
135
notational conventions are similar to other commercial compilers and
should come as no shock to programmers experienced enough to
attempt in-line assembly.
All identifier names defined in a PBP program are similarly defined in
assembly, but with the name preceded with an underscore ( _ ). This
allows access to user variables, constants, and even labeled locations,
in assembly.
Thus, any name defined in assembly starting with an underscore has
the possibility of conflicting with a PBP generated symbol. If conflict is
avoided, can these underscored assembly values be accessed from
PBP? No. Remember, the underscored names generated by PBP are
only shadows of the actual information defined in the compiler. Since
in-line assembly is copied directly to the output file and not processed by
the compiler, the compiler not only lacks any type or value information
about assembly symbols, it is completely unaware that they exist. If
variables are to be shared between assembly and PBP, you must define
the variables in PBP.
Just as underscored symbols have possible conflicts, so do symbols not
starting with underscores. The problem is internal library identifiers.
Luckily, most library identifiers contain a '?' or make reference to one of
the working registers (such as R0). Avoiding such names should be
reduce problems. If you should have a name collision, the compiler will
report the duplicate definitions as an error.
In assembly language the comment designator changes from the single
quote () 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. The
organization of the code is as follows: Starting at location 0, the reset
vector, PBP inserts some startup code followed by a jump to INIT.
Next, the called-for library subroutines are stuffed in. At the end of the
library is INIT, where any additional initialization is completed. Finally,
at the label MAIN, the compiled PicBasic Pro statement code is added.
PicBasic Pro Compiler
136
The first executable line that appears in the PicBasic Pro source is
where the program starts execution. That statement literally appears in
memory right behind the controllers startup and library code, right after
the MAIN label.
The tendency of programmers is to place their own library functions
written using the in-line assembler either before or after their code. In
light of the above explanation, this could create some obvious problems.
If they appear early in the program, the assembly routines execute prior
to any PBP instructions (some programmers will invariably exploit this
feature). If they appear at the tail of the program, execution which "falls
off the end" of the PBP statements may mysteriously find themselves
unintentionally executing assembly routines.
There are a couple of deciding factors as to where might be the best
place to insert assembly language subroutines. If the entire program fits
into 2K (one code page), place your assembly routines after your PBP
code. If you need to terminate your program, explicitly place an END or
STOP statement at the end of your code rather than floating off into
space.
If the program is longer than 2K, it could make more sense to put the
assembly language routines at the beginning of the PBP program. This
should ensure them of being in the first code page so that you know
where to find them. This is the way assembly language interrupt
routines should be handled.
If the routines are placed at the front, you must include a GOTO (or JMP)
around the code to the first executable PBP statement. See the section
on interrupts for an example of this.
The actual code for the assembly language routines may be included in
your program or in a separate file. If a routine is used by only one
particular PicBasic Pro program, it would make sense to include the
assembler code within the PBP source file. This routine can then be
accessed using the CALL command.
If it is used by several different PBP programs, a separate file containing
the assembly routines can simply be included at the appropriate place in
the PicBasic Pro source:
Asm
PicBasic Pro Compiler
137
Include myasm.inc
Endasm
8.4. Another Assembly Issue
PICmicro registers are banked. PBP keeps track of which register bank
it is pointing to at all times. It knows if it is pointing to a TRIS register,
for example, it needs to change the bank select bits before it can access
a PORT.
It also knows to reset the bank select bits to 0 before making a Call or a
Jump. It does this because it cant know the state of the bank select bits
at the new location. So anytime there is a change of locale or a label
that can be called or jumped to, the bank select bits are zeroed.
It also resets the bank select bits before each ASM and the @ assembler
shortcut. Once again, the assembler routine wont know the current
state of the bits so they are set to a known state. The assembler code
must be sure to reset the bank select bits before it exits, if it has altered
them.
PicBasic Pro Compiler
138
PicBasic Pro Compiler
139
9. Interrupts
Interrupts can be a scary and useful way to make your program really
difficult to debug.
Interrupts are triggered by hardware events, either an I/O pin changing
state or a timer timing out and so forth. If enabled (which by default they
arent), an interrupt causes the processor to stop whatever it is doing
and jump to a specific routine in the microcontroller called an interrupt
handler.
Interrupts are not for the faint of heart. They can be very tricky to
implement properly, but at the same time they can provide very useful
functions. For example, an interrupt could be used to buffer serial input
data behind the scenes while the main PicBasic Pro program is off
doing something else. (This particular usage would require a
microcontroller with a hardware serial port.)
There are many ways to avoid using interrupts. Quickly polling a pin or
register bit instead is usually fast enough to get the job done. Or you
can check the value of an interrupt flag without actually enabling
interrupts.
However, if you just gotta do it, here are some hints on how to go about
it.
The PicBasic Pro Compiler has two different mechanisms to handle
interrupts. The first is simply to write the interrupt handler in assembler
and tack it onto the front of a PBP program. The second method is to
use the PicBasic Pro statement ON INTERRUPT. Each method will be
covered separately, after we talk about interrupts in general.
9.1. Interrupts in General
When an interrupt occurs, the PICmicro stores the address of the next
instruction it was supposed to execute on the stack and jumps to
location 4. The first thing this means is that you need an extra location
on the hardware stack, which is only 8 deep to begin with.
The PicBasic Pro library routines can use up to 4 stack locations
themselves. The remaining 4 are reserved for CALLs and nested
BASIC GOSUBs. You must make sure that your GOSUBs are only nested
PicBasic Pro Compiler
140
3 deep at most with no CALLs within them in order to have a stack
location available for the return address. If your interrupt handler uses
the stack (by doing a Call or GOSUB itself for example), youll need to
have additional stack space available.
Once you have dealt with the stack issues, you need to enable the
appropriate interrupts. This usually means setting the INTCON register.
Set the necessary enable bits along with Global Interrupt Enable. For
example:
INTCON = %10010000
enables the interrupt for RB0/INT. Depending on the actual interrupt
desired, you may also need to set the PIE register.
Refer to the Microchip PICmicro data books for additional information on
how to use interrupts. They give examples of storing processor context
as 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 particular
interrupts.
9.2. Interrupts in BASIC
The easiest way to write an interrupt handler is to write it in PicBasic Pro
in conjunction with the ON INTERRUPT statement. ON INTERRUPT tells
PBP to activate its internal interrupt handling and to jump to your BASIC
interrupt handler as soon as it can after receiving an interrupt. Which
brings us the first issue.
Using ON INTERRUPT, when an interrupt occurs PBP simply flags the
event and immediately goes back to what it was doing. It does not
immediately vector to your interrupt handler. Since PBP statements are
not re-entrant (PBP must finish the statement that is being executed
before 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 started
execution of a Pause 10000 when an interrupt occurs. PBP will flag
the interrupt and continue with the PAUSE. It could be up to 10 seconds
PicBasic Pro Compiler
141
later before the interrupt handler is executed. If it is buffering characters
from a serial port, many characters will be missed.
To minimize the problem, use only statements that dont take very long
to execute. For example, instead of Pause 10000, use Pause 1 in a
long FOR..NEXT loop. This will allow PBP to complete each statement
more quickly and handle any pending interrupts.
If interrupt processing needs to occur more quicky than can be provided
by ON INTERRUPT, interrupts in assembly language should be used.
Exactly what happens when ON INTERRUPT is used is this: A short
interrupt handler is placed at location 4 in the PICmicro. This interrupt
handler is simply a Return. What this does is send the program back to
what it was doing before the interrupt occurred. It doesnt require any
processor context saving. What it doesnt do is re-enable Global
Interrupts as happens using an Retfie.
A Call to a short subroutine is placed after each statement in the
PicBasic Pro program once an ON INTERRUPT is encountered. This
short subroutine checks the state of the Global Interrupt Enable bit. If it
is 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 BASIC
interrupt handler, it sets the GIE bit to re-enable interrupts and returns to
where the program was before the interrupt occurred. If RESUME is
given 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 after
each statement. This allows sections of code to execute without the
possibility of being interrupted. ENABLE allows the insertion to continue.
A DISABLE should be placed before the interrupt handler so that it will
not keep getting restarted every time the GIE bit is checked.
If it is desired to turn off interrupts for some reason after ON INTERRUPT
is encountered, you must not turn off the GIE bit. Turning off this bit tells
PBP an interrupt has happened and it will execute the interrupt handler
forever. Instead set:
PicBasic Pro Compiler
142
INTCON = $80
This disables all the individual interrupts but leaves the Global Interrupt
Enable bit set.
One final note about interrupts in BASIC: If the program uses the form:
loop: Goto loop
and expects to be interrupted, it isnt going to happen. Keep in mind the
interrupt flag is checked after each instruction. There really isnt a place
for the check after a GOTO. It immediately jumps to the loop with no
interrupt check. Some other statement must be placed in the loop for
the 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 was
interrupted, you have no idea of the state of the W register, the STATUS
flags, PCLATH or even what register page you are pointing to. If you
need to alter any of these, and you probably will, you must save the
current values so that you can restore them before allowing the
processor to go back to what it was doing before it was so rudely
interrupted. This is called saving and restoring the processor context.
If the processor context, upon return from the interrupt, is not left exactly
the way you found it, all kinds of subtle bugs and even major system
crashes can and will occur.
This of course means that you cannot even safely use the compilers
internal variables for storing the processor context. You cannot tell
which variables are in use by the library routines at any given time.
You should create variables in the PicBasic Pro program for the express
purpose of saving W, the STATUS register and any other register that
may need to be altered by the interrupt handler. These variables should
not be otherwise used in the BASIC program.
While it seems a simple matter to save W in any RAM register, it is
actually somewhat more complicated. The problem occurs in that you
have no way of knowing what register bank you are pointing to when the
PicBasic Pro Compiler
143
interrupt happens. If you have reserved a location in Bank0 and the
current register pointers are set to Bank1, for example, you could
overwrite an unintended location. Therefore you must reserve a RAM
register 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 RAM
registers starting at $20 and $A0 respectively. To be safe, we need to
reserve the same location in each bank. In this case we will choose the
first location in each bank. A special construct has been added to the
VAR command to allow this:
wsave var byte $20 system
wsave1 var byte $a0 system
This instructs the compiler to place the variable at a particular location in
RAM. In this manner, if the save of W "punches through" to another
bank, it will not corrupt other data.
The interrupt routine should be as short and fast as you can possibly
make it. If it takes too long to execute, the Watchdog Timer could
timeout and really make a mess of things.
The routine should end with an Retfie instruction to return from the
interrupt and allow the processor to pick up where it left off in your
PicBasic Pro program.
The best place to put the assembly language interrupt handler is
probably at the very beginning of your PicBasic Pro program. This
should ensure that it is in the first 2K to minimize boundary issues. A
GOTO needs to be inserted before it to make sure it wont be executed
when the program starts. See the example below for a demonstration of
this.
If the PICmicro has more than 2K of code space, an interrupt stub is
automatically added that saves the W, STATUS and PCLATH registers
into the variables wsave, ssave and psave, before going to your
interrupt handler. Storage for these variables must be allocated in the
BASIC program:
wsave var byte $20 system
wsave1 var byte $a0 system If device has
RAM in bank1
PicBasic Pro Compiler
144
wsave2 var byte $120 system If device has
RAM in bank2
wsave3 var byte $1a0 system If device has
RAM in bank3
ssave var byte bank0 system
psave var byte bank0 system
You must restore these registers at the end of your assembler interrupt
handler. If the PICmicro has 2K or less of code space, the registers are
not saved. Your interrupt handler must save and restore any used
registers.
Finally, you need to tell PBP that you are using an assembly language
interrupt handler and where to find it. This is accomplished with a
DEFINE:
Define INTHAND Label
Label is the beginning of your interrupt routine. PBP will place a jump
to this Label at location 4 in the PICmicro.
' Assembly language interrupt example
led var PORTB.1
wsave var byte $20 system
ssave var byte bank0 system
psave var byte bank0 system
Goto start ' Skip around interrupt handler
Define interrupt handler
define INTHAND myint
Assembly language interrupt handler
asm
; Save W, STATUS and PCLATH registers
myint movwf wsave
swapf STATUS, W
clrf STATUS
movwf ssave
movf PCLATH, W
movwf psave
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 registers
movf psave, W
movwf PCLATH
swapf ssave, W
movwf STATUS
swapf wsave, F
swapf wsave, W
retfie
endasm
PicBasic Pro program starts here
start: Low led Turn LED off
Enable interrupt on PORTB.0
INTCON = %10010000
loop: Goto loop Wait here till interrupted
PicBasic Pro Compiler
146
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 Stamp
compatible. PBP has most of the BASIC Stamp I and II instruction set
and syntax. However there are some significant differences.
The following sections discuss the implementation details of PBP
programs that might present problems. It is hoped that if you do
encounter problems, these discussions will help illuminate the
differences and possible solutions.
10.1. Execution Speed
The largest potential problem is speed. Without the overhead of
reading instructions from the EEPROM, many PBP instructions (such as
GOTO and GOSUB) execute hundreds of times faster than their BASIC
Stamp equivalents. While in many cases this is a benefit, programs
whose timing has been developed empirically may experience
problems.
The solution is simple - good programs don't rely on statement timing
such as FOR..NEXT loops. Whenever possible, a program should use
handshaking and other non-temporal synchronization methods. If
delays 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 PORT
and TRIS registers. While this has speed and RAM/ROM size
advantages, there is one potential drawback.
Some of the I/O commands (e.g. TOGGLE and PULSOUT) perform read-
modify-write operations directly on the PORT register. If two such
operations are performed too close together and the output is driving an
inductive or capacitive load, it is possible the operation will fail.
Suppose, for example, that a speaker is driven though a 10uF cap (just
as with the SOUND command). Also suppose the pin is initially low and
the programmer is attempting to generate a pulse using TOGGLE
PicBasic Pro Compiler
148
statements. The first command reads the pin's low level and outputs its
complement. The output driver (which is now high) begins to charge the
cap. If the second operation is performed too quickly, it still reads the
pin's level as low, even though the output driver is high. As such, the
second operation will also drive the pin high.
In practice, this is not much of a problem. And those commands
designed 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 sleep
mode, execution resumes without disturbing the state of the I/O pins.
For unknown reasons, when the BASIC Stamp resumes execution after
a low power instruction (NAP or SLEEP), the I/O pins are disturbed for
approximately 18 mSec. PBP programs make use of the PIC's I/O
coherency. 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 no
need for the Stamp's PC interface pins (PCO and PCI). The lack of a
PC interface does introduce some differences.
Without the Stamps IDE running on a PC, there is no place to send
debugging information. Debugging can still be accomplished by using
one of the serial output instructions like DEBUG or SEROUT in conjunction
with a terminal program running on the PC such as Hyperterm.
Without the PC to wake the PICmicro from an END or STOP statement, it
remains idle until /MCLR is lowered, an interrupt occurs or power is
cycled.
PicBasic Pro Compiler
149
10.5. No Automatic Variables
The PicBasic Pro Compiler does not automatically create any variables
like B0 or W0. They must be defined using VAR. Two files are
provided: BS1DEFS.BAS and BS2DEFS.BAS that will define the
standard BS1 or BS2 variables. However, it is recommended that you
assign your own variables with meaningful names rather than using
either of these files.
10.6. No Nibble Variable Types
The BS2's nibble variable type is not implemented in the PicBasic Pro
Compiler. As PBP allows many more variables than a BS2, simply
change nibble variable types to bytes.
10.7. Math Operators
Mathematical expressions now have precedence of operation. This
means they are not evaluated in strict left to right order as they are in
the BASIC Stamp and original PicBasic Compiler. This precedence
means that multiplication and division are done before adds and
subtracts, for example.
Parenthesis should be used to group operations into the order in which
they are to be performed. In this manner, there will be no doubt about
the order of the operations.
The following table list the operators in hierarchal order:
Highest Precedence
( )
NOT
~
-
SQR ABS DCD NCD COS SIN
*
PicBasic Pro Compiler
Highest Precedence
150
**
*/
/
//
+
-
<<
>>
MIN
MAX
DIG
REV
&
^
|
&/
/|
^/
&& AND
^^ XOR
|| OR
Lowest Precedence
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 II
syntax.
For example, the BS1 and original PicBasic Compiler SEROUT
instruction 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 should
be changed to include square brackets instead.
10.9. DATA, EEPROM, READ and WRITE
The BASIC Stamp allows EEPROM not used for program storage to
store non-volatile data. Since PBP programs execute directly from the
PICmicro's ROM space, EEPROM storage must be implemented in
some other manner.
The PIC16F84 (the default target for PBP programs), PIC16F83 and
PIC16C84 have 64 bytes of on-chip EEPROM. PBP programs may use
this for EEPROM operations and supports the Stamp's DATA, EEPROM,
READ and WRITE commands.
To access off-chip non-volatile data storage, the I2CREAD and
I2CWRITE instructions have been added. These instructions allow 2-
wire communications with serial EEPROMs like Microchip Technologys
24LC01B.
10.10. DEBUG
DEBUG in PBP is not a special case of SEROUT as it is on the Stamps. It
has its own much shorter routine that works with a fixed pin and baud
rate. It can be used in the same manner to send debugging information
to a terminal program or other serial device.
PicBasic Pro Compiler
152
Question marks (?) in DEBUG statements are ignored. The modifier
ASC? 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 be
nested up to four levels deep.
The PICmicros have Call and Return instructions as well as an eight
level stack. PBP programs make use of these instructions and may use
four levels of this stack, with the other four levels being reserved for
library routines. Thus, W6 is still available, subroutines may still be
nested up to four levels deep and the number of GOSUBs is limited only
by the PICmicro's code space.
10.12. I2CREAD and I2CWRITE
The I2CREAD and I2CWRITE commands differ from the original
PicBasic Compilers I2CIN and I2COUT commands. The most obvious
difference is that the data and clock pin numbers are now specified as
part of the command. They are no longer fixed to specific pins.
The other difference is that the control byte format has changed. You
no longer set the address size as part of the control byte. Instead, the
address size is determined by the type of the address variable. If a
byte-sized variable is used, an 8-bit address is sent. If a word-sized
variable is used, a 16-bit address is sent.
10.13. IF..THEN
The BASIC Stamps and the original PicBasic compiler only allow a label
to be specified after an IF..THEN. PicBasic Pro additionally allows an
IF..THEN..ELSE..ENDIF construct as well as allowing actual code to
be executed as a result of an IF or ELSE.
10.14. MAX and MIN
The MAX and MIN operators function have been altered somewhat from
the way they work on the Stamp and the original PicBasic Compiler.
PicBasic Pro Compiler
153
MAX will return the maximum of two values. MIN will return the minimum
of two values. This corresponds more closely to most other BASICs and
does not have the 0 and 65535 limit problems of the Stamps MIN and
MAX instructions.
In most cases, you need only change MIN to MAX and MAX to MIN in
your Stamp programs for them to work properly with PBP.
10.15. SERIN and SEROUT
SERIN and SEROUT use BS1 syntax. SERIN2 and SEROUT2 use BS2
syntax. A BS2 style timeout has been added to the SERIN command.
SERIN and SEROUT have been altered to run up to 9600 baud from the
BS1 limit of 2400 baud. This has been accomplished by replacing the
little used rate of 600 baud with 9600 baud. Modes of T9600, N9600,
OT9600 and ON9600 may now be used.
600 baud is no longer available and will cause a compilation error if an
attempt is made to use it.
10.16. SLEEP
PBPs SLEEP command is based solely on the Watchdog Timer. It is no
longer calibrated using the system clock oscillator. This change was
necessitated by the effect Watchdog Timer resets have on the
PICmicro.
Whenever the PICmicro was reset during SLEEP calibration, it altered
the states of some of the internal registers. For smaller PICmicros with
few registers, these registers could be saved before and restored after
calibration resets. However, since PBP may be used on many different
PICmicros with many registers that are altered upon reset, this save and
restore proved to be too unwieldy.
Therefore it has been decided to run SLEEP in an uncalibrated mode
based strictly upon the accuracy of the Watchdog Timer. This ensures
the stability of the PICmicro registers and I/O ports. However, since the
Watchdog Timer is driven by an internal R/C oscillator, its period can
vary significantly based on temperature and individual chip variations. If
PicBasic Pro Compiler
154
greater accuracy is needed, PAUSE, which is not a low-power command,
should be used.
PicBasic Pro Compiler
155
Appendix A
Summary of Microchip Assembly Instruction Set
ADDLW k
ADDWF f,d
ANDLW k
ANDWF f,d
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b
CALL k
CLRF f
CLRW
CLRWDT
COMF f,d
DECF f,d
DECFSZ f,d
GOTO k
INCF f,d
INCFSZ f,d
IORLW k
IORWF f,d
MOVF f,d
MOVLWk
MOVWFf
NOP
RETFIE
RETLW k
RETURN
RLF f,d
RRF f,d
SLEEP
SUBLW k
SUBWF f,d
SWAPF f,d
XORLW k
XORWF f,d
b - bit address
d - destination; 0 = w, 1 = f
f - register file address
k - literal constant
PicBasic Pro Compiler
156
PicBasic Pro Compiler
157
Appendix B
Contact Information
Technical support and sales may be reached at:
microEngineering Labs, Inc.
Box 7532
Colorado Springs CO 80933-7532
(719) 520-5323
(719) 520-1867 fax
http://www.melabs.com
email:support@melabs.com
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 fax
http://www.microchip.com
email:literature@microchip.com
READ THE FOLLOWING TERMS AND CONDITIONS CAREFULLY
BEFORE OPENING THIS PACKAGE.
microEngineering Labs, Inc. ("the Company") is willing to license the
enclosed software to the purchaser of the software ("Licensee") only on
the condition that Licensee accepts all of the terms and conditions set
forth below. By opening this sealed package, Licensee is agreeing to
be bound by these terms and conditions.
Disclaimer of Liability
THE COMPANY DISCLAIMS ALL WARRANTIES, EXPRESS OR
IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE AND THE
IMPLIED WARRANTY OF MERCHANTABILITY. IN NO EVENT
SHALL THE COMPANY OR ITS EMPLOYEES, AGENTS, SUPPLIERS
OR CONTRACTORS BE LIABLE FOR ANY INCIDENTAL, INDIRECT,
SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN
CONNECTION WITH LICENSE GRANTED UNDER THIS
AGREEMENT, INCLUDING WITHOUT LIMITATION, LOST PROFITS,
DOWNTIME, GOODWILL, DAMAGE TO OR REPLACEMENT OF
EQUIPMENT OR PROPERTY, OR ANY COSTS FOR RECOVERING,
REPROGRAMMING OR REPRODUCING ANY DATA USED WITH
THE COMPANY'S PRODUCTS.
Software License
In consideration of Licensee's payment of the license fee, which is part
of the price Licensee paid for this product, and Licensee's agreement to
abide by the terms and conditions on this page, the Company grants
Licensee a nonexclusive right to use and display the copy of the
enclosed software on a single computer at a single location. Licensee
owns only the enclosed disk on which the software is recorded or fixed,
and the Company retains all right, title and ownership (including the
copyright) to the software recorded on the original disk copy and all
subsequent copies of the software. Licensee may not network the
software or otherwise use it on more than one computer terminal at the
same time. Copies may only be made for archival or backup purposes.
The enclosed software is licensed only to the Licensee and may not be
transferred to anyone else, nor may copies be given to anyone else.
Any violation of the terms and conditions of this software license shall
result in the immediate termination of the license.

Você também pode gostar