You are on page 1of 11

A.

NỘI DUNG
I. Chuẩn RS232
1. Giới thiệu :
RS232 là một chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối nhiều
nhất là với 2 thiết bị, chiều dài kết nối lớn nhất cho phép để đảm bảo dữ liệu là 50-100 feet (
12.7 đến 25.4 m), tốc độ 20kBít/s đôi khi là tốc độ 115 k Bít/s với một số thiết bị đặc biệt.
Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo
chuẩn RS232C được gọi là cổng Com. Chúng được dùng
ghép nối cho chuột, modem thiết bị đo lường,… Có hai dạng
cổng Com: cổng Com 25 chân và cổng Com 9 chân. Hiện nay
thì cổng Com 9 chân (DB9) theo chuẩn RS232C trở nên rất
phổ biến
Ưu điểm giao diện nối tiếp RS232C
− Khả năng chống nhiễu của các cổng nối tiếp cao.
− Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính đang được cấp điện.
− Các mạch điện đơn giản có thể nhận được điện áp nguồn nuôi qua cổng nối tiếp.
Số chân Mô tả
1 Đất cách ly (Protective Cround)
2 Dữ liệu được truyền TxD (TráNsmitted data)
3 Dữ liệu được phân RxD (Received data)
4 Yêu cầu gửi RTS (Request To Send)
5 Xoá để gửi CIS (Clear To Send)
6 Dữ liệu sẵn sàng DSR (Data Set Ready)
7 Đất của tín hiệu GND (Signal Cround)
8 Tách tín hiệu mạng dữ liệu DCD (Data Carrier Detect)
9/10 Nhận để kiểm tra dữ liệu (Received for data testing)
2. Đặc điểm :
Sơ đồ bên trong MAX232 :
Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào CTS,
điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9 của vi mạch
MAX 232. Còn chân RST (chân 10 của vi mạch MAX ) nối với đường dẫn bắt tay để điều
khiển quá trình nhận. Thường thì các đường dẫn bắt tay được nối với cổng nối tiếp qua các
cầu nối, để khi không dùng đến nữa có thể hở mạch các cầu này. Cách truyền dữ liệu đơn
giản nhất là chỉ dùng ba đường dẫn TxD, RxD và GND (mass).
- TxD: Dữ liệu được truyền đi từ Modem trên mạng điện thoại.
- RxD: Dữ liệu được thu bởi Modem trên mạng điện thoại.
Các đường báo thiết bị sẵn sàng:
- DSR : Để báo rằng Modem đã sẵn sàng.
- DTR : Để báo rằng thiết bị đầu cuối đã sẵn sàng
- Các đường bắt tay bán song công.
- RTS : Để báo rằng thiết bị đầu cuối yêu cầu phát dữ liệu.
- CTS : Modem đáp ứng nhu cầu cần gửi dữ liệu của thiết bị đầu cuối cho thiết bị đầu cuối có
thể sử dụng kênh truyền dữ liệu. Các đường trạng thái sóng mang và tín hiệu điện thoại:
- CD : Modem báo cho thiết bị đầu cuối biết rằng đã nhận được một sóng mang hợp lệ từ
mạng điện thoại.
- RI : Các Modem tự động trả lời báo rằng đã phát hiện chuông từ mạng điện thoại địa chỉ
đầu tiên có thể tới được của cổng nối tiếp được gọi là địa chỉ cơ bản (Basic Address). Các địa
chỉ ghi tiếp theo được đặt tới bằng việc cộng thêm số thanh ghi đã gặp của bộ UART vào địa
chỉ cơ bản.
- Mức tín hiệu trên chân ra RxD tùy thuộc vào đường dẫn TxD và thông thường nằm trong
khoảng –12 đến +12. Các bit dữ liệu được gửi đảo ngược lại. Mức điện áp đối với mức High
nằm giữa –3V và –12V và mức Low nằm giữa +3V và +12V. Trên hình 2-4 mô tả một dòng
dữ liệu điển hình của một byte dữ liệu trên cổng nối tiếp RS-232C.
- Ở trạng thái tĩnh trên đường dẫn có điện áp –12V. Một bit khởi động (Starbit) sẽ mở đầu
việc truyền dữ liệu. Tiếp đó là các bit dữ liệu riêng lẻ sẽ đến, trong đó các bit giá trị thấp sẽ
được gửi trước tiên. Còn số của các bit thay đổi giữa 5 và 8. Ở cuối của dòng dữ liệu còn có
một bit dừng (Stopbit) để đặt trở lại trạng thái ngõ ra (-12V).
Mức điện áp logic của RS_232C là hai khoảng điện áp giữa +15 V và -15 V. Các
đường dữ liệu sử dụng mức logic âm, logic 1 có điện thế giữa -5V và -15V, logic 0 có điện
thế giữa +5V và +15V. Tuy nhiên các đường điều khiển sử dụng mức logic dương, giá trị
TRUE từ +5V đến +15V, giá trị FALSE từ -5V đến -15V. Ở chuẩn giao tiếp này, giữa ngõ ra
bộ kích phát và ngõ vào bộ thu có mức nhiễu được giới hạn là 2V. Do vậy ngưỡng lớn nhất
của ngõ vào là 3V, trái lại mức 5V là ngưỡng nhỏ nhất đối với ngõ ra. Ngõ ra bộ kích phát
khi không tải có điện áp là 25V.
Các đặc điểm về điện khác bao gồm:
- RL (điện trở tải) được nhìn từ bộ kích phát phải có giá trị giữa 7K Ohm và 3KOhm.
- CL (điện dung tải) được nhìn từ bộ kích phát không được vượt quá 2500 pF.
- Để ngăn cản sự dao động quá mức, tốc độ thay đổi của điện áp không được vượt quá 30
V/us.
- Đối với các đường điều khiển, thời gian chuyển của tín hiệu không được vượt quá 1ms.
Đối với các đường dữ liệu, thời gian chuyển phải không vượt quá 4% thời gian của 1 bit hoặc
1 ms.
− Trong chuẩn RS232C, các giới hạn trên đối với mức logic 0 và logic 1 là ±12V.
− Mức logic 1 có điện áp nằm trong khoảng –3V đến –12V, mức logic 0 từ +3V đến +12V.
− Trở kháng tải phải lớn hơn 3000Ω nhưng phải nhỏ hơn 7000Ω.
− Tốc độ truyền/nhận dữ liệu cực đại là 100kbps (ngày nay có thể đạt được 200 kbps).
− Các lối vào phải có điện dung nhỏ hơn 2500pF
− Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng nối tiếp RS232C
không thể vượt quá 15 m nếu không sử dụng Modem.
− Các giá trị tốc độ truyền dữ liệu chuẩn là : 50, 75, 110, 150, 300, 600, 1200, 2400, 4800,
9600, 19200, 28800 …… 56600, 115200bps.
Các Thông số chọn khi lập trình giao tiếp :
" Com port1
" Bit Rate = 9600
" Data bit = 8
" Parity bit = none
" Stop Bit = 1
" Handshaking = none
=> Ưu điểm của giao diện này là có khả năng thiết lập tốc độ Baud.
Khi dữ liệu từ máy tính được gởi đến KIT Vi điều khiển 8051 qua cổng COM thì dữ
liệu này sẽ được đưa vào từng bit (nối tiếp) vào thanh ghi SBUF (thanh ghi đệm), đến khi
thanh ghi đệm đầy thì cờ RI trong thanh ghi điều khiển sẽ tự động Set lên 1 và lúc này CPU
sẽ gọi chương trình con phục vụ ngắt và dữ liệu sẽ được đưa vào để xử lý.

3. Phương thức truyền nhận Data


a) Thủ tục truyền tin nối tiếp TXD:
Khi lập trình 8051 để truyền các byte ký tự nối tiếp thì cần phải thực hiện các bước sau đây:
1. Nạp thanh ghi TMOD giá trị 204 báo rằng sử dụng Timer1 ở chế độ 2 để thiết lập chế độ
baud.
2. Nạp thanh ghi TH1 các giá trị cho trong bảng 10.4 để thiết lập chế độ baud truyền dữ
liệu nối tiếp (với giả thiết tần số XTAL = 11.0592MHz).
3. Nạp thanh ghi SCON giá trị 50H báo chế độ nối tiếp 1 để đóng khung 8 bít dữ liệu, 1 bít
Start và 1 bít Stop.
4. Bật TR1 = 1để khởi động Timer1.
5. Xoá bít TI bằng lệnh “CLR TI”
6. Byte ký tự cần phải truyền được ghi vào SBUF.
7. Bít cờ TI được hiển thị bằng lệnh “JNB TI, xx” để báo ký tự đã được truyền hoàn tất
chưa.
8. Để truyền ký tự tiếp theo quay trở về bước 5.
=> Kiểm tra bít cờ ngắt TI ta biết được 8051 có sẵn sàng để truyền một byte khác không.
Quan trọng hơn cần phải nói ở đây là bít cờ TI được bật bởi từ 8051 khi nó hoàn tất việc
truyền một byte dữ liệu, còn việc xoá nó thì phải được lập trình viên thực hiện bằng
lệnh“CLR TI”. Cũng cần lưu ý rằng, nếu ta ghi một byte vào thanh ghi SBUF trước khi cờ TI
được bật thì sẽ có nguy cơ mất phần dữ liệu đang truyền. Bít cờ TI có thể kiểm tra bằng lệnh
“JNB TI …” hoặc có thể sử dụng ngắt như ta sẽ thấy trong chương 11.
b) Thủ tục nhận tin nối tiếp TXD:
1. Nạp giá trị 20H vào thanh ghi TMOD để báo sử dụng bộ Timer1, chế độ 2 (8 bítm, tự động
nạp lại) để thiết lập tốc độ baud.
2. Nạp TH1 các giá trị cho trong bảng 10.4 để tạo ra tốc độ baud với giả thiết XTAL =
10.0592MHz.
3. Nạp giá trị 50H vào thanh ghi SCON để báo sử dụng chế độ truyền nối tiếp 1 là dữ liệu
được đóng gói bởi 8 bít dữ liệu, 1 bít Start và 1 bít Stop.
4. Bật TR1 = 1 để khởi động Timer1.
5. Xoá cờ ngắt RI bằng lệnh “CLR RI”
6. Bít cờ RI được hiển thị bằng lệnh “JNB RI, xx” để xem toàn bộ ký tự đã được nhận chưa.
7. Khi RI được thiết lập thì trong SBUF đã có 1 byte. Các nội dung của nó được
cất lưu vào một nơi an toàn.
8. Để nhận một ký tự tiếp theo quay trở về bước 5.
=> Kiểm tra cờ RI ta biết 8051 đã nhận được một byte ký tự chưa hay rồi. Nếu ta không sao
được nội dung của thanh ghi SBUF vào nơi an toàn thì có nguy cơ ta bị mất ký tự vừa nhận
được. Quan trọng hơn là phải nhớ rằng cờ RI được 8051 bật lên như lập trình viên phải xoá
nó bằng lệnh “CLR RI”. Cũng nên nhờ rằng, nếu ta sao nội dung SBUF vào nơi an toàn
trước khi RI được bật ta mạo hiểm đã sao dữ liệu chưa đầy đủ. Bít cờ RI có thể được kiểm tra
bởi lệnh “JNB RI, xx” hoặc bằng ngắt.
Việc truyền dữ liệu qua 2 đường: Máy tính truyền dữ liệu thông qua chân TXD đến
các máy tính khác. Trong khi đó các dữ liệu mà máy tính nhận về qua chân RXD. Các tín
hiệu khác chỉ đóng vai trò như là những tín hiệu hỗ trợ trong quá trình truyền thông. Vì vậy
trong những ứng dụng không phải lúc nào cũng phải sử dụng những chân này.
Ở trạng thái tĩnh trên đường dẫn có điện áp -15V (mức cao). Một bit Start sẽ mở đầu
việc truyền dữ liệu. Tiếp đến là các bit truyền dữ liệu riêng lẻ, trong đó các bit giá trị thấp sẽ
gửi đi trước tiên, con số các bit dữ liệu sẽ thay đổi giữa 5 và 8. Ở cuối của dòng dữ liệu còn
có 1 bit Stop để đặt trạng thái lối ra -15V.
Bằng tốc độ baud, ta thiết lập tốc độ truyền dữ liệu, các giá trị thông thường: 300,
600, 1200, 2400, 5600, 9600,và 19200. Tốc độ baud tương ứng với tốc độ truyền từng bit trên
1 giây. Vì vậy, với tốc độ baud là 9600 điều đó có nghĩa là 9600 bit dữ liệu truyền trong 1
giây. Như vậy, thông thường 1 khung truyền thường gồm 1 bit Start, 1 bit Stop và 8 bit dữ
liệu, tổng cộng là 10 bit được gửi đi, do đó trong 1 giây với tốc độ baud 9600 cho phép
truyền nhiều nhất 960 khung dữ liệu.
Qua cách tính đơn giản này, ta thấy 1 nhược điểm không nhỏ của truỳên
thông nối tiếp là giới hạn tốc độ truyền. Chú ý rằng, khung truyền phải được thiết lập như
nhau giữa bên truyền và bên gửi. Các thông số này có thể thiết lập 1 cách đơn giản trên
các phần mềm ứng dụng trên Window như: tốc độ baud, số bit dừng, bit chẵn (Parity).
II. Ghép Nối VXL Máy Tính qua Max 232 :
Việc truyền dữ liệu xảy ra ở trên hai đường dẫn. Qua chân cắm ra TXD máy tính gởi
dữ liệu của nó đến KIT Vi điều khiển. Trong khi đó các dữ liệu mà máy tính nhận được, lại
được dẫn đến chân RXD các tín hiệu khác đóng vai trò như là tín hiệu hổ trợ khi trao đổi
thông tin, và vì thế không phải trong mọi trường hợp ứng dụng đều dùng hết.
Vì tín hiệu cổng COM thường ở mức +12V, -12V nên không tương thích với điện áp
TTL nên để giao tiếp KIT Vi điều khiển 8051 với máy tính qua cổng COM ta phải qua một vi
mạch biến đổi điện áp cho phù hợp với mức TTL, ta chọn vi mạch MAX232 để thực hiện
việc tương thích điện áp.
Vi mạch này nhận mức RS232 đã được gởi tới từ máy tính và biến đổi tín hiệu náy thành
tín hiệu TTL để cho tương thích với IC 8051 và nó cũng thực hiện ngược lại là biến đổi tín
hiệu TTL từ Vi điều khiển thành mức +12V, -12V để cho phù hợp hoạt động của máy tính.
Giao tiếp theo cách này, khoảng cách từ máy tính đến thiết bị ngoại vi có thể đạt tới trên 20
mét.
Đối với đề tài chỉ yêu cầu truyền dữ liệu từ máy tính qua KIT chứ không truyền dữ
liệu từ KIT qua máy tính vì vậy chúng em chọn vi mạch MAX232 để thực hiện biến đổi
tương thích mức tín hiệu.
Ưu điểm của giao diện này là có khả năng thiết lập tốc độ Baud. Khi dữ liệu từ máy
tính được gởi đến KIT Vi điều khiển 8051 qua cổng COM thì dữ liệu này sẽ được đưa vào
từng bit (nối tiếp) vào thanh ghi SBUF (thanh ghi đệm), đến khi thanh ghi đệm đầy thì cờ
RI trong thanh ghi điều khiển sẽ tự động Set lên 1 và lúc này CPU sẽ gọi chương trình con
phục vụ ngắt và dữ liệu sẽ được đưa vào để xử lý.
Địa chỉ cơ bản của cổng nối tiếp của máy tính PC có thể tóm tắt trong bảng các địa chỉ sau:
COM 1 (cổng nối tiếp thứ nhất) Địa chỉ cơ bản = 3F8(Hex)
COM 2 (cổng nối tiếp thứ hai) Địa chỉ cơ bản = 2F8(Hex)
COM 3 (cổng nối tiếp thứ ba) Địa chỉ cơ bản = 3E8(Hex)
COM 4 (cổng nối tiếp thứ tư) Địa chỉ cơ bản = 2E8(Hex)

B. CƠ SỞ LÝ THUYẾT :
I.Giới thiệu vè AT89C51 :
Họ vi điều khiển MCS-51 do Intel sản xuất đầu tiên vào năm 1980 là các IC thiết kế
cho các ứng dụng hướng điều khiển. Các IC này chính là một hệ thống vi xử lý hoàn chỉnh
bao gồm các các thành phần của hệ vi xử lý: CPU, bộ nhớ, các mạch giao tiếp, điều khiển
ngắt.
MCS-51 là họ vi điều khiển sử dụng cơ chế CISC (Complex Instruction Set
Computer), có độ dài và thời gian thực thi của các lệnh khác nhau. Tập lệnh cung cấp cho
MCS-51 có các lệnh dùng cho điều khiển xuất / nhập tác động đến từng bit.
MCS-51 bao gồm nhiều vi điều khiển khác nhau, bộ vi điều khiển đầu tiên là 8051 có
4KB ROM, 128 byte RAM và 8031, không có ROM nội, phải sử dụng bộ nhớ ngoài. Sau
này, các nhà sản xuất khác như Siemens, Fujitsu, … cũng được cấp phép làm nhà cung cấp
thứ hai.
AT89C51 là vi điều khiển do Atmel sản xuất, chế tạo theo công nghệ CMOS
có các đặc tính như sau:
- 4 KB PEROM (Flash Programmable and Erasable Read Only Memory), có khả
năng
tới 1000 chu kỳ ghi xoá
- Tần số hoạt động từ: 0Hz đến 24 MHz
- 3 mức khóa bộ nhớ lập trình
- 128 Byte RAM nội.
- 4 Port xuất /nhập I/O 8 bit.
- 2 bộ Timer/counter 16 Bit.
- 6 nguồn ngắt.
- Giao tiếp nối tiếp điều khiển bằng phần
cứng.
- 64 KB vùng nhớ mã ngoài
- 64 KB vùng nhớ dữ liệu ngoài.
- Cho phép xử lý bit.
- 210 vị trí nhớ có thể định vị bit.
- 4 chu kỳ máy (4 µs đối với thạch anh
12MHz) cho hoạt động nhân hoặc chia.
- Có các chế độ nghỉ (Low-power Idle) và
chế độ nguồn giảm (Power-down).
- Ngoài ra, một số IC khác của họ MCS-
51 có thêm bộ định thời thứ 3 và 256 byte RAM
nội.
II.Truyền thông nối tiếp :
1. Tốc độ baud trong 8051 :
8051 truyền và nhận dữ liệu nối tiếp theo nhiều tốc độ khác nhau. Tốc độ
truyền của nó có thể lập trình được. Điều ày thực hiện nhờ sự trợ giúp của bộ định thời
Timer1. Trước khi ta đi vào bàn cách làm điều đó như thế nào thì ta sẽ xét quan hệ giữa tần
số thạch anh và tốc độ baud trong 8051.
VD: Trong trường hợp XTAL = 11.0592MHz thì tần số chu trình là 921.6kHz
(11.0592MHz : 12 = 921.6kHz). Mạch điện UART truyền thông nối tiếp của 8051 lại chia
tần số chu trình máy cho 32 một lần nữa trước khi nó được dùng bởi bộ định thời gian
Timer1 để tạo ra tốc độ baud. Do vậy, 921.6kHz : 32 = 28.800Hz.
Các giá trị của thanh ghi TH1 trong Timer1 cho các tốc độ baud khác nhau :
Tốc độ baud TH1 (thập phân) TH1 (số Hex)
9600 - 3 FD
4800 - 6 FA
2400 - 12 F4
1200 - 24 F8

2. Truyền thông không đồng bộ (UART) :


8051 có 1 cổng UART làm việc ở chuẩn TTL, mặc định sau khi khởi động tất các
cổng của 8051 dều làm việc ở chế dộ vào ra số, vì thế để có thể sử dụng UART cần phải cấu
hình cho cổng này làm việc thông qua các thanh ghi điều khiển và ghép nối tương thích với
chuẩn rs232.
a) Thanh ghi SBUF :
SBUF là thanh ghi 8 bít được dùng riêng cho truyền thông nối tiếp trong 8051. Đối
với một byte dữ liệu cần phải được truyền qua đường TxD thì nó phải được đặt trong thanh
ghi SBUF. Tương tự như vậy SBUF giữ một byte dữ liệu khi nó được nhận bởi đường RxD
của 8051. SBUF có thể được truy cập bởi mọi thanh ghi bất kỳ trong 8051.
Khi một byte được ghi vào thanh ghi SBUF nó được đóng khung với các bít Start
và Stop và đường truyền nối tiếp quan chân TxD. Tương tự như vậy, khi các bít được nhận
nối tiếp từ RxD thì 8051 mở khung nó để loại trừ các bít Start và Stop để lấy ra một byte từ
dữ liệu nhận được và đặt nó vào thanh ghi SBUF.
Thanh ghi port nối tiếp tại địa chỉ 99h thực chất bao gồm 2 thanh ghi: thanh ghi
nhận và thanh ghi truyền. Nếu dữ liệu đưa tới SBUF thì đó là thanh ghi truyền, nếu dữ liệu
đươc đọc từ SBUF thì đó là thanh ghi nhận. Các thanh ghi này không cho phép định địa
chỉ bit.
b) Thanh ghi điều khiển nối tiếp SCON :