Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PIC18 SimulatorIDE
PIC18 SimulatorIDE
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.
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.
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)
j=i.1
j=i.7
i.0=i.5
TRISB = 0
TRISB=%11100000
PORTA.1 = 1
STATUS.RP0 = 1
INTCON.INTF = 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
RB = 1
PORTB.0 = 1
LED1 = 1
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
i = pi
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
Low ADCON.ADON
NOP
Asm:
PORTB.0 = 1
WaitMs 100
Goto Loop
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.
Wend
i=i-1
sustrae 1 a la variable i
WaitMs 100
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.
Gosub resultado
Display = ADRESH
Goto principal
End.
Rresultado:
High ad_accion
While ad_accion
Wend
Return
Define Clock_frequency = 20
i = 100
WaitMs x
WaitUs 50
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
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
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
TRISB = 0
ADCON1 = 0
For j = 1 to 4
Adcin 0, i (j)
Next j
im = 0
For j = 0 to 4
im = im + v(j)
Next j
im = im / 5
PORTB = im.LB
i=i-1
PORTA = i
INTCON.INT0IF = 0
Resume
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
WaitMs 1000
For i = 20 to 0 Step -1
decrementa de 20 a 0
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
Ejemplos:
Uno:
Define LCD_BITS = 8
DefineLCD_DBIT = 0
RS por puerto D
Define LCD_RSBIT = 1
E por puerto D
Define LCD_EBIT = 3
RW por puerto D
Define LCD_RWBIT = 2
Lcdinit LcdCurBlink
loop:
Lcdout Hola Mundo
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
Lcdcmdout LcdLine2Home
Lcdout #i
i=i-1
WaitMs 250
Lcdcmdout LcdClear
Goto loop
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:
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
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
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