Ir ao conteúdo
  • Cadastre-se

Tutorial de PIC - Programação em Assembly


Posts recomendados

Pessoal, há muito tempo que vinha planejando elaborar um tutorial de programação Assembly para microcontroladores PIC da Microchip e agora finalmente comecei a fazê-lo.

A primeira parte está pronta, tratando-se de um pisca LED.

Conforme as próximas partes forem ficando prontas irei atualizando o post.

Espero que gostem.

http://www.4shared.com/file/TWPgxQNx/Tutorial_de_Programao_Assembly.html

Edit: Parte 8 incluída.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pessoalmente, eu acho assembly uma linguagem muito "legal" para se trabalhar com pequenos projetos. O dominio da maquina é legal. Ontem mesmo eu estava com problema no oscilador interno de um PIC e para resolver fiz ele gerar com clock de 100kHz (1/40 da freq de oscilaçao), dai usei assembly com NOPs para ter precisão. Enfim, boa iniciativa.

Link para o comentário
Compartilhar em outros sites

Edu.se voce não usar ASM,mesmo que em rotinas num compilador C ou outro de alto nível,voce nunca terminará um grande projeto de alto desempenho pois os compiladores não tem acesso total aos registros e arquitetura de um Microcontrolador.

Exemplo é quando voce tenta rodar o programa não da flash mas de uma memória externa.

Úsando C,voce terá problemas com ponterios,ja em ASM voce apenas dará um salto para a localização onde começa o programa.

Zerar o conteudo da Ram e Flash então,complica ou deixa inviável se não for em ASM.

Eu mesmo usei muitas vezes C(Mikroc) para aprender a usar USB/HID,mas programo em ASM,mesmo para ARM ou DSPIC pois meus projetos pedem acessos precisos.

problema no oscilador interno de um PIC e para resolver fiz ele gerar com clock de 100kHz (1/40 da freq de oscilaçao),

voce estava com esse problema pois devia ter feito a rotina principal em ASM.

Lógico que programar em ASM exige muito conhecimento de HardWare e programação,mas aí esta a diferença entre programadores completos ou não.

Vejo muito nos forums de eletronica os iniciantes querendo programar um micro usando C do mesmo jeito que no Windows ou Linux,este é outro erro muito comum que confudem os iniciantes mas tem bons livros sobre C direcionado a microcontroladores.

Link para o comentário
Compartilhar em outros sites

Cara, acho que você nao intendu direito. Por algum motivo físico, o oscilador interno do PIC estava um pouco mais lento do que deveria. Usando o OSC tune eu ajustei para que ficasse correto. Para gerar eu preferi ASM porque em C eu iria precisar do timer para ter certeza da relaçao entre o clock interno e o clock que eu gerei.

Você já usou o próprio compilador em C da microchip? O Hi-tech lhe oferece acesso total a todos os registradores e bits do MCU.

Link para o comentário
Compartilhar em outros sites

Você já usou o próprio compilador em C da microchip? O Hi-tech lhe oferece acesso total a todos os registradores e bits do MCU.

A questão é o padrão C que tem que ser seguido e não o tipo de compilador.

Ponteiros não tem emdereços definidos,logo não são exatos.

Concordo que os melhores compiladores devem ser o do fabricante,mas a linguagem não pode sair dos padrões.

Ja tentou usar 'GOTO' para saltar para alguma subrotina em C?

Se voce usar mais de uma,com certeza o programa vai se perder.

Existe certos registradores que o compilador C vai usar para sí mesmo,então não fica disponível.

Eu acho que programar 100% em C (para microcontroladores) é dar um tiro no pé.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

Mulder_Fox boa noite uma pergunta porque devez inguando nao consigo copilar os programas em asemble dar erro de diretorio e porque todos os programas que estão copilados ficam com a cara { icone} do micro c e quando mplab fonciona fica com a cara { icone} dele ? tenho micro-c tenho ccs e mplab desculpe se nao fui muito clara pois ainda sou aprendiz rsrsrs

Link para o comentário
Compartilhar em outros sites

caroline cabral eu nunca usei o mikroC, nem o CCS, aliás, nunca escrevi nenhum programa em C.

Já aconteceu comigo de ocorrer um erro que talvez seja o mesmo que aconteceu com você.

No meu caso, o caminho até o arquivo .asm continha mais de 62 caracteres.

Veja se não foi isto que aconteceu.

Link para o comentário
Compartilhar em outros sites

No meu caso, o caminho até o arquivo .asm continha mais de 62 caracteres.
C:\DOCUMENTS AND SETTINGS\INVASOR\DESKTOP\KIT PICLAB16F628A A\EXEMPLOS\EXEMPLOS ASSEMBLY\USART_TX\USART_TX.ASM 131 : Register

Normalmete quando programa, ponho os arquivos no disco local (C:\) que é o caminho mais curto. voce arquivou no ambiente de trabalho e o caminho ficou muito extenso, embora que a indicaçao de erro nao apontou isso.

Link para o comentário
Compartilhar em outros sites

acho que consegui com mplab 8 mas vira e mexe dar esse erro nao quero tirar o foco deste anuncio mais alguem pode postar a sequencia para criar um progetinho em asm ou asociar um progetinho que ja esteja pronto ate o momento da copilaçao desde ja agradeço . e tudo de bom alias bom feriado pra todos vocês

Link para o comentário
Compartilhar em outros sites

alguem pode postar a sequencia para criar um progetinho em asm ou asociar um progetinho que ja esteja pronto ate o momento da copilaçao

Criei esse porjecto recentemente, só nao posso postar a sequencia até a compilaçao porque nao estou em casa.

;--------------------------------------------------------------

;Este projecto é uma Automatização para Furação de Caixas -

; -

;criado por LeoPUENA aos 18.04.2011 -

;------------------------------------------------------------

list p=16f877

Include <p16f877.inc>

__Config _xt_osc & _wdt_off & _Cp_off & _pwrte_on

;********************************************************************

Digital equ b'00000110'

CBLOCK 20H

ATRASO

POSICAO

FLAG2

FLAG

DISPLAY

CONTADOR

CODIGO

ENDC

#DEFINE BOB1 PORTB,0 ;------

#DEFINE BOB2 PORTB,1 ;BOBINAS DO MOTOR DE PASSO

#DEFINE BOB3 PORTB,2 ; (TAPETE ROLANTE)

#DEFINE BOB4 PORTB,3 ;------

#DEFINE SENSOR_C PORTC,0 ;SENSOR DE QUEDA DE CAIXA

#DEFINE SENSOR_P1 PORTC,1 ;------

#DEFINE SENSOR_P2 PORTC,2 ;SENSORES DE POSIÇÃO DO TAPETE

#DEFINE SENSOR_P3 PORTC,3 ;------

#DEFINE PIST2_A PORTD,0

#DEFINE PIST2_B PORTD,1

#DEFINE BROCA_A PORTD,2

#DEFINE BROCA_B PORTD,3

#DEFINE BROCA_L PORTC,4

#DEFINE PIST1_A PORTD,4

#DEFINE PIST1_B PORTD,5

#DEFINE ALIM PORTD,6

#DEFINE ON PORTE,0 ;BOTÃO DE INICIALIZAÇÃO

#DEFINE INI PORTE,1 ;BOTÃO DE RESET

#DEFINE LED PORTE,2

;PROGRAMA AS PORTAS

ORG 0x000 ;INICIO DA COMPILACAO

BSF STATUS,RP0 ;SELECIONA BANK 1

movlw Digital

movwf ADCON1

MOVLW 0X00 ;PROGRAMA TODOS OS BITS PARA OUT (00)

MOVWF TRISA ;NA PORTA A (0X00)

MOVLW 0X00 ;PROGRAMA TODOS OS BITS PARA OUT (0)

MOVWF TRISB ;NA PORTA B (00)

MOVLW 0X00

MOVWF TRISD

MOVLW B'00001111'

MOVWF TRISC

MOVLW 0X03

MOVWF TRISE

movlw b'10000111'

movwf Option_reg

BCF STATUS,RP0 ;VOLTA AO BANK 0

;FIM DA configuração ENTRA NO LOOP PRINCIPAL

clrf intcon

INICIO

CLRF PORTA

CLRF PORTC

CLRF PORTD

CLRF PORTB

CLRF PORTE

CLRF FLAG

CLRF FLAG2

MOVLW D'9'

MOVWF DISPLAY

;********************************************************************

MAIN

MOVLW D'100'

MOVWF FLAG

MOVLW D'20'

MOVWF FLAG2

BSF LED

BTFSC INI

GOTO INICIO

BTFSS ON

GOTO $-3

BCF LED

LOOP

MOVLW D'100'

MOVWF FLAG

MOVLW D'20'

MOVWF FLAG2

CALL AVANCA

BTFSS SENSOR_P1

GOTO $-2

BSF ALIM

CALL DELAY

BTFSC SENSOR_C

GOTO $+4

DECFSZ FLAG

GOTO $-4

GOTO ALERT

BCF ALIM

BTFSC INI

GOTO MAIN

CALL AVANCA

BTFSS SENSOR_P2

GOTO $-4

BSF BROCA_A

BSF PIST1_B

CALL PAUSA

BCF BROCA_A

BCF PIST1_B

BSF BROCA_L

CALL DELAY

CALL DELAY

BCF BROCA_L

CALL DELAY

CALL DELAY

DECFSZ FLAG2

GOTO $-7

BSF BROCA_B

BSF PIST1_A

CALL PAUSA

BCF BROCA_B

BCF PIST1_A

BTFSC INI

GOTO INICIO

CALL AVANCA

BTFSS SENSOR_P3

GOTO $-4

BSF PIST2_A

CALL PAUSA5

BCF PIST2_A

CALL DELAY

CALL DELAY

BSF PIST2_B

CALL PAUSA5

BCF PIST2_B

BTFSC INI

GOTO INICIO

INCF PORTA

DECFSZ DISPLAY

GOTO LOOP

GOTO FIM

ALERT

MOVLW 0X0E

MOVWF PORTA

BSF LED

CALL DELAY

CALL DELAY

BCF LED

CALL DELAY

CALL DELAY

BTFSS INI

GOTO ALERT

GOTO INICIO

FIM

CALL PAUSA

MOVLW 0X0F

MOVWF PORTA

BSF LED

CALL DELAY

CALL DELAY

BCF LED

CALL DELAY

CALL DELAY

BTFSS INI

GOTO $-7

GOTO INICIO

;********************************************************************

;*****************************VELOCIDADES****************************

AVANCA ;AVANÇAR O TAPETE COM VELOCIDADE 1

MOVLW B'00001000'

MOVWF PORTB

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

MOVLW B'00000100'

MOVWF PORTB

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

MOVLW B'00000010'

MOVWF PORTB

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

MOVLW B'00000001'

MOVWF PORTB

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

RETURN

;********************************************************************

;********************************************************************

;=======================================================================

;=======================================================================

PAUSA

MOVLW D'100'

MOVWF ATRASO

PAUSA1

CALL DELAY

DECFSZ ATRASO

GOTO PAUSA1

RETURN

;=======================================================================

PAUSA5

MOVLW D'50'

MOVWF ATRASO

PAUSA15

CALL DELAY

DECFSZ ATRASO

GOTO PAUSA15

RETURN

;---------------------------------DELAY de 10ms------------------------------

DELAY

movlw d'217'

movwf TMR0

bcf INTCON,T0IF

btfss INTCON,T0IF

goto $-1

return

END ;FIM DA COMPILACAO

Link para o comentário
Compartilhar em outros sites

caroline cabral, o que você postou não é um erro, é apenas uma mensagem de advertência.

O texto que você postou está incompleto, mas, creio que seja a mensagem de que o registrador acessado pela instrução da linha 131 não está no banco 0.

É apenas um alerta para o programador verificar se setou o banco corretamente.

Os erros vem antecedidos da palavra ERROR e não MESSAGE.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...