Baudrate-instelling seriële communicatie en baudrate-algoritme
Wanneer de seriële communicatie van de microcomputer met één chip wordt gebruikt, moet de baudrate worden ingesteld en moet de baudrate worden ingesteld op 9600, 19200 ...? Is dit een traditie? Van wat? De overeenkomstige kristaloscillator is ook in het algemeen 11,0592 MHZ.
Is het de eerste om de kristaloscillator in te stellen en vervolgens de baudrate in te stellen of eerst de baudrate in te stellen en vervolgens de kristaloscillator in te stellen. Waarom zou dit moeten worden ingesteld?
Er zijn nog twee betrouwbaardere verklaringen:
1: Volgens de fysieke kenmerken van elektriciteit, transmissiemedia, enz. In combinatie met de vereisten voor gebruik van het seriële apparaat
Om effectieve communicatie te garanderen, in overeenstemming met de fysieke kenmerken van elektriciteit, transmissiemedia, enz. In combinatie met de vereisten voor gebruik van het seriële apparaat, wordt vastgesteld dat de maximale overdrachtssnelheid van RS232 slechts 115200 kan zijn en vervolgens in twee stappen kan worden verkregen om 57600, 28800, 19200 te krijgen; om aan deze snelheden aan te passen, ontwerp de overeenkomstige kristalfrequentie.
2: Dit wordt bepaald door de kenmerken van de telecommunicatielijn.
De banddoorlaat van de telefoonlijn is 300 - 3 KHz. Op dat moment raakte hayes eerst in de modem, dus het gebruikte 2400HZ-signaal, de bijbehorende baudrate is 2400. Omdat de basisfrequentie wordt bepaald, wordt de verbeterde pas aangenomen, de methode van de snelheid wordt vermenigvuldigd op basis van 2400 later, dus de vorming van 9600.19200. . . .
Hoe dan ook, er is een baudrate en vervolgens een kristalfrequentie.
Berekening van baudsnelheid van seriële communicatie van microcomputer met één chip.
In modus 0 en modus 2 is de baudsnelheid van de seriële poort vast en modus 0 Fosc / 12. Modus 2 is Fosc / 32 of Fosc / 64, die wordt bepaald door het SMOD-bit van het PCON-register.
In Mode 1 en Mode 3 is de baudrate een variabele waarde. De baudrate kan worden gegenereerd door Timer 1 (8052 kan worden gegenereerd door Timing 2). Wat is de baudrate? Baudsnelheid door timer 1 overloopsnelheid te bepalen:
Baud Rate = (2SMOD / 32) * (Timer 1 overflowsnelheid)
Opmerking: 2SMOD hier SMOD is de index, SMOD is het dubbele baudrate baudrate, dit bit bevindt zich in het PCON-register.
Wanneer u timer 1 als baudrate-generator gebruikt, is het meestal nodig om timer 1 te configureren voor 8-bits automatische herlaadmodus en ook om timer 1-interrupt uit te schakelen en vervolgens overloop van timer 1 hoe te berekenen? De overloopsnelheid is de frequentie van overloop. Ervan uitgaande dat de kristalfrequentie 12MHz is en de TH1-waarde 0xFE is, zullen slechts twee klokpulsen nodig zijn om te vollopen, en de overloopperiode is 2us, dan is de overloopfrequentie 500KHz. Volgens de timersectie heeft de timingtijd de volgende formule:
Timing tijd = (maximale telwaarde - teller beginwaarde) * machinecyclus = (maximale telwaarde - teller beginwaarde) * (12 / kristalfrequentie (Hz)) (s) = (256-TH1) * (12 / OSC_FREQ ( hz)) (s).
Dan is de frequentie van overloop natuurlijk:
OSC_FREQ (Hz) / ((256 TH1) * 12).
Dus de laatste push-to-baud-snelheid is:
(2SMOD / 32) * (OSC_FREQ (Hz) / ((256 TH1) * 12)).
De berekeningsformule van de baudrate is beschikbaar en de initiële waarde van TH1 kan natuurlijk worden afgeleid op basis van de baudrate:
BAUD_RATE = (2SMOD / 32) * (OSC_FREQ (Hz) / ((256 TH1) * 12))
32 * 12 * (256 TH1) = (2SMOD * OSC_FREQ (Hz)) / BAUD_RATE
256 TH1 = (2SMOD * OSC_FREQ (Hz)) / (BAUD_RATE * 32 * 12)
TH1 = 256- (2SMOD * OSC_FREQ (Hz)) / (BAUD_RATE * 32 * 12)
Ervan uitgaande dat de kristalfrequentie 11.0592 MHz is, is de baudrate 9600, SMOD = 0, wat moet de beginwaarde van TH1 zijn? Volgens de bovenstaande formule kan worden berekend TH1 = 256-11059200 / (9600 * 32 * 12) = 0xFD.





