Página 1 de 1

Ajuda mikroBasic

MensagemEnviado: 03 Out 2008 07:45
por welltom
Oi pessoal,
Usando o mikroBasic, quando quero apresentar (mostrar) uma string ou mensagem de texto no lcd e ao mesmo tempo aplicar dados a portc,
estou fazendo assim, e funciona perfeitamente:
Ex:

if kt = "0" then
portc = %11111111
Lcd_Out(2,1," ")
Lcd_Out(2,1," CAM-1 ON! AV1")
end if

Mas como meu código é composto de varias (if e end if) semelhantes a estes e tambem devido ao compilador só permitir 2k de códigos (versão demo), e estes blocos se repetem 20 vezes , gostaria da ajuda dos
colegas mais experientes em basic, para montar uma sub procedure e passar somente os parametros (valor do binario para portc e a messagem para linha 2 do lcd), por o muda são apenas os parametros passados, o resto do código é igual a todos os blocos:

Ex: Estou definindo assim:
mensagem = "" CAM-1 ON! AV1"
porta = %11111111

para passar o parametro para portc faço assim e deu certo

if kt = "0" then
Atualiza( dim porta as byte)
end if

........

sub procedure Atualiza( c )
portc = c
Lcd_Out(2,1," ")
Lcd_Out(2,1, ????????)
end sub

Obs: Não estou conseguindo passar o parametro para a mensagem,que
vai ser apresentada na linha 2 do LCD)
ex;

Wellington

MensagemEnviado: 03 Out 2008 14:49
por Sergio38br
tenta

Código: Selecionar todos
sub procedure atualiza( dim byref ax as byte, dim byref texto_x[16] as string)
portc = ax
Lcd_Out(2,1," ")
Lcd_Out(2,1, texto_x)
end sub


use da forma
Código: Selecionar todos
porta = %11111111
mensagem = "CAM-1 ON! AV1"

atualiza(c,mensagem)


MensagemEnviado: 03 Out 2008 20:51
por welltom
Olá Sergio, Obrigado pela sua boa vontade em ajudar, mas confesso que ainda não
estou conseguindo definir no inicio avariaveis (mensagem e porta) que serão passada como parametros quando chamo a procedure atualiza
estou postando partes do meu código para que inclusive o anicio do
programa para você possa ajudar eu definir as declarações destas variaveis, por que eu não sei, se devo declaro como contantes ou de
outra forma!

program SW_IASD

dim kp,kt as byte
const porta = %11110000
const mensagem = " CAM-1 ON! AV1"


sub procedure Atualiza(dim ax as byte, dim byref texto_x[16] as string)
portc = ax
Lcd_Out(2,1," ")
Lcd_Out(2,1, texto_x)
end sub

main:
cmcon = 0x07
trisc = 0
portc = 0
Keypad_Init(PORTD)
Lcd_Init(PORTB)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF)
Lcd_Out(1,1," SWITCHES AV")
delay_ms(3000)
Lcd_Out(2,1," By-WA")
delay_ms(3000)
Lcd_Out(2,1," ")
Lcd_Out(2,1," Press [Keys]")

while TRUE
kt = 0
kp = 0
while kp = 0
kp = Keypad_Released
wend
if kp > 10 then
kt=kp+54
else
kt=kp+47
end if

if kt = "0" then
Atualiza(porta,mensagem)
end if

wend
end.

Wellington

MensagemEnviado: 04 Out 2008 08:30
por Sergio38br
bem vamos la, vc cometeu pela rapida olhada em seu código dois erros, usou uma palavra proibida *porta* existe um PORTA no pic e o mibrobasic não faz distinção entre maiúscula e minúsculas. Um declaração de constante é sempre uma constante , o valor naum pode mudar.

Código: Selecionar todos
program SW_IASD
'********************************************************
' Declarations (globals):
'********************************************************
'neste campo vc declara os include que se fazerem necessarios
'ex.:  tratamento de string , vc vai necessitar incluir uma
'      biblioteca propria
'********************************************************
' symbols declarations


'********************************************************
' constants declarations
'********************************************************


'********************************************************
' variables declarations
'********************************************************
'neste campo vc declara as variaveis que serão usadas em
'todo o programa
'********************************************************
dim kp,kt as byte
'dim porta = %11110000 '<= nome proibido, existe um PORTA
                       ' no microcontrolador
dim xport as byte
dim mensagem as char[16] '= " CAM-1 ON! AV1"



'********************************************************
' functions declarations
'********************************************************

'********************************************************
' procedures declarations
'********************************************************
sub procedure Atualiza(dim ax as byte, dim byref texto_x as char[16])
    portc = ax
    Lcd_Out(2,1," ")
    Lcd_Out(2,1,texto_x)
end sub
'********************************************************
'* Program body:
'********************************************************
main:
     cmcon = 0x07
     trisc = 0
     portc = 0
Keypad_Init(PORTD)
Lcd_Init(PORTB)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF)
Lcd_Out(1,1," SWITCHES AV")
delay_ms(3000)
Lcd_Out(2,1," By-WA")
delay_ms(3000)
Lcd_Out(2,1," ")
Lcd_Out(2,1," Press [Keys]")
    while TRUE
      kt = 0
      kp = 0

         while kp = 0
               kp = Keypad_Released
         wend

      if kp > 10 then
         kt=kp+54
      else
          kt=kp+47
      end if

      if kt = "0" then
         mensagem = " CAM-1 ON! AV1"
         Atualiza(xport,mensagem)
      end if
     wend
end.

MensagemEnviado: 04 Out 2008 11:29
por Djalma Toledo Rodrigues
As msg ficam em Variáveis ou Constantes

Passa o conteudo dessas variáveis para um Buffer**

E este Buffer é que irá atualizar o LCD.

(**) Buffer também é uma variável mas com dimensão = LCD

MensagemEnviado: 04 Out 2008 12:13
por fabim
pessoal, o que ele quer exatamente.?

eu estou lendo mais não consegui interpretar a necessidade dele!!

Fabim

MensagemEnviado: 04 Out 2008 14:28
por Sergio38br
Coisinha basica! o mikrobasic ta no modo demo, só 2k de codigo, fora uma variavel com o nome de um registrador....


[ ]`s
Sergio

MensagemEnviado: 04 Out 2008 20:38
por welltom
Pessoal valeu pela ajuda,
Agora o programa funcionou perfeitamente, só fiquei chateado,
por que tenha que chamar a sub procedure + de 15 vezes, ai
acontenceu o estouro do limite maximo de 2k para programas
disponivel na versão demo do mikroBasic.
Obrigado!
Wellington