Ir ao conteúdo

PIC - botão e led não funciona!


brunomemo

Posts recomendados

Postado

Bom, tenho o básico de conhecimento em programações, agora quero aprofundar mais em assembly para pic, tive essa matéria no técnico em 2006 e já não lembro mais nada :(

enfim fiz o exemplo do livro desbravando o pic e simplesmente não funciona(_(

onde foi que errei? Peguei o 16F870TEMP.asm da pasta do mplab

e fiz o resto...

list p=16f870 ; list directive to define processor

#include <p16f870.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_ON & _CPD_OFF

; example of using Shared Uninitialized Data Section

INT_VAR UDATA_SHR

w_temp RES 1 ; variable used for context saving

status_temp RES 1 ; variable used for context saving

; example of using Uninitialized Data Section

TEMP_VAR UDATA_SHR ; explicit address specified is not required

temp_count RES 1 ; temporary variable (example)

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

RESET_VECTOR CODE 0x00 ; processor reset vector

goto start ; go to beginning of program

INT_VECTOR CODE 0x04 ; interrupt vector location

INTERRUPT

movwf w_temp ; save off current W register contents

movf STATUS,w ; move status register into W register

movwf status_temp ; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

movf status_temp,w ; retrieve copy of STATUS register

movwf STATUS ; restore pre-isr STATUS register contents

swapf w_temp,f

swapf w_temp,w ; restore pre-isr W register contents

retfie ; return from interrupt

MAIN_PROG CODE

start

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

;DEFINE NOMES PARA PORTAS

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

#DEFINE BOTAO PORTB,7

#DEFINE LED PORTA,0

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

;INICIO

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

INICIO

CLRF PORTA ;

CLRF PORTB ;LIMPA A PORTAS

CLRF PORTC ;

BANK1

MOVLW B'00000000'

MOVWF TRISA ;TODA PORTA COMO SAIDA

MOVLW B'11111111'

MOVWF TRISB ;TODA PORTB COMO ENTRADA

MOVLW B'00000000'

MOVWF TRISC ;TODA PORTC COMO SAIDA

MOVLW B'10000000' ;AINDA NAO SEI

MOVWF OPTION_REG

MOVLW B'00000000'

MOVWF INTCON

BANK0

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

;ROTINAS

TESTE_DO_BOTAO

BTFSC BOTAO ;TESTA A RB7 SE FOR NIVER LOGICO BAIXO VAI PARA SEGUNDA LINA

GOTO PARTE_1

GOTO PARTE_2

PARTE_1

BCF LED

GOTO TESTE_DO_BOTAO

PARTE_2

BSF LED ;MANDA 1 PARA RA0

GOTO TESTE_DO_BOTAO

END ; directive 'end of program'

e no output mostra isso

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

Clean: Deleting intermediary and output files.

Clean: Deleted file "C:\Documents and Settings\L\Meus documentos\16F870teste.o".

Clean: Deleted file "C:\Documents and Settings\L\Meus documentos\16F870teste.err".

Clean: Deleted file "C:\Documents and Settings\L\Meus documentos\16F870teste.lst".

Clean: Deleted file "C:\Documents and Settings\L\Meus documentos\1.cof".

Clean: Deleted file "C:\Documents and Settings\L\Meus documentos\1.hex".

Clean: Done.

Executing: "C:\Arquivos de programas\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F870 "C:\Documents and Settings\L\Desktop\16F870teste.ASM" /l"16F870teste.lst" /e"16F870teste.err" /o"16F870teste.o" /d__DEBUG=1

Warning[207] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 84 : Found label after column 1. (BANK1)

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 86 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 89 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 92 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 96 : Register in operand not in bank 0. Ensure that bank bits are correct.

Warning[207] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 99 : Found label after column 1. (BANK0)

Executing: "C:\Arquivos de programas\Microchip\MPASM Suite\mplink.exe" /p16F870 "16F870teste.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"1.cof" /M"1.map" /W

MPLINK 4.38, Linker

Copyright © 1998-2010 Microchip Technology Inc.

Errors : 0

MP2HEX 4.38, COFF to HEX File Converter

Copyright © 1998-2010 Microchip Technology Inc.

Errors : 0

Loaded C:\Documents and Settings\L\Meus documentos\1.cof.

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

Debug build of project `C:\Documents and Settings\L\Meus documentos\1.mcp' succeeded.

Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38

Preprocessor symbol `__DEBUG' is defined.

Wed Jan 11 13:41:25 2006

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

BUILD SUCCEEDED

logo gravei o pic pelo PICSTART Pluse montei no protoboard isso

16f870test.jpg

por que não funciona?

já agradecido

Postado

Não estou conseguindo ver a imagem do esquema no seu tamanho normal, mas, parece que no programa você definiu o LED como sendo o RA0 e o botão o RB7, mas, no esquema está ao contrário.

Também está faltando o resistor para limitar a corrente no LED.

Assim, queima a saída do microcontrolador.

Use um resistor de 470R.

Este modelo de PIC inicializa o RA0 como entrada analógica e por isto, não deve ter queimado.

Para você poder usar o RA0 como pino de I/O, você precisa setar os bits 1 e 2 do registrador ADCON1, que está no banco 1.

Não tenho certeza, mas, creio que para que ele reconheça o comando para mudança de banco através das palavras BANK0 e BANK1, você precisaria, antes, definir, desta forma:

BANK0 equ BCF status,RP0

BANK1 equ BSF status,RP1

Postado

valeu pelas respostas mas ainda não funcionou, até troquei o pci :P

coloquei movlw 0x07,movwf cmcon para desabilitar os comparadores e logo coloquei

#DEFINE BANK0 equ BCF status,RP0

#DEFINE BANK1 equ BSF status,RP1

mas aparece isso

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

Debug build of project `C:\Documents and Settings\L\Meus documentos\1.mcp' started.

Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38

Preprocessor symbol `__DEBUG' is defined.

Mon Jan 16 08:52:05 2006

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

Clean: Deleting intermediary and output files.

Clean: Done.

Executing: "C:\Arquivos de programas\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F870 "C:\Documents and Settings\L\Desktop\16F870teste.ASM" /l"16F870teste.lst" /e"16F870teste.err" /o"16F870teste.o" /d__DEBUG=1

Error[111] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 86 : Missing symbol

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 88 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 91 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 94 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 98 : Register in operand not in bank 0. Ensure that bank bits are correct.

Error[111] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 101 : Missing symbol

Error[113] C:\DOCUMENTS AND SETTINGS\L\DESKTOP\16F870TESTE.ASM 104 : Symbol not previously defined (CMCON)

Halting build on first failure as requested.

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

Debug build of project `C:\Documents and Settings\L\Meus documentos\1.mcp' failed.

Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38

Preprocessor symbol `__DEBUG' is defined.

Mon Jan 16 08:52:06 2006

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

BUILD FAILED

pelo que percebi o comparador CMCON não existe em nem um banco do 16f870 (me corrija se falei besteira)

e errei mesmo inverti no programa as postas do led e do botão e coloquei um resistor só não coloquei no esquema por que fiz no paint em 10 minutos e esqueci :lol:

mas o que será esse erro?

estou totalmente perdido num programinha besta, queria ter dinheiro pra fazer um curso:mellow:...

Postado

Quanto aos bancos, faça assim:

#DEFINE BANK0 BCF STATUS,RP0

#DEFINE BANK1 BSF STATUS,RP0

Este modelo de microcontrolador não possui o registrador CMCON.

Você configurou o ADCON1 conforme descrevi no post anterior?

Postado

woww:)

a culpa era do ADCON0 :P, eu configurei outra porta e funcionou ai pensei que era comparadores ativos, logo ADCON1 fica no BACK1 e no pino 3 que também é RA1 mais como eu estava ligando no RA0 o LED então fiz isso:

INICIO

CLRF PORTA ;

CLRF PORTB ;LIMPA A PORTAS

CLRF PORTC ;

BANK1

MOVLW B'00000000'

MOVWF TRISA ;TODA PORTA COMO SAIDA

MOVLW B'11111111'

MOVWF TRISB ;TODA PORTB COMO ENTRADA

MOVLW B'00000000'

MOVWF TRISC ;TODA PORTC COMO SAIDA

MOVLW 0x07

MOVWF ADCON1

MOVLW B'10000000' ;AINDA NAO SEI

MOVWF OPTION_REG

MOVLW B'00000000'

MOVWF INTCON

BANK0

MOVLW 0x07

MOVWF ADCON0

e funcionou legal, agora só resta aprender todas a outras funções, comandos e ferramentas deste micro-controlador.

se abusar muito da boa vontade de vocês, será que existe algum exemplo em assembly de escrita em apenas um display de 7 segmentos, pode ser contagem de 0 a 9 ou palavras...

valeu galera

Postado
woww:)

se abusar muito da boa vontade de vocês, será que existe algum exemplo em assembly de escrita em apenas um display de 7 segmentos, pode ser contagem de 0 a 9 ou palavras...

valeu galera

que tipo de "escrita"?

fazer uma contagem de 0 á 9 é bem simples, mas depende de como voce quer controlar. contudo voce pode fazer o seguinte:

supomos que o display está ligado ao portb atraves de um decoder, 7447 por exemplo,

INICIO

CLRF PORTB

LOOP

CALL PAUSA

INCF PORTB

MOVLW D'9'

XORWF PORTB

BTFSS STATUS,Z

GOTO LOOP

GOTO INICIO

será mais ou menos isso.

Postado

me expressei errado, um exemplo de "escrita" era só para mim entender como funciona esse negocio de timer, prescaler, interrupção e como calcular, pois na apostila e na net não tem muita explicação.

sei que ligando as portas do pic nos pinos do display (abcdefg ponto), usando resistor lógico, usando BSF em determinadas portas acendera o que eu quero (letra ou número). certo;

e tipo como fazer acender uma letra ou número 1 segundo logo acender outra letra mais 1 segundo assim por diante?

Postado
me expressei errado, um exemplo de "escrita" era só para mim entender como funciona esse negocio de timer, prescaler, interrupção e como calcular, pois na apostila e na net não tem muita explicação.

sei que ligando as portas do pic nos pinos do display (abcdefg ponto), usando resistor lógico, usando BSF em determinadas portas acendera o que eu quero (letra ou número). certo;

e tipo como fazer acender uma letra ou número 1 segundo logo acender outra letra mais 1 segundo assim por diante?

Acho que o teu problema é determinar um tempo. Os calculos pra isso são um pouco complicados, mas está tudo interligado (timer, prescaler e t0if) juntamente com o oscilador usado. eu vou te passar um programa com um tempo de 10ms.

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

DELAY

movlw d'217'

movwf Tmr0

bcf intcon,T0if

btfss intcon,t0if

goto $-1

return

];##############ROTINAS DE PAUSAS de 1s#############

PAUSA

MOVLW D'100'

MOVWF ATRASO

PAUSA1

CALL DELAY

DECFSZ ATRASO

GOTO PAUSA1

RETURN

END ;FIM DA COMPILACAO

Agora vou te passar um trecho de um programa que fiz, uma fechadura electronica, onde eu exibo no display algumas letras e numeros. (se quiser depois te passo todo programa).

VARIAVEL EQU 20H

MOVLW '100'

MOVWF VARIAVEL

INICIO

LOOP1

CALL UM

DECFSZ VARIAVEL

GOTO $-2

LOOP2

MOVLW '100'

MOVWF VARIAVEL

CALL DOIS

DECFSZ VARIAVEL

GOTO $-2

LOOP2

MOVLW '100'

MOVWF VARIAVEL

CALL FE

DECFSZ VARIAVEL

GOTO $-2

;;;;REPETE PRA TODAS LETRAS QUE QUISER;;;;

GOTO INICIO

;«««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»

;««««««««««««««««««««««««#####MAPA DE CARACTERES#####»»»»»»»»»»»»»»»»»»»»»»»»

;«««««««««««««««««««««««««««««««««««««««»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»

UM

MOVLW B'00000110'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

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

DOIS

MOVLW B'01011011'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

DOIS1

MOVLW B'01011011'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

TRES

MOVLW B'01001111'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

TRES1

MOVLW B'01001111'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

QUATRO

MOVLW B'01100110'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

QUATRO1

MOVLW B'01100110'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

CINCO

MOVLW B'01101101'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

CINCO1

MOVLW B'01101101'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

SEIS

MOVLW B'01111101'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

SEIS1

MOVLW B'01111101'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

SETE

MOVLW B'00000111'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

SETE1

MOVLW B'00000111'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

OITO

MOVLW B'01111111'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

OITO1

MOVLW B'01111111'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

NOVE

MOVLW B'01101111'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

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

ZERO

MOVLW B'00111111'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

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

CARDINAL

MOVLW B'01110110'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

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

asterisco

MOVLW B'01001001'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

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

DC_1 ;letra C

MOVLW B'00111001'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

DC_2

MOVLW B'00111001'

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

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

DP ;letra P

MOVLW B'01110011'

MOVWF PORTC

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

CLRF PORTC

RETURN

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

AB ; letra A

MOVLW B'01110111'

MOVWF PORTC

CALL PAUSA

CLRF PORTC

RETURN

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

FE ;letra F

MOVLW B'01110001'

MOVWF PORTC

CALL PAUSA

CLRF PORTC

RETURN

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

ERRO ;msg de ERRO

MOVLW B'01111001' ;E

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

CALL DELAY

CALL DELAY

MOVLW B'01010100' ;R

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

CALL DELAY

CALL DELAY

MOVLW B'01010100' ;R

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

CALL DELAY

CALL DELAY

MOVLW B'01011100' ;O

MOVWF PORTC

CALL PAUSA_5

CLRF PORTC

RETURN

  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

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