Zona de BIOS cotine o lista de pâna la 4 adrese de baza pentru porturile seriale, dar testeaza si initializeaza numai porturile COM1 si COM2.
Registrii lui COM1 au adresele în zona: 3F8h - 3FFh; COM1 foloseste întrerup 16416i812q erea IRQ4
Registrii lui COM2 au adresele în zona: 2F8h - 2FFh; COM2 foloseste întrerup 16416i812q erea IRQ3
3F8h COM1Port Pentru date
La scriere
- Daca DLAB = 0 primeste caracterul de transmis.
- Daca DLAB = 1 primeste octetul inferior pentru divizarea tactului
La citire: caracterul receptionat pe linie seriala
3F9h COM1IER Interrupt enable register.
Pentru validare întreruperi. Folosit numai pentru scriere.
Daca DLAB = 0 valideaza întreruperile. Valoarea logica '1' în biti are semnificatiile:
; bit 0- Valideaza întreruperea la receptie date
; bit 1- Valideaza întreruperea la transmisie date
; bit 2- Valideaza întreruperea la eroare receptie
; bit 3- Valideaza întreruperea la bazata pe semnale de modem (CTS, DSR, RI)
; bitii 4-7- Totdeauna au valoarea '0'
Daca DLAB = 1 primeste octetul superior pentru divizarea tactului. Împreuna cu octetul de la Portul 3F8h formeaza o valoare de 16 biti care impune viteza de comunicatie:
Viteza (Bps) |
Factor divizare |
3FAh COM1IIR Interrupt identification register.
Acest registru se citeste de catre rutina de tratare a întreruperii, pentru a determina cauza întreruperii.
; bit 0- 1- Nu e activa nici o întrerupere (întrerupere activa daca e '0').
; bits 2,1- Valoare binara ce identifica sursa întreruperii:
; 00-Stare modem
; 01-Registru transmisie gol
; 10-Data receptionata disponibila
; 11-Eroare receptie
; bits 3-7 totdeauna zero.
;
3FBh LCR Line Control Register.
Folosit pentru scriere.
; biti 0,1- Lungime caracter (00=5, 01=6, 10=7, 11=8 bits).
; bit 2- Biti de Stop (0=1, 1=2 biti de Stop [1-1/2 daca sunt 5 biti de date]).
; bit 3- Daca e '1', alidare paritate.
; bit 4- '0' paritate impara, '1' paritate para (daca bit 3 este '1')
; bit 6- '1'=forteaza break.
; bit 7- '1'=Divisor latch access bit. (DLAB). Determina modul porturilor 3F8h si 3F9h.
'0' = Normal
3FCh MCR Modem Control Register.
Valoarea logica '1' în biti are semnificatiile:
; bit 0- Data Terminal Ready activ (DTR)
; bit 1- Request to send activ (RTS)
; bit 2- OUT 1 rezervat pentru utilizator
; bit 3- OUT 2 rezervat pentru utilizator. Obligatoriu '1' pentru întrerupere
; bit 4- Loop back control, pentru test
; bits 5-7- Totdeauna zero.
3FDh LSR Line Status Register
Folosit pentru citire. Valoarea logica '1' în biti are semnificatiile:
; bit 0- Data Ready. Se sterge la citirea datei receptionate.
; bit 1- Overrun error. Eroare de ritm, caracterul anterior e pierdut.
; bit 2- Parity error. Eroare paritate.
; bit 3- Framing error. Eroare de cadrare, nu s-a detectat corect bitul de Stop.
; bit 4- Break Interrupt. S-a receptionat Break în linie.
; bit 5- Registru de transmisie gol.
; bit 6- Registru serializare gol.
; bit 7- Totdeauna zero.
Nota. Bitii registrului pot genera întrerupere daca este permisa (3F9h)
3FEh MSR Modem Status Register
Folosit pentru citire. Valoarea logica '1' în biti are semnificatiile:
; bit 0- Delta CTS (DCTS)
; bit 1- Delta DSR (DDSR)
; bit 2- Trailing edge ring indicator (TERI)
; bit 3- Delta carrier detect (DDCD)
; bit 4- Clear to send (CTS)
; bit 5- Data Set Ready (DSR)
; bit 6- Ring indicator (RI)
; bit 7- Data carrier detect (DCD)
;
//Transmisie ciclica a unui caracter
#include <stdio.h>
#include <conio.h>
#include <dos.h>
void main()
//Receptie ciclica
#include <stdio.h>
#include <conio.h>
#include <dos.h>
void main()
|