Ir ao conteúdo

Primeiro programinha liga-desliga no PIC....muitas dividas.


cralx2k

Posts recomendados

Postado

Ola a todos, espero que essas dividas nao deixem vocês desanimados por serem estão basicas....Obrigado

1- Posso fazer esse mesmo mesmo programa usando somente BANK0?

2- porque o registrador OPTION_REG for carregado com B'10000000'? poderia seria TMR0?

3- INTCON - porque a necessidade de delesligar todas as interrupcoes?

4- Registrador CMCON - porque foi usando esse endereco B'00000111"?

5- Como ficaria esse programinha usando somente PORTA?

6- Usando esse mesmos programinha teria com simplifica-lo?

****************************************************

Codigo:

	#INCLUDE	<P16f628.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

CBLOCK 0X20
ENDC

#DEFINE BOTAO PORTA,1
#DEFINE LED PORTA,0

ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA
CLRF PORTB

BANK1
MOVLW B'00000010'
MOVWF TRISA

MOVLW B'00000000'
MOVWF TRISB

MOVLW B'10000000'
MOVWF OPTION_REG

MOVLW B'00000000'
MOVWF INTCON

BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
BTFSC BOTAO
GOTO BOTAO_LIB
GOTO BOTAO_PRES

BOTAO_LIB
BCF LED
GOTO MAIN

BOTAO_PRES
BSF LED
GOTO MAIN
END

*****************************************************

porque estou recebendo essas msg durante a compilacao?

Release build of project `C:\Pic Projects\Led\Led1.disposable_mcp' started.

Language tool versions: MPASMWIN.exe v5.43, mplink.exe v4.41, mplib.exe v4.41

Thu Oct 27 12:56:45 2011

----------------------------------------------------------------------

Clean: Deleting intermediary and output files.

Clean: Done.

Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F628A "Led1.asm" /l"Led1.lst" /e"Led1.err"

Message[301] C:\PROGRAM FILES (X86)\MICROCHIP\MPASM SUITE\P16F628.INC 33 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)

Message[302] C:\PIC PROJECTS\LED\LED1.ASM 24 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\PIC PROJECTS\LED\LED1.ASM 27 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\PIC PROJECTS\LED\LED1.ASM 30 : Register in operand not in bank 0. Ensure that bank bits are correct.

Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p16F628A "Led1.o" /z__MPLAB_BUILD=1 /o"Led1.cof" /M"Led1.map" /W /x

MPLINK 4.41, Linker

Device Database Version 1.5

Copyright © 1998-2011 Microchip Technology Inc.

Errors : 0

Loaded C:\Pic Projects\Led\Led1.cof.

----------------------------------------------------------------------

Release build of project `C:\Pic Projects\Led\Led1.disposable_mcp' succeeded.

Language tool versions: MPASMWIN.exe v5.43, mplink.exe v4.41, mplib.exe v4.41

Thu Oct 27 12:56:47 2011

----------------------------------------------------------------------

BUILD SUCCEEDED

Postado
1- Posso fazer esse mesmo mesmo programa usando somente BANK0?

Não, não pode.

Alguns registradores especiais estão situados em outros bancos de memória diferente do banco0.

ex.: TRISA, TRISB, OPTION_REG,

O INTCON tem espelhos em todos os bancos, independente em qual banco estiver, sua instrução será bem sucedida.

2- porque o registrador OPTION_REG for carregado com B'10000000'? poderia seria TMR0?

,

O "B", significa que está enviando um valor binário para o PIC.

*bit 7 do registrador está setado para "1" porque está indicando que não utilizará os resistores de pull-up internos do PIC.

3- INTCON - porque a necessidade de delesligar todas as interrupcoes?

Por não está utilizando interrupções em sua firmware.

isso evita que seu programa seja desviado para rotina de interrupção.

Registrador CMCON - porque foi usando esse endereco B'00000111"?

os primeiros 3 bits em 1, significa que o I/O analógicas do PORTA estarão desabilitadas, sendo assim, todos os I/O serão digitais.

5- Como ficaria esse programinha usando somente PORTA?


#INCLUDE <P16f628.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

CBLOCK 0X20
ENDC

#DEFINE BOTAO PORTA,1
#DEFINE LED PORTA,0

ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA

BANK1
MOVLW B'00000010'
MOVWF TRISA

MOVLW B'00000000'
MOVWF INTCON

BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
BTFSC BOTAO
GOTO BOTAO_LIB
GOTO BOTAO_PRES

BOTAO_LIB
BCF LED
GOTO MAIN

BOTAO_PRES
BSF LED
GOTO MAIN
END

Codigo:

6- Usando esse mesmos programinha teria com simplifica-lo?


#INCLUDE <P16f628.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

#DEFINE BOTAO PORTA,1
#DEFINE LED PORTA,0

ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA

BANK1
CLRF TRISA

CLRF INTCON

BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
BTFSC BOTAO
GOTO BOTAO_LIB
GOTO BOTAO_PRES

BOTAO_LIB
BCF LED
GOTO MAIN

BOTAO_PRES
BSF LED
GOTO MAIN
END

Codigo:

Postado

Ja esta comecando a ficar claro. Muito Obrigado pelas informações Moley

No primeiro codigo você retirou o OPTION_REG e funcionou normalmente.

No segundo codigo nao funcionou.

Registrador CMCON -os primeiros 3 bits em 1, significa que o I/O analógicas do PORTA estarão desabilitadas, sendo assim, todos os I/O serão digitais.

Entendi, 0x07 desabilita os comparadores liberando para I/O

Postado

E simplificando mais um pouco;

#INCLUDE <P16f628.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

#DEFINE BOTAO PORTA,1
#DEFINE LED PORTA,0

ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA

BANK1
CLRF TRISA
CLRF INTCON
BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
BTFSC BOTAO
GOTO +$3
BSF LED
GOTO MAIN
BCF LED
GOTO MAIN

END

Postado
E simplificando mais um pouco;

#INCLUDE <P16f628.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

#DEFINE BOTAO PORTA,1
#DEFINE LED PORTA,0

ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA

BANK1
CLRF TRISA
CLRF INTCON
BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
BTFSC BOTAO
GOTO +$3
BSF LED
GOTO MAIN
BCF LED
GOTO MAIN

END

CLRF TRISA - nao precisa colocar RA1 com entrada?

toda vez que quiser um endereco 0x00 posso coloar CLRF?

GOTO +$3 - ok, avancar 3 linhas..... Deu erro na complilacao nessa linha - Error[112] C:\USERS\CRALX2KMAC\DESKTOP\LED4.ASM 27 : Missing operator

#INCLUDE <P16f628A.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

#DEFINE BOTAO PORTA,1
#DEFINE LED PORTA,0

ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA

BANK1
MOVLW B'00000010'
MOVWF TRISA
CLRF INTCON
BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
BTFSC BOTAO
GOTO +3
BSF LED
GOTO MAIN
BCF LED
GOTO MAIN

END

===============

consegui compilar dessa maneira......

o que posso adcionar nesse circuito para poder treinar mais? se puderem passar alguns exercicios....so lembrando tem que ser bem basico. :)

Postado
CLRF TRISA - nao precisa colocar RA1 com entrada?

Realmente...

vacilamos aqui.

o correto seria mesmo:

MOVLW B'00000010'
MOVWF TRISA

GOTO +$3 - ok, avancar 3 linhas..... Deu erro na complilacao nessa linha

E aqui o seguinte:

GOTO $+3

Postado

Ledporta.avi - YouTube

-porque o led 4,5,6 nao estão funcionando?

-porque esta com esse retardo quando aciono ou desativo o botao? sera que e o software ou algo no programa?

-Como faz para acender um led de cada fez com um tempo entre eles?

Obrigado a todos novamente


#INCLUDE <P16f628A.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

CBLOCK 0X20
ENDC

#DEFINE BOTAO PORTA,0
#DEFINE LED1 PORTA,1
#DEFINE LED2 PORTA,2
#DEFINE LED3 PORTA,3
#DEFINE LED4 PORTA,4
#DEFINE LED5 PORTA,5
#DEFINE LED6 PORTA,6


ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA
CLRF PORTB
BANK1
MOVLW B'00000001'
MOVWF TRISA

MOVLW B'00000000'
MOVWF TRISB

MOVLW B'10000000'
MOVWF OPTION_REG

CLRF INTCON

BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
BTFSC BOTAO
GOTO BOTAO_LIB
GOTO BOTAO_PRES

BOTAO_LIB
BCF LED1
BCF LED2
BCF LED3
BCF LED4
BCF LED5
BCF LED6
GOTO MAIN

BOTAO_PRES
BSF LED1
BSF LED2
BSF LED3
BSF LED4
BSF LED5
BSF LED6
GOTO MAIN
END

Postado

Implemente uma sub rotina;

#INCLUDE <P16f628A.INC>

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

#DEFINE BOTAO PORTA,1
#DEFINE LED PORTA,0

ORG 0X00
GOTO INICIO

ORG 0X04
RETFIE

INICIO
CLRF PORTA

BANK1
MOVLW B'00000010'
MOVWF TRISA
CLRF INTCON
BANK0
MOVLW B'00000111'
MOVWF CMCON

MAIN
CALL SUB_ROTINA_01
GOTO MAIN

SUB_ROTINA_01
BTFSC BOTAO
GOTO +3
BSF LED
RETURN
BCF LED
RETURN

END

PS:

-porque o led 4,5,6 nao estão funcionando?

Uma dica,sempre de uma lida completa no datasheet.

RA5 não pode ser 'saída'(Pag.4 do datasheet).

Colque pelo menos um 'NOP' entre as mudanças de estado dos ports(Pag.46, 5.3.2);

	BSF	LED1
NOP
BSF LED2
NOP
BSF LED3
NOP
BSF LED4
NOP
BSF LED5
NOP
BSF LED6

-Como faz para acender um led de cada fez com um tempo entre eles?

Implemente uma rotina de Delay(atraso);

Altere;

	CBLOCK	0X20
ENDC

Para;

	CBLOCK	0X20

CONTADOR ;VARIAVEL DE CONTAGEM (0 A 255 =1 BYTE)

ENDC

Coloque a rotina de atraso em algum lugar no programa,tipo ,antes do MAIN;

ATRASO
MOVLW .255
MOVWF CONTADOR
REPETE
NOP
DECFSZ CONTADOR,F
GOTO REPETE
RETURN

E finalmente;

	BSF	LED1
CALL ATRASO
BSF LED2
CALL ATRASO
BSF LED3
CALL ATRASO
BSF LED4
CALL ATRASO
; BSF LED5 ;RA5 NÃO PODE SER SAÍDA
; CALL ATRASO
BSF LED6

Postado

Valeu vtrx, eu estou usando o livro Desbravando o Pic que utiliza o PIC16F262A, tenho os materiais para PICF1684A .....vou ter que imprimir e preparar tudo para o PIC1F262A.

O que você acha desse curso online? http://www.professorbruno.com.br/pic1.html

Outra coisa, quais sao as tebelas e informações que preciso ter em maos quando estiver programando do data sheet para facilitar a consulta? ficar procurando as informações em 300 paginas e complicado.....

Postado
Outra coisa, quais sao as tebelas e informações que preciso ter em maos quando estiver programando do data sheet para facilitar a consulta? ficar procurando as informações em 300 paginas e complicado.....

Vai por mim,escolha um tempo e leia o datasheet inteiro e escolha voce mesmo o que precisa.

De uma lida;

-> Tutorial Assembly -<

Postado

O que estou fazendo errado? compila normalmente mais fica mostrando essas msgs indefinitivamente.

screenshot20111028at113.png


;############################################
#INCLUDE <P16f628A.INC>
;############################################
; PAGINACAO DE MEMORIA
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
;############################################
; VARIAVEIS
CBLOCK 0X20
CONTADOR
ENDC
;############################################
; SAIDA
#DEFINE BOTAO PORTA,0
#DEFINE LED0 PORTB,0
#DEFINE LED1 PORTB,1
#DEFINE LED2 PORTB,2
#DEFINE LED3 PORTB,3
#DEFINE LED4 PORTB,4
#DEFINE LED5 PORTB,5
#DEFINE LED6 PORTB,6
#DEFINE LED7 PORTB,7
;###############################################
; VETOR DE RESET
ORG 0X00
GOTO INICIO
;###############################################
; ROTINA DE INTERRUPCAO
ORG 0X04
RETFIE
;###############################################
;configuração DOS REGISTRADORES DE USO ESPECIFICO
INICIO
CLRF PORTA
CLRF PORTB

BANK1
MOVLW B'00000001'
MOVWF TRISA

MOVLW B'00000000'
MOVWF TRISB

MOVLW B'10000000'
MOVWF OPTION_REG

CLRF INTCON

BANK0
MOVLW B'00000111'
MOVWF CMCON
;###############################################
ATRASO
MOVLW .255
MOVWF CONTADOR

REPETE
NOP
DECFSZ CONTADOR,F
GOTO REPETE
RETURN
;################################################
; ROTINA PRINCIPAL DO PROGRAMA
MAIN
BTFSC BOTAO
GOTO BOTAO_LIB
GOTO BOTAO_PRES

BOTAO_LIB
BCF LED0
BCF LED1
BCF LED2
BCF LED3
BCF LED4
BCF LED5
BCF LED6
BCF LED7
GOTO MAIN

BOTAO_PRES
BSF LED0
CALL ATRASO
BSF LED1
CALL ATRASO
BSF LED2
CALL ATRASO
BSF LED3
CALL ATRASO
BSF LED4
CALL ATRASO
BSF LED5
CALL ATRASO
BSF LED6
CALL ATRASO
BSF LED7
CALL ATRASO

GOTO MAIN
;###############################################
; FIM DO PROGRAMA
END

Postado
Desculpe,acho que foi erro meu...

Coloque a rotina 'atraso' no fim,antes do 'END'.

Deu certo, agora e comecar a fazer diferentes exemplos. O MPLAB SIM e bem util para simulacao linha a linha. Valeu novamente

qualquer bit de configuração que coloco em __config mostra erro na compilacao....sera porque?

Como relação ao tempo, como faco para deixar um saida ligada ou desligado por 3,5 minutos.....com e feito esse calculo?

Postado

Sobre o erro,posta o print da tela.

Sobre Delays,em ASM,a programação é exata,isto é,cada instrução demora um tempo exato que depende do cristal usado e do tipo de instrução.

Essa temporização voce encontra no Datasheet,na seção sobre instruções,onde voce pode calcular exatamente quanto tempo demnora cada linha do programa,essa é uma das vantagems de se usar ASM,voce pode fazer programas de precisão absoluta.

É comum,quando ja se programa ha um tempo,ter algumas rotinas ja prontas em arquivos .inc.

Tem uma página interessante que pode te auxiliar no calculo de Delays grandes,no seu caso,210 segundos;

-> Gerador de código de Delay ASM -<

Postado

Finalmente consegui o que queria. Vou abrir outro post com relação ao circuito que vou fazer.

Quero que o pic faca uma varredura de sensores, caso algum esteja "aberto" vai acionar uma sirene ou lampada....

Obrigado novamente pelas dicas e pelo link vtrx....otimo

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!