• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sign in to follow this  
Followers 0
Rsamurai

PIC 16F628A

6 posts in this topic

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.

0

Share this post


Link to post
Share on other sites

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?

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0