Với chuẩn RS485 ta có thể nối32 thiết bị thu phát trên hai 
dây có khoảng cách tối đa 1200m và vận tốc truyền đến 10Mbit/s. 
Hai điện trở kết thúc 120Ođược nối với hai đầuxa nhất của mạng, 
dây dẫn là loại dây xoắn đôi 26AWG. Chuẩn này dùng vi mạch lái 
SN75176 hay họ Maxim MAX481, 483, 485 , 487, 488, 489, 490, 
1487. Tiêu biểu là vi mạch MAX485 chuyển đổi từ tín hiệu đơn 
sang tín hiệu vi sai, có chân điều khiển cho ngõ ra vi mạch ở tổng 
trở cao, nhờ vậy có thể nối chung nhiều vi mạch lái với nhau. 
                
              
                                            
                                
            
 
            
                 38 trang
38 trang | 
Chia sẻ: maiphuongdc | Lượt xem: 3257 | Lượt tải: 5 
              
            Bạn đang xem trước 20 trang tài liệu Giáo trình Đo lường và điều khiển bằng máy tính - Giao tiếp qua cổng nối tiếp, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
 được vận tốc baud 
mong muốn. 
UART dùng tinh thể dao động 1,8432 MHz chia cho 16 được 
tần số 115200Hz. Tần số này được chia bởi bộ đếm lập trình được 
16 bit, số chia chứa trong hai thanh ghi địa chỉ gốc +1 (byte cao) 
và gốc +0 (byte thấp) được sử dụng khi DLAB = 1. 
Nếu muốn vận tốc truyền 9600 thì số chia là 12 hay 000CH, 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 186 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
byte cao là 00H, byte thấp là 0CH 
Khi DLAB = 0 ghi vào địa chỉ gốc +0 để truyền đi 8 bit nối 
tiếp, đọc địa chỉ gốc +0 nhận được 8 bit dữ liệu truyền đến. 
Thanh ghi IER (gốc +1) cho phép ngắt vi xử lý khi có biến cố 
trên đường truyền. 
Khi có ngắt xảy ra, bit 0 của IIR ở mức 0, loại ngắt chỉ bởi 
bit 1 và 2, ngắt lỗi truyền thu có ưu tiên cao nhất còn ngắt do 
modem ưu tiên thấp nhất. 
Bảng 7.8: Thanh ghi điều khiển đường truyền LCR 
xác định khung truyền 
1 : cài đặt số chia DLAB Bit 7 
0 : truy xuất RBR, THR, IER 
Bit 6 Khi bằng 1 cho phép truyền tín hiệu BREAK, đường dây ở mức 0 (+12V) trong thời 
gian lớn hơn một khung 
Bit 5 Bit 4 Bit 
3 
X X 0 
Không kiểm tra cờ chẵn/lẻ 
0 0 1 Khi lẻ 
0 1 1 Khi chẵn 
1 0 1 Bit kiểm tra cờ chẵn lẻ là 1 
Bit 3 ÷ 
5 
1 1 1 Bit kiểm tra cờ chẵn lẻ là 0 
0 Một bit stop Bit 2 
1 Hai bit stop khi số bit dữ liệu là 6, 7, 8. Khi số bit dữ liệu là 5 thì dùng 1,5 
bit stop 
Bit 1 Bit 0 
0 0 5 bit dữ liệu 
0 1 6 bit dữ liệu 
1 0 7 bit dữ liệu 
Bit 0, 
1 
1 1 8 bit dữ liệu 
Bảng 7.9: Thanh ghi điều khiển modem MCR 
Bit 5 Dùng cho 16750 
Bit 4 Mode loopback dùng để kiểm tra hoạt động UART
Bit 3 Điều khiển ngõ ra Aux Output 2 
Tác giả: TS Nguyễn Đức Thành Trang 187 
Bit 2 Điều khiển ngõ ra Aux Output 1 
Bit 1 Cho RTS lên 1 
Bit 0 Cho DTR lên 1 
Bảng 7.10: Thanh ghi trạng thái đường dây LSR 
Bit 7 Sai trong FIFO 
Bit 6 Thanh ghi giữ truyền THR và thanh ghi dời trống 
Bit 5 THR trống 
Bit 4 Ngắt Break, đường truyền ở logic 0 thời gian dài hơn truyền một byte 
Bit 3 Sai khung truyền, bit cuối không phải là bit stop 
Bit 2 Sai parity 
Bit 1 Khi dữ liệu tới không đọc kịp làm ghi chồng lên RBR 
Bit 0 Báo có dữ liệu ở RBR 
Bảng 7.11: Thanh ghi trạng thái modem MSR 
Bit 7 Logic của CD, báo có sóng mang 
Bit 6 Logic của RI, báo có chuông 
Bit 5 Logic của DSR 
Bit 4 Logic của CTS 
Bit 3 Mức 1 khi có CD đổi trạng thái 
Bit 2 Mức 1 khi RI đổi từ thấp lên cao 
Bit 1 Mức 1 khi DSR thay đổi 
Bit 0 Mức 1 khi CTS thay đổi 
7.2 MẠCH CHUYỂN MỨC 
 Khi ghép cổng COM máy tính với vi điều khiển hay mạch TTL 
cần phải có mạch chuyển mức TTL Ỉ 232 và ngược lại. Các vi 
mạch thường dùng là cập MC1488-MC1489, MAX232 (Maxim) hoặc 
DS275 (Dallas) (Hình 7.6), SN75150- SN75154 (Hình 7.4). Loại 
MAX232 thông dụng hơn cả vì chỉ cần nguồn 5V, nguồn ±10V do 
mạch dao động 16KHz bên trong cung cấp. 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 188 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
Tác giả: TS Nguyễn Đức Thành Trang 189 
Hình 7.6: Một số vi mạch chuyển đổi TTL ---RS232 thông dụng 
7.3 CARD MỞ RỘNG NỐI TIẾP 
Trong trường hợp cần có thêm cổng nối tiếp có thể dùng sơ đồ 
Hình 7.4c. Các tín hiệu ở bên trái lấy từ rãnh cắm của máy tính 
sau khi qua mạch đệm và các mạch logic khác phù hợp. Tín hiệu 
ra DTR , RTS , TX qua mạch đệm 75150 đổi sang mức điện áp 
±12V. Các tín hiệu vào của cổng nối tiếp qua mạch đệm 75154 đổi 
từ mức điện áp ±12V ra mức điện áp TTL. Trên card có thể gắn 
nhiều vi mạch 8250 lựa chọn chip nhờ 2CS , nhờ vậy có thể tạo 
nhiều cổng COM. Một số hãng bán card mở rộng ISA, PCI cho 
thêm cổng COM và cổng LPT (xem chương 3). 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 190 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
7.4 MẠCH GIAO TIẾP CỔNG NỐI TIẾP 
Sử dụng vi mạch CDP6402 ta có thể chuyển đổi số liệu song 
song ở ngoại vi ra tín hiệu nối tiếp và ngược lại để ghép nối với 
cổng nối tiếp. Vi mạch này chuyển đổi dữ liệu song song ra nối 
tiếp và ngược lại theo chuẩn RS232. Có hai tuyến dữ liệu song 
song riêng cho phần thu và phát. 
Tín hiệu TXD từ cổng COM được đổi sang mức TTL nhờ vi 
mạch MAX 232 đưa vào chân RRI (Receiver Register In) của 6402 
và đổi thành tín hiệu song song 8 bit RBR1 ÷ RBR8 (Receiver 
Register) Tín hiệu song song 8 bit TBR1 ÷ TBR8 (Transmitter 
Buffer Register) được đổi thành tín hiệu nối tiếp ra chân TRO 
(Transmitter Register Out) sau đó nhờ MAX 232 đổi sang điện áp 
thích hợp vào chân RXD. Vận tốc truyền được xác định bởi tần số 
tín hiệu ở chân RRC (Receiver Register Clock), TRC (Transmitter 
Register Clock). Nhờ vi mạch dao động chia tần 74HC4060 có thể 
thay đổi các vận tốc truyền khác nhau. 
Khuôn dạng truyền được xác định bởi các chân PI (Parity 
Inhibit) SBS (Stop Bit Select) CLS1, 2 (Character Length Select) 
và EPE (Even Parity Select), các tín hiệu vào được cài bởi CRL 
(Control Register Load) 
Hình 7.7: 
UART CDP6402 
Tác giả: TS Nguyễn Đức Thành Trang 191 
Khi một byte được truyền tới vi mạch 6402 từ TXD, chân DR 
(Data Received) sẽ chuyển sang mức 1, byte truyền tới được xuất 
ra song song ở RBR1 ÷ RBR8, muốn xóa DR ta cho DRR (Data 
Received Reset) ở mức 0. Chân TBRL (Transmitter Buffer 
Register Load) ở mức 0 sẽ nạp data song song ở TBR1÷TBR8 vào 
thanh ghi đệm truyền, khi chân này chuyển sang mức cao sẽ 
truyền dữ liệu đi nối tiếp ở TRO. 
Bảng 7.13: Trạng thái bộ truyền thu nối tiếp 
thông báo ra ngoài nhờ các chân 
PE Cờ lỗi 1 Có lỗi 
OE Overrun error 1 Đã nhận dữ liệu nhưng DRR chưa tác động 
SFD Status flag disable 1 Cấm các cờ báo 
TRE Transmitter Register empty 1 Thanh ghi truyền trống 
DR Data received 1 Đã nhận dữ liệu 
TBRE Transmitter buffer Register emply 1 Thanh ghi đệm truyền trống 
 Trong sơ đồ Hình 7.8, một vi mạch ADC0804 1 kênh 8 bit 
được dùng để đổi áp tương đồng ra số 8 bit đưa vào TBR1÷TBR8, 
khi 6402 nhận 1 byte từ TXD nó sẽ cho DR ở mức cao đưa vào 
chân WR của ADC0804 bắt đầu chuyển đổi AD. Đổi xong INTR 
tác động đưa vào TBRL nạp 8 bit đã đổi vào thanh ghi đệm 
truyền và truyền đi nối tiếp, đồng thời đưa vào DRR làm xóa DR 
ngưng đổi cho đến khi có một byte mới vào RRI. 
Chương trình sau viết bằng ngôn ngữ C minh họa hoạt động 
của mạch. 
/* Chương trình đổi AD nối tiếp */ 
#include 
#include 
#include 
#define PORT1 0x3F8 
#define INTVECT 0x0C 
int bufferin = 0; 
int bufferout = 0; 
unsigned char ch; 
char buffer [1025]; 
void interrupt (*oldport1isr) (); 
void interrupt PORT1INT /*IRS cho PORT1 */ 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 192 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
{ 
 int c; 
 do {c = inportb(PORT1 +5); 
Hình 7.8: Chuyển đổi AD dùng cổng nối tiếp 9600, 8, E, 1 
 if (c & 1) {buffer[bufferin] = inportb(PORT1); 
 bufferin++; 
 if (bufferin == 1024) {bufferin = 0;}} 
 } while (c & 1); 
 outportb (0x10, 0x20); 
} 
void main (void) 
{ 
 int c; 
 outportb (PORT1 + 1, 0); /* Cấm ngắt port 1 */ 
 oldport1isr = getvect (INTVECT); 
 setvect (INTVECT, PORT1INT); 
 /*PORT 1 - Đặt chế độ*/ 
 outportb (PORT1 + 3, 0x80); /* SET DLAB ON */ 
 outportb (PORT1 + 0, 0x0C); /* đặt Baud rate 9600 BPS */ 
 outportb (PORT1 + 1, 0x00); 
 outportb (PORT1 + 3, 0x03); /* 8 bits, No Parity, 1 Stop Bit */ 
 outportb (PORT1 + 2, 0xC7); /*FIFO Control Register*/ 
 outportb (PORT1 + 4, 0x0B); /*Cho DTR, RTS, và OUT2 ON*/ 
 outportb (0x21, (inportb (0x21) & 0xEF); 
Tác giả: TS Nguyễn Đức Thành Trang 193 
 outportb (PORT1 + 1, 0x01); /* Interrupt khi nhận data */ 
 printf (“\n\chương trình đổi ADC nối tiếp. Nhấn ESC để thoát \n”); 
 do { 
 if (bufferin ! == bufferout) {ch = buffer[bufferout]; 
 bufferout++; 
 if (bufferout == 1024) {bufferout = 0;} 
 print(“%u\n”, ch); 
 printf(“%f volts\n”, (float) ch/256*5);} 
 if (kbhit () {c = getch(); 
 outportb(PORT1, c);} 
 } while (c != 27); 
 outportb (PORT1 + 1, 0); 
 outportb (0x21, (inportb (0x21) ⏐ 0x20)); 
 setvect (INTVECT, oldport1isr); 
} 
/* Chương trình truyền nối tiếp dùng ngôn ngữ C 
/* Xuất kỳ tự nhận được ra màn hình và đọc ký tự từ bàn phím gởi nối tiếp */ 
#include 
#include 
#include 
#define PORT1 0x3F8 
/* COM 1 0x3F8 */ 
/* COM 2 0x2F8 */ 
/* COM 3 0x3E8 */ 
/* COM 4 0x2E8 */ 
void main (void) 
{ 
 int C; 
 int ch; 
 outportb (PORT1 + 1, 0); /* Cấm ngắt Port 1 */ 
 /* Đặt cấu hình PORT 1 */ 
 outportb (PORT1 + 3, 0x80); /* SET DLAB ON */ 
 outportb (PORT1 + 0, 0x03); /* Set Baud rate - Divisor Latch Low Byte */ 
 /* Default 0x03 = 38,400 BPS */ 
 /* 0x01 = 115,200 BPS */ 
 /* 0x02 = 56,700 BPS */ 
 /* 0x06 = 19,200 BPS */ 
 /* 0x0C = 9,600 BPS */ 
 /* 0x18 = 4,800 BPS */ 
 /* 0x30 = 2,400 BPS */ 
 outportb (PORT1 + 1 , 0x00); /* Set Baud rate - Divisor Latch Hight Byte */ 
 outportb (PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ 
 outportb (PORT1 + 2 , 0xC7); /* FIFO Control Register */ 
 outportb (PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */ 
 printf (“\n. Press ESC to quit \n”); 
 do { c = inportb (PORT1 + 5); /* Xem có nhận được ký tự không. */ 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 194 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
 if (c & 1) {ch = inportb (PORT1); 
 printf (“%c” ch);} /* Xuất ký tự ra màn hình */ 
 if (kbhit ()) {ch = getch (); /* Đọc phím bấm */ 
 outportb (PORT1, ch);} /* Gởi ký tự */ 
 } while (ch != 27); 
} 
/* Chương trình giao tiếp nối tiếp dùng ngắt*/ 
#include 
#include 
#include 
#define PORT1 0x2E8 
#define INTVECT 0x08 /* Com Port’s IRQ here */ 
int bufferin = 0; 
int bufferout = 0; 
char ch; 
char buffer [1025]; 
void interrupt (*oldport1isr) (); 
void interrupt PORT1INTO () /* Interrupt Service Routine (IRS) for PORT 1 */ 
{ 
 int c; 
 do {c = inportb (PORT1 + 5); 
 if (c & 1) {buffer [bufferin] = inportb (PORT1); 
 bufferin++; 
 if (bufferin == 1024) bufferin = 0;} 
 } while (c & 1); 
 outportb (0x20, 0x20); 
} 
void main (void) 
{ 
 int c; 
 outportb (PORT1 + 1 , 0); 
 oldport1isr = getvect (INTVECT); /* cất vectơ ngắt cũ */ 
 setvect (INTVECT, PORT1INT); /* đặt vectơ ngắt mới */ 
 /* COM 1 - 0x0C */ 
 /* COM 2 - 0x0B */ 
 /* COM 3 - 0x0C */ 
 /* COM 4 - 0x0B */ 
 outportb (PORT1 + 3 , 0x80); /* SET DLAB ON */ 
 outportb (PORT1 + 0 , 0x03); /* Set Baud rate - Divisor Latch Low Byte */ 
 /* Default 0x03 = 38,400 BPS */ 
 /* 0x01 = 115,200 BPS */ 
 /* 0x20 = 56,700 BPS */ 
 /* 0x06 = 19,200 BPS */ 
 /* 0x0C = 9,600 BPS */ 
 /* 0x18 = 4,800 BPS */ 
 /* 0x30 = 2,400 BPS */ 
 outportb (PORT1 + 1, 0x00); /* Set Baud rate - Divisor Latch Hight Byte */ 
Tác giả: TS Nguyễn Đức Thành Trang 195 
 outportb (PORT1 + 3, 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ 
 outportb (PORT1 + 2, 0xC7); /* FIFO Control Register */ 
 outportb (PORT1 + 4, 0x0B); /* Turn on DTR, RTS, and OUT2 */ 
 outportb (0x21, (inportb (0x21) & 0xF7)); /* Set Programmable Interrupt Controller */ 
 /* COM 1 (IRQ4) - 0xEF */ 
 /* COM 2 (IRQ3) - 0xF7 */ 
 /* COM 3 (IRQ4) - 0xEF */ 
 /* COM 4 (IRQ3) - 0xF7 */ 
 outportb (PORT1 + 1 , 0x01); /* Ngắt khi thu */ 
 printf (“\n Press ESC to quit \n”); 
 do { 
 if (bufferin ! == bufferout) {ch = buffer [bufferout]; 
 bufferout++; 
 if (bufferout == 1024) bufferout = 0; 
 printf (“%C”, ch);} 
 if (kbhit ()) {c = getch (); 
 outportb (PORT 1, c);} 
 } while (c ! = 27); 
 outportb (PORT 1 + 1 , 0); /* Turn off interrupts - Port 1 */ 
 outportb (0x21, (inportb (0x21) ⏐ 0x08)); /*MASK IRQ using PIC */ 
 /* COM 1 (IRQ4) - 0x10 */ 
 /* COM 2 (IRQ3) - 0x08 */ 
 /* COM 3 (IRQ4) - 0x10 */ 
 /* COM 4 (IRQ3) - 0x08 */ 
 setvect (INTVECT, oldport 1 isr); /* hồi phục vectơ ngắt cũ */ 
} 
7.5 MẠNG 485 
Chuẩn RS 232 dùng đường truyền không cân bằng vì các tín 
hiệu đều lấy điểm chuẩn là đường mass chung, bị ảnh hưởng của 
nhiễu tác động, do đó tốc độ truyền và khoảng cách truyền bị giới 
hạn. 
Khi cần tăng khoảng cách và tốc độ truyền, phương pháp 
truyền hai dây vi sai trở nên hữu hiệu hơn vì hai dây có đặc tính 
giống nhau, tín hiệu truyền đi là hiệu số điện áp giữa hai dây, do 
đó loại trừ được nhiễu chung. Hai chuẩn thường dùng là RS422 và 
RS485. Tuy nhiên chuẩn RS422 ít thông dụng hơn RS485. 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 196 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
Hình 7.9: Truyền tin song công dùng RS422 
Chuẩn RS422 dùng 4 dây do đó cho phép truyền song công, 
tức là cùng lúc có thể thu phát. Tín hiệu từ máy tính theo chuẩn 
RS 232 có mức điện áp ±12V phải đổi sang mức TTL 0 - 5V dùng 
vi mạch MAX232, sau đó tín hiệu đơn được đổi sang tín hiệu vi 
sai dùng vi mạch MAX485 (488, 489, 490, 491). Điện áp vi sai phải 
lớn hơn 200mV. Nếu ABV > 200mV ta coi như trị logic 1 được 
truyền còn nếu < −ABV 200mV thì trị logic 0 được truyền. 
Chuẩn RS422 không cho phép có hơn hai thiết bị truyền 
nhận tin trên đường dây, vì vậy chuẩn RS485 thông dụng hơn. 
Với chuẩn RS485 ta có thể nối 32 thiết bị thu phát trên hai 
dây có khoảng cách tối đa 1200m và vận tốc truyền đến 10Mbit/s. 
Hai điện trở kết thúc 120Ω được nối với hai đầu xa nhất của mạng, 
dây dẫn là loại dây xoắn đôi 26AWG. Chuẩn này dùng vi mạch lái 
SN75176 hay họ Maxim MAX481, 483, 485 , 487, 488, 489, 490, 
1487. Tiêu biểu là vi mạch MAX485 chuyển đổi từ tín hiệu đơn 
sang tín hiệu vi sai, có chân điều khiển cho ngõ ra vi mạch ở tổng 
trở cao, nhờ vậy có thể nối chung nhiều vi mạch lái với nhau. 
Tác giả: TS Nguyễn Đức Thành Trang 197 
Hình 7.10:. Mạng RS485 
 MAX485 gồm bộ lái và bộ thu, tín hiệu vào bộ lái D logic TTL 
đổi thành hai tín hiệu A và B, khi tín hiệu điều khiển DE mức 
thấp thì hai chân AB cách ly với vi mạch. Tín hiệu vào bộ thu là A 
và B, tín hiệụ ra R logic TTL tùy thuộc hiệu điện áp giữa A và B, 
khi /RE logic 1 thì R cách ly với vi mạch. 
Mạch lái 
Input D Control DE OUTPUT 
A B 
H H H L 
L H L H 
X L Z Z 
Mạch thu 
VID=VA-VB Control /RE Output R 
VID≥ 0.2 V L H 
--0.2V≤VID≤0.2V L ? 
VID≤-0.2V L L 
X H Z 
Ngõ vào hở L H 
Hình 7.11: Vi mạch 485 và bảng thực trị 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 198 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
Mạng 485 làm việc theo chế độ master -slave, 
master cho DE mức 1 để truyền dữ liệu, còn các slave 
có DE=0, /RE=0 chờ nhận dữ liệu, Khi master muốn 
nhận dữ liệu, DE=0, /RE=0 còn slave phát sẽ có DE=1, 
/RE=1. Điều khiển các đường DE,/RE bằng tín hiệu RTS 
hay mạch định thì 
Hình 7.12: Mạch chuyển đổi RS 232---485 
Tác giả: TS Nguyễn Đức Thành Trang 199 
7.6 MODEM 
Modem (modulator + demodulator) cho phép ghép nối hai 
DTE qua khoảng cách nhờ đường dây điện thoại công cộng có sẵn 
hay đường dây điện thoại riêng. 
Tín hiệu số từ DTE dùng để điều chế sóng mang rồi truyền 
đi, ở nơi thu sóng mang được giải điều chế rồi đổi lại thành tín 
hiệu số đưa vào DTE. 
Ngoài việc truyền tín hiệu số thông qua modem còn có thể 
trao đổi thoại, fax, videophone. 
Modem (xuất hiện từ thập niên 60) chia làm hai loại là: 
modem trong và modem ngoài. 
Modem trong, được cắm vào slot PCI của máy tính và thường 
được gắn địa chỉ là COM3 hay COM4, vận tốc truyền tối đa 
56kbps, có giá rẻ hơn. 
Modem ngoài ghép với máy tính qua đường cáp 25 – 9, 9 – 9 
hay 25 – 25, tín hiệu được truyền theo chuẩn RS 232 (± 12V) 
Bảng 7.14 
DTE 9 chân DTE 25 chân DCE Modem 
 1 FG ⎯ 1 FG 
3 2 TD → 2 TD 
2 3 RD ← 3 RD 
7 4 RTS → 4 RTS 
8 5 CTS ← 5 CTS 
6 6 DSR ← 6 DSR 
5 7 SG ⎯ 7 SG 
1 8 DCD ← 8 DCD 
4 20 DTR → 20 DTR 
9 22 RI ← 22 RI 
15 TXCLK ← 15 TXCLK ⎧⎨⎩Truyền đồng bộ 17 RXCLK ← 17 RXCLK 
 24 XTCLK → 24 XTCLK 
Hai modem kết nối với nhau thông qua quay số và tổng đài 
điện thoại sẽ thực hiện kết nối. 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 200 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
Hình 7.13 
Việc trao đổi dữ liệu giữa máy tính và modem thực hiện theo 
cơ chế bắt tay phần cứng hay phần mềm. 
- Bắt tay phần cứng: DTE muốn truyền dữ liệu liên quan 
DCE thì cho RTS = H và chờ CTS trả lời modem. Ngược lại 
modem muốn truyền dữ liệu thì cho DSR = H và chờ DTR. Khi 
DTE là vi điều khiển có thể cho RTS và DTR của modem ở mức 
cao hoặc điều khiển các chân này qua cổng nhập xuất I/0. 
- Bắt tay phần mềm: dùng hai ký tự XON (CtrlS) (transmitter 
ON) và XOFF (CtrlQ) (transmitter off) để bắt đầu truyền hay 
ngưng truyền dữ liệu. Dùng phương pháp này có thể gây ra sai 
lầm khi dữ liệu trùng với XON hay XOFF. 
Do đường dây điện thoại công cộng chủ yếu dùng cho điện 
thoại nên khổ sóng giới hạn 3300Hz, điều này làm hạn chế vận 
tốc truyền dữ liệu (định lý Shannon) do đó các hãng sản xuất 
modem phải tìm cách nâng cao tốc độ truyền và độ tin cậy thông 
tin bằng các phương pháp điều chế, nén tín hiệu và sửa sai. Hiện 
nay tốc độ tối đa là 56kbps trên lý thuyết, còn thông thường sử 
dụng modem ngoài tốc độ là 33,6kbps. 
Điều chế 
• Điều biên AM: mức 0 và 1 được biểu thị bằng hai điện 
áp khác nhau của sóng mang. 
• Điều tần FM: dùng hai tần số khác nhau 1070 Hz cho 
logic 0 và 1270 Hz cho logic 1 ở một chiều, còn chiều 
ngược lại theo thứ tự là 2025 Hz và 2225 Hz. Hai dải 
tần số khác nhau nên modem hoạt động song công 
trên hai dây. 
• Điều pha PM: sóng mang có tần số cố định nhưng 
Tác giả: TS Nguyễn Đức Thành Trang 201 
dùng pha 0 và pha °180 để biểu thị logic. 
• Điều chế TCM (Trellis Coded Modulation): kết hợp 
điều pha và điều biên. 
Thông thường kết hợp nhiều phương pháp điều chế để đạt 
hiệu quả. Ví dụ phương pháp điều chế sau cho phép tăng vận tốc 
truyền gấp ba lần. 
Bảng 7.15 
AM 
Biên độ tương đối
PM 
Lệch pha
Dữ liệu truyền
(nhóm ba bit)
1 45 000 
1 135 001 
1 225 010 
1 315 011 
2 45 100 
2 135 101 
2 225 110 
2 315 111 
7.7 TIÊU CHUẨN VÀ GIAO THỨC 
Có các tổ chức quốc tế về tiêu chuẩn truyền thông như ITU 
(International TeleCommunications Union) của Liên Hiệp Quốc, 
ISO (International Standards Organization) và CCITT (International 
Telegraph and Telephone Consultative Committee) thuộc ITU. 
Các tổ chức này định ra các chuẩn về modem ký hiệu V.XX. 
Sau đây là các chuẩn gần nhất: 
Bảng 7.16 
Điều chế Chuẩn Năm Vận tốc
QAM V 32 1984 9600 
TCM V 32 bis 1991 14400 
TCM V 32 Ter 19200 
TCM V 34 1994 28800 
 V 90 1998 56000 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 202 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
Để tăng vận tốc truyền, modem dùng phương pháp nén dữ 
liệu, ví dụ như phương pháp mã Huffman, ký tự thường truyền 
được mã hóa ít bit hơn các ký tự khác hay phương pháp run 
length coding thay một loạt bit giống nhau bằng bit đó và số lần 
lặp. Tỷ số nén có thể lên đến 4: 1 hay 2: 1 tùy thuộc loại dữ liệu. 
Các giao thức phổ biến là MNP (Microcom Networking 
Protocol) V.42 bis với LAPM (Link Access Protocol for Modems). 
Khi truyền file cần phải tuân thủ các qui định của giao thức 
truyền FTP (File Transfer Protocol). 
XMODEM chia tập tin thành khối 128 byte, mỗi khối được 
kèm tổng kiểm tra hay CRC (cyclic redundancy check) 4 byte 
YMODEM dùng khối 1024 byte. 
ZMODEM dùng khối kích thước thay đổi tùy theo trạng thái 
đường truyền. 
Trong trường hợp dùng máy tính đo lường điều khiển có thể 
dùng các giao thức khác 
Khi thực hiện kết nối, đầu tiên DTE gởi lệnh kiểm tra đến 
modem xem có liên lạc được không, sau đó gởi lệnh quay số, 
modem sẽ quay số điện thoại nơi cần kết nối, nếu kết nối được sẽ 
báo cho DTE để truyền dữ liệu, đầu tiên modem sẽ truyền với 
vận tốc cao nhất có thể có, nếu không trao đổi thông tin được nó 
sẽ chuyển sang vận tốc truyền thấp hơn hay giao thức khác, quá 
trình tiếp tục cho đến khi kết nối được hay không có khả năng 
kết nối, hết thời gian. 
7.8 TẬP LỆNH MODEM 
Tập lệnh modem, thường gọi là tập lệnh Hayes (do hãng chế 
tạo modem Hayes Micro Computer Products đề nghị), còn gọi là 
tập lệnh AT vì bắt đầu mỗi lệnh bằng ký tự chú ý AT (attention) 
. Thông qua tập lệnh, DTE có thể điều khiển modem và nhận 
thông tin từ nó. Trong modem có một số thanh ghi gọi là thanh 
ghi S, cho phép DTE thay đổi cấu hình modem. 
Lệnh AT luôn luôn khởi đầu bằng AT và gồm một hay nhiều 
lệnh kế tiếp nhau kết thúc bằng Enter ( mã ASCII 13); chiều dài 
Tác giả: TS Nguyễn Đức Thành Trang 203 
chuỗi lệnh không quá 40 hay 64 ký tự, tùy loại modem. 
Lệnh +++ và A/ không cần khởi đầu bằng AT và không cần 
phím enter. Với máy tính, muốn kiểm tra modem có thể dùng 
tiện ích hyperterminal của Windows 9X. Trên màn hình sẽ xuất 
hiện khung soạn thảo và ta có thể đánh lệnh đến modem, nhận 
trả lời từ modem. 
Chương trình kết nối hai DTE phải thực hiện việc gởi các 
lệnh AT đến modem và nhận trả lời từ modem. 
Modem có hai chế độ hoạt động là chế độ lệnh khi mới cấp 
nguồn và chế độ dữ liệu. Ở chế độ lệnh, modem chờ lệnh AT; còn 
ở chế độ dữ liệu, mọi thông tin từ máy tính đều là dữ liệu và được 
modem xử lý truyền đi. 
Sau đây là các lệnh chính 
+++ : Chuyển modem từ chế độ dữ liệu sang chế độ lệnh 
A/ : Lặp lại lệnh trước 
A : Nhấc điện thoại trả lời cuộc gọi. 
DPn : Quay số điện thoại n dạng xung. 
DTn : Quay số điện thoại n dạng tone. 
H0 : Gác máy (cắt kết nối) 
H1 : Nhấc máy (chuẩn bị quay số) 
O0 : Trở về chế độ dữ liệu 
O1 : Bắt đầu chế độ điều chỉnh modem để đạt kết quả truyền thông tốt 
nhất 
Q0 : Cho phép modem gởi thông báo đến DTE (mặc định) 
Q1 : Cấm modem gởi thông báo 
Q2 : Gởi thông báo khi modem chủ động kết nối, không gởi thông báo 
khi modem nhận cuộc gọi. 
V0 : Nhận thông báo dạng ngắn (số thập phân) 
V1 : Nhận thông báo dạng dài (ký tự) mặc định 
Sn = V Nạp giá trị V vào thanh ghi Sn 
S0 = V : modem chờ V hồi chuông trước khi nhấc máy trả lời V = 
 1 ÷ 255 (mặc định S0 = 0 không trả lời) 
S6 = V chờ V sec trước khi quay số.V = 2 ÷ 255 (mặc định V = 2) 
Sn ? đọc giá trị thanh ghi Sn 
Chương 7: GIAO TIẾP QUA CỔNG NỐI TIẾP Trang 204 
Thành phố Hồ Chí Minh, tháng 4 năm 2006 
Z0 Đưa modem về cấu hình 0 
Z1 Đưa modem về cấu hình 1 
L0, L1, L2, L3 Đặt âm lượng loa modem 
M0 Tắt loa 
M1 Mở loa cho đến khi nhận được sóng mang (mặc định) 
M2 Mở loa. 
M3 Tắt loa khi quay số và nhận sóng mang. 
&Kn 
n=0 Không nén dữ liệu 
n= nén 
Bảng 7.17 Các thông báo 
Dạng chữ Dạng số Ý nghĩa 
OK 0 Thực hiện lệnh thành công 
CONNECT 1 Kết nối 300 bps 
RING 2 Có chuông gọi 
NO CARRIER 3 Không có sóng mang 
ERROR 4 Nhận lệnh không giá trị, sai tổng 
kiểm tra, hàng lệnh quá dài 
CONNECT 1200 5 Kết nối 1200 bps 
NO DIAL TONE 6 Không có âm hiệu mời quay số 
BUSY 7 Máy bên kia bận 
NO ANSWER 8 Máy bên kia Không trả lời 
CONNECT 2400 10 Báo kết nối vận tốc 2400 baud 
CONNECT 4800 11 
CONNECT 9600 12 
CONNECT 14400 13 
CONNECT 19200 14 
CONNECT 16800 15 
CONNECT 57600 18 
CONNECT 7200 24 
CONNECT 12000 25 
Tác giả: TS Nguyễn Đức Thành Trang 205 
Dạng chữ Dạng số Ý nghĩa 
CONNECT 28800 32 
CONNECT 115200 33 
CARRIER 300 40 Phát giác sóng mang 
CARRIER 9600 50 
CARRIER 28800 58 
COMPRESSION : CLASS 5 66 Nén MNP 
COMPRESSION : V42 BIS 67 Nén V42 bis 
COMPRESSION : NONE 69 Không nén 
PROTOCOL : NONE 70 Không giao thức 
PROTOCOL : LAPM 77 Giao thức V42 LAPM 
PROTOCOL : MNP 80 
PR
            Các file đính kèm theo tài liệu này:
 chapter7_.pdf chapter7_.pdf