Ir ao conteúdo

Programar PIC em C


CIS

Posts recomendados

Postado

galera, o q vem a ser "programar bit a bit", não estou entendo muito bem (assembly).quando um pic tem por exemplo "tantos bits flash", tantos bits ram" etc...

de repente alguem pode me ajudar...

Postado

ram é a memória volátil do seu micro, ou seja, é aquela memoria que será utilizada para execução do seu programa. É aonde estão localizados os registros e variáveis... Por exemplo, ter 128 bytes de ram, a grosso modo, significa que voce pode armazenar durante a execução do seu programa 1024 bits neste espaço.

Mas você deve estudar o mapa de memória ram do micro, pois nem todo o espaço da ram é pra uso geral... o micro utiliza a ram para armazenar registros especiais, endeços não sei do que ... então fique atento ao espaço que poderá ser utilizado por voce no seu programa...

na memoria flash é guardado o seu programa em si: todas as instruções, dados, etc... trata-se de uma memória não volátil, portanto, terá a possibilidade apenas de ler as informações dali durante a execução das suas rotinas ...

porque, para se gravar na flash, é necessário condições elétricas especificas e tal e tal ...

Postado

DEV c++ é um compilador em C para PCs. Para PIC tem alguns como HI-TECH (versão lite é free pela microchip), CCS é pago. Encontra-se outros na net, mas que eu ja usei são esses dois. Assim como colegas acima iniciei em ASM, é muito bom para se entender como as coisas ocorrem dentro do MCU. Depois que se domina o hardware passar para C é uma opção para facilitar a sua vida e se despreocupar com configurações.

Como aprendi ASM na aula não tenho apostilas nem material on-line. Meu professor explicava tudo em cima do datsheet e agora tudo que preciso eu encontro lá. O problema e iniciar baseado no datasheet. Uma dica é utilizar o arquivo que a propria microchip libera com as configurações e tudo para iniciar um programa ta dentro da pasta MPASM do MPLAB.

Postado

Eu, particularmente gosto muito do compilador MikroC. As bibliotecas são muito completas, com coisas de bem alto nível e os exemplos são excelentes!

Saudações

Postado

pessoal, sera que alguem tem um exemplo simples de uma programa em assembly, e outro em C para o pic 12F675... algum programa fonte simples... que possa me ajudar a entender esse pic...

  CIS disse:
pessoal, sera que alguem tem um exemplo simples de uma programa em assembly, e outro em C para o pic 12F675... algum programa fonte simples... que possa me ajudar a entender esse pic...

to precisando de ajuda com esse PIC 12F675... to precisando montar um temporizador ( ligado por 5 segundos e desligado por 2 horas )... ja tenho todo o hardware para o funcionamento, mas to perdido na parte de programação do PIC...o hardware usa um LM 7805, na entrada da alimentação do PIC e um triac BT136/600E na saida do pic para o motor de 110 volts/4 rpm...

é um temporizador para chocadeira... se alguem puder me ajudar com detalhes da programação e/ou outros exemplos de temporizadores com essas caracteristicas

valeu pessoal!!!!!!

Postado

Vamos la,

Acho que entendi sua dúvida, é a mesma que muitos (incluindo eu) ja tiveram ao iniciar em programação,

Vou passar abaixo um código em branco mostrando o que deve ter, use - o como base para outros códigos futuros:



;PROGRAMA padrão EM ASSEMBLY
;PROJETO: *coloque o nome do seu projeto aqui
;AUTOR: *coloque o nome do autor aqui


#include <P12F675> ;arquivo com definicoes do PIC

;DIRETIVA _CONFIG
;* essa diretiva determina o modo de operacao do microcontrolador, veja o exemplo:

__CONFIG _CP_OFF & _INTRC_OSC & _WDT_OFF & _MCLRE_OFF
;aqui: protecao programa - desl
; oscilador interno
; watchdog - desl
; reset - desl

;DEFINES E ASSOCIACOES
;*sao uteis pois facilitam o entendimento do codigo veja o exemplo

#define TRIAC GPIO,0 ; associa o nome TRIAC ao pino GP0 (vide datasheet)

#define TEMPO 249 ;associa a palavra tempo ao valor 249

;DECLARACAO DE VARIAVES
; *Em assembly existe um jeito peculiar de declarar variaveis ja que somos nos
; que alocamos direto na memoria, para simplificar vou mostrar o comando CBLOCK

CBLOCK 0x20 ;declaramos as variaveis a partir do endereco 20H da RAM

delay0 ;declarei uma variavel de 8bits
delay1 ; declarei outra de 8bits

ENDC ;obrigatorio para terminar o comando CBLOCK


;VETORES INICIAIS
;* aqui definimos os vetores de inicio de programa e de interrupcoes, no geral aqui e ;bem padrão:

ORG 0x00
GOTO INCIO ; quando inicia o programa vai para o endereco INICIO

ORG 0x04
GOTO INTERRUPCAO ;quando houver uma interrupcao ele pula pra rotina que voce
;determina

INTERRUPCAO:
;*escreva sua rotina de interrupcao aqui*

RETFIE ;obrigatorio para sair da interrupcao
INICIO:
;*escreva sua rotina de inicializacao aqui*

;*escreva seu codigo aqui

END ;obrigatorio no fim do codigo

Duvidas pergunte!

PS.: agora e sua vez de estudar o set de instrucoes e os registradores do PIC

Abs.

Postado
  Felipe_Eletronic disse:
Vamos la,

Acho que entendi sua dúvida, é a mesma que muitos (incluindo eu) ja tiveram ao iniciar em programação,

Vou passar abaixo um código em branco mostrando o que deve ter, use - o como base para outros códigos futuros:



;PROGRAMA padrão EM ASSEMBLY
;PROJETO: *coloque o nome do seu projeto aqui
;AUTOR: *coloque o nome do autor aqui


#include <P12F675> ;arquivo com definicoes do PIC

;DIRETIVA _CONFIG
;* essa diretiva determina o modo de operacao do microcontrolador, veja o exemplo:

__CONFIG _CP_OFF & _INTRC_OSC & _WDT_OFF & _MCLRE_OFF
;aqui: protecao programa - desl
; oscilador interno
; watchdog - desl
; reset - desl

;DEFINES E ASSOCIACOES
;*sao uteis pois facilitam o entendimento do codigo veja o exemplo

#define TRIAC GPIO,0 ; associa o nome TRIAC ao pino GP0 (vide datasheet)

#define TEMPO 249 ;associa a palavra tempo ao valor 249

;DECLARACAO DE VARIAVES
; *Em assembly existe um jeito peculiar de declarar variaveis ja que somos nos
; que alocamos direto na memoria, para simplificar vou mostrar o comando CBLOCK

CBLOCK 0x20 ;declaramos as variaveis a partir do endereco 20H da RAM

delay0 ;declarei uma variavel de 8bits
delay1 ; declarei outra de 8bits

ENDC ;obrigatorio para terminar o comando CBLOCK


;VETORES INICIAIS
;* aqui definimos os vetores de inicio de programa e de interrupcoes, no geral aqui e ;bem padrão:

ORG 0x00
GOTO INCIO ; quando inicia o programa vai para o endereco INICIO

ORG 0x04
GOTO INTERRUPCAO ;quando houver uma interrupcao ele pula pra rotina que voce
;determina

INTERRUPCAO:
;*escreva sua rotina de interrupcao aqui*

RETFIE ;obrigatorio para sair da interrupcao
INICIO:
;*escreva sua rotina de inicializacao aqui*

;*escreva seu codigo aqui

END ;obrigatorio no fim do codigo

Duvidas pergunte!

PS.: agora e sua vez de estudar o set de instrucoes e os registradores do PIC

Abs.

Belleza Felipe! obrigado pela dica, mas como iniciar os estudos do set de instruções e os registradores do PIC??

se tiver mais dicas, eu tenho o data sheet do PIC 12F675, mas esta em inglês...não to entendendo muita coisa

valeu! Obrigado!

Postado

Procure na pasta do MPLAB

microchip>mplab>mpasm

La dentro tem os arquivocs padrões da microchip com includes diretivas e inclusive a rotina para interrupção salvando pclath, status e w. Procura pelo PIC que tu estas usando que vem tudo pronto, só sair direto programando.

Postado
  Citação
Belleza Felipe! obrigado pela dica, mas como iniciar os estudos do set de instruções e os registradores do PIC??

se tiver mais dicas, eu tenho o data sheet do PIC 12F675, mas esta em inglês...não to entendendo muita coisa

valeu! Obrigado!

voce tem que ler o datasheet,nele voce tem toda a estrutura e funções dos registros do micro,o inglês é nescessário,ou ficará dependente de publicações em portugues(aí ja viu né...).

  • 2 semanas depois...
Postado

pessoal, to pensando num PC so pra fazer programação de pic... qual seria uma boa configuração...tipo processador, ram, essas coisas...

Postado

Um PC só para programar PIC,não exige nada de especial.

Escolha um PC que tenha porta serial e paralela para voce aproveitar uma grande quantidade de gravadores e exemplos de circuitos que usam os dois na internet.

Postado

duvidas no assembly....

pessoal, pra eu usar um pic como temporizador, programando em assembly, como devo escrever o tempo que ele vai ficar ligado e desligado...devo escrever em segundos??? ou devo considerar a frequencia do oscilador??? com calcular o tempo pra isso, existe uma formula??? o temporizador ja foi citado aqui neste tópico (5 segundos ligado e 2 horas desligado, sendo que deve funcionar este ciclo enquanto tiver alimentação )

e mais uma

programador de computador e analista de sistemas e a mesma coisa????

valeu pessoal, obrigado pela ajuda.........

Postado

Olá tudo bem ? Vi que você está iniciando no mundo dos microcontroladores.Bom, eu discordo um pouquinho do pessoal, acho que é importante você conhecer a arquitetura do Microcontrolador, mas começar em Assembly não dá.A lingugem C trabalha tanto em baixo nível quanto em alto nível, iniciar com Assembly seria talvez muito desmotivante para o iniciante , eu não recomerndaria visto que C é uma linguagem relativamente simples . Se você quer um apostila bacana de C ( Geral ) segue aí o link : http://www.matcomp.dcc.ufmg.br/index.php/artigos/apostilas/16-cursoc , essa apostila é muito boa e didática , mas como seu objetivo é Microcontroladores tem um livro de C voltado para Microcontroladores e que usa o CCS como compilador : http://mecatronicadegaragem.blogspot.com/2011/01/livro-programacao-do-pic-em-c-completo.html . Se você quer aprender um pouco de C (geral ) sugiro que use o IDE Code::Blocks, bem melhor que o Devc++ . Se você quer iniciar com programas simples para microcontrolador procure por "Acionar Led com PIC" no youtube tem um monte , entre eles tem esse :

, é meio tosco mas no começo pode te ajudar.

Tem um outro tutorial bacana também e bem simples , esse foi feito no MikroC outro compilador muito bom.Fiz essse tutorial quando estava iniciando e me ajudou bastante, fiquei super feliz de ter conseguido executar, depois disso, não parei mais e hoje faço coisas mais complexas. Me mande uma MP contendo seu e-mail que te passo esse tutorial.

Postado

Linguagem C para PIC,use a linha da Microchip,não se aventure a outros pois não terá uma base completo de funções,só a Microchip fornece todas as informações em C ou ASM(nativa de um micro) por completo.

Postado

Bom dia pessoal!!!! para os iniciantes como eu no mundo dos pics... tava vendo no youtube uma sequencia de tres videos e que me ajudou bastante...não tenho o link aqui, mas acredito que na busca por __ curso de microntroladores pic __ no site youtube encontraram facilmente, o audio é em espanhol, mas esta muito bom, foram postados por joserafa... vou tentar buscar os links e postar aqui...

valeu pessoal!!!!!!!!!!!!!

1º link ( microcontroladores parte 1)

2º link ( parte 2 )

3º link ( parte 3 )

espero ajudar alguem com isso!!!!!!!!!!!!kkkkkkkkkkkkk

valeu!!!!!!!!!!!

Postado
  Citação
mas começar em Assembly não dá

Porque não? Microcontroladores não são eletrônica digital? Se sim porque não ir a fundo do set de instruções e da linguagem de máquina antes de sair subindo...cada uma viu...

  Citação
Microcontroladores tem um livro de C voltado para Microcontroladores e que usa o CCS como compilador

Torno a repetir quando chegar na hora de usar C (sim utilizo ambas as linguagens, meu método é o melhor de cada mundo) escolha um compilador de verdade, que te ofereça controle eficiente de I/O, obedeça a norma ANSI, e seja amigavel com a arquitetura do microcontrolador, detalhe a arquitetura do PIC16 ouPIC12 não é "C friendly".

  Citação
A lingugem C trabalha tanto em baixo nível quanto em alto nível

cuidado para não confundir inline assembly com linguagem de baixo nível usando o set de instruções diretamente, apesar de parecidos, dependendo do seu compilador e da forma que se usa o inline asm haverá diferença de desempenho e controle sim.

  Citação
C é uma linguagem relativamente simples

De mesmo modo como ASM tem sua parte broxante, C também tem...ainda mais quando ele chegar no conhecido matador de pseudo-programadores em C...os ponteiros

Pensem nisso!

Abs.

Postado

amigos, sera que tem uma versão mais recente do MPLAB IDE para WINDOWS 7...

so to conseguindo uma versão que verm como MPLAB TOOLS... baixado do site da microchip, mas to encontrando dificuldades, mesmo seguindo o TUTORIAL do MULDER FOX...

se alguem tiver alguma dica..........

Postado
  Citação
amigos, sera que tem uma versão mais recente do MPLAB IDE para WINDOWS 7...

Acho que a familia 8 deve estar na versão 8.76:

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469∂=SW007002

Se tiver coragem, cai pra cima da versão X, eu estou usando ela é bem legal lembra bem uma IDE em ecplise:

http://www.microchip.com/en_US/family/mplabx/index.html

Abs.

Postado

pessoal, alguem sabe me dizer porque e quando usar os registradores TRIS e PORT, na programação de pic em assembly???

porque e quando devo usar TRIS??

porque e quando usar o PORT??

Postado

Nos registradores TRISX você configura cada pino como entrada ou saída.

Nos registradores PORTX você faz a leitura do nível lógico do pino, quando configurado como entrada ou altera o seu nível quando configurado como saída.

Quando um pino estiver configurado como entrada, o nível lógico presente nele poderá ser verificado fazendo-se a leitura do valor do bit correspondente. Se o valor do bit é igual a 1, então o nível lógico no pino é alto e vice-versa.

Por exemplo, suponhamos que o pino RB2 esteja configurado como entrada.

Para sabermos qual é o seu nível lógico, fazemos a leitura do bit 2 do registrador PORTB.

Para o pino RA6, lemos o bit 6 do PORTA e assim por diante.

Se um pino estiver configurado como saída, e quisermos levar o seu nível para alto, tornamos o valor do seu bit correspondente igual a 1. Para levar o pino para nível baixo, tornamos o valor do bit correspondente igual a 0, ou seja, controlando o valor do bit controlamos o nível no pino.

Postado
  Mulder_Fox disse:
Nos registradores TRISX você configura cada pino como entrada ou saída.

Nos registradores PORTX você faz a leitura do nível lógico do pino, quando configurado como entrada ou altera o seu nível quando configurado como saída.

Quando um pino estiver configurado como entrada, o nível lógico presente nele poderá ser verificado fazendo-se a leitura do valor do bit correspondente. Se o valor do bit é igual a 1, então o nível lógico no pino é alto e vice-versa.

Por exemplo, suponhamos que o pino RB2 esteja configurado como entrada.

Para sabermos qual é o seu nível lógico, fazemos a leitura do bit 2 do registrador PORTB.

Para o pino RA6, lemos o bit 6 do PORTA e assim por diante.

Se um pino estiver configurado como saída, e quisermos levar o seu nível para alto, tornamos o valor do seu bit correspondente igual a 1. Para levar o pino para nível baixo, tornamos o valor do bit correspondente igual a 0, ou seja, controlando o valor do bit controlamos o nível no pino.

beleza!to seguindo seu tutorial! kkkkkkkkk

mas então fica o seguinte, se tanto o TRISX quanto o PORTX eu consigo mudar o estado logico dos pinos, então tanto faz escrever em um ou no outro, ou não ??? a grande questão é:Quando usar TRISX e quando usar PORTX??

por exemplo:

movlw b'111111110'

movwf trisA ;defino RA0 como saida e demais como entrada

certo???

mas

movlw b'11111110'

movwf portA ;aqui não e a mesma coisa do exemplo acima?????

essa esta sendo a questão....kkk

  CIS disse:
beleza!to seguindo seu tutorial! kkkkkkkkk

mas então fica o seguinte, se tanto o TRISX quanto o PORTX eu consigo mudar o estado logico dos pinos, então tanto faz escrever em um ou no outro, ou não ??? a grande questão é:Quando usar TRISX e quando usar PORTX??

por exemplo:

movlw b'11111110'

movwf trisA ;defino RA0 como saida e demais como entrada

certo???

mas

movlw b'11111110'

movwf portA ;aqui não e a mesma coisa do exemplo acima?????

essa esta sendo a questão....kk

o primeiro exemplo passou um bit

Postado

Nos registradores TRISX, você apenas configura o pino como entrada ou saída, ou seja, se ele será um pino para entrada de dados ou para saída de dados.

Se você vai ligar um botão no pino, você o configura como entrada. Se vai ligar um LED, você o configura como saída.

Os registradores TRISX só servem para isso.

Se o pino estiver configurado como entrada, lendo o estado do bit do PORTX referente a ele, você sabe como está o pino, no caso de um botão, se ele está pressionado ou não.

Quando o pino está configurado como saída, pelo bit do PORTX, você comanda o estado do pino. Pode fazer o LED acender ou apagar.

Postado
  Mulder_Fox disse:
Nos registradores TRISX, você apenas configura o pino como entrada ou saída, ou seja, se ele será um pino para entrada de dados ou para saída de dados.

Se você vai ligar um botão no pino, você o configura como entrada. Se vai ligar um LED, você o configura como saída.

Os registradores TRISX só servem para isso.

Se o pino estiver configurado como entrada, lendo o estado do bit do PORTX referente a ele, você sabe como está o pino, no caso de um botão, se ele está pressionado ou não.

Quando o pino está configurado como saída, pelo bit do PORTX, você comanda o estado do pino. Pode fazer o LED acender ou apagar.

complicado!!!!!!!!kkkkkkkkk

não entendi muito ..........

tem como colocar exemplos de quando usar cada um??? e porque ??? e como vou fazer pra ler o bit???

e talves seja melhor eu tentando, tem um exemplo de um codigo pra acender um led com PIC12F675 ???

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!