9 ĐIỀU KHIỂN BẰNG CỔNG NỐI TIẾP 9.1 GIỚI THIỆU Ghép nối dùng qua cổng nối tiếp là một trong những kỹ thuật được dùng rộng rãi nhất để ghép nối, giao tiếp giữa các thiết bị với nhau..
Trang 19
ĐIỀU KHIỂN BẰNG
CỔNG NỐI TIẾP
9.1 GIỚI THIỆU
Ghép nối dùng qua cổng nối tiếp là một trong những kỹ thuật được dùng rộng rãi nhất để ghép nối, giao tiếp giữa các thiết bị với nhau Qua cổng nối tiếp có thể ghép nối chuột, modem, máy in, bộ biến đổi A/D, các thiết bị đo lường hoặc để giao tiếp giữa các chip, … Cách ghép nối này sử dụng phương pháp truyền thông theo kiểu nối tiếp, trong đó ở một thời điểm chỉ có 1 bit được gửi đi/nhận về trên một đường dẫn Đặc điểm này khác so với phương pháp truyền thông theo kiểu song song, trong đó nhiều bit được gửi đi đồng thời
Ưu điểm chính của kiểu truyền nối tiếp so với kiểu truyền song song là tiết kiệm dây dẫn, truyền đi được xa, khả năng chống nhiễu tốt hơn Nhưng lại có khuyết điểm là tốc độ truyền chậm hơn
Luận văn này dùng truyền thông nối tiếp để giao tiếp giữa máy PC với bộ phát hồng ngoại, và dùng để giao tiếp giữa AT89C2051 và AT90S2313 để điều khiển động cơ Chương này sẽ trình bày về cách thiết lập và phương pháp điều khiển cổng nối tiếp
9.2 GIAO TIẾP VỚI MÁY VI TÍNH
Máy tính được giao tiếp với vi xử lý AT89C2051 bằng chuẩn RS-232
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 29.2.1 Chuẩn giao tiếp RS-232
9.2.1.1 Các yêu kỹ thuật của chuẩn RS-232
Các yêu cầu về điện được qui định trong RS- 232C như sau:
+ Mức logic 1: nằm trong khoảng -3V÷ -12V
+ Mức logic 0: nằm trong khoảng +3V ÷ +12V
+ Trở kháng tải về phía bộ nhận của mạch phải lớn hơn 3000(Ω) và phải nhỏ hơn 7000(Ω)
+ Tốc độ truyền / nhận dữ liệu cực đại là 100 Kbit/giây
+ Các lối vào của bộ nhận phải có điện dung nhỏ hơn 2,500 pF
+ Độ dài của cáp nối giữa máy tính và thiết bị ghép nối qua cổng nối tiếp không được vượt quá 15m 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, 115200 BAUD
9.2.1.2 Sơ đồ chân ra trên PC
Hầu hết các máy tính cá nhân được chế tạo gần đây đều có hai cổng nối tiếp RS-232, đôi khi có 3-4 cổng Cổng đầu tiên có tên là COM1 tiếp theo là COM2, COM3, COM4
Có hai kiểu đầu nối được sử dụng cho cổng nối tiếp RS-232 là loại 25 chân và 9 chân
P2
13 12 11 10 9
218
207
196
185
174
163
152
141
P1
5 4 3 2 1 RI
GND
GND
TXD CTS
DTR DCD
RI
RTS
DTR
RTS
RXD
RXD
DCD DSR DSR
CTS TXD
Hình 9.1 Sơ đồ chân của DB9 và DB25 của RS-232
Đối với đầu nối 25 chân, trong một số trường hợp có sử dụng chân số 1 để nối với vỏ kim loại của cáp truyền để hạn chế nhiễu, thông thường thì cáp truyền chỉ bọc nhựa Khi đó chân 1 sẽ được nối với đất mass của thiết bị, chân này khác với chân số 7 là chân mass của tín hiệu
Tiêu chuẩn RS- 232C qui định rõ việc sử dụng đầu nối thống nhất để tất cả các sản phẩm đều tương thích với nhau Cho nên thứ tự và chức năng của các chân đã được qui định rất cụ thể và phải tuân thủ một cách nghiêm ngặt
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 3Bảng dưới đây chỉ ra tất cả các đường dẫn được nối với các chân trên DB9 và DB25
Bảng 9.1 Các chân và chức năng
1 -
FG Frame ground (đất vỏ máy)
-
Chân này thường được nối với vỏ bọc kim của dây cáp, với vỏ máy, với đai bao ngoài hoặc đất thật sự
2 3 TxD Transmit data ⇐ Truyền dữ liệu
3 2 RxD Receive Data ⇒ Nhận dữ liệu
4 7 RTS Request to send ⇐
Yêu cầu gửi; bộ truyền đặt đường này lên mức hoạt động khi sẵn sàng truyền dữ liệu
Xóa để gửi; bộ nhận đặt đường này lên mức hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận dữ liệu
6 6 DSR Data set ready ⇒
Dữ liệu sẵn sàng; tính hoạt động giống như CTS, nhưng được kích hoạt bởi bộ truyền khi nó sẵn sàng nhận dữ liệu
7 5 SG Signal ground - Mass của tín hiệu
8 1 DCD Data carrier detect ⇒ Phát hiện tín hiệu mang dữ liệu
20 4
DTR Data terminal ready
⇐
Đầu cuối dữ liệu sẵn sàng; tính hoạt động giống với RTS nhưng được kích hoạt bởi bộ nhận khi muốn truyền dữ liệu
22 9 RI Ring Indicate ⇒ Báo chuông, cho biết là bộ nhận đang nhận tín hiệu rung chuông + Ghi chú: ⇒ lối vào; ⇐ lối ra
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 49.2.2 Các thanh ghi và địa chỉ
Chúng ta cần phải thiết lập các thông số cho cổng nối tiếp trước khi muốn
sử dụng nó Những thiết lập này được thực hiện trong vùng BIOS của máy tính
và tùy vào cổng nối tiếp sử dụng mà ta dùng các địa chỉ cơ sở tương ứng Các địa
chỉ cơ sở này được cho trong bảng dưới
Bảng 9.2 Địa chỉ các cổng COM
UART có tổng cộng là 12 thanh ghi, qua đó tất cả các chức năng nhập vào
và xuất ra nối tiếp có thể được điều khiển Các thanh ghi được trao đổi qua 7 địa
chỉ, trong đó có những địa chỉ được sắp xếp 2 lần Bảng sau đây giới thiệu tất cả
các thanh ghi Nhưng trong luận văn này chúng ta chỉ sử dụng một số thanh ghi
trong số này
Bảng 9.3 Địa chỉ offset các thanh ghi
+0
=1 Đọc/Ghi - Thanh ghi tốc độ BAUD (byte thấp)
=0 Đọc/Ghi IER Thanh ghi cho phép ngắt
+1
=1 Đọc/Ghi - Thanh ghi tốc độ BAUD (byte cao)
- Ghi FCR Thanh ghi điều khiển FIFO
+3 - Đọc/Ghi LCR Thanh ghi điều khiển đường dẫn
+4 - Đọc/Ghi MCR Thanh ghi điều khiển MODEM
+5 - Đọc LSR Thanh ghi trạng thái đường dẫn
Việc truy nhập trực tiếp lên thanh ghi diễn ra qua địa chỉ thanh ghi, được
tính bằng cách lấy tổng của địa chỉ cơ sở của giao diện và độ lệch Offset của
thanh ghi trong UART, cụ thể là:
Địa chỉ cơ sở + Offset = Địa chỉ thanh ghi
Như đã nói ở trên, chúng ta chỉ sử dụng một số thanh ghi và sẽ được trình
bày sau đây
9.2.2.1 Thanh ghi cho phép ngắt (IER)
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 5Bảng 9.4 Chức năng từng bit của thanh ghi IER
7 -
6 -
5 Cho phép chế độ nguồn giảm
4 Cho phép chế độ nghỉ
3 Cho phép ngắt modem
2 Cho phép ngắt nhận
1 Cho phép ngắt truyền
0 Cho phép nhận dữ liệu khi có ngắt
Vì ta không dùng ngắt nối tiếp nên chúng ta ghi giá trị 0 vào thanh ghi này
9.2.2.2 Thanh ghi điều khiển đường dẫn (LCR)
Thanh ghi này được dùng hai lần để thiết lập thông số truyền của cổng
Việc này được kiểm soát bằng bit DLAB Thanh ghi này được mô tả như sau
Bảng 9.5 Chức năng từng bit của thanh ghi LCR
0 Truy xuất đến các bộ đệm và các thanh ghi cho
phép ngắt
1 2 stop bit đối với khung truyền 6,7,8 bit hay1,5 stop bit với khung truyền 5 bit
Bit 0 và bit 1
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 6Sau khi có các hiểu biết về chuẩn RS-232 và cổng nối tiếp của máy PC, phần tiếp theo sẽ trình bày phương thức thiết lập giao tiếp giữa máy PC và chip AT89C2051
9.2.3 Giao tiếp giữa PC với AT89C2051
9.2.3.1 Khung truyền dữ liệu
Bảng dưới chỉ ra khung truyền một byte dữ liệu mà chúng ta dùng để giao tiếp giữa máy tính và chip AT89C2051
Bảng 9.6 Khung truyền dữ liệu
Khung truyền dữ liệu
19200 BAUD 1 stop bit No parity 8 bytes
9.2.3.2 Sơ đồ MẠCH nối AT89C2051 với RS232
Chúng ta sử dụng một IC MAX 232 để ghép mức điện áp Chương trình điều khiển đơn giản có thể được viết một cách dễ dàng khi nắm vững hoạt động của bộ vi xử lý AT89C2051
1uF 1uF
10k 1uF
AT89C2051
1
5
4 12 13 14 15 16 17 18
19 2
3 6 7 8 9 11
RST/VPP
XTAL1
XTAL2 P1.0/AIN0 P1.1/AIN1P1.2 P1.3 P1.4 P1.5 P1.6
P1.7 P3.0/RXD
P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1
33p
0
11.059M
1uF
COM PC
0
VCC
10uF
MAX232/SO
1 3 4 5
2 6
9 10 8
7
C1+
C1-C2+
C2-V+
V-R2OUT T2IN
R2IN T2OUT
0
1
2
3
0
Hình 9.2 Ghép nối tiếp AT89C2051 với PC qua MAX2
Dữ liệu được máy tính truyền qua cổng COM lần lượt theo định dạng sau:
o Byte thứ nhất + số 13 - quy định số thứ tự động cơ
o Byte thứ hai + số 13 – quy định vị trí của động cơ đó
o 255 - byte đồng bộ hóa
Chẳng hạn ví dụ nếu chúng ta muốn điều khiển động cơ thứ 3 đến vị trí góc 500 (mỗi động cơ có 560 vị trí góc) thì ta phải truyền đi là: số 3 + 13 + 500 +
13 + 255 + 13
Do mỗi lần giao tiếp nối tiếp ta chỉ có thể gửi được một byte Trong khi dữ liệu truyền cần để xác định vị trí của động cơ phải là word (2 byte) Do vậy việc gửi đi ký tự có mã ASCII 13 có ý nghĩa như là một “stop byte”
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 7Byte “255”: được gửi nhằm đồng bộ hóa các dữ liệu đã gửi đi Khi nhận được byte này thì chip AT90S2313 mới gửi các vị trí mới tới các động cơ, còn không thì các vị trí mới này vẫn được lưu trong bộ nhớ của chip AT90S2313
9.3 GIAO TIẾP NỐI TIẾP GIỮA AT89C2051 VÀ AT90S2313
AT89C2051 và AT90S2313 ghép nối tiếp với nhau bằng 2 chân RxD và TxD được nối chéo với nhau Mức điện áp trên đường truyền là mức TTL Trước khi giao tiếp nối tiếp giữa hai chip, chúng ta cần phải thiết lập tốc độ BAUD giống nhau ở hai chip
Trong luận văn này, chúng ta dùng tốc độ BAUD là 9600 cho việc truyền dữ liệu giữa hai chip Do chip AT90S2313 vừa thực hiện việc điều khiển động cơ vừa nhận dữ liệu nối tiếp, nên để bảo đảm dữ liệu không bị mất, chúng ta sử dụng thêm một chân làm cờ bắt tay trong việc truyền nhận giữa hai chip
Dữ liệu được truyền một chiều từ AT89C2051 đến AT90S2313
9.3.1 Thiết lập tốc độ BAUD 4800
9.3.1.1 Thiết lập tốc độ BAUD cho AT89C2051
MOV SCON,#52H ; Port nối tiếp chế độ 1
MOV TCON,#20H ; Bộ định thời 1, chế độ 2
MOV TH1,#-6 ; Giá trị nạp để có tốc độ BAUD là 4800
SETB TR1 ; Bộ định thời 1 hoạt động
9.3.1.2 Thiết lập tốc độ BAUD cho AT90S2313
EQU BAUDR=143
EQU MYVAL =129
LDI UCR,MYVAL ;Nạp giá trị vào thanh ghi cho phép sử dụng RxD, TxD
LDI UBBR,BAUDR ;Nạp giá trị để định tốc độ BAUD là 4800
9.3.2 Chương trình truyền (AT89C2051) và nhận (AT90S2313) dữ liệu
9.3.2.1 Chương trình con truyền dữ liệu viết cho AT89C2051
Transmit:
JNB TI,$
CLR TI
JB BUSY,$ ; Busy là chân bắt tay phần cứng
MOV SBUF,{byte cao của data}
JNB TI,$
CLR TI
JB BUSY,$
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng
Trang 8MOV SBUF,{byte thấp của data}
JNB TI,$
CLR TI
JB BUSY,$
MOV SBUF,#13
RET
Cờ Busy sẽ được set lên 1 trong AT90S2313 mỗi khi chip này vào chương trình phục vụ ngắt để điều khiển động cơ
9.3.2.2 Chương trình con nhận dữ liệu viết cho AT90S2313
Receive:
L2:
Charin = 0
Again:
Portb = &B11000000
SBIS USR,7 ; Chờ cho RXEN được set
RJMP Again
Portb = &B11110000
IN R17,UDR ; Ghi buffer vào thanh ghi R17
CPI R17,13 : So sánh với số 13
BREQ Thoat
STS {temp},R17 ; Chuyển nội dung R17 vào biến temp
Shift Charin , Left , 8
Charin = Charin + Temp
RJMP Again
Thoat:
Ret
9.4 KẾT LUẬN
Chương này chúng ta đã tìm hiểu khá rõ về việc sử dụng cổng nối tiếp để giao tiếp và điều khiển; và với các tập lệnh của các họ vi xử lý đã biết chúng ta có thể dễ dàng viết một chương trình con xử lý dữ liệu theo khung truyền mong muốn Chương tiếp chúng ta sẽ nghiên cứu một cách truyền dữ liệu khác cũng khá phổ biến hiện nay, đó là việc truyền nhận dữ liệu không dây bằng sóng hồng ngoại
GVHD: TS NGUYỄN VĂN GIÁP SVTH: Nguyễn Nhật Tân-Nguyễn Lê Tùng