Ir ao conteúdo

Programar PIC com C, assemble ou Basic?


queirozfl

Posts recomendados

Postado

Boa noite Amigos doidos de Forum.....rsrsrs

O Forum do Clube do Hardware é mais que um forum, é uma Familia.

Aprendemos muitas coisas legais com varios amigos inteligentes.

Vamos ao assunto.

Pessoal to querendo programar um PIC porém nunca programei um e não manjo nada de PIC, bom não posso dizer nada ando lendo bastante de PIC e as linguagens Basci, C e Assamble.

1º Gostaria de sabem qual a mais fácil ou a melhor linguagem para eu programar. Eu estou estudando assemble por causa da base e pretendo programar com Basic achei mais fácil do que C. Como eu ja programei em outra linguagem de alto nivel Orientada a Objeto, tais como java, php e asp, eu percebi que o basic tem uma semelhança com asp.

porém eu estou com algumas duvidas e não achei nenhuma apostila ou tutorial que me tire essas duvidas.

mais tenho algumas duvidas tipo que seria ACC, CJNE, LCALL, SJMP etc.. essas comandos eu não achei em nenhum livro. Eu peguei para ler o "Laboratorio de Microcontroladores Familia 8051" para ter uma ideia do assemble.

As logicas eu entendi fácil sa chamadas de função não é dão difícil.

Se alguem poder me indicar um livro bom de basic para PIC ou alguma apostila.

Não estou tão perdido, só preciso achar o caminho certo que eu me acho fácil.

O programa que quero fazer é simples, para ligar e desligar porta logica do PIC, mais quero ligar ex a port A com uma seguencia nas portas de entrada exemplo:

Para ligar a porta A eu preciso ligar a entrada A + B juntos depois c + a, que seria dois comandos em binarios 0011 e 0101. Mais precisa quero criar uma seguencia para cada porta. Eu tava pensando em uma logica tipo de CASE com varios CASE. Mais depois eu pensei o seguinte imagina que eu crio uma sequencia A somente 0001 para ligar uma porta x e tambem crio uma seguencia B 0001, 0101 para ligar uma porta y. Mais se for em case quando eu digirar 0001 ele ja liga a porta x.

Alguem tem ideia ou pode me ajudar?

Postado

Oi amigo, Da uma olhada aqui:

http://forum.clubedohardware.com.br/pic-iniciando-basico/611417

Se você usar este compilador (grátis) e se esforçar aprende rapidinho...

e no caso do BASIC os comandos na maioria já vem em bibliotecas...

Estava esquecendo...chequei a comprar um livro para BASIC e tive uma decepção

pois nada era que a tradução do Help do compilador Microe-basic

Tudo bem que tinha lá uns exemplos a mais, porém nada que não se aprende sozinho

voce vai se dar muito bem com este compilador, eu adorei e olha que eu só sabia usar if e and's no access

Abraço Ps: não deu pra entender seu raciocínio nas portas explique com mais detalhes.

Postado
Oi amigo, Da uma olhada aqui:

http://forum.clubedohardware.com.br/pic-iniciando-basico/611417

Se você usar este compilador (grátis) e se esforçar aprende rapidinho...

e no caso do BASIC os comandos na maioria já vem em bibliotecas...

Estava esquecendo...chequei a comprar um livro para BASIC e tive uma decepção

pois nada era que a tradução do Help do compilador Microe-basic

Tudo bem que tinha lá uns exemplos a mais, porém nada que não se aprende sozinho

voce vai se dar muito bem com este compilador, eu adorei e olha que eu só sabia usar if e and's no access

Abraço Ps: não deu pra entender seu raciocínio nas portas explique com mais detalhes.

Amigo obrigado por responder, eu ja tinha dado uma lida nesse topico mais não cheguei a testar o compilador... acabei de baixar ele.

Sobre a logica é o seguinte

Vou usar 4 portas de entrada e 8 portas de saida no PIC.

para ligar uma porta x do pic eu quero fazer uma combinação com as portas de entrada, exemplo:

Preciso mandar sinal na porta 1 e 2 ao mesmo tempo depois 2 e 3 ao mesmo tempo, para ligar uma porta x de saida.

mais eu não tenho nem ideia porque imagina q eu crio uma seguencia paracida só que com o final diferente, ele pode ligar um porta antes.

então eu tava pensando em aguma coisa tipo para comçar o programa. tipo eu ligo as porta de entrada 1,2,3,4 ai ele entra em modo de leitura e eu faço a combinação depois eu mando de novo 1,2,3,4 para finalizar a combinação

eu imaginei ter os botões 1,2,3,4 e um botão para todos de uma vez...

as combinações seriam feitas por botões!

Postado

Entre essas linguagens eu sugiro que você use aquela que entender melhor...

O basic é mais fácil de início pois você irá errar menos a sintaxe na hora de compilar, o C tem tantos ; e {} que você poderá passar horas procurando pelas falhas... bem chatinho de início.

Assembler... não vou dizer que é fácil ou é difícil... o assembler geralmente vai necessitar de muito trabalho, para o iniciante poderá ser algo de horas programando o que alguém experiente faria em alguns minutos, então se você não tem muita experiencia com lógica de programação vai ter um trabalho aí (e consequentemente irá aprender lógica eheheheh). O problema dele é a quantidade limitada de funções, então para fazer qualquer coisa um pouco mais complexa como uma diferenciação ou uma divisão você vai precisar criar isso usando apenas soma, subtração e "se for 0" "se não for 0"...

Eu comecei com Assembly, passei para o Basic e agora só trabalho com C.

Minha sugestão - Basic...

quanto a seu programa, escreve melhor o que ele deveria fazer ;)

Postado

Amigo conseguir fazer varios algoritimos, mais estou apanhando de um aqui e acho que é coisa boba.

ve se alguem consegue me ajudar no codigo

program Led_Sequencial

dim led1, led2, led3, led4, led5, led6, led7, incre, decre, botao1, botao2 as byte

dim cont as integer

trisb=0

trisa=1

cont = 500

led1=portb.0

led2=portb.1

led3=portb.2

led4=portb.3

led5=portb.4

led6=portb.5

led7=portb.6

botao1=porta.0

botao2=porta.1

incre=porta.2

decre=porta.3

sequencia1:

led1=1

delay_ms(cont)

led1=0

if (incre=1) then

cont = cont + 100

end if

if (descre=1 then

cont = cont - 100

end if

goto sequencia1

O erro é na variavel "cont" ele não aceita no delay_ms essa variavel, ja tentei colocar de varios tipo e não consigo, outra coisa tambem é o IF ele não incrementa ele da um erro e não faz a soma que eu quero....

o algorito é fara fazer led piscar, vão ter 4 botões, 2 para controlar a velocidade do pisca, os outros 2 cada um uma sequancia diferente. esse é só o começo, é onde estou com dificuldades.

eu ja crisei symbol cont = 500

ai ele aceita no delay_ms(cont)

mais não da para mudar o valor da variavel...

aguem tem ideia?

Postado

Caro queiroz,

porque você declarou sua variavel CONT como INTEGER?

Integer permite você uma faixa que vai de: -32768 à 32767 (16bits)

O delay nao aceitaria valores negativos certo?

Já tentou declarar como WORD( 0 - 35536)?

COnfere se isso muda alguma coisa meu caro.

Sucesso.

Abração,

R.Costa.

Postado
Caro queiroz,

porque você declarou sua variavel CONT como INTEGER?

Integer permite você uma faixa que vai de: -32768 à 32767 (16bits)

O delay nao aceitaria valores negativos certo?

Já tentou declarar como WORD( 0 - 35536)?

COnfere se isso muda alguma coisa meu caro.

Sucesso.

Abração,

R.Costa.

ja e tambem não deu.

eu declarei integer porque deduzi que seria inteiro, em outras linguagem é assim, como eu estou programando em basic só pelo conhecimento que tenho em outras linguagem ai sempre da essas travadinhas ai... até agora eu não achei nenhuma apostila de basic legal, mostrando como declara as variaveis, cria vetores e pilhas, se é que o basic da esse suporte.....

então tambem não consegui com word

Postado

digam .o queirozfl quer fazer o que eu tinha pedido em outro topico.

que é montar o sequencial de led ,mais com controle de velocidade ,então eu comentei sobre a dica que você deu digam de fazer varias rotinas .uma com delay de 400 outra com delay de 600 e colocar os switch de incrementar e de decrementar para selecionar essas rotinas e assim consequentemente mudando a velocidade da sequencia ..mais ae que o bicho ta pegando . para selecionar as rotinas ..

bom eu to acompanhando aqui de pertinho, até porque eu também to fuçando o programa aqui .

mais to no mesmo erro que o felipe qualquer ajuda sera bem vinda ..

abraços

Postado

Opa meu amigo Danilo!!

Pois é meu caro, estou notando essa dificuldade do amigo queiroz, que agora to sabendo está batalhando contigo nessa!;)

Enfim, to aqui pra ajudar no que me for possivel, uma vez que vocês sabem também que ainda não passo de um aprendiz ("de meia tijela" hihihi) no mundo dos MCUs e BASIC como linguagem escolhida.

Agora, amigo queiroz, SERÁ que se você declarasse CONT como CONSTANTE ao invés de VARIAVEL não resolveria esse problema? Eu estava aqui estudando e aproveitando pra "pensar" no problema que você esta passando ai na programação também e sendo assim, lembrei disso. Agora, desconsidere a minha ideia de declarar CONT como CONSTANTE se você realmente quiser que o CONT varie de valor com o programa rodando!!! Isso porque quando é constante, como você já deve saber tb, o valor dessa constante não pode sofrer qualquer alteração no programa já rodando!:rolleyes:

Enfim, se já conseguiu a solução, poderia nos mostrar?

Se ainda não conseguiu, aí fica mais uma ideia! E informo a vocês que continuarei a analisar e estudar quando estiver em casa.

Grande Abraço Pessol!

R.Costa.

Postado

Caro queiroz...

Mas você quer mesmo que o valor de CONT seja variável (mude) no meio do programa rodando? Senão, tenta declarar o CONT no inicio do programa como uma Constante. E depois tenta compilar! Vê se algo diferente acontece.

Sucesso.:)

R.Costa.

Postado
Opa meu amigo Danilo!!

Pois é meu caro, estou notando essa dificuldade do amigo queiroz, que agora to sabendo está batalhando contigo nessa!;)

Enfim, to aqui pra ajudar no que me for possivel, uma vez que vocês sabem também que ainda não passo de um aprendiz ("de meia tijela" hihihi) no mundo dos MCUs e BASIC como linguagem escolhida.

Agora, amigo queiroz, SERÁ que se você declarasse CONT como CONSTANTE ao invés de VARIAVEL não resolveria esse problema? Eu estava aqui estudando e aproveitando pra "pensar" no problema que você esta passando ai na programação também e sendo assim, lembrei disso. Agora, desconsidere a minha ideia de declarar CONT como CONSTANTE se você realmente quiser que o CONT varie de valor com o programa rodando!!! Isso porque quando é constante, como você já deve saber tb, o valor dessa constante não pode sofrer qualquer alteração no programa já rodando!:rolleyes:

Enfim, se já conseguiu a solução, poderia nos mostrar?

Se ainda não conseguiu, aí fica mais uma ideia! E informo a vocês que continuarei a analisar e estudar quando estiver em casa.

Grande Abraço Pessol!

R.Costa.

ainda não consegui a solução, ta meio difícil, mais vou testar como uma contante

Editado:

Amigos consegui resolver o problema, agradeço a todos.

resolução:

para usar uma variavel no delay_ms()

precisa usar o "Vdelay_ms(cont)"

funcionou de boa.......

o codigo ficou assim!

led1=1

Vdelay_ms(cont)

led1=0

if (incre=1) then

if (cont>0) and (cont<=900)then

cont = cont + 100

end if

end if

if (decre=1) then

if (cont>=200) and (cont<1000)then

cont = cont - 100

end if

end if

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!