DS89C430 og 8051

D

DrWhoF

Guest
Jeg forsøgte at erstatte 80C51 i kredsløb med eksternt program og data hukommelse med DS89C430 men det virker ikke.
Da jeg forsøgte 87C51 kredsløb værker bøde.
Hvad kan være årsagen?

DrWho

 
Selv hvis du bruger ikke-side-tilstand for kompatibilitet med traditionel 8051 (standardtilstand af DS89C430 efter en reset) Der skal være foretaget i forbindelse med hukommelse type og hastighed.
Da den grundlæggende instruktion gennemførelsestid er blevet strømlinet i DS89C430, tid til rådighed til at overføre data til og fra hukommelsen er også blevet reduceret.Det betyder, at for samme hyppighed krystal, er der mindre tid til rådighed til hukommelse adgang.
Det andet spørgsmål, der har at gøre med hastigheden er den brug af software timing.Software forfattere ofte bruger den formodede konstant programkode hastighed på en processor som realtid reference til at generere forsinkelser.Da DS89C430 henretter instruktioner langt hurtigere end standard 8051, disse tidligere konstrueret timing sløjfer vil ikke længere producere den oprindeligt forventede resultater.

Læs mere om den nye drop-in krav:

http://www.maxim-ic.com/appnotes.cfm/appnote_number/26

Da eksterne hukommelse timing i ikke-side-tilstand er næsten identisk med den 4-ur-per-maskine cyklus DS87C320 en læst af

http://www.maxim-ic.com/appnotes.cfm/appnote_number/56

ikke skader.

 
Hastighed og timing, som Silvio har forklaret, er meget criutial ..
Der er dog på flere ting, du skal være opmærksom på, nemlig sikringsniveau (dvs. sikkerhed bits) ..
Kig på billedet nedenfor for at finde ud af mulige niveauer ..

Hilsen,
IanP
Beklager, men du skal login for at se denne tilslutningskrav

 
Kan jeg bede Dem et spørgsmål:
Hvad er grunden til du gerne vil erstatte 8051 med DS89C430?
Min tarm følelser er, at uden flere software og hardware ændringer, du ikke ville være i stand til at erstatte en CPU med de andre, selv om Maxim krav, at du kan ..
Denne CPU er bare at spole ..(≈ 1MIPS pr 1MHz af uret), og selv om du "langsom den ned" ved indstilling / clearing visse bits i sin SFR (ved den måde, hvordan er du Gong at gøre det?), Jeg tror ikke, kan du bare erstatte den "gamle" 8051 i sin "gamle" miljø med DS89C4XX og forventer, at det arbejde??!

Hilsen,
IanP

 
Denne enkle årsag er, at jeg bare har nogle af DS89C430 og jeg troede, at de ville køre hurtigere.
Nu, hvilke skridt skal jeg forpligter sig til at gøre dem arbejder?

DrWho

 
Jeg vil starte med at erstatte krystaller: fra, siger, 12MHz (11,059200 MHz, ..) til 2MHz eller mindre ..
Men igen, det gør nogen mening?
Du vil sandsynligvis bruge flere penge på disse krystaller end på, siger, AT89S51 med Flash ..

Hilsen,
IanP

 
DrWhoF wrote:

og jeg troede, at de ville køre hurtigere.

 
Jeg forsøgte med 1.832MHz krystal og det stadig ikke virker.
Min kredsløb modtager data via seriel port, sætter bytes i en buffer, og efter at have udført visse beregninger sender data ud via 2 mikroprocessor stifter: data og uret.
Den hurtigste baudhastighed med 11MHz clock og uden at miste bytes er 1200bps.
Jeg har brug 9600bps!

 
9600bps kunne opnås let på 11.0592Mhz ur.

Du
har haft til at mindske baudhastighed til 1200bps skyldes mistet byte?
Eller fordi din microcontroller buffer bliver fyldt hurtigt og du ikke
er i stand til at fastholde de inputdata sats?
Så hvad stopper du bruge håndtryk RTS-CTS og holde 9600bps?
Eller få en større serielle buffer.

Hvis udførelsen certains beregning, før du sender data ud gennem 2 knappenåle (data og ur) sker hurtigt, og derefter venter at levere data i henhold til en lavere clock periode.
Så hvad
er gevinsten ved at udføre hurtigt beregningerne?

Jeg er ikke en trafik strisser se bytes gåture på den serielle kabler ved konstant hastighed 1200bps (sanktion hastighed) og få mad, hvis snart på 9600bps i briste.

Den IanP råd for at bruge 1.832Mhz krystal var i orden at holde den nuværende hardware og software (næsten) konfiguration og få fordele ved at konvertere til DS89C430 kun fra flash-hukommelse synspunkt.

Jeg er temmelig sikker på, at du kan nå 9600bps uden at ændre på DS89C430 men med litttle ændringer i nuværende software rutiner.

Konvertering til DS89C430 og bruge vælges høj speeed ur til timere kan påvirke baudhastighed generation til den serielle porte.
Jeg ved, du læser dette på: http://www.maxim-ic.com/appnotes.cfm/appnote_number/600

Men nogle ændringer, der skal gøres i software.
Og jeg tror ikke, det worths indsatsen og hovedpine, indtil alle nødvendige software ændringer er blevet udtømt i gamle projekt.

Kig på 9600bps baudhastighed et indgående charater er modtaget i 1041 os.
Indtil SCON.0 bliver sæt, du kan udføre 960 anvisningerne på 11.0592 MHz XTAL ur og standard 8051.Nå, højst, da ikke alle instruktioner udføres i én maskine cyklus.Men du kan tage et gennemsnit på 700 instruktion, der er helt i partiet.

Hvis du modtager nu på 1200bps skal du være frygteligt travlt i løbet af 7680 instruktion (maksimum).
Håber du bruger interrupts og ikke valgstederne for SCON.0 og SCON.1

 
Med 1.832MHz krystal (I gætte den korrekte frekvens bør 1,8432 MHz), hvad der rent faktisk har du?
Jeg mener efter nulstillet, hvad sker der nu?

Hilsen,
IanP

 
Du har ret, det er 1,8432 MHz.
Jeg bruger terminal software til at overvåge, hvad der vil, og som kommer ud af min kredsløb og med standard 87C51/89C51 efter hver streng af ASCII bytes mit kredsløb sender 1 byte som ACK.
Når DS89C450 er i intet er sendt ud, og mærkeligt pulser hver 30ms vises på RST bens og det ser ud microcontroller kører i uendelig løkke.
Efter at nulstille den bør sende 20 bytes identifikationsmedlemsstaten men jeg kan ikke se noget på min skærm skærmen, så jeg går ud fra, at intet er sendt ud.
Når jeg erstatte DS89C450 tilbage med 87C51 den sender identifikation bytes, og det kan ikke synkronisere med serielle port på grund af 1,8432 MHz krystal, men i det mindste sende bytes ud.Hvis jeg erstatte krystal til 11.059 MHz alt fungerer OK.
Hvorfor DS89C450 ikke virker?

 
DrWhoF wrote:Når DS89C450 er i intet er sendt ud, og mærkeligt pulser hver 30ms vises på RST bens og det ser ud microcontroller kører i uendelig løkke.

 
Code:ORG 0000HMOV TMOD, # 20H

MOV SCON, # 52h

MOV PCON, # 80h

MOV TH1, # 0FAh

MOV TCON, # 40h; SETB TR1MOV 50h, # 'H'

MOV 51h, # 'E'

MOV 52h, # 'L'

MOV 53h, # 'L'

MOV 54h, # 'O'

MOV 55h, # 10; LF

MOV 56h, # 13; CR;-------------------------------------------------

; Main Program

;-------------------------------------------------Ser_Loop:

LCALL send_stringNot_Continue:

MOV B, # 0FFh

DJNZ B, $

LCALL ser_in

CJNE A, # 'c', Not_ContinueSJMP Ser_Loop;-------------------------------------------------send_string:

MOV R0, # 07h; Loop counter ..

MOV R1, # 50hS_Loop:

MOV A, @ R1

LCALL Ser_Out

INC R1

MOV B, # 0FFh

DJNZ B, $

CPL P1.0

DJNZ R0, S_Loop

RETSer_Out:

JNB TI, $

CLR TI

MOV SBUF, A

RET;-------------------------------------------------ser_in:

JNB RI, $

CLR RI

MOV A, SBUF

RET; ------------------------------------------------- --SLUT; ------------------------------------------------- --SLUT
 
Jeg frakoblet RST bæreakslen og brugt din kode.
Det sender HELLO hele igen.
RST pin har pulser hver 30ms.

 
Den serie af pulser på RST pin er forårsaget af den Watchdog Timer ..
For at deaktivere Watchdog Timer nulstiller du nødt til at klare EWT bit i WDCON register ..
Hvad er det særlige funktion bit, adgangen til det ikke direkte, at de fleste af bits i Special-Funktion Registre (SFR).
Tidsindstillet adgang kræver software til at skrive to særlige værdier til timeout-adgang register i to på hinanden følgende instruktion cykelserier.Værdierne AAH, så 55h, skal skrives på følgende instrukser til TA register på SFR placering C7h.Hvis de skriver er udført korrekt, skrive-adgang åbnes for tre hukommelse cykelserier.I dette vindue, softwaren kan ændre et beskyttet bit.De koder, for at åbne en timeout-adgang vindue er:
MOV TA, # 0AAh
MOV TA, # 55h
Så det ændrede kode for at udskrive HELLO og vente på de vigtigste "c" (og tænde / OFF pin P1.3) er under (Q = 11,0952 MHz, 9600bps) ..Hilsen,
IanP
Code:$ NOPAGING

$ MOD252WDCON DATA 0D8h

TA DATA 0C7hORG 0000HMOV TA, # 0AAh

MOV TA, # 55h

CLR WDCON.1; Deaktiver EWTMOV B, # 0FFh

DJNZ B, $MOV TMOD, # 20H

MOV SCON, # 52h

MOV PCON, # 80h

MOV TH1, # 0FAh

MOV TCON, # 40h; SETB TR1MOV 50h, # 'H'

MOV 51h, # 'E'

MOV 52h, # 'L'

MOV 53h, # 'L'

MOV 54h, # 'O'

MOV 55h, # 10; LF

MOV 56h, # 13; CR;-------------------------------------------------

; Main Program

;-------------------------------------------------Main_Loop:

LCALL Send_StringNot_Continue:

MOV B, # 0FFh

DJNZ B, $

LCALL Ser_in

CJNE A, # 'c', Not_Continue

SJMP Main_Loop;-------------------------------------------------

; Tegn sendt delrutinen forvandleTil

;-------------------------------------------------Send_String:

MOV R0, # 07h; Loop counter ..

MOV R1, # 50hS_Loop:

MOV A, @ R1

LCALL Ser_Out

INC R1

MOV B, # 0FFh

DJNZ B, $

CPL P1.3

DJNZ R0, S_Loop

RETSer_Out:

JNB TI, $

CLR TI

MOV SBUF, A

RET;-------------------------------------------------

; Tegn modtage delrutinen forvandleTil

;-------------------------------------------------Ser_in:

JNB RI, $

CLR RI

MOV A, SBUF

RET; ------------------------------------------------- --SLUT
 
Standardnavnet maskinelt på reset tilstand EWT bestemmes af Valgmulighed Control Register bit 3 (OCR.3) placeret i femte flash memory blok.

Angivelse af denne bit (OCR.3) til 1 deaktiverer vagthund nulstille funktionen på magt-up, og clearingtjenester denne bit 0 muliggør vagthund nulstille funktionen automatisk.

Så længe denne blok (i helt nye DS89C430 chip) har som standard en værdi af FFH og hvis vagthund er kilden til reset derefter enten DrWhoF eller en andens gjorde dette:

 
Jeg testede at kode i eksterne (EPROM) og interne (Flash) valgmuligheder, og det fungerede godt.
Uden CLR EWT DS89C450 nulstilles og sender HELLO i en løkke.
Når jeg fuldbyrde R kommando dette er hvad jeg har:
R <0D> <0A>
LB: 00 OCR: F7 ACON: 1F CKCON: 01 P0: FF P1: FF P2: FF P3: FF FCNTL: B1 <0D> <0A>
Hvordan kan jeg slette OCR register til FF?
Jeg har ikke parallel programmør og in-system programmering kan ikke acceptere
W OCR FF

 
Den eneste løsning er at bruge In-Anvendelsesorienterede Programmering.

Brug ovennævnte kode til at slette OCR register til FFH.

Code:WDCON DATA 0D8h

TA DATA 0C7h

FCNTL DATA 0D5hORG 0000HMOV B, # 0FFh

READ_FCNTL:; Sørg for, at FBUSY bit er 1

MOV A, FCNTL; at angive flash MMU er inaktiv.

JB ACC.7, ERASE_OCR

DJNZ B, READ_FCNTL

MOV A, # 01

AJMP ERROR; timeoutERASE_OCR:; Skriv 0Ch til FCNTL register

MOV TA, # 0AAh bruge tidsindstillede adgang sekvens.

MOV TA, # 55h

MOV FCNTL, # 0ChMOV B, # FFH

PROG_START:; Sørg for, at FBUSY bit er 0

MOV A, FCNTL; at angive programmering er begyndt.

JNB ACC.7, WAIT_ERASE

DJNZ B, PROG_START

MOV A, # 02

AJMP FEJLMOV B, $ FF; Vent FBUSY bit for at vende tilbage til 1.

MOV R0, $ FF; at angive slutningen af programmering operation.

WAIT_ERASE:

MOV A, FCNTL

JB ACC.7, PROG_ERROR

DJNZ B, WAIT_ERASE

DJNZ R0, WAIT_ERASE

MOV A, # 03

AJMP FEJLPROG_ERROR:; Sørg FERR er 0

MOV A, FCNTL; at angive nogen programmering fejl.

JNB ACC.6, READY

MOV A, # 04FEJL:

MOV P1, A; prøve med DVM de P1 stifter status

AJMP $READY:

MOV P1, # FF

AJMP $

 

Welcome to EDABoard.com

Sponsor

Back
Top