collapse

* Links de Robótica

* Posts Recentes

Palavras Cruzadas por brunus
[Hoje às 01:13]


[Projecto] Bomba Airsoft por jm_araujo
[23 de Setembro de 2017, 16:54]


Apresentação por Tech_JA
[23 de Setembro de 2017, 09:19]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[19 de Setembro de 2017, 10:20]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]

Autor Tópico: Porta Série  (Lida 3733 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Porta Série
« em: 03 de Novembro de 2009, 09:34 »
Estou com alguns problemas em colocar a porta série a mandar seja o que for no 8051.

O código que o meu prof. tinha nos slides era:

Código: [Seleccione]
And tmod, #0fh
Orl tmod, #10H
Mov TH1, #0FDH
mov TL1, #0FDH
Setb TR1
Anl PCON, #7FH
Mov SCON, #01010000H

ENVIA: clr TI; Rotina para enviar pela porta série
mov sbuf, A
Xx: jnb TI, xx
ret

REC: jnb RI, REC ; rotina de recepção
mov a, sbuf
clr RI
reti

No primeiro bloco de código ele define a porta série em modo 1, definindo o timer e os registos associados ao controlo da porta série.

Depois em envia ele ao mover para dentro do registo sbuf algo a porta serie devia enviar isso, certo?
O que vos parece que falta? :S

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Porta Série
« Responder #1 em: 03 de Novembro de 2009, 11:07 »
Eia 8051, brings back memories  :P

Ora vamos lá ver hmm

Sim a porta série enviaria isso... Isso é um problema, saber o que falta aí? Assim agora rapidamente não me parece que falte definir nada... (supondo claro que deverás ter aí uma main para fazer o CALL ENVIA)

Agora tou na uni, quando chegar a casa vejo melhor isso ;)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Re: Porta Série
« Responder #2 em: 03 de Novembro de 2009, 11:54 »
explica la melhor como crio o main para fazer o call do envia. Eu nos testes estava a fazer call envia no final das configurações da porta série. É que ainda estou muito verde em ASM :D

Offline msr

  • Mini Robot
  • *
  • Mensagens: 793
Re: Porta Série
« Responder #3 em: 03 de Novembro de 2009, 13:18 »
Eu nos testes estava a fazer call envia no final das configurações da porta série.


Se não me engano, é isso mesmo. As rotinas são tipo "funções". Tens o código principal do programa em que chamas essas mesmas funções. Neste caso tens o código inicial de inicialização da porta série e depois chamas as rotinas ENVIA e REC conforme te der jeito e as vezes que quiseres.



Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Porta Série
« Responder #4 em: 03 de Novembro de 2009, 14:03 »
Código: [Seleccione]
CSEG AT 00h

CALL ENVIA

JMP $

Tentaste assim?

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Re: Porta Série
« Responder #5 em: 03 de Novembro de 2009, 14:53 »
so tinha escrito mesmo CALL ENVIA.

Podes enquadrar esse código no que psotei lá em cima?  :-[

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Porta Série
« Responder #6 em: 03 de Novembro de 2009, 15:07 »
Código: [Seleccione]
CSEG AT 00h
jmp main

          CSEG AT 50h

main: CALL CONF_SERIE
          CALL ENVIA
          JMP $

CONF_SERIE:
And tmod, #0fh
Orl tmod, #10H
Mov TH1, #0FDH
mov TL1, #0FDH
Setb TR1
Anl PCON, #7FH
Mov SCON, #01010000H
RET

ENVIA: clr TI; Rotina para enviar pela porta série
mov sbuf, A
Xx: jnb TI, xx
ret

REC: jnb RI, REC ; rotina de recepção
mov a, sbuf
clr RI
reti

Aquele primeiro And n devia ser Anl?
Talvez seja melhor habituares-te a uma norma, ou tudo em caps ou não, e fazer comentários úteis (comentar MOV A,B com move de a para b não é mt útil). Acredita que quando tiveres um código de 500 linhas vai fazer muita diferença!

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Re: Porta Série
« Responder #7 em: 03 de Novembro de 2009, 15:10 »
Citar
Build target 'Target 1'
assembling portacom.a...
portacom.a(8): error A9: SYNTAX ERROR
portacom.a(25): warning A41: MISSING 'END' STATEMENT
Target not created

A contagem das linhas começa em 1

Eu suponho que o And que o meu prof tem no slide seja Anl e o END onde devo colocaR?

Edit:

Alterando o And para Anl fica:

Código: [Seleccione]
CSEG AT 30h

main: CALL CONF_SERIE
          CALL ENVIA
          JMP $

CONF_SERIE:
Anl tmod, #0fh
Orl tmod, #10H
Mov TH1, #0FDH
mov TL1, #0FDH
Setb TR1
Anl PCON, #7FH
Mov SCON, #01010000B
RET

ENVIA: clr TI; Rotina para enviar pela porta série
mov sbuf, A
Xx: jnb TI, xx
ret

REC: jnb RI, REC ; rotina de recepção
mov a, sbuf
clr RI
ret

e já não da erro:
Citar
Build target 'Target 1'
linking...
Program Size: data=8.0 xdata=0 code=43
"ze" - 0 Error(s), 0 Warning(s).

Vou testar
« Última modificação: 03 de Novembro de 2009, 15:13 por metRo_ »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Re: Porta Série
« Responder #8 em: 03 de Novembro de 2009, 15:22 »
não funca :S

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Porta Série
« Responder #9 em: 03 de Novembro de 2009, 15:49 »
O END esqueci-me, é no fim de tudo!

Hmm, mas não funciona porque? Tás a testar numa placa ou a simular isso? Mais logo à noite se quiseres instalo o keil e testo.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Re: Porta Série
« Responder #10 em: 03 de Novembro de 2009, 15:56 »
Estou a programar no Keil mas não percebo muito do debug disto, estou a testar mesmo na placa.
O seguinte código embora não imprima grande coisa, imprime alguma coisa mas nada do que mando :)

Código: [Seleccione]
START:
mov TMOD, #20H ;T1 is mode2
mov TH1, #0fdH ;9600 baud
mov SCON, #50H ;8b, 1stop, 1start, REN enabled
anl PCON, #07fh ;To make SMOD =0

setb TR1 ;start T1
 
AGAIN:
 mov SBUF, #"A" ;letter A is transmitted
 
HERE:
 jnb TI, HERE ;poll TI until all the bits are transmitted
 clr TI ;clear TI for the next character
 sjmp AGAIN ;while(1)

 END

Vi na net.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Re: Porta Série
« Responder #11 em: 03 de Novembro de 2009, 16:17 »
Código: [Seleccione]
START:
mov TMOD, #20H ;T1 is mode2
mov TH1, #0FDH ;9600 baud
mov SCON, #50H ;8b, 1stop, 1start, REN enabled
anl PCON, #07fh ;To make SMOD =0
setb TR1 ;start T1

AGAIN:
mov SBUF, #"A" ;letter A is transmitted

HERE:
jnb TI, HERE
clr TI ;clear TI for the next character
END;

Este está a funcionar pelo menos para enviar, tenho que ver se percebo isto agora, se alguem quiseres ajudar esteja à vontade ;)

Obrigado tyran

Vi neste link: http://www.freewebs.com/maheshwankhede/rs232.html

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Porta Série
« Responder #12 em: 04 de Novembro de 2009, 00:34 »
Ainda bem que conseguiste  ;)

Não tens assim o código exactamente como aí está pois não?

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.726
Re: Porta Série
« Responder #13 em: 04 de Novembro de 2009, 20:51 »
está um pouco diferente, basicamente uso:

-isto para configurar a porta serie:
Código: [Seleccione]
ini_pserie:     mov scon, #50h
               anl tmod, #0fH
               orl tmod, #20h
               mov th1, #0fdh
               mov tl1, #0fdh
               anl pcon, #7fh
               setb tr1

-isto para enviar:
Código: [Seleccione]
send_char:      clr ti
               mov sbuf, a
               jnb ti, $
               ret

-Um exemplo para imprimir 1 em ascii
Código: [Seleccione]
mov a, #31h
               call send_char

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Porta Série
« Responder #14 em: 05 de Novembro de 2009, 21:13 »
Era mais por não teres main nem nada   lol