Ir ao conteúdo
  • Cadastre-se

Programar pic em Assembler!


douglas.anjos

Posts recomendados

Pessoal, o que vale é resolver o problema !

Já escutei muita coisa sobre linguagens, meu primeiro emprego foi numa empresa que usava computadores Apple ][ com hardware CP/M e vídeo Videx 80 colunas. Eu tinha de escrever programas em 2 Assembly's ao mesmo tempo, pois existiam 2 CPUS nesses micros, a 6502 e o Z-80, e toda hora um dos processadores passava o comando para o outro processador. Era uma coisa de louco pois as características das instruções dos 2 processadores não tinham nada a ver uma com a outra.

Depois, começamos a usar um IBM PC-XT poderosíssimo ( 8 Mhz !!!! ) , e então eu começei a fazer programas em Mbasic e chamando sub-rotinas em Assembler do 8088. O ganho de produtividade foi algo que ninguém imaginava, programas que demoravam semanas eram feitos em alguns dias.

Essa mesma filosofia eu usei profissionalmente até uns 15 anos atrás, usando o GWBASIC baseado em MS-DOS, e mais uma vez Assembler dos 80486 .....

Conclusão : depois de 3 linguagens Assembler diferentes, uns 5 ambientes diferentes de sistemas operacionais, 2 famílias de computadores totalmente diferentes, ainda querem que eu programe os Pics em Assembler ?????? Chega, estou velho demais para isso, estou com 49 anos, a cabeça não é mais a mesma de quando eu tinha 25, 35 anos. Cansei !!!!

Se eu posso fazer a mesma coisa usando Basic, tendo uma ferramenta poderosíssima de simulação de hardware e de software que é o PIC SIMULATOR IDE, em 1/10 do tempo do que eu levaria usando apenas Assembler, estou errado ?

Ainda recentemente, fiz um produto baseado em Pic para uma empresa, com um programa de mais de 1000 linhas , no Basic do Pic Simulator Ide, mas fui obrigado a escrever 5 funções em Assembler, pois eu tinha de me comunicar com um hardware SMBUS, e não tem como fazer isso só com o Basic do PSI.

O que quero que vocês entendam, principalmente a quem está iniciando, é que sempre conseguimos fazer as coisas de uma maneira bem mais fácil, se usarmos uma linguagem de alto nível para basear toda a lógica de programa, e caso seja mesmo necessário usar algo em Assembler, pode-se montar o programa em Assembler integrado à própria linguagem de alto nível !

Esta discussão foi longa no início do ano, e foi ela que me motivou a escrever o tutorial.

Não sou louco de negar o poder superior do Assembler, pois eu mesmo usava profissionalmente por muitos anos. Realmente existem situações em que nem a linguagem C pode resolver o problema, só mesmo com o Assembler e muito, mas muito conhecimento de todo o hardware do PIC.

Mas, para quem está iniciando, não vejo sentido em começar direto pelo Assembler. é mais ou menos obrigar uma pessoa a tirar carta de motorista de caminhão fora-de-estrada para ele dirigir um carro de passageiro.

Dominem primeiro uma linguagem fácil, que permita voce ver IMEDIATAMENTE o programa rodando no seu hardware simulado funcionar. Depois, como tudo na vida é uma evolução, aqueles que precisarem de mais poder e controle vão naturalmente aprender o Assembler.

A opinião do Felipe é bem correta, ele já passou pelo que eu passei, e sabe que o que importa é a capacidade do programador resolver o problema da maneira mais rápida possível.

Isto sim distingue um verdadeiro programador daqueles programadores "escovadores de bit" , que insistem em reinventar a roda em cada projeto, criando rotinas super complexas , que rodam em menos tempo que as outras, que possuem menos bytes que as outras, mas que quando um outro programador olha a listagem, fica sem entender nada ! Isso é péssimo hábito, pois quem programa tem de saber tornar o programa bem comentado e usar métodos fáceis de serem modificados por outras pessoas caso seja necessário.

Eu já peguei um projeto que era tocado por outro programador por uns 3 meses e nunca ficava pronto, o programa era tão complexo ( porque estava feito para economizar bytes ) que depois de analisar uma semana eu desistí, joguei tudo fora, e comecei do zero.

No final, tive de mudar a Eprom, pois a original era de 4k, o meu programa tinha quase 5K, e tive de usar uma Eprom de 8K.

Mas acabei o projeto em menos de 1 mes ! E o hardware de nosso aparelho pronto aumentou o custo em menos de 0,5 %.

Tempo é dinheiro, e produtividade é uma riqueza enorme. Hoje, o que as empresas pagam bem são aqueles profissionais que tenham excelente produtividade, seja a linguagem que for, o que importa é que o PIC funcione e a empresa ganhe dinheiro com o projeto o mais cedo possível.

Bom, chega de falar sobre esse mesmo assunto de novo, me desculpem, me empolguei hehehehe

Paulo

Link para o comentário
Compartilhar em outros sites

Um comentário para fechar minha opinião,

empresas , focam - se em produitividade e lucro, ou seja se o cara que programa não atende a isso, ele é facilmente descartado por outro que entenda.

Me dei conta disso vendo companheiros meus de bancada caindo um a um dentro da empresa, por simplesmente dizer: eu so programo em assembly por que é coisa de quem manja", muitas vezes me sentia deslocado por ser o unico programador que revesava os projetos em outro microcontroladores e linguagens de mais alto nível, mas com o tempo vi que isso é o diferencial de um desenvolvedor de dispositivos embarcados, o teu projeto deve acima de tudo atender a performance do cliente, não a tua essa é o segundo plano, não fiquei me limitando apenas com PIC, fui atras de outras plataformas, como o rejeitado por muitos "profissionais" o arduino, pela sua simplicidade de desenvolvimento, e pelos mcu de baixo custo da freescale, hoje me sinto preparado pra encarar qualquer ideia mirabolante do meu cliente, pois a disposição de ferramentas é grande, e isso é proporcinal a simplicidade ou não do desenvolvimento.

Tem mais, não é so programação, e sim hardware, o designer deve ssaber como se comporta seu hardware para passar a um desenvolvimento de software, não é simples mente faz o codigo e conecta o hardware nos pinos, é conhecer a maquina projetada como um todo. Esses certamente são designers profissionais@!

abs.

Link para o comentário
Compartilhar em outros sites

Ai vai uma pergunta polemica.

Eu comecei a uns 3 meses estudar PIC, mais lendo alguns tutoriais e arquivos baixados na net percebi q não era tão simples pela logica proposta em alguns foruns pois tinha programação, mais como nunca tentei lidar com programação ainda mais assembler.

Ai fica uma pergunta(aconselhavel), de onde e por onde devo continuar, sabendo que somente iniciei os estudos em assembler, e me deparei com um projeto simples e frustante, porque li; mudei; alterei; e estudei o fonte q me passaram neste tópico mais nada do danado do led ligar, e para completar acho q o 12f675 que tinha foi pro espaço, estou aberto a opiniões, sabendo que faço esta pergunta para quem entende muito sobra PIC's.

Desde já agradeço a todos q tem me ajudado neste tópico, mesmo sabendo que ainda não consegui concluir nenhum projeto, porque antes de tudo sabia que não seria baba lidar com microcontrolador, VALEU D+....

Link para o comentário
Compartilhar em outros sites

irei ser sincero, e espero q nao cause polemicas algumas ok.Comecei em asm,fiz ate alguns programas com ajuda do grande mulder fox, fiz um led piscar ,etc ,ai vi a apostila do amigao aphawk ,estudei,poxa muito mais simples,com simples comando faço o q com asm geravam linhas,ate consegui escreve num lcd coisa q no asm nao consegui ,a intençao nao e dizer q uma e melhor q a outra ,somente estou dizendo q no basic foi muito e bota fácil do q no asm.Hoje ja faço pwm ,display sete seg,display lcd facilmente.

Link para o comentário
Compartilhar em outros sites

Olá jorjeeletronico, gostaria de uma sugestão se possivel, acredito que com basic e o pic simulator ide seja fácil implementar. Preciso de um programa que monitore uma porta de entrada do pic, e acione portas de saida diferentes de acordo com o tempo em que a entrada se mantiver acionada. Não sei se fui claro mas acho q deu pra entender. Se alguem tiver uma sugestão agradeço...

Link para o comentário
Compartilhar em outros sites

Minha intenção sempre foi a de desmistificar a ideia de que programar microcontroladores em Assembly é difícil.

Se eu fosse programar profissionalmente, com certeza absoluta iria estudar linguagens de alto nível, pois, baseado nos relatos de quem usa, creio que o tempo que se leva para desenvolver um programa em C, por exemplo, é muito menor do que em Assembly.

No meu caso, eu gosto de entender como as coisas funcionam.

Por isto, não me conformo em simplesmente escrever uma linha de programa do tipo "delayms" sem saber o que está acontecendo.

Posso escrevê-la, mas, quero saber o que ela faz.

Eu consegui aprender a programar os microcontroladores em Assembly e não foi difícil.

Eu não tenho posição fechada a respeito de que deve-se começar pelo Assembly, é apenas um opinião.

Posso estar enganado, mas, creio que é melhor o técnico aprender o Assembly e depois partir para linguagens de alto nível.

Ou seja, não defendo a opinião de que deva ficar no Assembly.

Por exemplo, antigamente, um carpinteiro tinha que cortar as madeiras no serrote e furar com arco de pua.

Hoje, existem as ferramentas elétricas que reduziram demasiadamente o tempo e o esforço físico do trabalho.

Eu vejo as linguagens de alto nível desta forma. Uma ferramenta para agilizar o trabalho e reduzir o esforço.

Mas, de que adianta um engenheiro que não sabe do que é feito um tijolo?

Link para o comentário
Compartilhar em outros sites

Concordo mulder_fox, mas no meu caso que estou iniciando (iniciando mesmo), acho q com uma linguagem mais fácil da pra fazer alguma coisa acontecer mais rápido, entende, comecei com assembly mas ainda nao conseguir nem acender um led. então com o basic por exemplo ja deu p fazer alguma coisa, o q motiva muito quem ta começando.

mudando de assunto...

Continuo pedindo, quem puder me ajudar com o codigo q pedi na ultima postagem eu agradeço, se nao entenderam o q pedi me digam q eu tento explicar melhor

Abração galera...

Link para o comentário
Compartilhar em outros sites

Caramba, faz tempo ein, Mulder, Jorgeeletronico, um abraço para vocês !

Minha opinião é antiga e vocs já sabem, eu defendo prmeiro o CONHECIMENTO do hardware do PIC, tipo saber o que é que significa o módulo de PWM, o módulo de comunicação serial, o módulo de Timer/Counter, o módulo do conversor A/d, etc, etc, e SÓ DEPOIS disso se preocupar em programar, seja em qual linguagem for...

Aí, depois, acho que depende bastante das pretensões de cada um.

Quem quer ser um profissional com PIC's e viver disto, tem mesmo de conhecer o Assembler, pois nunca se sabe o que que encontraremos pela frente.

Mas mesmo assim nada impede de ser um Expert em Assembler, e escrever 90% do programa em Basic, para se ganhar produtividade.

Já para quem quer fazer pequenos trabalhos caseiros, para os hobbystas, eu acho melhor ir direto para o Basic, pois dá para fazer quase de tudo com ele.

Mesmo optando pelo Basic, o mais importante é conhecer o PIC SIMULATOR IDE, pois com ele voce escreve o programa, compila, ve o seu programa rodando, ve o hardware todo interagindo, e o melhor, percebemos de imediato o que está errado, e consertamos imediatamente.

Neste ponto, ele está muito à frente do MikroBasic.

Aliás, o melhor dos dois mundos era o pessoal do MikroBasic fazer o ambiente do PIC SIMULATOR IDE, aí sim, pois não tenho nenhuma dúvida que o MikroBasic é muito, mas muito mais poderoso que o Basic do PSI.

Mas, encontrar um erro num programa do MikroBasic demora dezenas de vezes a mais do que no PSI, e este é o motivo de eu não usar ele toda hora.

Agora, respondendo ao Douglas :

Cara, não desanime porque é assim mesmo que todos nós começamos !

voce não é um Engenheiro, nem um técnico com formação em Digital e CPU, então tem de aprender lendo, fuçando , dando cabeçadas mesmo !

Aprenda primeiro sobre o Hardware básico dos Pics, suas características, e como podemos usar as funções que queremos em nossos projetos.

Sem isso, o Assembler me parece muito difícil de entender se voce não está sabendo o que que cada instrução tem a ver com o hardware !

Mas não custa nada voce dar uma olhada no tutorial que eu escreví, principalmente as primeiras páginas, onde eu tento mostrar um pouco o que o hardware de um Pic pode fazer.

Veja os exemplos de programas que estão lá, e se voce achar mais fácil, invista seu tempo, instale o programa no seu micro, e acompanhe o tutorial fazendo os exemplos em seu próprio micro!

Não é vergonha nenhuma aprender primeiro o Basic com o PIC SIMULATOR IDE, nada te impede de depois voce ir para o assembler, e pode acreditar, será muito, mas muiiito mais fácil voce programar em Assembler depois que fizer alguns projetos em Basic.

Aqui é onde eu e o Mulder tivemos boas discussões no passado, lembra Mulder ? , eu acho mais fácil começar pelo Basic e depois ir ao Assembler, e o Mulder acha melhor ir pelo Assembler e depois passar para linguagens de alto nível, como o C e o Basic. Não podemos afirmar qual é a melhor maneira, pois ambos chegamos onde chegamos cada um da maneira que defendemos....

Mas ambos concordamos numa coisa : sem voce conhecer o hardware do PIC , nada vai adiantar !

Rafael, seja um pouco mais claro com o que voce quer fazer, especifique o que você quer dizer com monitorar uma porta do PIC, e quais as ações que voce precisa tomar em função do tempo de duração, pois ficou muito vago ok ?

Ah, Jorgeeletronico, fiquei contente em saber que voce está usando o PSI, legal, acho que voce entendeu o porque que eu insistia para voce ir pelo Basic. Agora, voce pode complementar seus programas usando rotinas em Assembler dentro do programa em Basic, compilar e ver seu programa funcionar , mesmo em Assembler, na simulação do hardware ! Experimente e vai se divertir muito e aprender mais sobre o Assembler.

Ah, e para todos verem como muitas vezes somos obrigados a usar o Assembler, coloco aqui um trecho de rotina de um projeto que me deixou louco, tive de incluir rotinas em Assembler para usar o PIC com SMBUS... e eu que falo que dá para fazer QUASE de tudo em Basic.... queimei minha lingua ! Mas fiz :

_______________________________________________________________________________

Proc smswrite(arg1 As Byte, arg2 As Byte, arg3 As Byte)

'FUNÇÃO QUE GRAVA O DISPOSITIVO NO ENDEREÇO COM O DADO

If arg1 = 1 Then Goto smsw1

If arg1 = 2 Then Goto smsw2

write_addr = 10100110b

read_addr = 10100111b

Toggle uso3

Goto smsw9

smsw1:

write_addr = 10100000b

read_addr = 10100001b

Toggle uso1

Goto smsw9

smsw2:

write_addr = 10100100b

read_addr = 10100101b

Toggle uso2

smsw9:

endereco = arg2

dado = arg3

Gosub smswriteas

End Proc

initsmbus:

'rotina de inicialização do SMBUS

ASM:SMSINIT: bcf STATUS,RP1

ASM: bsf STATUS,RP0

ASM: movlw 0XFF

ASM: bsf SSPSTAT,SMP

ASM: movlw 0x31

ASM: movwf SSPADD

ASM: clrf SSPCON2

ASM: bcf STATUS,RP0

ASM: movlw 00101000b

ASM: movwf SSPCON

ASM: bcf PIR1,SSPIF

ASM: bcf PIR2,BCLIF

ASM: retlw 0

Return

smsdiversos:

ASM:bstart: bcf STATUS,RP1

ASM: bcf STATUS,RP0

ASM: bcf PIR1,SSPIF

ASM: bsf STATUS,RP0

ASM: bsf SSPCON2,SEN

ASM: bcf STATUS,RP0

ASM:bstart_wait: btfss PIR1,SSPIF

ASM: goto bstart_wait

ASM: retlw 0

________________________________________________________________________________

Ou seja, tive de colocar algumas sub-rotinas em Assembler e chamar elas direto do Basic......

O programa completo tem 1547 linhas e quase 350 são em assembler.

A todos, deixo um abraço, e espero que em breve todos estejam usando os Pics, seja de que maneira escolherem !

Paulo

Link para o comentário
Compartilhar em outros sites

Então, senhores, deixe-me ser mais claro

preciso do seguinte: uma entrada onde colocarei um botão(por exemplo), e varias saidas onde serão colocados leds q serão acionadas dependendo do tempo q o botão de entrada se manter pressionado. Tipo pressiona 1 segundo ativa porta tal, 2 segundos outra porta, e assim por diante... espero ter sido mais claro, e desde ja agradeço a ajuda de todos.

Link para o comentário
Compartilhar em outros sites

Paulo, valeu d + esses seus "debates" pois pude comparar as opiniões de profissionais e tirar minha conclusão.

Meu caso, sou formado em eletrônica mais pude notar q para estudar hardware do PIC tem q ter bons, e eu digo bons mesmo, conhecimentos de eletrônica digital, e ainda fica mais difícil porq os data sheets são em inglês, vocês falaram tudo o q eu precisava de saber.

Agora, como é muito contrangedor investir (já tem 3meses)em um sistema q não vê nenhum resultado, seria bom fazer algo mais animador,vocês não acham?

Paulo pode me passar o link do tutorial q você se referiu na sua reposta?

Vou seguir como você disse, instalar o PSI e fazer tudo como se esta indicando no seu tutorial.

Agora, para os q me ajudaram muito no começo( eu digo q seria imposivel começar sem a ajuda de vocês), vai um abração e digo mais será de muito proveito o q já me ensinaram, mais preciso ver logo um led piscar kkkkkk.

Abração pra todos vocês, Felipe_Eletronic;Mulder_Fox;Jorge_Eletronico e Aphawk.

Link para o comentário
Compartilhar em outros sites

Opa, sem problema, Douglas, segue o link para o tópico, lá tem tudo, tem o link do tutorial, e tem também o link onde o pessoal coloca as dúvidas também ok ?

http://forum.clubedohardware.com.br/microcontroladores-circuitos-linguagens/594329

Olha, quando voce fala que ficou meses tentando e náo conseguiu nem fazer o Led piscar, eu me sinto recompensado em ter escrito o tutorial, e ainda mais motivado a terminar a segunda parte dele !

Um abraço, e boa sorte, Douglas, qualquer dúvida pergunte ok ?

Paulo

Link para o comentário
Compartilhar em outros sites

Valeu, vou segui todas as dicas q ne passaram, é disso mesmo q eu falava com meu primo Rafael.dias, pra q tanto esforço se se colocarmos um led em série com um resistor e uma Swhit funcionaria do mesmo jeito.

Mais com se trata de MCU não podemos pensar assim pois os projetos de MCU creio q vai muito mais além q ligar um simples 'led'.

ABS........;)

Link para o comentário
Compartilhar em outros sites

Me lembro sim aphawk.

Debater com um cara do seu nível, tanto de educação como de conhecimento é um ganho para qualquer um.

douglas.anjos, não desanima não cara.

Experimenta o Basic.

Só não vale desistir.

Estou quase decidido a fazer um tutorial de programação de PIC em Assembly.

Tem um colega aqui do fórum que está fazendo um.

Mas, vai demorar, pois, quero caprichar.

Link para o comentário
Compartilhar em outros sites

Valeu pelo empurrão q me deram.

Ai Jorge_Eletronico, consegui o esquema q tinha te prometido, lembra, o da torneira eletronica, só q não sei como posto o circuito, porque nunca postei nenhuma figura no forum, pode me dar dicas?

Como já tinha dito antes é simples e funciona legal. Rapidinho você monta mo Protoboard, Falou. Só não testei prq não tenho todos os componentes, vocês sabem né morar na ''roça'' é complicado num tem nada de material eletrônico, kkkkk................

Link para o comentário
Compartilhar em outros sites

Segue anexo o circuito de proximidade que foi usado em um projeto de torneira eletrônica.

Desculpa mais vai ser difícil postar a imagem proq ela ultrapassa o limite máximo de tamanho, ela tem 5.101KB.

Vou ver outra maneira.

Se você tivar orkut é so me passar o endereço eletrônico q t adiciono, a imagem está no meu album do orkut, Falou ou se preferir me de uma força pra que eu possa postar a imagem, porq assim fica pra todos os usuários e membros do forum, o que eu acho muito importante, porq se não fosse alguns tópicas com imagens eu nunca teria iniciado a trabalhar com PIC.

http://forum.clubedohardware.com.br/attachment.php?attachmentid=69528&stc=1&d=1252791862

Acho q agora deu certo só não consegui anexar a imagem mais o link de onde ele esta é esse, Falou.

Divirta-se.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Segue anexo o circuito de proximidade que foi usado em um projeto de torneira eletrônica.

Desculpa mais vai ser difícil postar a imagem proq ela ultrapassa o limite máximo de tamanho, ela tem 5.101KB.

Vou ver outra maneira.

Se você tivar orkut é so me passar o endereço eletrônico q t adiciono, a imagem está no meu album do orkut, Falou ou se preferir me de uma força pra que eu possa postar a imagem, porq assim fica pra todos os usuários e membros do forum, o que eu acho muito importante, porq se não fosse alguns tópicas com imagens eu nunca teria iniciado a trabalhar com PIC.

http://forum.clubedohardware.com.br/attachment.php?attachmentid=69528&stc=1&d=1252791862

Acho q agora deu certo só não consegui anexar a imagem mais o link de onde ele esta é esse, Falou.

Divirta-se.

O link acima aparece aqui como 'anexo inválido'.

Poste sua imagem no www.4shared.com

Crie uma conta gratuita e você terá até 5GB para hospedar seus arquivos.

Link para o comentário
Compartilhar em outros sites

Mulder, eu que agradeço a oportunidade de trocar idéias com todos vocês aqui do Fórum de Eletrônica !

O bom é que sempre TODOS saem ganhando alguma coisa, quando o debate é construtivo. Não apenas nós, que trocamos ideias direto, mas quem LÊ essa troca de experiências ganha muito !

voce tem um grande experiência com o Assembler, e com hardware também, tenho certeza de que vai fazer um excelente tutorial !

Se eu puder ajudar em algo, entre em contato direto ok ?

Aguardo seu tutorial ansiosamente !

Paulo

Link para o comentário
Compartilhar em outros sites

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