TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: pajaro en 04 de Agosto de 2008, 13:29:44

Título: Array en psi
Publicado 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.
Título: Re: Array en psi
Publicado por: dogflu66 en 04 de Agosto de 2008, 19:39:42
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
    '****************************************
Título: Re: Array en psi
Publicado por: pajaro en 05 de Agosto de 2008, 11:22:50
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
Título: Re: Array en psi
Publicado por: dogflu66 en 05 de Agosto de 2008, 11:50:18
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.
Título: Re: Array en psi
Publicado por: pajaro en 05 de Agosto de 2008, 12:42:30
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?
Título: Re: Array en psi
Publicado por: pajaro en 05 de Agosto de 2008, 12:58:03
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

Título: Re: Array en psi
Publicado por: dogflu66 en 05 de Agosto de 2008, 19:11:30
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.
Título: Re: Array en psi
Publicado por: dogflu66 en 05 de Agosto de 2008, 19:29:22
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.
Título: Re: Array en psi
Publicado por: pajaro en 06 de Agosto de 2008, 18:15:56
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
Título: Re: Array en psi
Publicado por: pajaro en 06 de Agosto de 2008, 18:22:19
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

Título: Re: Array en psi
Publicado por: dogflu66 en 07 de Agosto de 2008, 07:22:19
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. ;-)

Título: Re: Array en psi
Publicado por: pajaro en 07 de Agosto de 2008, 16:08:32
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
Título: Re: Array en psi
Publicado por: dogflu66 en 09 de Agosto de 2008, 15:57:33
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
Título: Re: Array en psi
Publicado por: pajaro en 14 de Agosto de 2008, 13:42:48
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.
Título: Re: Array en psi
Publicado por: pajaro en 14 de Agosto de 2008, 13:48:34
Hola dogflu66
 
¿como seria, hacer el caso contrario, sacar el ascii de un caracter escrito en el lcd?

un saludo
Título: Re: Array en psi
Publicado por: pajaro en 14 de Agosto de 2008, 14:19:07
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?


Título: Re: Array en psi
Publicado por: dogflu66 en 15 de Agosto de 2008, 11:11:17

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.
Título: Re: Array en psi
Publicado por: dogflu66 en 15 de Agosto de 2008, 11:11:51
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.
Título: Re: Array en psi
Publicado por: RALF2 en 15 de Agosto de 2008, 14:43:02

 
¿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