Ajuda mikroBasic

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Ajuda mikroBasic

Mensagempor welltom » 03 Out 2008 07:45

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
welltom
Bit
 
Mensagens: 44
Registrado em: 30 Ago 2007 05:24

Mensagempor Sergio38br » 03 Out 2008 14:49

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)

Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor welltom » 03 Out 2008 20:51

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
welltom
Bit
 
Mensagens: 44
Registrado em: 30 Ago 2007 05:24

Mensagempor Sergio38br » 04 Out 2008 08:30

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.
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Djalma Toledo Rodrigues » 04 Out 2008 11:29

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
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor fabim » 04 Out 2008 12:13

pessoal, o que ele quer exatamente.?

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

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Sergio38br » 04 Out 2008 14:28

Coisinha basica! o mikrobasic ta no modo demo, só 2k de codigo, fora uma variavel com o nome de um registrador....


[ ]`s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor welltom » 04 Out 2008 20:38

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
welltom
Bit
 
Mensagens: 44
Registrado em: 30 Ago 2007 05:24


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x