Está en la página 1de 44

E.1.

PIC 18 Simulator IDE


E.1.1. Instalacin y configuracin del software PIC Simulator IDE (PSI)
La instalacin del software es simple, basta hacer doble click en el icono y se
instalar automticamente. Se debe elegir donde va alojarse el software, generando un
icono en el escritorio para fcil acceso. Son incluidas ademas unas guas de usuario en
idioma ingles para comprender de forma fcil la propiedades y bondades que este
software entrega al usuario.
Para configurar el software PIC 18 Simulator IDE, se debe comenzar con el tipo
de microcontrolador que se desea trabajar. Para el proceso de este proyecto de titulo se
elige el microcontrolador PIC 18F4550, el cual se escoge de entre la gama disponible en
la ventana. Ver Figura A.33.

Figura A.33. Eleccin de Microcontrolador 18F4550.


A continuacin se elige el cristal, que genera la base de tiempo para todas las
operaciones, para ello se dirige a Option, luego a Change Clock Frequency y aparece la
siguiente ventana, cambiando manualmente la velocidad del cristal. Ver Figura A.34.

Figura A.34. Eleccin de frecuencia del cristal oscilador.


Si se va recibir datos provenientes de las entradas anlogas, se configura el
dispositivo para que realice la conversin anloga a digital en cierto intervalo de tiempo,
esto se puede modificar en el siguiente parmetro en Options. Ver Figura A.35.

Figura A.35. Eleccin del tiempo de conversin para ADC.


Dependiendo del lenguaje a usar para programar el microcontrolador, en este
caso se utiliza el lenguaje Basic, para ello se elige en la opcin Tools, la ventana para
trabajar en lenguaje Basic. Ver Figura A.36.

Figura A.36. Eleccin de programacin, en lenguaje Basic.


Cuando se realiza la compilacin, el software PSI, compila, genera y guarda
archivos con extensin .bas, .hex, .lst y .asm, y es necesario guardar el programa hecho
en la ventana de programacin en Basic, es por esto, que se debe crear una carpeta
donde se vaya alojar el programa principal y las dems extensiones. Ver Figura A.37.

Figura A.37. Archivos generados al compilar en PSI.

Si se desea ver los pines del microcontrolador y saber que se est manipulando al
programar en Basic, es posible abrir una ventana con la distribucin de los pines y la
interaccin con el simulador incorporado, para ello es necesario ir a la opcin de Tools.
Ver Figura A.38.

Figura A.38. Mostrar distribucin de pines del microcontrolador.

E.1.2. Comandos bsicos


Algunos de los comandos utilizados se muestran a continuacin con algunos
ejemplos de su utilizacin. Ademas para saber como identificar a cada uno de ellos o
cada tipo de estructura escrita en la ventana de programacin de Basic, se muestra una
lista de como son representadas cada uno de ellos con un color especifico de escritura:
Los comandos de configuracin y programacin que son mostrados en la
ventana de programacin Basic se caracterizan por ser presentados de color
azul;
Las variables utilizadas, nombres de subrutinas, numeraciones son
representadas por el color negro;
Los comentarios escritos posterior del la comilla en las lineas de comando
se destacan al ser escritas en la ventana de Basic con el color verde;
Para agregar texto a la linea de programacin se utiliza y a continuacin el
texto que describe lo que se esta haciendo.
Es importante destacar que las variables numricas son escritas en formato
binario, decimal y hexadecimal anteponiendo ciertos comandos:
bXXXXXXXX: Declara un byte en binario;
0xXX: Declara un byte de 00 a FF;
XXX: Declara un valor decimal de 0 a 255, por defecto el programa reconoce
los nmeros decimales.

Los puerto del microcontrolador pueden tener valores lgicos 0 o 1 cuando son
configurados com puerto digital. En la lgica positiva, el estado lgico 0 equivale tener o
reconocer 0 [VDC] en un puerto especfico y el estado lgico 1 equivale a tener o
reconocer 5 [VDC] en un puerto especifico.

E.1.2.1. Declaracin de Variables


Dim {variable} As {tipo de variable}.
Para utilizar este software, es necesario conocer los comandos en lenguaje Basic
con el cual es posible la configuracin y programacin del microcontrolador PIC 18F4550.
A continuacin se presenta una lista de comandos , como se emplean y un ejemplo de su
utilizacin.
En lenguaje Basic tenemos distintos tipos de variables, segn el dato que se
pueda almacenar:
Bit: un bit de longitud, almacena 0 o 1 nicamente;
Byte: un byte de longitud almacena nmeros enteros entre 0 y 255;
Word: dos bytes de longitud, almacena nmeros enteros entre 0 y 65.535;
Long: cuatro bytes de longitud, almacena nmeros enteros entre 0 y
4.294.967.295.
El tipo Long solo est disponible mediante un mdulo opcional al PSI. A diferencia
de otros Basic, la declaracin de variables pueden ser hechas en cualquier parte del
programa, y todas son consideradas globales, es decir, su valor es accesible desde todas
las subrutinas y zonas del programa. El nmero de variables est lgicamente limitado a
la cantidad de memoria RAM disponible en cada microcontrolador.
Ejemplo:
Dim n As Bit
Dim i As Byte
Dim dato As Word
Dim j As Long

se declara la variable n como bit

Tambin es posible utilizar vectores, que son una matriz de dimensiones 1xN,
(Dim i(10) As Byte). Declara un vector, al que refieren en algunos textos como Array, de
diez elementos del tipo Byte, se acceden mediante el uso de subndices, puesto entre
parntesis del 0 al 9.
Ejemplo:
Serout i(4)

se enva el byte ubicado en la posicin 5


del vector

E.1.2.2. Instruccin Reserve


{variable}.HB
{variable}.LB.
Las variables tipo word estn compuestas por dos bytes. El primero de ellos es
llamado byte alto y el otro bajo, dado que el primero contiene 8 bits mas significativos,
podemos acceder individualmente a cada uno de ellos mediante las extensiones .HB
(High Byte o byte alto) y .LB (Low Byte o byte bajo).
Ejemplo:
Dim i As Byte
Dim j As Word
i=j.HB
i=j.LB
j.HB=i
j.LB=i
Los bits individuales de cada variable pueden ser accedido individualmente
tambin simplemente poniendo com extensin .n donde n es el nmero de bits.
Ejemplo:
Dim i As Byte
Dim j as Bit

j=i.1
j=i.7
i.0=i.5

E.1.2.3. Instruccin para registros


TRIS{puerto} = %{valor binario de puerto como E/S}
TRIS{puerto,numero del puerto} = {valor binario del puerto E/S}
PORT{puerto} = b{valor binario de puerto activado o no}
PORT{puerto, numero del puerto = {valor binario del puerto activo o no}
Todos los registros del microcontrolador estn disponibles para ser usados en
programas hechos en Basic, como si se tratase de variables del tipo byte con el nombre
del registro utilizado en el manual del dispositivo (PORTA, TRISA, PORTB, TRISB,
PORTC, TRISC, PORTD, TRISD ,PORTE, TRISE). Se pueden acceder a bits individuales
de los registros.
Ejemplo:
TRISA.1 = 0

se configura el puerto RBA1 como salida

TRISB = 0

se configura todo el puerto B como salida

TRISB=%11100000

se clara cara puerto individual como


salida o entrada

PORTA.1 = 1

en el puerto RA1 est en estado lgico


1

STATUS.RP0 = 1

verifica el estado de los puertos

INTCON.INTF = 0

verifica la interrupcin este en estado


lgico 0

Existe otra forma de acceder a los bits individuales de cada puerto, simplemente
usando la variable Basic tipo byte RA, RB, RC, RD, RE o bien las tipo bits RA0, RA1,...,
RE7.
Ejemplo:
RA = 0XFF

el puerto A est en estado lgico 1

RB = 1

el puerto B est en estado lgico 1

E.1.2.4. Instruccin para punteros


Pointer ({variable})
Es posible utilizar punteros, cualquier variable definida como tipo byte o word
puede ser usada com un puntero de memoria, usndose como argumento de la funcin
Pointer. El valor contenido por la variable debe tener un valor comprendido entre 0 y 511.
Ejemplo:
Dim x As Word
Dim y As Byte
x = 0x3F
y = Pointer (x)
Pointer (x) = y

E.1.2.5. Instruccin para smbolos


Symbol {nombre} = {puerto asignado}
Una forma de escribir programas que resulte mas fcil de entender es el uso de
nombres simblicos, o Symbol. Un Symbol es una cadena que contiene cdigo, asignado
a un nombre. Al momento de compilar, PSI hace la bsqueda y reemplazo del smbolo y
luego genera el cdigo ASM y HEX.
Ejemplo:
Symbol LED1 = PORTB.0

asigna al smbolo LED1 el puerto RB0

PORTB.0 = 1

ponemos en estado 1 al puerto RB0

LED1 = 1

ponemos en estado 1 al puerto RB0

E.1.2.6. Instruccin para constantes


Const {nombre variable} = {valor variable decimal}

Las constantes o valores que son usados para hacer un programa que asignamos
a las variables, pueden ser escritas en decimal, en hexadecimal o en binario, y se pueden
asignar nombres a las constantes, con la instruccin Const.
Ejemplo:
Dim i As Word
Const pi = 314

asignamos el nombre pi al numero 314

i = pi

cargamos el valor de pi en la variable i

Ademas hay tres instrucciones para el manejo individual de bits, si bien no hacen
nada que no se puede resolver con otras instrucciones o smbolos, ayudan al
entendimiento de la lectura del cdigo. Se tratan de High, Low, Toogle, que ponen el bit
en alto, bajo o lo invierte, respectivamente.
Ejemplo:
High PORTB.0

el puerto RB.0 esta en estado lgico 1

Low ADCON.ADON

deja en estado bajo la entrada anloga

Si el bit implicado como argumento de una de estas instrucciones es un bit de un


PORT, el mismo bit en el TRIS correspondiente es puesto en 0, y dicho pin queda
configurado como salida.

E.1.2.7. Instrucciones en ensamblador


Asm: {cdigo en ensamblador}
Lneas de cdigo en lenguaje Ensamblador pueden ser incluidas en cualquier
parte del programa en Basic, comenzando con la instruccin Asm.
Ejemplo:
Asm:

NOP

Asm:

LABEL1: MOVLW 0xFF

E.1.2.8. Operaciones lgicas y matemticas

PIC Simulator IDE, dispone de cinco operaciones matemticas bsicas,


disponibles para las variables tipo Byte y Word. Estas son:
La suma: operador +;
La sustraccin: operador -;
El producto: operador *;
El cociente: operador /;
Y el modulo: operador Mod.
Por supuesto, el compilador es capaz de combinarlas para obtener operaciones
matemticas mas complejas. Adems es posible calcular races cuadradas, aunque el
resultado debe ser entero, con la funcin Sqr.
Ejemplo:
Dim i As Word
i = 3600
i = Sqr (i)
Para la variable tipo bit, existen siete operaciones lgicas disponibles. Solo es
posible efectuar una operacin lgica por instruccin. Estas operaciones tambin estn
disponibles para variables tipo Word o Byte.
Ejemplo:
Dim i As Bit
Dim j As Bit
Dim k As Bit
Dim n As Word
Dim m As Word
k = Not i
k = i Or j
k = i Xor j
k = i Nor j
k = i Nxor j
n = n Or m
PORTB = PORTC And %11110000

E.1.2.9. Instruccin Goto


{nombre de rutina}
{instrucciones}
Goto {nombre de rutina}
Esta instruccin se utilizara para realizar un salto incondicional. Despus de la
instrucciones debe ir el nombre de la subrutina donde se realiza el salto. De esta manera
se puede hacer repetir de forma infinita la rutina Loop.
Ejemplo:
Loop:

se nombra una subrutina con el nombre


de Loop

PORTB.0 = 1

se activa el puerto RB0

WaitMs 100

se espera durante 100 mS

Goto Loop

salta a la subrutina Loop

E.1.2.10. Instruccin For-To-Step-Next


For {variable} = {valor inicial} to {valor final} Step {valor}
{instrucciones}
Next {variable}
Esta instruccin permite repetir un nmero finito de veces una rutina, generar un
vector o matriz, dependiendo del valor de la variable. La instruccin Step, permite
determinar la cantidad de pasos a dar hasta llegar al limite.
Ejemplo:
TRISB = %00000000
Dim i As Byte
Loop:
For i = 1 to 10 Step 2

cuenta desde 1 hasta 10 con un salto de


a 2 nmeros

PORTB.0=1
Next i
End.
En el programa comienza el contador del ciclo For a contar cada 2 numero hasta
llegar a 10, es decir, cuenta: 1, 3, 5, 7, 9. Y termina el ciclo de repeticin de la instruccin
PORTB.0=1 hasta llegar a 10, luego el programa termina con la instruccin End. Ademas
con la instruccin Step se puede ir ascendiendo o descendiendo el contador For.

E.1.2.11. Instruccin While-Wend


While {condicin}
{instrucciones}
Wend
Con esta instruccin es posible condicionar ciertas caractersticas del
microcontrolador, as como condicionar la accin de subrutinas que estn asociadas.
Pueden ser usados mltiples operadores al hacer la comparacin despus de la
instruccin While, con un mximo de ocho comparaciones (1 byte).
Mientras la condicin sea verdadera, el grupo de instrucciones dentro del cuerpo
del While-Wend se ejecuta.
Ejemplo:
Dim i As Byte
TRISB = 0
i = 255
While i > 0

Wend

mientras la variable i sea mayor que cero

i=i-1

sustrae 1 a la variable i

WaitMs 100

espera durante 100 mS


termina instruccin While

E.1.2.12. Instruccin If-Then-Else-Endif

If {variable, puerto} = {valor esperado} Then


{realiza accin}
Else
{realiza accin}
Endif
Con la instruccin If-Then-Else, se condicionan alternativas para acceder a
subrutinas, de acuerdo a la seleccin por medio de If, se logra la accin despus de Then,
teniendo mas opciones alternativas con Else. Pueden ser usados mltiples operadores al
hacer la comparacin despus de la instruccin If, con un mximo de ocho
comparaciones (1 byte).
Ejemplo:
TRISB = 0
Loop:
If PORTA.0=1 Then
PORTB.0=1
Else
PORTB.0=0
Endif
Goto Loop

E.1.2.13. Instruccin Select Case-Case-Case-Endselect


Select Case {variable o condicin}
Case {instrucciones}
EndSelect
Es muy similar al funcionamiento de la instruccin While-Wend.
Ejemplo:
Dim i As Byte
Loop:
Select Case i

Case 255
i=1
Case <= 127
i=i+1
Case Else
i = 255
Endselect
Es posible separar mltiples condiciones con una coma (,), de esta forma agregar
varias opciones a la instruccin Case.

E.1.2.14. Instruccin Gosub


Gosub {nombre subrutina}
Return
Es posible trabajar programando en Basic con PIC Simulator IDE utilizando
subrutinas, siendo estas llamadas por medio de la instruccin Gosub, previamente
declaradas y solo es posible utilizarlas cuando la rutina principal termina con la instruccin
End.
Para retornar a la rutina principal, se utiliza la instruccin Return, colocada en la
linea final de la subrutina, cuando retorna la programa principal lo hace a la linea de
instrucciones siguientes.
Ejemplo:
Symbol ad_accion = ADCON.GO_DONE
Symbol display = PORTB
TRISB = %00000000
TRISA = %111111
ADCON = 0xC0
ADCON1 = 0
High ADCON.ADON
principal:

Gosub resultado
Display = ADRESH
Goto principal
End.
Rresultado:
High ad_accion
While ad_accion
Wend
Return

E.1.2.15. Instruccin Lookup


{nombre variable} Lookup (numeracin de variable), {indice}
La instruccin Lookup puede ser utilizada para seleccionar un byte desde una lista
de constantes del mismo tipo, de acuerdo al valor de un ndice, tambin del tipo byte. El
resultado de la seleccin se almacena tambin en una variable tipo byte.
Ejemplo:
Dim indice As Byte
Dim variable As Byte
indice = 3
Variable = Lookup (25,35,100), indice

E.1.2.16. Instruccin Define


Define {instruccin o comando}
Con esta instruccin se definen los parmetros para configurar el
microcontrolador y las distintas propiedades y aplicaciones que puede hacer, como la
conversin anloga digital, frecuencia del reloj del microcontrolador, puerto USB, puerto
serie, uso de pantalla LCD.
Ejemplo:

Define Clock_frequency = 20

configura el reloj del microcontrolador a


20MHz

E.1.2.17. Instruccin Config


Config {instruccin de configuracin}
Con esta instruccin es posible configurar los puerto del microcontrolador, es una
alternativa al uso de las instrucciones TRIS y PORT.
Ejemplo:
Config PORTB = output
Config RA0 = output
Config PORTC.3 = input
Config RD = input

E.1.2.18. Instruccin WaitMs y WaitUs


WaitMs {variable o valor decimal}
WaitUs {variable o valor decimal}
Las instrucciones WaitMs y WaitUs son utilizadas para generar un retardo de
tiempo especifico medidos en milisegundos y microsegundos, respectivamente. Es
posible usar una variable del tipo byte o word. Esta instruccin utiliza la frecuencia de reloj
como parmetro de medida, por tanto debe de coincidir la velocidad de reloj en la
configuracin con el cristal puesto en el circuito elctrico.
Ejemplo:
Dim i As Word

se declara una variable del tipo Word

i = 100

se carga el valor 100 en la variable i

WaitMs x

se genera un retardo de 100 [mS]

WaitUs 50

se genera un retardo de 50 [uS]

E.1.2.19. Instrucciones Shiftleft y Shiftright

Shiftleft {puerto, grado de desplazamiento}


Shiftright {puerto, grado de desplazamiento}
Shiftleft y Shiftright son funciones a nivel bit que pueden ser utilizadas para
desplazar el contenido de una variable a la izquierda o a la derecha. Cada uno de los bits
que componen la variable se desplaza una posicin, a la izquierda o a la derecha, de
acuerdo a que funciones se utilice. Esto tiene dos consecuencias. En primer lugar, el bit
de mas a la izquierda o derecha se pierde. Y el espacio creado en el otro extremo se
completa con un 0.
Ejemplo:
TRISB = 0x00
PORTB = %00000001
a_izq:
WaitMs 250
PORTB = Shiftleft (PORTB, 1)
If PORTB.7 Then Goto a_der
Goto a_izq
a_der:
WaitMs 250
PORTB = Shiftright (PORTB, 1)
If PORTB.0 Then Goto a_izq
Goto a_der

E.1.2.20. Instruccin Count


Count {puerto, tiempo, variable}
Si es necesario contar un cierto numero de pulsos que viene hacia algn pin del
microcontrolador durante un cierto periodo de tiempo, se utiliza la instruccin Count.
Posee tres argumentos:

puerto: se declara el pin conectado a la fuente de pulsos, debe ser declarado


con un puerto digital;
tiempo: tiempo de observacin expresado en milisegundos entre 1 y 10000;
variable: donde es almacenado el numero de pulso contados despus de ser
ejecutada la instruccin.
La instruccin Count usa el modulo interno Timer0.
El parmetro Count_mode esta disponible cuando se usa con la instruccin
Define. Si se iguala al valor 1 (por defecto), la instruccin Count cuenta el numero de
flancos de subida. Si Count_mode es igual 2, cuenta el numero de flanco de bajada.
Ejemplo:
Define Count_mode = 1
Dim num_de_pulsos As Word
Count PORTB.0, 1000, num_de_pulsos

E.1.2.21. Instruccin EEPROM


Eeprom {direccin de la memoria, dato}
Si se desea utilizar memorias EEPROM para almacenar informacin obtenida por
el microcontrolador y que no es posible almacenarlas en l, con esta instruccin es
posible seleccionar la memoria y almacenar la informacin que se desee.
El primero argumento indica la direccin del primer byte en la lista de datos, el
segundo argumento es el dato a ingresar. Escribiendo repetidamente este par de
argumentos, se pude llenar las diferentes reas de la memoria.
Ejemplo:
Eeprom 0, 0x55
Eeprom 253, 0x01, 0x02, 0x03

E.1.2.22. Instruccin Procedure


Proc {argumento1, ..., argumento5}
End Proc
Con la instruccin Procedure se pueden declarar hasta cinco procedimientos,
separados con una coma. Funcionan de manera local tanto los argumentos como las
variables declaradas, de esta forma no es necesario declararlas al principio del programa
principal y es fcil de reutilizar. Se puede volver a llamar a la instruccin Procedure con la
instruccin Call.
Ejemplo:
Dim i As Byte
TRISB = 0
For i = 0 to 255
Call puertob_display (x)
WaitMs 100
Next i
End.
Proc puertob_display (arg1 As Byte)
PORTB = arg1
End Proc

E.1.2.23. Instruccin Function


Function {argumento1, ..., argumento5}
End Function
Para poder realizar operaciones especificas, se utiliza la instruccin Function, los
argumentos son declarados globalmente, hasta un mximo de cinco.
Se termina la instruccin Function utilizando la instruccin End Function.
Ejemplo:
Dim i As Byte

Dim j As Word
For i = 0 to 255
j = square (x)
Next i
End
Function square (arg1 As Word) As Word
square = arg1 * arg1
End Function

E.1.2.24. Instruccin Include


Include {nombre de archivo .BAS}
Un archivo externo de Basic puede ser incluido en el programa usando la
instruccin Include, donde el argumento es una cadena que contiene la direccin donde
est ubicado el archivo externo con extensin .BAS, Siempre y cuando el archivo est
dentro de la misma carpeta donde se genere el programa en PSI. El contenido de las
variables y las declaraciones son del tipo global.
Ejemplo:
Programa principal en PSI:
Dim i As Word
Dim j As Word
Include inc1.bas
Include inc2.bas
For i = 1 to 10
j = func1 (i, 100)
Call proc1 (j)
Next i
End

Programa contenido en inc1.bas:


Dim total As Word

Proc proc1 (i As Word)


Total = total + i
End Proc
Programa contenido en inc2.bas:
Function func1 (i As Word, j As Word) As Word
Func1 = i + j
End Function

E.1.2.25. Instrucciones Read, Write


Read {direccin del dato en la memoria, dato}
Write {direccin del dato en la memoria, dato}
Para tener acceso a los datos de una memoria EEPROM es posible leer y escribir
en ella con las instrucciones Read y Write. El primer argumento para ambas instrucciones
indica la direccin en un byte de la memoria EEPROM, puede ser una constante o un byte
variable. El segundo argumento es el dato que ser escrito o ledo en la memoria
EEPROM, para leer la variable tiene que ser un byte. Se sugiere que las interrupciones
estn deshabitadas cuando se utilice durante la ejecucin de la instruccin Write o
escribir.
Ejemplo:
Dim i As Byte
Dim j As Byte
i = 10
Read i, j

` el dato contenido en la variable j es


almacenado en la direccin de memoria i

Write 11, j

` e n l a d i r e c c i n d e m e m o r i a 11 , s e
almacena el dato j

E.1.2.26. Instruccin ADC


Define ADC_Clock = {fuente de reloj}

Define ADC_Sampleus = {tiempo en milisegundos}


ADCIN {canal ADC, variable}
Para adquirir datos por medio de las entradas anlogas, o utilizar la conversin
anloga a digital que el microcontrolador posee, se utiliza la instruccin ADCIN la cual
posee dos argumentos. El primero de ellos indica la entrada anloga a utilizar,
dependiendo del microcontrolador. El segundo argumento indica donde va a almacenarse
el dato convertido, puede ser un byte, word, o una cadena o string.
Con la instruccin ADC_Clock, se elige el reloj a utilizar en la conversin, esto
depende del tipo de microcontrolador y el reloj que se este usando para generar la base
de tiempo.
Con la instruccin ADC_Sampleus, se elige el parmetro para hacer la
adquisicin de datos, es decir, el tiempo en microsegundos entre una muestra tomada y la
siguiente, entre 0 y 255.
La instruccin ADCIN, estar sujeta como es declarado el pin en el
microcontrolador, siendo que este pin debe de estar configurado con una entrada
anloga, con los registros TRIS, ADCON1.
Ejemplo:
Dim i(5) As Byte

declara un vector i

Dim im As Word
Dim j As Byte
Define ADC_Clock = 3
Define ADC_Sampleus = 50

muestreo cada 50 uS

TRISA = 0xff

puerto A como entrada

TRISB = 0

puerto B como salida

ADCON1 = 0

configura puerto RA0 como anlogo

For j = 1 to 4
Adcin 0, i (j)
Next j
im = 0
For j = 0 to 4

guarda 4 datos en el vector i

im = im + v(j)
Next j
im = im / 5
PORTB = im.LB

saca por el puerto B, la parte baja de im

E.1.2.27. Instrucciones de interrupcin


On Low Interrupt
{instrucciones}
Resume
On High Interrupt
{instrucciones}
Resume
Las instrucciones de interrupcin tiene alta y baja prioridad y estas pueden ser
activadas o desactivadas con la respectiva instruccin y terminar las sentencias con la
instruccin Resume. Si operaciones aritmticas, vectores y cualquier otro complejo son
usadas con las instrucciones de interrupcin, es necesario incluir la instruccin Save
System a la derecha, despus de On Low/High Interrupt haya sido cargado en el registro
de sistema.
Las instrucciones Enable Low, Enable High, Disable Low y Disable High pueden
ser usadas ene l programa principal para controlar los bits de los registros INTCON, GIEH
y GIEL.
Ejemplo:
Dim i As Byte
i = 255
TRISA = 0
PORTA = i
INTCON.INT0IE = 1
Enable High
End
On High Interrupt

i=i-1
PORTA = i
INTCON.INT0IF = 0
Resume

E.1.2.28. Instrucciones comunicacin serie UART.


Hserpen {velocidad en baudios}
Hserout {variable, ..., variable}
Hserin {variable, ..., variable}
Hserget {variable}
Con las instrucciones es posible comunicarse de manera serie con otros
dispositivos que soporten comunicacin serie UART
Las velocidades permitidas en la instruccin Hseropen son de: 300, 600, 1200,
2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 56000 y 57600 baudios. Por
omisin transmite a una velocidad de 9600 baudios.
La instruccin Hserout puede contener mltiples argumentos separados con una
coma (,). Tambin es posible usar variables de tipo vector. Cuando es usado el smbolo
# antes del nombre de una variable, el contenido es considerado un valor decimal para
ser enviado por el puerto serie. Si son utilizadas las comillas , es `posible enviar datos
en cdigo ASCII por el puerto serie. CrLf, retorna el carro
La instruccin Hserin puede ser usada para cargara una lista de variable de los
tipos

byte o word provenientes del puerto serie. Esta instruccin espera hasta que el

requerido numero de bytes o word hayan sido recibido por el puerto serie.
La instruccin Hserget posee un argumento que puede ser una variable del tipo
byte, y su caracterstica es esperar en el buffer de recepcin si se est cargando una
variable, en otro caso el valor cero 0, es cargado.
Ejemplos:
Uno:

Dim i As Byte
Hseropen 38400

asigna la veloc. de 38400baud

WaitMs 1000
For i = 20 to 0 Step -1

decrementa de 20 a 0

Hserout Number: , #i, CrLf


WaitMs 500
Next i
Dos:
Dim i As Byte
Hseropen 19200
Loop:
Hserin i
Hserout Number: , #i, CrLf
Goto loop
Tres:
Dim i As Byte
Hseropen 19200
Loop:
Hserget i
If i > 0 Then
Hserout Number: , #i, CrLf
WaitMs 50
Endif
Goto loop

E.1.2.29. Instruccin serie UART simple


SEROUT_DELAYUS = {}
Serout {puerto especifico, velocidad baudios, variable o ASCII}
Serin {puerto especifico, velocidad baudios, variable o ASCII}
SeroutInv {puerto especifico, velocidad baudios, variable o ASCII}
SerinInv {puerto especifico, velocidad baudios, variable o ASCII}

Estas instrucciones puede utilizar cualquier pin del microcontrolador, ya que estn
diseadas para no tener la limitacin de la comunicacin de los pines diseados para ese
propsito en el microcontrolador RX y TX respectivamente.
Para la instruccin Serin, el primer argumento indica el puerto especifico que va a
ser usado para la transmisin serial asincrnica. El segundo argumento indica la
velocidad de transmisin o recepcin que tiene los valores: 300, 600, 1200, 2400, 4800,
9600 o 19200. El usar una velocidad de transmisin alta y una frecuencia de reloj baja
puede causar errores de cuadro. Posterior a esto, es posible enviar varios argumentos ya
sean variable, ASCII, numero.
Para la instruccin Serout, es similar los argumentos a la instruccin anterior,
primero se selecciona el puerto de comunicacin, luego la velocidad en baudios permitida
y los argumentos referente a informacin que van a ser transmitida. Ademas es posible
agregar las instrucciones de CrLF, de retorno de carro. Si es usado el smbolo # antes
de l nombre de una variable, representa a que ser transmitida un dato decimal por el
puerto serie.
Las instrucciones SerinInv y SeroutInv, se puede invertir los niveles lgicos
cuando son usado interfaces que trabajan de esta manera.
Ejemplos:
Uno:
Define SEROUT_DELAYUS = 5000
Serout PORTC.6, 1200, Hola Mundo, CrLf
Dos:
Dim i As Byte
loop:
Serin PORTC.7, 9600, i
Serout PORTC.6, 9600, Numero: , #i, CrLf
Goto loop

E.1.2.30. Instrucciones para LCD


Lcdinit {instruccin}
Lcdcmdout {instrucciones}
Lcdout {instrucciones}
El microcontrolador PIC18F4550 puede manipular una interface alfanumrica tipo
LCD, con la cual se pueden desplegar informacin son necesidad de estar conectado a
un computador. Para ello PIC Simulator IDE, ha desarrollado instrucciones para configurar
los parmetros del microcontrolador para ser usado de este modo, as tambin
instrucciones para utilizar un display LCD, especficamente los LCD basados en el chip
controlador HD44780 de Hitachi o compatible.
Primero se tiene que configurar la interface LCD a usar,para ellos se explica cada
uno las instrucciones que son usadas para la configuracin:
LCD_BITS: define el numero de lineas de la interface, siendo de 4 y 8 bits, por
defecto est configurada en 4 bits;
LCD_DREG: define el puerto al cual ser conectado las lineas de datos, por
defecto es asignado el puerto B o PORTB;
LCD_DBIT: define la posicin donde comienza la interface en el puerto
asignado, pudiendo ser 0 (para 8 bits) o 4 (para 4 bits);
LCD_RSREG: define el puerto por el cual ser conectada la linea RS;
LCD_RSBIT: define el pin del puerto al cual se conectara la linea RS;
LCD_EREG: define el puerto por el cual ser conectada la linea E;
LCD_EBIT: define el pin del puerto al cual se conectar la linea E;
LCD_RWREG: define el puerto por el cual ser conectada la linea R/W;
LCD_RWBIT: define el pin del puerto al cual se conectar la linea RW;
LCD_COMMANDUS: define el retardo despus de la instruccin
LCDCMDOUT en microsegundos, por defecto tiene el valor de 5000;
LCD_DATAUS: define el retardo despus de la instruccin LCDOUT en
microsegundos, por defecto tiene el valor de 100;
LCD_INIMS: define el retardo despus de la instruccin LCDINIT en
milisegundos, por defecto tiene el valor de 100.

La instruccin Lcdinit debe ser puesta antes de cualquier instruccin Lcdout


(usado para enviar datos) y Lcdcmdout (usado para enviar comandos) para poder habilitar
el uso de las instrucciones para manipular un LCD. Constantes numrica son usadas
como argumentos para esta instruccin:
0: sin cursor;
1: parpadeo de cursor;
2: linea inferior;
3: parpadeo y linea inferior.
Las instrucciones Lcdout y Lcdcmdout pueden contener mltiples argumentos
separados por una coma (,). Vectores, constantes y variables pueden ser usadas como
argumento en la instruccin Lcdout. Si es usado el smbolo # , antes de cualquier
nombre de una variable es una representacin decimal que es enviada al modulo LCD.
Constantes y variables pueden ser usadas como argumento con la instruccin
Lcdmcdout, adems es posible agregar instrucciones como:
LcdClear: borra modulo LCD;
LcdHome: se ubica al inicio de la primera linea del modulo LCD;
LcdLine2Home: se ubica al inicio de la segunda linea del modulo LCD;
LcdDisplayOn: activa el cursor;
LcdDisplayOff: desactiva el cursor;
LcdCurOff: apaga el cursor;
LcdCurBlink: hace que el cursor parpadee;
LcdCurUnderline: ubica al cursor en la linea mas baja;
LcdLeft: escribe el texto a la izquierda del modulo LCD;
LcdRight: escribe el texto a la derecha del modulo LCD;
LcdShiftLeft: desplaza el texto hacia la izquierda;
LcdShiftRight: desplaza el texto hacia la derecha;
LcdLine1Clear: borra el contenido de la primera linea del modulo LCD;
LcdLine2Clear: borra el contenido del la segunda linea del modulo LCD;
LcdLine1Pos(): ubica el texto en la posicin puesta entre los parntesis de la
primera linea del modulo LCD;
LcdLine2Pos(): ubica el texto en la posicin puesta entre los parntesis de la
segunda linea del modulo LCD.

Ejemplos:
Uno:
Define LCD_BITS = 8

los datos son de 8 bits

Define LCD_DREG = PORTB

uso el puerto B para datos

DefineLCD_DBIT = 0

comienzo desde RB0

Define LCD_RSREG = PORTD

RS por puerto D

Define LCD_RSBIT = 1

uso el puerto RD1

Define LCD_EREG = PORTD

E por puerto D

Define LCD_EBIT = 3

uso el puerto RD3

Define LCD_RWREG = PORTD

RW por puerto D

Define LCD_RWBIT = 2

uso el puerto RD2

Lcdinit LcdCurBlink

inicio uso de LCD con el cursor


parpadeando

loop:
Lcdout Hola Mundo

escribo hola mundo en modulo

WaitMs 1000
Lcdcmdout LcdCealr
Goto loop
Dos:
Define LCD_BITS = 8
Define LCD_DREG = PORTB
Define LCD_DBIT = 0
Define LCD_RSREG = PORTD
Define LCD_RSBIT = 1
Define LCD_EREG = PORTD
Define LCD_EBIT = 3
Define LCD_RWREG = PORTD
Define LCD_RWBIT = 2
Dim i As Word
i = 65535
Lcdinit 3
WaitMs 1000
loop:
Lcdout Estoy contando

envo la instruccin para borrar


contenido de la pantalla LCD

Lcdcmdout LcdLine2Home
Lcdout #i
i=i-1
WaitMs 250
Lcdcmdout LcdClear
Goto loop

E.1.2.31. Instrucciones para I2C


I2CWrite {puerto SDA, puerto SCL, direccin dispositivo, direccin dato,
dato}
I2CRead {puerto SDA, puerto SCL, direccin dispositivo, direccin dato,
dato}
La comunicacin I2C puede se implementada en Basic, usando las instrucciones
I2CWrite y I2CRead. El primer argumento para ambas instrucciones indica cual es pin del
microcontrolador que es usado para conectar la linea SDA hacia un dispositivo externo
I2C. El segundo argumento para ambas instrucciones

indica cual es el pin del

microcontrolador que es usado para conectar a linea SCL hacia un dispositivo externo I2C.
El tercer argumento para ambas instrucciones puede ser una constante o una variable
del tipo byte llamada direccin de esclavo o Slave, este formado descrito en el Datasheet
del fabricante del dispositivo I2C. El cuarto argumento para ambas instrucciones puede
ser una variable del tipo byte o word, dependiendo del dispositivo a usar, la cual contiene
la direccin de la locacin a la cual se va a acceder. si es usada una constante para el
parmetro de la direccin debe ser del tipo byte. el quinto y ultimo argumento para la
instruccin I2CWrite puede ser una constante del tipo byte o una variable donde va a ser
escrita la direccin especifica. y para la instruccin I2CRead debe ser una variable del tipo
byte para almacenar el valor que es ledo desde la direccin especifica.
Para algunos dispositivos esclavos I2C, es necesario agregar algn tipo de retardo
para asegurarse que le dispositivo este listo para responder a la instruccin I2CRead.
Ejemplo:

Dim dir As Word


Dim dato As Byte
Dim dato1 As Byte
Symbol sda = PORTC.2
Symbol scl = PORTC.3
WaitMS 1000
I2CWrite sda, scl, 0xa0, dir, dato
WaitMs 50
I2CRead sda, scl, 0xa0, dir, dato1
WaitMs 50
End
Si se desea trabajar en bajo nivel con I2C, de esta manera se tiene mas control
sobre el proceso de comunicacin con I2C. la instruccin I2CPrepare posee dos
argumentos que pueden ser usados para controlar los pines del microcontrolador. El
primer argumento define la linea SDA y el segundo argumento define la linea SCL. estas
instrucciones preparan la comunicacin por I2C.
La instruccin I2CStart genera la condicin de inicio, y la instruccin I2C Stop
genera la condicin de detencin de la comunicacin.
Para enviar un byte se usa la instruccin I2CSend. Despus que esta instruccin
ha sido ejecutada, el bit C en el registro de estado mantiene una copia del estado en la
linea SDA durante el ciclo de reconocimiento.
Para recibir

un byte del puerto I2C de un esclavo, se puede ocupar dos

instrucciones I2CReca o I2CReceiveack pueden generar la seal de conocimiento


durante el ciclo de conocimiento despus que el byte haya sido recibido. I2CRecn o
I2CReceivernack puede generar la seal de no conocimiento durante el ciclo de
conocimiento despus que el byte haya sido recibido.
Ejemplo:
Dim dir As Word
Dim dato(31) As Byte
Symbol sda = PORTC.2

Symbol scl = PORTC.3


dir = 0
I2CPrepare sda, scl
I2CStart
I2CSend 0xa0
I2CSend dir.HB
I2CSend dir.LB
I2CStop
I2CStart
I2CSend 0xa1
For dir = 0 to 30
I2CReceiveAck dato(dir)
Next dir
I2CRecN dato(31)
I2CStop

E.1.2.32. Instrucciones para interface de dispositivos seriales o SPI


A priori para usar las instrucciones SSPI, la interface SPI debe estar lista al ser
definida las directivas correspondientes:
SPI_SCK_REG: define el puerto por el cual es conectada la linea SCK;
SPI_SCK_BIT: define el pin donde se conecta la linea SCK;
SPI_SDI_REG: define el puerto por el cual es conectada la lineaSDI;
SPI_SDI_BIT: define el pin donde se conecta la linea SDI;
SPI_SDO_REG: define el puerto por el cual es conectada la linea SDO;
SPI_SDO_BIT: define el pin donde se conecta la linea SDO;
SPI_CS_REG: define el puerto por el cual es conectada la linea CS;
SPI_CS_BIT: define el pin donde se conecta la linea CS.
Para asumir que la configuracin esta activo-alto para la linea de Clock y activobajo para la linea de ChipSelect. estas pueden cambiar por la asignacin del valor 1 en
los parmetros SPICLOCK_INVERT y/o SPICS_INVERT en la directivas Define. para
dispositivos SPI lentos, es necesario usar pulsos de reloj muy largos.

La instruccin SPIPrepare, solo prepara las lineas de la interface de comunicacin


SPI.
Las instrucciones SPICSON y SPICSOFF son usadas para activar o desactivar la
linea de ChipSelect de la interface.
Para recibir un byte desde un perifrico debe ser usada la instruccin
SPISENDBITS. si el primer argumento indica el nmero de bits que sern enviados (1-8) y
el segundo argumento puede ser una constante o variable del tipo byte.
Ejemplo:
Define SPI_CS_REG = PORTC
Define SPI_CS_BIT = 0
Define SPI_SCK_REG = PORTC
Define SPI_SCK_BIT = 3
Define SPI_SDI_REG = PORTC
Define SPI_SDI_BIT = 4
Define SPI_SDO_REG = PORTC
Define SPI_SDO_BIT = 5
SPIPrepare
Define LCD_BITS = 8
Define LCD_DREG = PORTD
Define LCD_DBIT = 0
Define LCD_RSREG = PORTE
Define LCD_RSBIT = 0
Define LCD_RWREG = PORTE
Define LCD_RWBIT = 1
Define LCD_EREG = PORTE
Define LCD_EBIT = 2
Define LCD_READ_BUSY_FLAG = 1
Lcdinit
Dim dir As Byte
Dim dato As Byte
For dir = 0 to 10
dato = 200 - dir

SPICSSOn
SPISend 0x06
SPICSOff
SPICSOn
SPISend 0x02
SPISend dir
SPISend dato
SPICSOff
Lcdout escribir en EEPROM
Lcdcmdout LcdLine2Home
Lcdout ( , #dir, ) = , #dato
WaitMs 500
Next dir
For dir = 0 to 10
SPICSOn 0x03
SPISend dir
SPIReceive dato
SPICSOff
Lcdcmdout lcdClear
Lcdout Leyendo desde EEPROM
Lcdcmdout LcdLine2Home
Lcdout ( , #dir, ) = , #dato
WaitMs 500
Next dir

E.1.2.33. Instrucciones para modulo PWM


PWMon {numero del modulo, modo}
PWMdutty {numero de modulo, ciclo til}
El mdulo interno PWM (modos de PWM en mdulos CCP) son activados para
usar el argumento PWMon. Esta instruccin posee dos argumentos. El primero indica el
nmero del mdulo, debe ser una constante entre 1 y 5. El segundo argumento es usado
para asignar la seleccin del modo. El mdulo interno PWM puede ser usado en tres

diferentes salidas de frecuencias por cada cuatro ciclos tiles de resolucin (10, 9, 8 y 7
bits).
Los modos son:
mode 1: 10 bits, 244Hz;
mode 2: 10 bit, 977 Hz;
mode 3: 10 bit, 3906Hz;
mode 4: 9 bit, 488Hz;
mode 5: 9 bit, 1953Hz;
mode 6: 9 bit, 7813Hz;
mode 7: 8 bit, 977Hz;
mode 8: 8 bit, 3906Hz;
mode 9: 8 bit, 15625Hz;
mode 10: 7 bit, 1953Hz;
mode 11: 7 bit, 7813Hz;
mode 12: 7 bit, 31250Hz.
El modulo PWM se inicia comenzando con 0 ciclo til, adems la salida puede
mantener en estado bajo hasta que el ciclo til sea cargado. El modulo PWM puede ser
apagado con la instruccin PWMOff.
El ciclo til de la seal de PWM puede ser cargada con la instruccin PWMDuty.
El primer argumento indica el nmero del mdulo. El segundo argumento es el ciclo til, y
es una constante entre el rango 0 a 1023 o una variable tipo byte o word.

Ejemplo:
Dim util As Byte
PWMon 1, 9
loop:
Adcin 0, util
PWMduty 1, util
Goto loop

E.1.2.34. Instrucciones para servo


Servoin {}
para escribir programas de aplicaciones que utilicen servos, existen dos
instrucciones disponibles. Servoin y Servoput con las cuales se puede manipular un tren
de pulsos, entre 15 y 20 pulsos por segundo. La longitud valida para el pulso esta en el
rango de 1 a 2 milisegundos. Estas dos instrucciones poseen dos argumentos. El primero
argumentos para ambas instrucciones asigna el pin por el cual va a ser transmitida o
recibida la seal de control del servo. Para la instruccin Servoin, el pin debe ser
configurado previamente como una entrada y para la instruccin Servoout, el pin debe ser
configurado como una salida. El segundo argumento para la instruccin Servoin debe ser
una variable del tipo byte, en el cual el largo del pulso es almacenado. Los pulsos estn
medidos en unidades de 10 microsegundos, as que es posible medir pulsos en el rango
de 0,01 y 2,55 milisegundos. El segundo argumento para la instruccin Servoout es una
constante o variable del tipo byte que determina el largo del pulso generado.
Ejemplo:
Dim largo As Byte
TRISB.0 = 1
TRISB.1 = 0
Loop:
ServoIn PORTB.0, largo
If largo < 100 Then largo = 100
If largo > 200 Then largo = 200
largo = largo - 100
largo = largo - 100
largo = largo + 100
ServoOut PORTB.1, largo
Goto Loop

E.1.2.35. Instrucciones para motores paso a paso

StepCW {nmero de pasos, retardo entre pasos}


StepCCW {nmero de pasos, retardo entre pasos}
Para manipular un motor paso a paso es necesario declarar ciertas directivas con
la instruccin Define. A continuacin los parmetros de configuracin:
STEP_A_REG: define el puerto donde ser conectado la bobina A;
STEP_A_BIT: define el pin donde ser conectada la bobina A;
STEP_B_REG: define el puerto donde ser conectada la bobina B;
STEP_B_BIT: define el pin donde ser conectada la bobina B;
STEP_C_REG: define el puerto donde ser conectada la bobina C;
STEP_C_BIT: define el pin donde ser conectada la bobina C;
STEP_D_REG: define el puerto donde ser conectada la bobina D;
STEP_D_BIT: define el pin donde ser conectada la bobina D.
Con la instruccin STEP_MODE es usada para definir el modo de manipulacin.
Si tiene el valor 1, el motor se manipula en paso completo, si tiene el valor 2, trabaja a
medio-paso.
La instruccin Stephold configura los pines usados como salida y alimenta las
bobinas A y B para situarlas en la posicin inicial.
Las instrucciones StepCW, hace girar el motor en sentido horario, mientras que la
instruccin StepCCW, hace girar el motor en sentido antihorario.
El primer argumento para StepCW y StepCCW indica el numero de pasos del
rotor, puede ser una constante o una variable del tipo byte. El segundo argumento define
el retardo entre los pasos, expresado en microsegundos en una constante o variable del
tipo byte o word.
Ejemplo:
Uno:
ADCON1 = 0x0e
Define STEP_A_REG = PORTB
Define STEP_A_BIT = 7
Define STEP_B_REG = PORTB
Define STEP_B_BIT = 6

Define STEP_C_REG = PORTB


Define STEP_C_BIT = 5
Define STEP_D_REG = PORTB
Define STEP_D_BIT = 4
Define STEP_MODE = 2
WaitMs 1000
StepHold
WaitMs 1000
Dim an0 As word
Loop:
Adcin 0, an0
an0 = an0 * 60
ano = an0 + 2000
StepCW 1, an0
Goto Loop
Dos:
Define STEP_A_REG = PORTB
Define STEP_A_BIT = 7
Define STEP_B_REG = PORTB
Define STEP_B_BIT = 6
Define STEP_C_REG = PORTB
Define STEP_C_BIT = 5
Define STEP_D_REG = PORTB
Define STEP_D_BIT = 4
Define STEP_MODE = 2
WaitMs 300
StepHold
WaitUs 1000
Loop:
StepCCW 16, 300
WaitUs 1000
StepCW 24, 300
WaitUs 1000
Goto Loop

E.1.2.36. Instrucciones para dispositivos 1-Wire


1wireSendBit {argumentos}
1wireGetBit {argumentos}
1wireSendByte {argumentos}
1wireGetByte {argumentos}
DS18s20ReadT {variable, variable}
Para utilizar dispositivos 1-Wire, es necesario definir ciertos parmetros dentro del
microcontrolador, los cuales son:
1WIRE_REG: define el puerto a usar con un dispositivos 1-Wire;
1WIRE_BIT: define el pin a usar con un dispositivo 1-Wire .
Para iniciar la secuencia se debe usar la instruccin 1wireInit. Ademas se tiene
como opcin agregar un argumento donde se asigna a una variable del tipo byte, la cual
puede ser puesta a 0, si la presencia del dispositivo ha sido detectada o puesta a 1, si no
hay dispositivos en la linea 1-Wire.
Pueden ser enviados y recibidos bits de forma independiente usando las
instrucciones 1wireSendBit y 1wireGetBit. Ambas instrucciones pueden manipular varios
argumentos separados por una coma (,), de esta manera se puede listar variables o
constantes del tipo bit.
Para enviar y recibir bytes de dispositivos 1-Wire, se utilizan las instrucciones
1wireSendByte y 1wireGetByte. Ambas instrucciones pueden manipular varios
argumentos separados por una coma (,), de esta manera se puede listar variables o
constantes del tipo byte.
Ejemplo:
Dim final As Bit
Dim temp As Byte
Dim signo As Byte
1wireInit

1wireSendByte 0xcc, 0x44


WaitMs 1
Loop:
1wireGetBit final
If final = 0 Then Goto Loop
1wireInit
1wireSendByte 0xcc,0xbe
1wireGetByte temp, signo
Ademas se posee dos instrucciones, las cuales trabajan de forma inmediata con
el sensor de temperatura DS18S20. Usando la instruccin DS18s20Start, se inicia el
dispositivo 1-Wire, para comenzar la conversin de temperatura en dato. De acuerdo con
el datasheet del dispositivo, la conversin es completada al pasar unos 750 [mS].
Despus del periodo de medicin puede ser ledo el dispositivo con la instruccin
DS18s20ReadT, el cual enva dos argumentos del tipo byte. El primero de ellos contiene
el valor de la temperatura en unidades de 0,5 grados centgrados por unidad (por ejemplo,
para un valor igual a 100, representa la temperatura de 50 grados). El segundo
argumento contiene el valor 0x00 para temperaturas positivas y 0xff para temperaturas
negativas.
Ejemplo:
Dim temp As Byte
Dim signo As Byte
DS18s20Start
WaitMs 1000
DS18s20readT temp,signo

E.1.2.37. Instrucciones para comunicacin va USB


Para soportar aplicaciones basadas en la comunicacin USB, es necesario
agregar un add-on de soporte para USB que posee el programa PIC 18 Simulator IDE,
este puede ser usado para desarrollar aplicaciones de USB de alta velocidad, de acuerdo
al Firmware, es posible utilizarlo con dispositivos USB del tipo HID.

El add-on que soporta USB, consiste en comandos USB para la serie de PIC 18F,
que son compiladas por el PIC18 y los controles HidTermin de ActiveX para desarrollar
aplicaciones de comunicacin con un PC. Estos parmetros son validos para los modelos
18F de Microchip: 18F2455, 18F2550, 18F4450 y 18F4550.
El intercambio de datos es implementado para el dispositivo USB, con reportes de
datos de entrada y salida de 8 bytes. Con el control HidTerm pueden ser activadas las
aplicaciones para PC sobre los reportes de Send Features y Request Features, para
enviar y recibir reportes desde el hardware (en este caso del PIC 18F). La compilacin en
lenguaje Basic se hace fcil al momento de enviar o recibir los reportes provenientes del
hardware del dispositivo USB.
Para habilitar el modulo USB de los microcontroladores PIC18, se utiliza la
instruccin UsbStart. Luego de esto, el hardware es reconocido por Windows como un
dispositivo genrico o HID. No es necesario la instalacin de Driver adicional. El hardware
puede desconectarse del PC con la instruccin UsbStop.
La instruccin UsbService puede ser ejecutada las veces posible, debido a que
esta procesa cada evento USB o rutina que se necesite utilizar la comunicacin USB. El
Firmware trabaja correctamente siempre y cuando se ejecute la instruccin UsbService
solamente con un tiempo mximo de un segundo entre una instruccin y la siguiente.
Para identificar el dispositivo USB por el PC Host, pueden ser usadas constantes
numricas y cadenas, y mediante las instrucciones UsbSetVendorId, UsbSetProductId,
U s b S e t Ve r s i o n N u m b e r , U s b S e t M a n u f a c t u r e r S t r i n g, U s b S e t P r o d u c t S t r i n g ,
UsbSetSerialNumberString.
El reporte de salida que es enviado desde el PC, puede ser almacenado
automticamente en el sistema, en arreglo UsbIoBuffer (0-7). Los datos recibidos con
reportes Feature enviados por el PC son almacenados en el arreglo UsbFtBuffer (0-7).
Dos subrutinas pueden ser llamadas por el Firmware del USB, despus de estos
dos eventos pueden ser especificados con las instrucciones UsbonIoOutGosub y
UsbOnFtOutGosub. Adems se pueden especificar otras dos subrutinas con las
instrucciones UsbOnIoInGosub y UsbOnFtInGosub y el Firmware del USB puede

llamarlas para enviar entradas y reportes Features al PC, adems el programa puede
cargar al mismo tiempo el dato deseado en el buffer correspondiente del arreglo.
Ejemplo:
UsbSetVendorId 0x1235
UsbSetProductId 0x1235
UsbSetversionNumber 0x1111
UsbSetManufacturerString Uantof - DIE
UsbSetProductString TD-USB
UsbSetSerialNumberString 11111111
UsbOnIoInGosub usbonioin
UsbOnIoOutGosub usbonioout
UsbOnFtInGosub usbonftin
UsbOnFtOutGosub usbonftout
ADCON1 = 0x0e
TRISB = 0
PORTB = 0xff
UsbStart
PORTB = 0
Dim an0 As Byte
Loop:
Adcin 0, an0
If an0 < 50 Then
PORTB = 0
UsbStop
While an0 < 100
Adcin 0, an0
Wend
PORTB = 0xff
UsbStart
PORTB = 0
Endif
UsbService
Goto Loop
End

Usbonftout:
Toggle PORTB.7
Return
Usbonftin:
UsbFtBuffer (0) = UsbFtBuffer (0) - 1
UsbFtBuffer (1) = UsbFtBuffer (1) - 1
UsbFtBuffer (2) = UsbFtBuffer (2) - 1
UsbFtBuffer (3) = UsbFtBuffer (3) - 1
UsbFtBuffer (4) = UsbFtBuffer (4) - 1
UsbFtBuffer (5) = UsbFtBuffer (5) - 1
UsbFtBuffer (6) = UsbFtBuffer (6) - 1
UsbFtBuffer (7) = UsbFtBuffer (7) - 1
Return
Usbonioout:
Toggle PORTB.6
Return
Usbonioin:
UsbIoBuffer (0) = UsbIoBuffer (0) + 1
UsbIoBuffer (1) = UsbIoBuffer (1) + 1
UsbIoBuffer (2) = UsbIoBuffer (2) + 1
UsbIoBuffer (3) = UsbIoBuffer (3) + 1
UsbIoBuffer (4) = UsbIoBuffer (4) + 1
UsbIoBuffer (5) = UsbIoBuffer (5) + 1
UsbIoBuffer (6) = UsbIoBuffer (6) + 1
UsbIoBuffer (7) = UsbIoBuffer (7) + 1

E.1.3. Compilacin y errores


La comprobacin del programa hecho en lenguaje Basic, lo realiza el compilador
integrado al software PIC 18 Simulator IDE, el cual indica los errores tipogrficos de las
instrucciones, ademas indica las variables declaradas que no son utilizadas, la cantidad
de memoria utilizada, y generando los archivos con extensiones .bas (programa
basic), .hex (programa para grabar en PIC). Todo esto se puede realizar con la tecla F9
del teclado en el men de la ventana de programacin en Basic. Ver Figura A.39.

Figura A.39. Compilacin de programa en Basic.


Ademas, es posible hacer la simulacin del programa realizado, ya que el
software es capaz de cargar el programa hecho con extensin .hex y comprobar las
rutinas generadas son las correctas de manera simple. Cada linea de cdigo cambia de
color al momento de ser ejecutada. Si son utilizadas las entradas o salidas tanto anlogas
como digitales del microcontrolador, estas pueden ser vistas a travs de un diagrama de
la distribucin de pines que el microcontrolador posee, cambiando de color al momento de
ser usadas, ver Figura A.40 y Figura A.41. Los distintas velocidades de simulacin se
pueden elegir en el men principal:
Slow: el intervalo es de 1500 [mS];
Normal: el intervalo es de 250 [mS];
Fast: el intervalo es alrededor de 50 [mS];
Extremely Fast: el intervalo es muy corto y linealmente depende de la
capacidad del PC;
Ultimate: en la ventana principal del simulador, no refresca continuamente los
eventos, pero es posible configurarlo en las opciones del men.

Figura A.40. Eleccin de velocidad de simulacin.

Figura A.41. Comenzar simulacin de programa compilado.

También podría gustarte