Ir para conteúdo


Revista PROGRAMAR - Edição 44 (Fevereiro 2014): Download já disponível!

- - - - -

PIC 16F628A


  • Por favor inicie sessão para responder
5 respostas a este tópico

#1 Rsamurai

Rsamurai

    null

  • Novo Membro
  • Pip
  • 10 mensagens

Publicado 16 de Fevereiro de 2011 - 00:50

Boas noites,

Tenho entre mãos a realização de diversos "programas" em assembly, desde basica transmissão de dados do porto de entrada ao porto de saida passando por somas, multiplicações, ate terminar com uma mistura de temporizador... estou neste momento no primeiro deles, fiz o programa e ao que tudo indicaria ele iria funcionar, mas, apesar de dar a indicação para mudar para o banco de dados 1 para poder programar o trisa como input e o b como output, o mplab nao me reconhece a instrução que dei nesse sentido, ja usei macro, ja fiz directamente com os bits, vou por o código, se conseguirem digam onde errei por favor, e se possivel algumas dicas.
Cumps
Roberto

#include <p16f628A.inc>
__CONFIG _CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT


org 0x000
goto principal

org 0x00A

principal movlw 0x07
movwf CMCON ; esta instrução liberta pinos Ra0 a RA3 dos comparadores analógicos
BCF STATUS, RP1 ; muda para banco 1 da RAM
clrf TRISB
comf TRISB, W
movwf TRISB ;programa o porto B como input (onde ligam os interruptores)
CLRF TRISA ;PORTA COMO OUTPUT (LEDS)
bcf STATUS,RP0 ; passa ao banco o da RAM
movf PORTA,W ; lê porta A
movwf PORTB ; escreve na porta B
goto $-2 ; fica em ciclo de leitura da porta a e escrita na porta B

END

os avisos que apresenta são os seguintes


Executing: "C:\Programas\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F628A "EX0.ASM" /l"EX0.lst" /e"EX0.err" /d__DEBUG=1
Warning[205] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 3 : Found directive in column 1. (__CONFIG)
Warning[205] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 6 : Found directive in column 1. (org)
Warning[203] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 7 : Found opcode in column 1. (goto)
Warning[205] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 9 : Found directive in column 1. (org)
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 14 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 15 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 16 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 17 : Register in operand not in bank 0. Ensure that bank bits are correct.

#2 asena

asena

    void

  • Membro
  • PipPip
  • 98 mensagens

Publicado 16 de Fevereiro de 2011 - 10:39

Assim de repente, a mudança para o banco 1 está incorrecta.

A mudança de bancos é feita pelos bits RP0:RP1 no registo especial STATUS.
Estes dois bits fazem uma combinação binária com 4 opções possiveis. De banco 0 a banco 3.
Logo, se queres ir para o banco 1, e sabendo que o banco 0 = RP1:RP0 = 00, então o banco 1 = 01.

Para um estudo mais aprofundado, faz uma leitura deste manual AQUI.

Estas duas linhas ::
comf TRISB, W
movwf TRISB    ;programa o porto B como input (onde ligam os interruptores)

Se queres ter a porta B como saída, então basta fazeres::
CLRF TRISB

Para ter a porta A como entradas, nem precisas mexer pois, quando se liga a energia, todos os I/Os são entradas.


Vá, mais um pouco e estás lá. Estou a ver que faltam as bases.
Que manuais andas a ler?

#3 Rsamurai

Rsamurai

    null

  • Novo Membro
  • Pip
  • 10 mensagens

Publicado 16 de Fevereiro de 2011 - 10:48

ando a ler o desbravando o pic e um livro do vitor gonçalves.
eu ja tentei com a configuração do rb0 e do rb1, e nao so do rb0 com esta no post acima mas mesmo assim nao deu,
se fosse apresentar os dados da porta na portb era mais simples, mas o objectivo é o oposto, mesmo sabendo que o ra5 nao pode ser output.
ontem batalhei contra isto mas nao consegui que reconhecesse o portb, vou ler o que me recomendou.
grato
Cumps

#4 Rsamurai

Rsamurai

    null

  • Novo Membro
  • Pip
  • 10 mensagens

Publicado 16 de Fevereiro de 2011 - 22:03

boa noite, fiz as alterações sugeridas, mas as mensagens continuam lá.
vou postar  o programa e as mensagens do output.

#include <p16f628A.inc>
__CONFIG _CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT


org 0x000
goto principal

org 0x00A

principal MOVLW 0x07
MOVWF CMCON ; esta instrução liberta pinos Ra0 a RA3 dos comparadores analógicos
BANKSEL TRISB ; muda para banco 1 da RAM
CLRF TRISB
COMF TRISB, W
MOVWF TRISB ;programa o porto B como input (onde ligam os interruptores)
BANKSEL TRISA
CLRF TRISA ;PORTA COMO OUTPUT (LEDS)
BCF STATUS,RP0 ; passa ao banco o da RAM
BCF STATUS,RP1
MOVF PORTA,W ; lê porta A
MOVWF PORTB ; escreve na porta B
GOTO $-2 ; fica em ciclo de leitura da porta a e escrita na porta B

END

mensagens

Debug build of project `C:\Documents and Settings\Teresa\Ambiente de trabalho\SD Trabalho PIC\Ler em B saida em A.mcp' started.
Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38
Preprocessor symbol `__DEBUG' is defined.
Wed Feb 16 21:01:04 2011
----------------------------------------------------------------------
Make: The target "C:\Documents and Settings\Teresa\Ambiente de trabalho\SD5-aulas-exemplos\exemplo 2 programa minimo\EX0.o" is out of date.
Executing: "C:\Programas\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F628A "EX0.ASM" /l"EX0.lst" /e"EX0.err" /d__DEBUG=1
Warning[205] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 3 : Found directive in column 1. (__CONFIG)
Warning[205] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 6 : Found directive in column 1. (org)
Warning[203] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 7 : Found opcode in column 1. (goto)
Warning[205] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 9 : Found directive in column 1. (org)
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 14 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 15 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 16 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\DOCUMENTS AND SETTINGS\TERESA\AMBIENTE DE TRABALHO\SD5-AULAS-EXEMPLOS\EXEMPLO 2 PROGRAMA MINIMO\EX0.ASM 18 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Make: The target "C:\Documents and Settings\Teresa\Ambiente de trabalho\SD Trabalho PIC\EX0.cof" is out of date.
Executing: "C:\Programas\Microchip\MPASM Suite\mplink.exe" /p16F628A "..\SD5-aulas-exemplos\exemplo 2 programa minimo\EX0.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"EX0.cof" /M"EX0.map" /W /x
MPLINK 4.38, Linker
Copyright © 1998-2010 Microchip Technology Inc.
Errors    : 0

Loaded C:\Documents and Settings\Teresa\Ambiente de trabalho\SD Trabalho PIC\EX0.cof.
----------------------------------------------------------------------
Debug build of project `C:\Documents and Settings\Teresa\Ambiente de trabalho\SD Trabalho PIC\Ler em B saida em A.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38
Preprocessor symbol `__DEBUG' is defined.
Wed Feb 16 21:01:07 2011
----------------------------------------------------------------------
BUILD SUCCEEDED


cumprimentos
Roberto Varajão

#5 Rsamurai

Rsamurai

    null

  • Novo Membro
  • Pip
  • 10 mensagens

Publicado 16 de Fevereiro de 2011 - 22:38

este mesmo com esses avisos, agora que o pus a correr e estive com mais atenção, dando um stimulus nas entradas RBO e RB1, eles aparecem a saida, ou seja, na porta A.
obrigado pela ajuda, ja dou noticias no segundo programa. :)
Cumprimentos

#6 Rsamurai

Rsamurai

    null

  • Novo Membro
  • Pip
  • 10 mensagens

Publicado 17 de Fevereiro de 2011 - 01:54

bem, o meu segundo projecto tambem ja está funcional, sendo o objectivo ler o registo da posição 30H da RAM e soma o
registo da posição 31H e coloca o resultado em W. o resultado foi obtido, vou publicar de seguida o texto :

#include <p16f628A.inc>
__CONFIG _CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT


org 0x000
goto principal

org 0x00A

principal MOVLW 0x07
MOVWF CMCON ; esta instrução liberta pinos Ra0 a RA3 dos comparadores analógicos
MOVFW 0x2A ; guarda posição de memoria 30h em w
ADDWF 0x2B, 0x00 ; soma a a posiçao 31h a w e guarda em w
GOTO $-2 ; fica em ciclo de leitura
END

corrijam-me se virem algo errado, sou muito verde nisto..
Cumps Rsamurai