Autor Tema: Array en psi  (Leído 7508 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Array en psi
« 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.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Array en psi
« Respuesta #1 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
    '****************************************
Saludos desde Granada, España.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #2 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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Array en psi
« Respuesta #3 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.
Saludos desde Granada, España.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #4 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?

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #5 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


Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Array en psi
« Respuesta #6 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.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Array en psi
« Respuesta #7 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.
Saludos desde Granada, España.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #8 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
« Última modificación: 06 de Agosto de 2008, 18:21:17 por pajaro »

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #9 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

« Última modificación: 14 de Agosto de 2008, 13:32:46 por pajaro »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Array en psi
« Respuesta #10 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. ;-)

Saludos desde Granada, España.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #11 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
« Última modificación: 07 de Agosto de 2008, 16:11:58 por pajaro »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Array en psi
« Respuesta #12 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
Saludos desde Granada, España.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #13 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.
« Última modificación: 14 de Agosto de 2008, 13:49:59 por pajaro »

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Array en psi
« Respuesta #14 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