[Assembler] 8051 processor en seriele GPS

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • roel0
  • Registratie: Maart 2011
  • Laatst online: 15-09 20:45
Gegroet,
Ik probeer in de onderstaande code, 112 bytes van een seriele GPS in te lezen, daarna steek ik de seriele kabel in mijn computer en wil de bytes naar mijn computer sturen.
Maar daar loopt het mis, de code doorloopt de transmit sequentie gewoon ook al hangt er zelfs geen seriele kabel aan de microcontroller.

Dit kan ik merken omdat poort P2 bestaat uit 8 actief laag ledjes. Wat doe ik fout in dit UART protocol?
ALvast bedankt!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
AGAIN: CLR RI0 ;klaarmaken om byte te ontvangen
HERE:  JNB RI0, HERE ;wachten tot byte aankomy
        MOV A, S0BUF ;byte wegschrijven
        MOV @R0, A ;wegschrijven naar internal ram
        INC R0 ; adress incrementeren
             
         ;;ledjes;;
        MOV A,P2
        RR A
        MOV P2,A

        CJNE R0,#70h,again ;kijken of er reeds 112 bytes zijn ingelezen , anders naar verzend sequentie

TRAN:  MOV R0,#00h ; Adres resetten
       MOV   P2,#00000000B ;Visueel laten zien dat ontvangsequentie gedaan is
       LCALL DELAY5S
       LCALL DELAY5S
       LCALL DELAY5S
       MOV   P2,#00000011B
 TAGAIN:
      CLR TI0 ; Waarschuwen dat er nieuwe data aankomt
      MOV A,@R0
       MOV S0BUF, A ; Nieuwe data wegschrijven
      INC R0
 
 THERE:
      JNB TI0, THERE ;wachten tot byte is aangekomen

       ;;ledjes;;
       MOV A,P2
       RR A
       MOV P2,A
       CJNE R0,#70h,tagain ; kijken of alle bytes verzonden zijn
      MOV  P2,#00000000b
DELAY: LCALL DELAY5S
       SJMP delay ;while(1)

[ Voor 22% gewijzigd door roel0 op 01-05-2013 11:50 ]


Acties:
  • 0 Henk 'm!

  • houthakker
  • Registratie: Juli 2003
  • Laatst online: 09:18

houthakker

Poehé

8051 assembler, dat is echt te lang geleden;
maar afijn; Ik zie helemaal geen oplossing of code die er voor zorgt dat er uberhaupt gekeken word of er een kabel aan hangt. De 8051 zal dus gewoon altijd data versturen en de uitgang laten rammelen; of er nu iets aan hangt of niet.

Dus je moet of eerst een van de seriale poort lijnen gaan lezen, of eerst een character van pc naar 8051 sturen oid (soort handshake) om de 8051 te vertellen dat er data vestuurd kan worden.

Specs


Acties:
  • 0 Henk 'm!

  • real[B]art
  • Registratie: Februari 2000
  • Laatst online: 25-09 19:32

real[B]art

CTRL+ALT+D1337

Afaik is er helemaal geen manier om te detecteren of er een ontvanger aanwezig (en beschikbaar) is op een seriële poort, tenzij je inderdaad gebruik maakt van een handshake. Bijvoorbeeld RTS/CTS of een willekeurige andere implementatie. Bij een handshake zoals houthakker die voorstelt heb je slechts 3 draden nodig (2x data & 1x ground), voor RTS/CTS heb je nog 2 extra draden nodig.

"The general rule on about people on IRC seems to be "Attractive, single, mentally stable: choose two"