pic 18 simulator ide

44
E.1. PIC 18 Simulator IDE E.1.1. Instalación y configuración del software PIC Simulator IDE (PSI) La instalación del software es simple, basta hacer doble click en el icono y se instalará automáticamente. Se debe elegir donde va alojarse el software, generando un icono en el escritorio para fácil acceso. Son incluidas ademas unas guías de usuario en idioma ingles para comprender de forma fácil 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. Elección de Microcontrolador 18F4550. A continuación 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. Elección de frecuencia del cristal oscilador. Si se va recibir datos provenientes de las entradas análogas, se configura el dispositivo para que realice la conversión análoga a digital en cierto intervalo de tiempo, esto se puede modificar en el siguiente parámetro en Options. Ver Figura A.35.

Upload: fhidalgo8

Post on 26-Jun-2015

3.331 views

Category:

Documents


11 download

TRANSCRIPT

Page 1: PIC 18 Simulator IDE

E.1. PIC 18 Simulator IDE

E.1.1. Instalación y configuración del software PIC Simulator IDE (PSI)

La instalación del software es simple, basta hacer doble click en el icono y se

instalará automáticamente. Se debe elegir donde va alojarse el software, generando un

icono en el escritorio para fácil acceso. Son incluidas ademas unas guías de usuario en

idioma ingles para comprender de forma fácil 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. Elección de Microcontrolador 18F4550.

A continuación 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. Elección de frecuencia del cristal oscilador.

Si se va recibir datos provenientes de las entradas análogas, se configura el

dispositivo para que realice la conversión análoga a digital en cierto intervalo de tiempo,

esto se puede modificar en el siguiente parámetro en Options. Ver Figura A.35.

Page 2: PIC 18 Simulator IDE

Figura A.35. Elección del tiempo de conversión 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 opción Tools, la ventana para

trabajar en lenguaje Basic. Ver Figura A.36.

Figura A.36. Elección de programación, en lenguaje Basic.

Cuando se realiza la compilación, el software PSI, compila, genera y guarda

archivos con extensión .bas, .hex, .lst y .asm, y es necesario guardar el programa hecho

en la ventana de programación en Basic, es por esto, que se debe crear una carpeta

donde se vaya alojar el programa principal y las demás extensiones. Ver Figura A.37.

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

Page 3: PIC 18 Simulator IDE

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 distribución de los pines y la

interacción con el simulador incorporado, para ello es necesario ir a la opción de Tools.

Ver Figura A.38.

Figura A.38. Mostrar distribución de pines del microcontrolador.

E.1.2. Comandos básicos

Algunos de los comandos utilizados se muestran a continuación con algunos

ejemplos de su utilización. Ademas para saber como identificar a cada uno de ellos o

cada tipo de estructura escrita en la ventana de programación de Basic, se muestra una

lista de como son representadas cada uno de ellos con un color especifico de escritura:

• Los comandos de configuración y programación que son mostrados en la

ventana de programación 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 programación se utiliza “ ‘ ” y a continuación el

texto que describe lo que se esta haciendo.

Es importante destacar que las variables numéricas son escritas en formato

binario, decimal y hexadecimal anteponiendo ciertos comandos:

• b’XXXXXXXX: 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 números decimales.

Page 4: PIC 18 Simulator IDE

Los puerto del microcontrolador pueden tener valores lógicos “0” o “1” cuando son

configurados com puerto digital. En la lógica positiva, el estado lógico “0” equivale tener o

reconocer 0 [VDC] en un puerto específico y el estado lógico “1” equivale a tener o

reconocer 5 [VDC] en un puerto especifico.

E.1.2.1. Declaración 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 configuración y programación del microcontrolador PIC 18F4550.

A continuación se presenta una lista de comandos , como se emplean y un ejemplo de su

utilización.

En lenguaje Basic tenemos distintos tipos de variables, según el dato que se

pueda almacenar:

• Bit: un bit de longitud, almacena 0 o 1 únicamente;

• Byte: un byte de longitud almacena números enteros entre 0 y 255;

• Word: dos bytes de longitud, almacena números enteros entre 0 y 65.535;

• Long: cuatro bytes de longitud, almacena números enteros entre 0 y

4.294.967.295.

El tipo Long solo está disponible mediante un módulo opcional al PSI. A diferencia

de otros Basic, la declaración 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 número de variables está lógicamente limitado a

la cantidad de memoria RAM disponible en cada microcontrolador.

Ejemplo:

Dim n As Bit ‘ se declara la variable n como bit

Dim i As Byte

Dim dato As Word

Dim j As Long

Page 5: PIC 18 Simulator IDE

También 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 subíndices, puesto entre

paréntesis del 0 al 9.

Ejemplo:

Serout i(4) ‘ se envía el byte ubicado en la posición 5

del vector

E.1.2.2. Instrucción Reserve

{variable}.HB

{variable}.LB.

Las variables tipo word están 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

también simplemente poniendo com extensión .n donde n es el número de bits.

Ejemplo:

Dim i As Byte

Dim j as Bit

Page 6: PIC 18 Simulator IDE

j=i.1

j=i.7

i.0=i.5

E.1.2.3. Instrucción 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 están 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 c lara cara puerto indiv idual como

salida o entrada

PORTA.1 = 1 ‘ en el puerto RA1 está en estado lógico

“1”

STATUS.RP0 = 1 ‘ verifica el estado de los puertos

INTCON.INTF = 0 ‘ verifica la interrupción este en estado

lógico “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 lógico “1”

Page 7: PIC 18 Simulator IDE

RB = 1 ‘ el puerto B está en estado lógico “1”

E.1.2.4. Instrucción para punteros

Pointer ({variable})

Es posible utilizar punteros, cualquier variable definida como tipo byte o word

puede ser usada com un puntero de memoria, usándose como argumento de la función

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. Instrucción para símbolos

Symbol {nombre} = {puerto asignado}

Una forma de escribir programas que resulte mas fácil de entender es el uso de

nombres simbólicos, o Symbol. Un Symbol es una cadena que contiene código, asignado

a un nombre. Al momento de compilar, PSI hace la búsqueda y reemplazo del símbolo y

luego genera el código ASM y HEX.

Ejemplo:

Symbol LED1 = PORTB.0 ‘ asigna al símbolo 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. Instrucción para constantes

Const {nombre variable} = {valor variable decimal}

Page 8: PIC 18 Simulator IDE

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 instrucción 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 símbolos, ayudan al

entendimiento de la lectura del código. 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 lógico “1”

Low ADCON.ADON ‘ deja en estado bajo la entrada análoga

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: {código en ensamblador}

Líneas de código en lenguaje Ensamblador pueden ser incluidas en cualquier

parte del programa en Basic, comenzando con la instrucción Asm.

Ejemplo:

Asm: NOP

Asm: LABEL1: MOVLW 0xFF

E.1.2.8. Operaciones lógicas y matemáticas

Page 9: PIC 18 Simulator IDE

PIC Simulator IDE, dispone de cinco operaciones matemáticas básicas,

disponibles para las variables tipo Byte y Word. Estas son:

• La suma: operador +;

• La sustracción: operador -;

• El producto: operador *;

• El cociente: operador /;

• Y el modulo: operador Mod.

Por supuesto, el compilador es capaz de combinarlas para obtener operaciones

matemáticas mas complejas. Además es posible calcular raíces cuadradas, aunque el

resultado debe ser entero, con la función Sqr.

Ejemplo:

Dim i As Word

i = 3600

i = Sqr (i)

Para la variable tipo bit, existen siete operaciones lógicas disponibles. Solo es

posible efectuar una operación lógica por instrucción. Estas operaciones también están

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

Page 10: PIC 18 Simulator IDE

E.1.2.9. Instrucción Goto

{nombre de rutina}

{instrucciones}

Goto {nombre de rutina}

Esta instrucción se utilizara para realizar un salto incondicional. Después 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. Instrucción For-To-Step-Next

For {variable} = {valor inicial} to {valor final} Step {valor}

{instrucciones}

Next {variable}

Esta instrucción permite repetir un número finito de veces una rutina, generar un

vector o matriz, dependiendo del valor de la variable. La instrucción 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 números

Page 11: PIC 18 Simulator IDE

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 repetición de la instrucción

PORTB.0=1 hasta llegar a 10, luego el programa termina con la instrucción End. Ademas

con la instrucción Step se puede ir ascendiendo o descendiendo el contador For.

E.1.2.11. Instrucción While-Wend

While {condición}

{instrucciones}

Wend

Con esta instrucción es posible condicionar ciertas características del

microcontrolador, así como condicionar la acción de subrutinas que estén asociadas.

Pueden ser usados múltiples operadores al hacer la comparación después de la

instrucción While, con un máximo de ocho comparaciones (1 byte).

Mientras la condición 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 ‘ mientras la variable i sea mayor que cero

i = i - 1 ‘ sustrae 1 a la variable i

WaitMs 100 ‘ espera durante 100 mS

Wend ‘ termina instrucción While

E.1.2.12. Instrucción If-Then-Else-Endif

Page 12: PIC 18 Simulator IDE

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

{realiza acción}

Else

{realiza acción}

Endif

Con la instrucción If-Then-Else, se condicionan alternativas para acceder a

subrutinas, de acuerdo a la selección por medio de If, se logra la acción después de Then,

teniendo mas opciones alternativas con Else. Pueden ser usados múltiples operadores al

hacer la comparación después de la instrucción If, con un máximo 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. Instrucción Select Case-Case-Case-Endselect

Select Case {variable o condición}

Case {instrucciones}

EndSelect

Es muy similar al funcionamiento de la instrucción While-Wend.

Ejemplo:

Dim i As Byte

Loop:

Select Case i

Page 13: PIC 18 Simulator IDE

Case 255

i = 1

Case <= 127

i = i + 1

Case Else

i = 255

Endselect

Es posible separar múltiples condiciones con una coma (,), de esta forma agregar

varias opciones a la instrucción Case.

E.1.2.14. Instrucción Gosub

Gosub {nombre subrutina}

Return

Es posible trabajar programando en Basic con PIC Simulator IDE utilizando

subrutinas, siendo estas llamadas por medio de la instrucción Gosub, previamente

declaradas y solo es posible utilizarlas cuando la rutina principal termina con la instrucción

End.

Para retornar a la rutina principal, se utiliza la instrucción 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:

Page 14: PIC 18 Simulator IDE

Gosub resultado

Display = ADRESH

Goto principal

End.

Rresultado:

High ad_accion

While ad_accion

Wend

Return

E.1.2.15. Instrucción Lookup

{nombre variable} Lookup (numeración de variable), {indice}

La instrucción Lookup puede ser utilizada para seleccionar un byte desde una lista

de constantes del mismo tipo, de acuerdo al valor de un índice, también del tipo byte. El

resultado de la selección se almacena también 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. Instrucción Define

Define {instrucción o comando}

Con esta instrucción se definen los parámetros para configurar el

microcontrolador y las distintas propiedades y aplicaciones que puede hacer, como la

conversión análoga digital, frecuencia del reloj del microcontrolador, puerto USB, puerto

serie, uso de pantalla LCD.

Ejemplo:

Page 15: PIC 18 Simulator IDE

Define Clock_frequency = 20 ‘ configura el reloj del microcontrolador a

20MHz

E.1.2.17. Instrucción Config

Config {instrucción de configuración}

Con esta instrucción 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. Instrucción 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 instrucción utiliza la frecuencia de reloj

como parámetro de medida, por tanto debe de coincidir la velocidad de reloj en la

configuración con el cristal puesto en el circuito eléctrico.

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

Page 16: PIC 18 Simulator IDE

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 posición, 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. Instrucción Count

Count {puerto, tiempo, variable}

Si es necesario contar un cierto numero de pulsos que viene hacia algún pin del

microcontrolador durante un cierto periodo de tiempo, se utiliza la instrucción Count.

Posee tres argumentos:

Page 17: PIC 18 Simulator IDE

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

con un puerto digital;

• tiempo: tiempo de observación expresado en milisegundos entre 1 y 10000;

• variable: donde es almacenado el numero de pulso contados después de ser

ejecutada la instrucción.

La instrucción Count usa el modulo interno Timer0.

El parámetro Count_mode esta disponible cuando se usa con la instrucción

Define. Si se iguala al valor 1 (por defecto), la instrucción 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. Instrucción EEPROM

Eeprom {dirección de la memoria, dato}

Si se desea utilizar memorias EEPROM para almacenar información obtenida por

el microcontrolador y que no es posible almacenarlas en él, con esta instrucción es

posible seleccionar la memoria y almacenar la información que se desee.

El primero argumento indica la dirección 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

Page 18: PIC 18 Simulator IDE

E.1.2.22. Instrucción Procedure

Proc {argumento1, ..., argumento5}

End Proc

Con la instrucción 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 fácil de reutilizar. Se puede volver a llamar a la instrucción Procedure con la

instrucción 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. Instrucción Function

Function {argumento1, ..., argumento5}

End Function

Para poder realizar operaciones especificas, se utiliza la instrucción Function, los

argumentos son declarados globalmente, hasta un máximo de cinco.

Se termina la instrucción Function utilizando la instrucción End Function.

Ejemplo:

Dim i As Byte

Page 19: PIC 18 Simulator IDE

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. Instrucción Include

Include “{nombre de archivo .BAS}”

Un archivo externo de Basic puede ser incluido en el programa usando la

instrucción Include, donde el argumento es una cadena que contiene la dirección donde

está ubicado el archivo externo con extensión .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

Page 20: PIC 18 Simulator IDE

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 {dirección del dato en la memoria, dato}

Write {dirección 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 dirección 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 leído en la memoria

EEPROM, para leer la variable tiene que ser un byte. Se sugiere que las interrupciones

estén deshabitadas cuando se utilice durante la ejecución de la instrucción 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 dirección 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. Instrucción ADC

Define ADC_Clock = {fuente de reloj}

Page 21: PIC 18 Simulator IDE

Define ADC_Sampleus = {tiempo en milisegundos}

ADCIN {canal ADC, variable}

Para adquirir datos por medio de las entradas análogas, o utilizar la conversión

análoga a digital que el microcontrolador posee, se utiliza la instrucción ADCIN la cual

posee dos argumentos. El primero de ellos indica la entrada análoga 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 instrucción ADC_Clock, se elige el reloj a utilizar en la conversión, esto

depende del tipo de microcontrolador y el reloj que se este usando para generar la base

de tiempo.

Con la instrucción ADC_Sampleus, se elige el parámetro para hacer la

adquisición de datos, es decir, el tiempo en microsegundos entre una muestra tomada y la

siguiente, entre 0 y 255.

La instrucción ADCIN, estará sujeta como es declarado el pin en el

microcontrolador, siendo que este pin debe de estar configurado con una entrada

análoga, 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 análogo

For j = 1 to 4

Adcin 0, i (j) ‘ guarda 4 datos en el vector i

Next j

im = 0

For j = 0 to 4

Page 22: PIC 18 Simulator IDE

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 interrupción

On Low Interrupt

{instrucciones}

Resume

On High Interrupt

{instrucciones}

Resume

Las instrucciones de interrupción tiene alta y baja prioridad y estas pueden ser

activadas o desactivadas con la respectiva instrucción y terminar las sentencias con la

instrucción Resume. Si operaciones aritméticas, vectores y cualquier otro complejo son

usadas con las instrucciones de interrupción, es necesario incluir la instrucción Save

System a la derecha, después 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

Page 23: PIC 18 Simulator IDE

i = i - 1

PORTA = i

INTCON.INT0IF = 0

Resume

E.1.2.28. Instrucciones comunicación 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 comunicación serie UART

Las velocidades permitidas en la instrucción Hseropen son de: 300, 600, 1200,

2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 56000 y 57600 baudios. Por

omisión transmite a una velocidad de 9600 baudios.

La instrucción Hserout puede contener múltiples argumentos separados con una

coma (,). También es posible usar variables de tipo vector. Cuando es usado el símbolo

“#” 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 código ASCII por el puerto serie. CrLf, retorna el carro

La instrucción Hserin puede ser usada para cargara una lista de variable de los

tipos byte o word provenientes del puerto serie. Esta instrucción espera hasta que el

requerido numero de bytes o word hayan sido recibido por el puerto serie.

La instrucción Hserget posee un argumento que puede ser una variable del tipo

byte, y su característica es esperar en el buffer de recepción si se está cargando una

variable, en otro caso el valor cero “0”, es cargado.

Ejemplos:

Uno:

Page 24: PIC 18 Simulator IDE

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. Instrucción 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}

Page 25: PIC 18 Simulator IDE

Estas instrucciones puede utilizar cualquier pin del microcontrolador, ya que están

diseñadas para no tener la limitación de la comunicación de los pines diseñados para ese

propósito en el microcontrolador RX y TX respectivamente.

Para la instrucción Serin, el primer argumento indica el puerto especifico que va a

ser usado para la transmisión serial asincrónica. El segundo argumento indica la

velocidad de transmisión o recepción que tiene los valores: 300, 600, 1200, 2400, 4800,

9600 o 19200. El usar una velocidad de transmisión 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 instrucción Serout, es similar los argumentos a la instrucción anterior,

primero se selecciona el puerto de comunicación, luego la velocidad en baudios permitida

y los argumentos referente a información que van a ser transmitida. Ademas es posible

agregar las instrucciones de CrLF, de retorno de carro. Si es usado el símbolo “#” 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 lógicos

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

Page 26: PIC 18 Simulator IDE

E.1.2.30. Instrucciones para LCD

Lcdinit {instrucción}

Lcdcmdout {instrucciones}

Lcdout {instrucciones}

El microcontrolador PIC18F4550 puede manipular una interface alfanumérica tipo

LCD, con la cual se pueden desplegar información son necesidad de estar conectado a

un computador. Para ello PIC Simulator IDE, ha desarrollado instrucciones para configurar

los parámetros del microcontrolador para ser usado de este modo, así también

instrucciones para utilizar un display LCD, específicamente 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 configuración:

• 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 posición 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 después de la instrucción

LCDCMDOUT en microsegundos, por defecto tiene el valor de 5000;

• LCD_DATAUS: define el retardo después de la instrucción LCDOUT en

microsegundos, por defecto tiene el valor de 100;

• LCD_INIMS: define el retardo después de la instrucción LCDINIT en

milisegundos, por defecto tiene el valor de 100.

Page 27: PIC 18 Simulator IDE

La instrucción Lcdinit debe ser puesta antes de cualquier instrucción Lcdout

(usado para enviar datos) y Lcdcmdout (usado para enviar comandos) para poder habilitar

el uso de las instrucciones para manipular un LCD. Constantes numérica son usadas

como argumentos para esta instrucción:

• 0: sin cursor;

• 1: parpadeo de cursor;

• 2: linea inferior;

• 3: parpadeo y linea inferior.

Las instrucciones Lcdout y Lcdcmdout pueden contener múltiples argumentos

separados por una coma (,). Vectores, constantes y variables pueden ser usadas como

argumento en la instrucción Lcdout. Si es usado el símbolo “ # ”, antes de cualquier

nombre de una variable es una representación decimal que es enviada al modulo LCD.

Constantes y variables pueden ser usadas como argumento con la instrucción

Lcdmcdout, además 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 posición puesta entre los paréntesis de la

primera linea del modulo LCD;

• LcdLine2Pos(): ubica el texto en la posición puesta entre los paréntesis de la

segunda linea del modulo LCD.

Page 28: PIC 18 Simulator IDE

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 ‘ envío la instrucción para borrar

Goto loop contenido de la pantalla LCD

‘ 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”

Page 29: PIC 18 Simulator IDE

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, dirección dispositivo, dirección dato,

dato}

I2CRead {puerto SDA, puerto SCL, dirección dispositivo, dirección dato,

dato}

La comunicación 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 dirección 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 dirección de la locación a la cual se va a acceder. si es usada una constante para el

parámetro de la dirección debe ser del tipo byte. el quinto y ultimo argumento para la

instrucción I2CWrite puede ser una constante del tipo byte o una variable donde va a ser

escrita la dirección especifica. y para la instrucción I2CRead debe ser una variable del tipo

byte para almacenar el valor que es leído desde la dirección especifica.

Para algunos dispositivos esclavos I2C, es necesario agregar algún tipo de retardo

para asegurarse que le dispositivo este listo para responder a la instrucción I2CRead.

Ejemplo:

Page 30: PIC 18 Simulator IDE

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 comunicación con I2C. la instrucción 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 comunicación por I2C.

La instrucción I2CStart genera la condición de inicio, y la instrucción I2C Stop

genera la condición de detención de la comunicación.

Para enviar un byte se usa la instrucción I2CSend. Después que esta instrucción

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 señal de conocimiento

durante el ciclo de conocimiento después que el byte haya sido recibido. I2CRecn o

I2CReceivernack puede generar la señal de no conocimiento durante el ciclo de

conocimiento después que el byte haya sido recibido.

Ejemplo:

Dim dir As Word

Dim dato(31) As Byte

Symbol sda = PORTC.2

Page 31: PIC 18 Simulator IDE

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 configuración esta activo-alto para la linea de Clock y activo-

bajo para la linea de ChipSelect. estas pueden cambiar por la asignación del valor 1 en

los parámetros SPICLOCK_INVERT y/o SPICS_INVERT en la directivas Define. para

dispositivos SPI lentos, es necesario usar pulsos de reloj muy largos.

Page 32: PIC 18 Simulator IDE

La instrucción SPIPrepare, solo prepara las lineas de la interface de comunicación

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 periférico debe ser usada la instrucción

SPISENDBITS. si el primer argumento indica el número de bits que serán 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

Page 33: PIC 18 Simulator IDE

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 módulo interno PWM (modos de PWM en módulos CCP) son activados para

usar el argumento PWMon. Esta instrucción posee dos argumentos. El primero indica el

número del módulo, debe ser una constante entre 1 y 5. El segundo argumento es usado

para asignar la selección del modo. El módulo interno PWM puede ser usado en tres

Page 34: PIC 18 Simulator IDE

diferentes salidas de frecuencias por cada cuatro ciclos útiles de resolución (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, además la salida puede

mantener en estado bajo hasta que el ciclo útil sea cargado. El modulo PWM puede ser

apagado con la instrucción PWMOff.

El ciclo útil de la señal de PWM puede ser cargada con la instrucción PWMDuty.

El primer argumento indica el número del módulo. 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

Page 35: PIC 18 Simulator IDE

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 señal de control del servo. Para la instrucción Servoin, el pin debe ser

configurado previamente como una entrada y para la instrucción Servoout, el pin debe ser

configurado como una salida. El segundo argumento para la instrucción Servoin debe ser

una variable del tipo byte, en el cual el largo del pulso es almacenado. Los pulsos están

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 instrucción 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

Page 36: PIC 18 Simulator IDE

StepCW {número de pasos, retardo entre pasos}

StepCCW {número de pasos, retardo entre pasos}

Para manipular un motor paso a paso es necesario declarar ciertas directivas con

la instrucción Define. A continuación los parámetros de configuración:

• 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 instrucción STEP_MODE es usada para definir el modo de manipulación.

Si tiene el valor 1, el motor se manipula en paso completo, si tiene el valor 2, trabaja a

medio-paso.

La instrucción Stephold configura los pines usados como salida y alimenta las

bobinas A y B para situarlas en la posición inicial.

Las instrucciones StepCW, hace girar el motor en sentido horario, mientras que la

instrucción 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

Page 37: PIC 18 Simulator IDE

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

Page 38: PIC 18 Simulator IDE

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 parámetros 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 instrucción 1wireInit. Ademas se tiene

como opción 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

Page 39: PIC 18 Simulator IDE

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 instrucción DS18s20Start, se inicia el

dispositivo 1-Wire, para comenzar la conversión de temperatura en dato. De acuerdo con

el datasheet del dispositivo, la conversión es completada al pasar unos 750 [mS].

Después del periodo de medición puede ser leído el dispositivo con la instrucción

DS18s20ReadT, el cual envía dos argumentos del tipo byte. El primero de ellos contiene

el valor de la temperatura en unidades de 0,5 grados centígrados 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 comunicación vía USB

Para soportar aplicaciones basadas en la comunicación 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.

Page 40: PIC 18 Simulator IDE

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 comunicación con un PC. Estos parámetros 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 compilación en

lenguaje Basic se hace fácil 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

instrucción UsbStart. Luego de esto, el hardware es reconocido por Windows como un

dispositivo genérico o HID. No es necesario la instalación de Driver adicional. El hardware

puede desconectarse del PC con la instrucción UsbStop.

La instrucción UsbService puede ser ejecutada las veces posible, debido a que

esta procesa cada evento USB o rutina que se necesite utilizar la comunicación USB. El

Firmware trabaja correctamente siempre y cuando se ejecute la instrucción UsbService

solamente con un tiempo máximo de un segundo entre una instrucción y la siguiente.

Para identificar el dispositivo USB por el PC Host, pueden ser usadas constantes

numéricas y cadenas, y mediante las instrucciones UsbSetVendorId, UsbSetProductId,

UsbSetVersionNumber , UsbSetManufacturerStr ing , UsbSetProductStr ing ,

UsbSetSerialNumberString.

El reporte de salida que es enviado desde el PC, puede ser almacenado

automáticamente 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, después de estos

dos eventos pueden ser especificados con las instrucciones UsbonIoOutGosub y

UsbOnFtOutGosub. Además se pueden especificar otras dos subrutinas con las

instrucciones UsbOnIoInGosub y UsbOnFtInGosub y el Firmware del USB puede

Page 41: PIC 18 Simulator IDE

llamarlas para enviar entradas y reportes Features al PC, además 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

Page 42: PIC 18 Simulator IDE

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. Compilación y errores

La comprobación del programa hecho en lenguaje Basic, lo realiza el compilador

integrado al software PIC 18 Simulator IDE, el cual indica los errores tipográficos 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 programación en Basic. Ver Figura A.39.

Page 43: PIC 18 Simulator IDE

Figura A.39. Compilación de programa en Basic.

Ademas, es posible hacer la simulación del programa realizado, ya que el

software es capaz de cargar el programa hecho con extensión .hex y comprobar las

rutinas generadas son las correctas de manera simple. Cada linea de código cambia de

color al momento de ser ejecutada. Si son utilizadas las entradas o salidas tanto análogas

como digitales del microcontrolador, estas pueden ser vistas a través de un diagrama de

la distribución 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 simulación 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. Elección de velocidad de simulación.

Page 44: PIC 18 Simulator IDE

Figura A.41. Comenzar simulación de programa compilado.