De seriële poort op de 68HC11
De seriële poort op de 68HC11heeft van Motorola de naam SCI (Serial
Communications Interface) gekregen.
De SCI van de micro-controller kan met de juiste hardware interface direct communiceren via een RS232 verbinding met bijvoorbeeld een PC. Deze
hardware interface is op de SIMPLEX al aangebracht.
Daarnaast kent de SCI nog een aantal speciale functies, die apart beschreven zullen worden.
Gewone communicatie
De poort moet, voordat hij gebruikt wordt, eerst worden ingesteld op de juiste Baudrate. Uiteraard hoeft dit slechts éénmaal te gebeuren. Het instellen van de Baudrate gaat via het BAUD register.
De baudrate wordt afgeleid van het kristal dat op de micro-controller is aangebracht.
Dit gaat via twee delers. De deelfactor van de eerste deler wordt ingesteld via de SCP1 en SCP0 bits in het BAUD register. De deelfactor voor de tweede deler wordt ingesteld via de SCR2, SCR1 en SCR0 bits in het BAUD register.
De eerste deelfactor is:
|
SCP1 |
SCP0 |
deelfactor |
hoogste Baudrate |
| 0 |
0 |
1 |
125 kiloBaud |
| 0 |
1 |
3 |
41.666 kiloBaud |
| 1 |
0 |
4 |
31.250 kiloBaud |
| 1 |
1 |
13 |
9600 Baud |
De eerste deelfactor kan het beste ingesteld worden op een hoogste Baudrate van 9600 Baud. Met de tweede deelfactor kan deze Baudrate
verder omlaag gebracht worden.
De tweede deelfactor is:
|
SCR2 |
SCR1 |
SCR0 |
Deelfactor |
Baudrate als de hoogste Baudrate 9600 is |
| 0 |
0 |
0 |
1 |
9600 Baud |
| 0 |
0 |
1 |
2 |
4800 Baud |
| 0 |
1 |
0 |
4 |
2400 Baud |
| 0 |
1 |
1 |
8 |
1200 Baud |
| 1 |
0 |
0 |
16 |
600 Baud |
| 1 |
0 |
1 |
32 |
300 Baud |
| 1 |
1 |
0 |
64 |
150 Baud |
| 1 |
1 |
1 |
128 |
75 Baud |
Nadat de Baudrate goed gezet is, kunnen de transmitter (voor het verzenden van data) en de receiver (voor het ontvangen van data) elk apart aan- of uitgezet worden. Dit gaat via de bits TE (voor het aanzetten van de zender) en RE (voor het aanzetten van de ontvanger) in het SCCR2 register.
Het is mogelijk om bij ontvangst van een teken in de ontvanger een interrupt te laten genereren. Wanneer deze interrupt aangezet moet worden, dient het RIE bit in het SCCR2 register een '1' gemaakt te worden. Evenzo kan een interrupt gegenereerd worden wanneer het teken dat verzonden moet worden de zender verlaten heeft. In dat geval dient het TIE bit in het SCCR2 register een '1' gemaakt te worden.
Data kan verzonden worden door het te versturen byte te schrijven naar het SCDR register. Bytes die ontvangen werden door de seriële poort, kunnen worden opgehaald uit het SCDR register.
Het statusregister voor de seriële poort, SCSR, bevat een aantal bits die aangeven of de zender leeg is (zodat er een nieuw byte verzonden kan worden), of dat de ontvanger vol is (wanneer er een byte ontvangen is dat nog niet werd opgehaald uit het SCDR register.)
Het TDRE bit in het SCSR register geeft aan of de zender inmiddels leeg is (het bit is dan een '1'.) Dit bit wordt automatisch weer een '0', wanneer het gelezen wordt en er vervolgens een byte ter verzending in het SCDR register gezet wordt.
Het RDRF bit in het SCSR register is een '1' wanneer er een byte ontvangen is. Dit bit wordt automatisch weer een '0', wanneer het gelezen wordt en het ontvangen byte vervolgens uit het SCDR register wordt gelezen.
Wanneer er een nieuw byte is ontvangen voordat het oude byte uit het SCDR register werd opgehaald, wordt het OR bit in het SCSR register een '1' gemaakt. Het oude byte in het SCDR register is dan overschreven door het nieuwe byte. Dit bit wordt automatisch weer een '0', wanneer het gelezen wordt en het nieuwe byte vervolgens uit het SCDR register wordt gelezen.
Er worden door de ontvanger van de seriële poort enkele controles uitgevoerd op het ontvangen byte. In het SCSR register zijn nog een aantal bits aanwezig, die aangeven dat er iets mis was met het ontvangen teken.
Het FE bit geeft een 'framing error' aan. Dit treedt op, wanneer de PC bijvoorbeeld geen 8 bits data verstuurt (de standaard instelling van de seriële poort is 9600,n,8,1 bij 9600 Baud.) Het FE bit wordt automatisch op '0' gezet wanneer het SCSR register wordt gelezen, en vervolgens het (onjuist ontvangen) byte uit het SCDR register wordt gelezen.
Het NF bit is een 'noise vlag'. Dit treedt op, wanneer de seriële verbinding gestoord wordt van buitenaf. Dit hoeft nog niet te betekenen dat het byte onjuist ontvangen is. Het NF bit wordt automatisch op '0' gezet wanneer het SCSR register wordt gelezen, en vervolgens het (mogelijk maar niet noodzakelijk onjuist ontvangen) byte uit het SCDR register wordt gelezen.
|