TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: pajaro en 04 de Agosto de 2008, 13:29:44
-
hola amigos
¿como se hace en PSI?
querria definir un vector de 9 elementos, como se hace?
inicializar un vector de 3 elementos con 3 valores,
tambien queria poder llenar un vector con 9 elemtos aleatoriamente (randoun en C) de entre 12 elementos predefinidos y que estos a su ves fueran diferentes dentro del vector.
vector(9)={v1,v2,v3,v4,v5,v6,v7,v8,v9}
elementos= 0,1,2,3,4,5,A,B,C,D,E,F
en PSI hay vectores de mas de una dimension
gracias,
un saludo.
-
En el Basic del PSI por el momento solo existe una sola dimensión.
Dim uart_imagen(80) As Byte 'Componen el búfer IMAGEN para control del búfer UART
Reserva 80 posiciones de memoria consecutivas con las que podremos operar nombrándolas como uart_imagen(0...79).
------------------------------------------
NUMEROS ALEATORIOS
EJEMPLO 1 (Respuesta 249)
http://www.todopic.com.ar/foros/index.php?topic=14917.msg124851#msg124851
'***** Placa Entrenadora (PIC EBadic) ******
'NOMBRE:16F88_Pic_EBasic_EJEMPLO_23
'**************************************
EJEMPLO 2 (Respuesta 251)
http://www.todopic.com.ar/foros/index.php?topic=14917.msg125178#msg125178
'****** Placa Entrenadora (PIC EBadic) *******
'NOMBRE:16F88_Pic_EBasic_EJEMPLO_23.1
'****************************************
-
hola amigo dogflu66
Pudes decirme si es cierto, el uso de funciones agiliza los procesos y ocupa menos lineas en el compilador de PSI
gracias
-
Las funciones en general en Basic, son rutinas especificas resueltas por el programador del entorno, son rápidas para dar soluciones, pero en general tienen que guardar una cierta estructura de entrada y salida con el núcleo del compilador que las pueden hacer perder mas tiempo de lo normal he incluso pueden tener fallos si el programador no las comprobó el suficiente tiempo. También pueden tener multitud de utilidades que no se utilizan y pueden hacer que ocupen mas código. A mi particularmente prefiero hacer un uso restringido de ellas. Por ejemplo adcin es una función muy lenta comparada con la que uso programada con el mismo lenguaje. De todas formas esto es a nivel personal puede que no todo el mundo este de acuerdo con migo.
PD: La mejor función es la que programo uno mismo.
-
hola dogflu66
en ambos casos se hace un randon de numeros, pero como se haria un randon de letras, o caracteres,
Function random(n_max As Byte, n_ini As Byte) As Byte
OPTION_REG.T0CS = 0 'selecciona reloj interno
n_max = (n_max + 1) - n_ini 'arregla el numero maximo
random = (TMR0 Mod n_max) + n_ini 'siendo n_max el numero maximo y +n_ini valor minimo
End Function
por cierto, como consigues que aparezca el numero de linea, al pegarlo aqui?
-
hola dogflu66
en uno de los programas tuyos
leo:
Define SIMULATION_WAITMS_VALUE = 1
esto como afecta cuando lo simulas en pcb,
esto solo afecta a la simulacion del psi, o a la de hardware tambien.
un saludo
-
hola dogflu66
en ambos casos se hace un randon de numeros, pero como se haria un randon de letras, o caracteres,
Function random(n_max As Byte, n_ini As Byte) As Byte
OPTION_REG.T0CS = 0 'selecciona reloj interno
n_max = (n_max + 1) - n_ini 'arregla el numero maximo
random = (TMR0 Mod n_max) + n_ini 'siendo n_max el numero maximo y +n_ini valor minimo
End Function
por cierto, como consigues que aparezca el numero de linea, al pegarlo aqui?
Los caracteres son gráficos para nosotros pero para el ordenador no son mas que números o códigos ASCII así que se tratan como si fueran números.
http://game-editor.com/tutorials/images/ascii.jpg
http://es.wikipedia.org/wiki/ASCII
Numero de línea en el código:
Cambias el código en GeSHi por uno que mas te guste cuando estés en el editor de Publicar mensaje, yo suelo utilizar FreeBasic.
-
hola dogflu66
en uno de los programas tuyos
leo:
Define SIMULATION_WAITMS_VALUE = 1
esto como afecta cuando lo simulas en pcb,
esto solo afecta a la simulacion del psi, o a la de hardware tambien.
un saludo
Yo no soy muy amigo de utilizar paradas absolutas en el programa Waitms o Waitus, pero cuando realizo una simulación y en el código estoy utilizando Waitms activo la línea Define SIMULATION_WAITMS_VALUE = 1 que le indica al compilador que anule todos los Waitms. Esto se hace así durante la simulación ya que los simuladores no funcionan en tiempo real, se necesitaría una maquina muy muy pero que muy rápida para poder simular el código en tiempo real. Por ejemplo una pausa de 1 segundo en un simulador y según el PC que se usa puede multiplicarse fácilmente por 100 este tiempo.
Define SIMULATION_WAITMS_VALUE = 1 compilado en un programa y luego volcado el código a un PIC pues tan solo afecta en que no se respetaran las pausas generadas por el comando Waitms.
-
hola amigo dogflu66
gracias por la respuesta anterior.
Pero como le dices que es un ascii, si trabajar sacar ascii por lcd .
Esto como se hace?
y si quieres usar
mask=looup(ascii1,asccii2,asccii3),indice
esto como lo haces?
un saludo
-
hola de nuevo amigo
Con el compilador PSI, como le dices que si a es distinto de b realiza x
if a (aqui que se pone) b then
sentencia
donde puedo encontrar los comparadores del SPI
mayor que, menor que, igua a, distrinto a, modulo, resto de
un saludo
-
Estos conceptos basico es mas rapido mirarlo aqui que esperar a que te conteste alguien:
http://www.oshonsoft.com/picbasiccompiler.html
y aqui en castellano:
http://www.todopic.com.ar/foros/index.php?topic=15256.0
El tema de la representacion de caracteres es muy facil, luego te pongo un ejemplo. ;-)
-
hola amigo dogflu66
el link primero ya lo conocia, tal es asi que hasta tengo un aceso directo a esa web.
Pero hay cosas que no ponen en esa web, tendria que tener mas ejemplos esa web.
como se sacan por display los ascii?
se que en el pc el alt(gr)+2 es el @ pero como le pones
un saludo
-
Dim ascii As Byte 'Contendra el valor de lectura del puerto serie
ascii = 65 '65 = "A"
Lcdout ascii 'escribe el caracter del bufer en el display = lcdout "A"
Siendo ascii una variable de 8bit, conteniendo el valor del codigo ascii
Lcdout ascii 'Escribe el grafico al que corresponde el valor contenido en ascii
Lcdout "A" 'Escribe el grafico encerrado entre las comillas
-
hola a todos
y gracias por la ayuda de dogflu66
mi programa
'****************************************************************
'simulador: Proteus 7
'NOMBRE: lcd
'MICRO: PIC16F877A
'FECHA/AUTOR: mayo 08/LM
'DESCRIPCION:LCD 2X20
'PUERTOS LCD,Parpadea cursor,
'***************************************************************************************************
Define SIMULATION_WAITMS_VALUE = 1
AllDigital
TRISA = %001111
'-------------------------------------Puertos del LCD-----------------------------------------------
Define LCD_BITS = 8 'indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTD 'el bus de datos sera el puerto A
Define LCD_DBIT = 0 'el bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB 'el bit de nrol RS sera del puerto B
Define LCD_RSBIT = 1 'se usara el RB7 como RS
Define LCD_EREG = PORTB 'el bit de nrol E sera del puerto B
Define LCD_EBIT = 2 'se usara el RB6 como E
'Define LCD_RWREG = PORTx 'el bit de nrol RW sera del puerto x(no se usa)
'Define LCD_RWBIT = x 'se usara el Rxn como RW (no se usa)
Define LCD_COMMANDUS = 2000 'Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50 'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50 'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg.
'-----------------------------------asignacion de pulsadores-----------------------------------------------------
Symbol s1 = PORTA.0
Symbol s2 = PORTA.1
Symbol s3 = PORTA.2
Symbol s4 = PORTA.3
'--------------------------------- variables ------------
Dim ascii As Byte
Dim a As Byte
'**************************************Inicio Programa*********************************************
Lcdinit 1 'inicializa el lcd con cursor parpadeando
Lcdout "16F877A LCD" 'escribe en el lcd 2x20 LCD
Lcdcmdout LcdLine2Home 'seleciona la linea dos como proxima para escritura
Lcdout "hola"
Lcdcmdout LcdClear 'borra el display y cursor a casa
a = 64
pul:
If s1 = 1 Then
a = a + 1
ascii = a
Lcdcmdout LcdClear
Lcdcmdout LcdLine1Home
Lcdout ascii
Lcdcmdout LcdLine2Home
Lcdout #a
'WaitMs 50
Endif
Goto pul
'================================
con esto sacas la representacion ascii empezando por el valor 64 ,
hay muchos que no tienen representacion gráfica.
-
Hola dogflu66
¿como seria, hacer el caso contrario, sacar el ascii de un caracter escrito en el lcd?
un saludo
-
hola de nuevo amigo
Con el compilador PSI, como le dices que si a es distinto de b realiza x
if a (aqui que se pone) b then
sentencia
donde puedo encontrar los comparadores del SPI
mayor que, menor que, igua a, distrinto a, modulo, resto de
un saludo
hola a todos
ya descubri como se pone diferente
esto es con esto "<>"
Pero tengo una duda?
si queremos llenar 4 vectores de 5 elementos cada uno con los 9 primeros numeros enteros, 1, 2, 3, 4, 5, 6, 7, 8, 9
de forma que la premisa que se cumpla es que en cada vertor los 4 numeros deben de ser distintos,
Pero a su vez el elemento 1 del vector 1 debe ser el mismo numero, que el del vector dos enl a posicion 2 y
el mismo del 3 en la posicion 3 y el mismo que el 4 en la posicion 4.
vectores: v_a(5), v_b(5), V_c(5), V_d(5)
v1a=v2b=v3c=v4d
v_a(5)={v1a,v2a,v3a,v4a,v5a}
v_b(5)={v1b,v2b,v3b,v4b,v5b}
v_c(5)={v1c,v2c,v3c,v4c,v5c}
v_d(5)={v1d,v2d,v3d,v4d,v5d}
for a=a to 9 step 1
if a>9 then a=1
next a
vec=lookup(1,2,3,4,5,6,7,8,9),a
alguien se sabe si hay alguna funcion que compare elemento de dentro de un vector,
¿como se puden hacer comparaciones multiples?
¿como se puden hacer comparaciones multiples, de elementos de un vector?
-
Pero tengo una duda?
si queremos llenar 4 vectores de 5 elementos cada uno con los 9 primeros numeros enteros, 1, 2, 3, 4, 5, 6, 7, 8, 9
de forma que la premisa que se cumpla es que en cada vertor los 4 numeros deben de ser distintos,
Pero a su vez el elemento 1 del vector 1 debe ser el mismo numero, que el del vector dos enl a posicion 2 y
el mismo del 3 en la posicion 3 y el mismo que el 4 en la posicion 4.
Eso no te queda otra que recorrer continuamente el vector para verificar que la nueva entrada cumple lo estipulado en la definición.
alguien se sabe si hay alguna funcion que compare elemento de dentro de un vector,
¿como se puden hacer comparaciones multiples?
¿como se puden hacer comparaciones multiples, de elementos de un vector?
¿Comparar elementos de un vector?, no te entiendo, los elementos de un vector tienen cada uno nombre y apellidos de forma individual, que problema tienes para compararlos.
Se comparan como si fuesen variables independientes. Aquí si que no te entiendo.
-
Hola dogflu66
¿como seria, hacer el caso contrario, sacar el ascii de un caracter escrito en el lcd?
un saludo
De esto si que no se.
-
¿como seria, hacer el caso contrario, sacar el ascii de un caracter escrito en el lcd?
un saludo
Que tal amigos!
Pajaro no se si el psi cuenta con alguna instruccion que te permita leer caracteres de la ddram de la lcd, pero el pic basic pro tiene una instruccion llamada lcdin que si permite hacer lo que quieres :shock:
Aunque no veo realmente el uso que le podrias dar, por eso algunos compiladores no tienen instrucciones especificas para leer las ddram de las lcd :mrgreen:
Saludos