Página 1 de 1
Ajuda mikroBasic

Enviado:
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

Enviado:
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)

Enviado:
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

Enviado:
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.

Enviado:
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

Enviado:
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

Enviado:
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

Enviado:
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