Đường dẫn TxD dẫn trực tiếp đến chân 11 của vi mạch MAX 232 còn bộ đệm nối ra ở
chân 14 được nối trực tiếp tới chân số 2 của cổng nối tiếp.
Việc sắp xếp chân ở ổ cắm nối tiếp được lựa chọn sao cho có thể dùng một cáp nối trực
ti ếp cổng nối tiếp của hệ phát triển, với cổng nối tiếp của máy tính th ường là COM 2.
Với đường dẫn RxD mọi việc cũng diễn ra tương tự chân 13 của vi mạch được nối đến
chân 3 của cổng nối tiếp.
101 trang |
Chia sẻ: lylyngoc | Lượt xem: 2667 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đồ án Tốt nghiệp - Phân tích thiết kế hệ thống - GIAO TIẾP MÁY TÍNH VỚI KIT VI XỬ LY 8085, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LED5 LED4 LED3 LED2 LED1
Hình 4.3
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
Hình 4.3
80H 81H 82H 83H 84H 85H 86H 87H
Phím Mã
4 00
5 01
6 02
7 03
Phím Mã
0 04
1 05
2 06
3 07
Phím Mã
C 0C
D 0D
E 0E
F 0F
Phím Mã
8 08
9 09
A 0A
B 0B
Bảng mã các phím số:
Bảng mã các phím chức năng:
CHƯƠNG V: GIAO TIẾP NỐI TIẾP DÙNG VI
MẠCH 8251
I. TRUYỀN THÔNG TIN NỐI TIẾP
Việc truyền thông tin giữa các bộ phận nằm gần nhau trong hệ vi xử lý có thể được thực
hiện thông qua bus song song mở rộng hoặc các mạch phối ghép song song. Trong đó các
byte hoặc các từ được chuyển từ bộ phận này sang bộ phận khác trên một tập các đường mạch
in hoặc dây cáp. Trong trường hợp cần phải truyền thông tin ở các thiết bị cách xa nhau làm
sao tiết kiệm được số đường dây dẫn cần thiết cho việc truyền. Từ yêu cầu trên đã ra đời
phương pháp truyền thông tin nối tiếp. Ở đầu phát dữ liệu song song đầu tiên được chuyển
thành dữ liêu dạng nối tiếp sau đó được truyền đi liên tiếp trên một đường dây. Ở đầu thu, tín
hiệu nối tiếp sẽ được biến đổi ngược lại để tái tạo tín hiệu dạng song song thích hợp cho việc
xử lý tiếp theo.
Trong thực tế có 2 phương pháp truyền thông tin kiểu nối tiếp: truyền đồng bộ và truyền
không đồng bộ.
Trong phương pháp truyền đồng bộ, dữ liệu được truyền theo từng mảng với tốc độ xác
định. Mảng dữ liệu trước khi được truyền đi sẽ được gắn thêm ở đầu và ở cuối mảng các byte
hoặc một nhóm bit định dấu đặc biệt.
Ở hình 5.1 biểu diễn một bản tin để truyền đồng bộ theo giao thức BISYNC (giao thức
truyền thông tin hệ 2 đồng bộ, binary synchronous communication protocal) đây thực chất là
giao thức điều khiển theo byte, vì các byte (ký tự) đặc biệt được dùng để đánh dấu các phần
khác nhau của bản tin.
Trong cách truyền không đồng bộ, dữ liệu được truyền đi theo từng ký tư. Ký tự cần
truyền đi được gắn thêm một bit đánh dấu ở đầu để báo bắt đấu ký tự (start) và 1 hoặc 2 bit
đánh dấu cuối để báo kết thúc ký tự (stop). Vì cuối ký tự được nhận dạng riêng biệt nên nó có
thể được truyền đi theo phương pháp không đồng bộ, được thể hiện trên hình 5.1.
SYN SYN SOH STX TEXT ETX hay ETB BCC HEADER
SYN : Ký tự đồng bộ
SOH : Ký tự bắt đầu phần mào đầu
HEADER : Phần mào đầu
STX : Ký tự bắt đầu văn bản
TEXT :Thân văn băn
ETX : Ký tự kết thúc văn bản
ETB : Ký tự kết thúc văn bản
BCC : Ký tự kiểm tra khối
HÌNH 5.1
Tuỳ theo loại mã được chọn dùng trong khi truyền (Baudot, Ascii,… ) độ dài cho mã ký
tự có thể là 5 , 6 , 7, 8 bit. Tuỳ theo hệ thống truyền tin, bên cạnh các bit dữ liệu còn có thể
tuỳ chọn có hay không có 1 bit parity để kiểm tra lỗi khi truyền có thể tuỳ chọn 1 hoăc 2 bit
stop, nhưng bắt buộc phải có một bit start. Như vậy để truyền một ký tự theo phương pháp
không đồng bộ, ngoài ký tự mang tin ta buộc phải truyền thêm ít nhất 2 và nhiều nhất là 4 bit
phụ để tạo ra khung cho ký tự đó, vì thế phương pháp nầy tuy đơn giản nhưng có hiệu suất
không cao.
Tốc độ truyền dữ liệu theo phương pháp nối tiếp được đo bằng bit/s. Ngoài ra người ta
cũng hay dùng đơn vị baud, đó là giá trị ngịch đảo của thời gian giữa các lần thay đổi mức tín
hiệu, với dữ liệu chỉ có hai mức (0 và 1) và mỗi thay đổi mức tín hiệu chỉ mã hóa một bit thì
có thể hiểu baud = bit/s, các tốc độ truyền thường gặp trong thực tế là 11, 300, 600, 1200,
2400, 4800, 9600, 19200 baud.
Để tạo điều kiện dể dàng cho việc phối ghép đường truyền nối tiếp với hệ vi xử lý và
để giảm tối đa các mạch phụ thêm ở bên ngoài người ta đã chế tạo ra các vi mạch tổ hợp cỡ
lớn lập trình được có khả năng hoàn thành phần lớn các công việc cần thiết trong khi phối
ghép. Đó là các mạch thu phát di bộ vạn năng IN8250/16450 của National và mạch thu phát
đồng bộ – dị bộ vạn năng 8251 của Intel.
II. VI MẠCH USART 8251:
Trong phần này ta sẽ giới thiệu mạch 8251A đó là vi mạch USART có thể dùng cho
cả hai kiểu truyền thông tin nối tiếp đồng bộ, dị bộ. Sơ đồ chân và sơ đồ thanh ghi được trình
bày ở hình 5.3
1. Sơ đồ chân và sơ đồ khối
a. nhóm tín hiệu ghép nối với vi xử lý gồm:
- /CS nối với bộ giải mã địa chỉ A1.. An để chọn 2 thanh ghi.
(A0 = 1điều khiển trạng thái, A0 = 0 đệm số liệu).
- C/D nối với đường dây địa chỉ A0 để một trong 2 cặp thanh ghi trên.
- /WR nối với chân /WR của vi xử lý.
- /RD nối với chân /RD của vi xử lý.
- CLK nối với đường dây CLK của vi xử lý.
- Reset nối với đường dây reset của vi xử lý.
- D0 … D7 nối với các đường dẫn D0…D7 của VXL.
b. Nhóm tín hiệu ghép nối vối Modem
- /DTR
- /DSR
- /RTS
- /CTS
c. Nhóm tín hiệu gép nối với đường dây truyền – nhận và KGN:
- TxEMTY thanh ghi đệm truyền rỗng.
Chiều của dòng ký tự
Luôn ở mức cao
Luôn ở mức thấp
Start D0 D1 D2 D3 D4 D5 D6 Parity Stop Stop
Mã của ký tự cần truyền
HÌNH 5.2 : Khung của một ký tự ể truyền không ồng bộ
- TxR cho số liệu truyền.
- TxRDy báo số liệu truyền đã sẵn sàng.
- RxRDy báo số liệu nhận đã sẵn sàng.
- Syn det/Break : chỉ đồng bộ/đứt dòng tin.
d. Nhóm tín hiệu ghép nối với máy phát xung nhịp.
- TxD : nhịp truyền.
- RxC : nhịp nhận.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
8251A
D1
D0
Vcc
/RxC
/DTR
/RTS
/DSR
Reset
CLK
TxD
TxEMPTY
/CTS
Syndet/BR
TxRDY
D2
D3
RxD
GND
D4
D5
D6
D7
/TxC
/WR
/CS
C/D
/RD
RxRDY
/CS
/RD
/WR
C/D
D0
D1
D2
D3
D4
D5
D6
D7
CLK
RST
RxRDY
TxRDY
TxEMTy
Vcc
GND
/DSR /DTR /CTS /RTS Syn/BRK TxC RxC
Thanh ghi truyền
Thanh ghi đệm truyền
Thanh ghi nhận
Thanh ghi đệm nhận
Thanh ghi chế độ
Thanh ghi lệnh
Thanh ghi trạng thái
TxD
RxD
Hình 5.3 : Sơ ồ
chân (a) và các
thanh ghi (b) của
8251A
(a)
(b)
/CS chíp chọn vi mạch
/RD read – đọc
/WR write – viết
C/D control/data - điều
khiển số liệu
CLK – clock – nhịp
D0..D7 data O/I – bus
dữ liệu vào ra
/TxC – transmit clock -
nhịp truyền
RxC – receiver clock
RST – reset
/DTR dada terminal
ready
/DSR – data set ready
/RTS request to send
/CTS clear to send
TxD – transmit data
RxD – receiver data
TxRDy – transmit ready
RxRDy – receiver ready
TxEMTY – transmist
register empty
Syn/BRK- Break detect
2. Các thanh ghi:
Ở hình 5.4a và hình 5.4b mô tả bộ thanh ghi của 8251, gồm: thanh ghi trạng thái và
thanh ghi điều khiển.
Hai thanh ghi trên có cùng một địa chỉ với A0 = 1, một dùng để ghi (/WR) lệnh điều
khiển và một để đọc (/RD) trạng thái. Hai thanh ghi đệm số liệu ghi và đọc có cùng một địa
chỉ (A0 = 0) và dùng để ghi và đọc số liệu cần truyền và nhận của KGN. Các lệnh cho các
thanh ghi trên như bảng sau:
/CE C/D /WR /RD LỆNH
0
0
0
0
1
1
1
0
0
x
0
1
0
1
x
1
0
1
0
x
Ghi vào thanh ghi điều khiển (chế độ, lệnh).
Đọc thanh ghi trạng thái.
Ghi số liệu vào thanh ghi đệm truyền.
Đọc số liệu từ thanh ghi đệm nhận.
Trở kháng cao (không dùng).
- Thanh ghi điều khiển
- Thanh ghi trạng thái
a. Thanh ghi điều khiển:
- dùng để ghi:
+ lời điều khiển chế độ.
Hình 5.4a
D7 D6 D5 D4 D3 D2 D1 D0
Tốc độ truyền
00 đồng bộ
01 không đồng bộ x1
10 không đồng bộ x 16
11 không đồng bộ x64
Độ dài ký tự
00 5 bit
01 6bit
10 7bit
11 8 bit
Điều khiển khung.
00 không giá trị
01 một bit dừng
10 1.5 bit dừng
11 2 bit dừng
Bit chẵn lẻ
X0 không kiểm tra
chẳn lẻ
01 kiểm tra lẻ
10 kiểm tra chẵn
b. Lời lệnh:
D7 D6 D5 D4 D3 D2
Cho phép phát
1= cho phép
Chế độ bất đồng bộ
1= tìm ký tự đồng bộ
Ngắt mềm
1= xoá các thanh ghi
Yêu cầu phát
1= đưa tín hiệu
Xoá cờ báo lỗi
1= xoá cờ
Gửi tín hiệu cắt
1= đưa TxD = 0
Cho phép thu
1= cho phép RxRDy
Số liệu đầu cuối
Sẵn sàng, DTR\ =1
EH IR RTS ER SBRK RxEN DTR TxEN
HÌNH 5.4b
c. thanh ghi trạng thái.
Dùng để đọc lời trạng thái:
Chỉ modem đã
Sẵn sàng để
truyền số liẹu
Chỉ chữ đồng
bộ đã được
8251 nhận
Chỉ thanh ghi
biến đổi song
song - nối
tiếp rỗng
Chỉ 8251 sẵn sàng nhận
1 chữ hay lệnh để
truyền
Bit báo sai chẳn lẻ
Pe= 1 khi có sai xóa
bằng ER của lệnh
Chỉ sẵn sàng nhận số
liệu để truyền cho VXL
Bit chỉ lỗi tràn
Khi VXL chưa đọc lời
trước, lời sau đã tới thì
OE =1 xoá bằng ER của
lệnh
Bit chỉ sai khung
(không đồng bộ)
khi số bit dừng bị sai
FE= 1 xoá bằng ER =1
Hình 5.4c
D7 D6 D5 D4 D3 D2 D1 D0
DSR SYNDET FE OE PE TxEM RxRDy TxRDy
* Với lời điều khiển chế độ: hình 5.4a
- Chế độ đồng bộ: (trong, ngoài hai hay một ký tự đồng bộ SYNC) bởi nội dung ghi vào
D7, D6.
- Tốc độ truyền với giá trị:
+ D1D0 = 00: Dùng cho chế độ đồng bộ, tốc độ nơi thu bằng tốc độ nơi phát, không có
sự thay đổi tần số xung nhịp.
+ D1D0=01 : dùng cho chế độ không đồng bộ, tốc độ giữa nơi thu và nơi phát không
đổi.
+ D1D0=01: tốc độ thu = tốc độ truyền X1, tức tốc độ thu = tốc độ truyền.
+D1D0=10: tốc độ thu =16x tốc độ truyền.
+ D1D0=11: tốc độ thu =64x tốc độ truyền.
- Độ dài ký tự, tức độ dài một đơn vị tin SDU với các giá trị D3d2 = 00 (5bit), 01(6bit),
10(7bit) và 11(8bit)
- Kiển tra chẵn lẻ D5D4 =00 (không kiểm tra), 01 (kiểm tra lẻ), 11 (kiểm tra chẵn)
- Điều khiển khung, xác định số bit dừng.
Với D7D6 = 01 – một bit dừng
D7D6 = 10 – một bit rưỡi dừng
D7D6 = 11 – hai bit dừng
Với lời lệnh (hình5.4b) ta có thể ghi lệnh để:
- Điều khiển modem: DTR(D1=1), RTS(D5=1)
- Xoá mềm( bằng chương trình có IR (D6=1) để xoá về 0 các thanh ghi nội
- Xóa cờ báo lỗi ER (D4=1)
- Ghi cho phép truyền TxEN (D0=1) cho phép nhận RxE(D2=1)
- Gửi tín hiệu cắt ( các bit bằng 0-Break) để cắt dòng tin liên tục đang truyền.
- Tìm ký tự đồng bộ EH(D7=1) trong chế độ đồng bộ
Thanh ghi trạng thái (hình 5.4c): dùng để đọc.
- Sẵn sàng truyền TxRDY (D0=1), sẵn sàng nhận RXRDY( D1=1)
- Thanh ghi đệm số liệu rỗng TxE (D2=1)
- Tuy chỉ có một địa chỉ (CS\=0, A1=1) nhưng ta có thể ghi được 2 lời điều khiển chế độ
và lời lệnh ở 2 thanh ghi điều khiển khác nhau vì còn có chung một flip flop nội điều
khiển lần lượt vào hai thanh ghi trên
III. ỨNG DỤNG 8251A ĐỂ TRUYỀN THÔNG TIN NỐI TIẾP:
1. Truyền thông tin nối tiếp giữa 2 kit VXL:
a. Khởi phát 8251A:
Muốn 8251 hoạt động đúng chế độ (không đồng bộ), tốc độ (300, 600, 1200, 2400, 4800,
9600bps hoặc lớn hơn), số bit tin (5, 6, 7, 8) có kiểm tra chẵn hoặc lẻ và xác đinh số bit dừng
(1; 1,5; 2 bit) ta phải ghi lời điều khiển chế độ vào thanh ghi điều khiển cuả 8251.
Ví dụ:
Một 8251 có điạ chỉ gốc CS\ với 0FFF0h, cần trao đổi thông tin 8 bit, tốc độ x16 không có
kiểm tra Parity chẵn lẻ, 2bit stop.
Lời điều khiển là: 1 1 0 0 1 1 1 0
TxD
RxD
DTR\
8251
DSR\
RTS\
CTS\
TxD
RxD
DTR\
8251
DSR\
RTS\
CTS\
VXL2
VXL1
HÌNH 5.5
Lưu đồ khởi tạo 8251A
00h thanh ghi điều khiển
Begin
03h AH
AH - 1
AH = 0 ?
Delay
Nạp từ chế độ cào thanh ghi chế
độ
Delay
End
sai
Đúng
HÌNH 5.5
chương trình khởi phát:
MOV DX, 0FFF2h
MOV AL,00h
OUT DX,AL
MOV CX 2h
D0 : LOOP D0
OUT DX, AL
D1: MOV CX,2h
LOOP D1
OUT DX, AL
MOV CX,2h
D2: LOOP D2
MOV AL, 40h
OUT DX, AL
MOV CX, 2h
D3: LOOP D3
MOV AL, 11001110B
OUT DX, AL
MOV CX, 2h
D4: LOOP D4
END
2. Truyền thông tin nối tiếp giữa kit VXL và máy tính:
1 5
6 9
O O O O O
O O O O
A 1 – A 11
D 0 –D 7
Reset
CLK
A 0
RD \
WR \
INTR
INTA \
CS \ GND
D 0 – D7
TxD
Rest
RxD
CLK
DTR
C/D\
RD \
DSR\
WR\
RTS \
TxD
CTS\
RxRDy
Giải mã điạ
chỉ
Xử lý
ngắt (8259A
hai mức)
8251 VXL
Cổng COM
của máy tính
HÌNH 5.6
CHƯƠNG VI: GIAO TIẾP SONG SONG DÙNG
VI MẠCH 8255
I. GIỚI THIỆU VỀ VI MẠCH 8255A:
Để vi xử lý giao tiếp với những thiết bị bên ngoài, người ta thường dùng vi
mạch giao tiếp 8255A, vi mạch này có khả năng giao tiếp rất rộng, vừa có thể
xuất dữ liệu, vừa có thể nhận dữ liệu tùy theo người lập trình điều khiển bằng
cách thay đổi thông số của thanh ghi điều khiển.
II. SƠ ĐỒ CHÂN, SƠ ĐỒ LOGIC, CHỨC NĂNG CÁC CHÂN CỦA VI MẠCH
8255A.
Sơ đồ chân và sơ đồ logic của vi mạch 8255A được thể hiện qua hình vẽ:
Hình 6.1 : Sơ đồ chân và sơ đồ logic của vi mạch 8255A
Trong đó:
Chân 1 4, 37 40 (PA0 – PA7): là các đường xuất nhập có tên là cổng A.
Chân 18 25 (PB0 – PB7): là các đường nhập xuất có tên cổng B.
Chân 10 13, 14 17 (PB0 – PB7): là các đường nhập xuất có tên cổng C.
Chân 27 34 (D0 – D7): là các đường dữ liệu (data) hoạt động hai chiều, dẫn
tín hiệu điều khiển từ vi xử lý ra các thiết bị bên ngoài đồng thời nhận các dữ liệu từ các thiết
bị điều khiển bên ngoài vào vi xử lý.
Chân 35 (Reset input): ngõ vào xóa, chân reset phải được nối với tín hiệu
reset out của vi xử lý để không làm ảnh hướng đến mạch điều khiển. Khi reset, các cổng của
8255A là các ngõ vào, đồng thời tất cả các dữ liệu trên thanh ghi bên trong 8255A đều bị xóa,
8255A trở về trạng thái ban đầu săn sàng làm việc.
Chân 6 (CS\): tín hiệu ngõ vào chip select (CS\) được điều khiển bởi vi xử lý,
dùng để lựa chọn 8255A làm việc khi vi xử lý giao tiếp với nhiều thiết bị.
Chân 5 (RD\): ngõ vào đọc dữ liệu (Read Input).
Chân 36 (WR\) : ngõ vào ghi dữ liệu (Write Input).
Chân 8,9 (A1, A0): ngõ vào địa chỉ (Address Input), dùng nhận địa chỉ vào để
PA3
PA2
PA1
PA0
RD\
CS\
GND
A1
A0
PC7
PC6
PC5
PC4
PC0
PC1
PC2
PC3
PB0
PB1
PB2
PA4
PA5
PA6
PA7
WR\
RESET
D0
D1
D2
D3
D4
D5
D6
D7
Vcc
PB7
PB6
PB5
PB4
PB3
1
20 21
40
D0 – D7
PA0 – PA7
PB0 – PB7
PC0 – PC7
RD\
WR\
RESET
A0
A1
CS\
8255A
8255A
lựa chọn thanh ghi và các cổng.
Bảng địa chỉ lựa chọn thanh ghi và các cổng:
A1 A0 Cổng và thanh ghi
0 0 Cổng A
0 1 Cổng B
1 0 Cổng C
1 1 Thanh ghi điều khiển
Chân 26 (Vcc) : nguồn 5 VDC.
Chân 7 (GND) : GND 0 VDC.
III. CẤU TRÚC BÊN TRONG VÀ HOẠT ĐỘNG CỦA VI MẠCH 8255A.
1. Sơ đồ khối cấu trúc bên trong của vi mạch 8255A.
Hình 6.2: Sơ đồ khối cấu trúc bên trong của 8255A
2. Hoạt động của vi mạch 8255A:
Từ sơ đồ khối cấu trúc bên trong của vi mạch 8255A ta thấy các cổng của
8255A được chia thành 2 nhóm:
Nhóm A gồm cổng A và 4 bit cao của cổng C.
Nhóm B gồm cổng B và 4 bit thấp của cổng C.
Cấu hình làm việc của 2 nhóm sẽ do nội dung của thanh ghi điều khiển quyết định.
Vi mạch 8255 giao tiếp với vi xử lý thông qua các đường sau :
- Đường dữ liệu: gồm 8 đường dữ liệu (D0 - D7). Mã lệnh, các dữ liệu đều được
truyền đi trên đường này.
Port A
Port C
(4 bit cao)
Nhóm A
Port C
(4 bit thấp)
Port B
Nhóm B
Điều
khiển
nhóm A
Điều
khiển
nhóm B
Đệm bus
dữ liệu
Logic
iều
khiển
ghi/ ọc
RD\
WR\
CS\
A0
A1
D7 – D0
PA7 – PA0
PC7 – PC4
PC3 – PC0
PB7 – PC0
- Đường địa chỉ: gồm 2 đường (A0 – A1) dùng để lựa chọn cổng hoặc thanh ghi điều
khiển như đã trình bày ở phần trước.
- Đường điều khiển: gồm các đường RD\, WR\, CS\, Reset dùng để điều khiển việc
hoạt động của 8255A.
Để sử dụng các cổng làm công cụ giao tiếp, người sử dụng phải gửi từ điều khiển ra
thanh ghi điều khiển để 8255A định cấu hình làm việc cho các cổng đúng như yêu cầu của
người lập trình.
3. Từ điều khiển:
Từ điều khiển là dữ liệu được gởi tới thanh ghi điều khiển. Giá trị của từ
điều khiển sẽ xác định cấu hình làm việc cho các cổng của 8255A, đó là việc lựa
chọn chức năng nhập hay xuất của các cổng.
a. Cấu trúc của từ điều khiển:
Do các cổng của 8255A được chia làm hai nhóm nên từ điều khiển cũng được chia
làm hai nhóm điều khiển tương ứng.
Các bit D3, D4, D5, D6 dùng để xác định cấu hình cho nhóm A:
- Bit D3 dùng để thiết lập 4 bit cao của cổng C.
D3 = 0 cổng C là cổng xuất dữ liệu.
D3 = 1 cổng C là cổng nhập dữ liệu.
- Bit D4 dùng để thiết lập cổng A.
D4 = 0 cổng A là cổng xuất dữ liệu.
D4 = 1 cổng A là cổng nhập dữ liệu.
- Bit D5 và D6 dùng thiếp lập mode điều khiển của nhóm A.
D6D5 = 00 : nhóm A hoạt động ở mode 0.
D6D5 = 01 : nhóm A hoạt động ở mode 1.
D6D5 = 1x : nhóm A hoạt động ở mode 2.
Các bit D0, D1, D2 dùng để xác định cấu hình cho nhóm B.
- Bit D0 dùng để thiết lập 4 bit thấp của cổng C.
D0 = 0 cổng C là cổng xuất dữ liệu.
D0 = 1 cổng C là cổng nhập dữ liệu.
- Bit D1 dùng để thiết lập cổng B.
D1 = 0 cổng B là cổng xuất dữ liệu.
D1 = 1 cổng B là cổng nhập dữ liệu.
- Bit D2 dùng thiếp lập mode điều khiển của nhóm B.
D2 = 0 : nhóm B hoạt động ở mode 0.
D2 = 1 : nhóm B hoạt động ở mode 1.
D7 D6 D5 D4 D3 D2 D1 D0
Nhóm B
Cổng C (4 bit thấp)
1 = Input
0 = Output
Cổng B
1 = Input
0 = Output
Mode select
Hình 6.3 : Cấu trúc từ điều khiển của vi mạch 8255A
b. Cơ chế hoạt động các cổng của 8255A ở các trạng thái.
* Nhóm A và Nhóm B cấu hình ở mode 0.
Khi được định ơ cấu hình này, các cổng của hai nhóm hoạt động xuất hoặc nhập dữ
liệu độc lập với nhau.
Từ điều khiển:
1 0 0 D4 D3 0 D1 D0
Với D0, D1. D3, D4 tùy chọn theo yêu cầu của người sử dụng.
* Nhóm A được cấu hình ở mode 1.
Ở mode 1, các cổng làm việc có chốt (Strobed I/O), thiết bị giao tiếp muốn
8255A nhận dữ liệu thì thiết bị đó phải tạo ra một tín hiệu yêu cầu 8255A nhận
dữ liệu và ngược lại, 8255A muốn gởi dữ liệu cho một thiết bị khác thì nó phải
gởi 1 tín hiệu yêu cầu thiết bị đó nhận dữ liệu, tín hiệu đó gọi là tín hiệu chốt.
+ Khi cổng A được cấu hình là cổng nhập dữ liệu, chức năng các đường tín hiệu được
trình bày như hình vẽ:
Từ điều khiển :
1 0 1 1 D3 x x x
Hình 6.4 : Chức năng các đường tín hiệu khi cổng A là cổng nhập dữ liệu
Các đường tín hiệu của cổng C trở thành các đường điều khiển của cổng A.
Trong đó :
Bit INTEA (Interrupt Enable) được thiết lập mức logic dưới sự điều khiển của phần
mềm dùng cấu trúc Set/Reset của 8255A.
Bit PC4 trở thành bit STBA (Strobed Input, tác động mức thấp), được dùng để chốt các
dữ liệu ở các ngõ vào PA0 – PA7 vào mạch chốt bên trong.
Bit PC5 trở thành bit IBFA (Input Buffer Full, tác động mức cao), dùng để báo cho bên
ngoài biết dữ liệu đã được chốt bên trong.
Bit PC3 trở thành bit INTRA (Interrupt Request, tác động mức cao), bit này có mức
logic 1 khi bit STRA = 1, bit IBFA = 1 và bit INTEA = 1. Thông thường bit này dùng để tác
động vào ngõ vào ngắt của vi xử lý để báo cho vi xử lý biết : dữ liệu mới đã xuất hiện ở ngõ
vào.
Các bit PC6, PC7 của cổng C là các bit xuất/ nhập bình thường tùy thuộc vào từ điều
khiển trong thanh ghi điều khiển. Còn cổng B được điều khiển bằng các bit D0 – D2 trong
RD\
PC4
PC5
PC3
PC6,7
PA0–PA7
INTE
A STBA\
IBFA
INTRA
I/O
thanh ghi điều khiển (nếu cổng B hoạt động ở mode 1 thì các bit PC0 – PC2 là các bit điều
khiển).
+ Cổng A được cấu hình là cổng xuất dữ liệu.
Chức năng các đường tín hiệu được trình bày ở hình vẽ:
Từ điều khiển :
1 0 1 0 D3 X x x
Hình 6.5 : Chức năng các đường tín hiệu khi cổng A là cổng xuất dữ liệu
Bit PC7 trở thành bit OBFA (Output Buffer Full, tác động mức thấp), khi có dữ liệu từ
vi xử lý gởi ra cổng A, tín hiểu OBF sẽ yêu cầu thiết bị bên ngoài nhận dữ liệu.
Bit PC6 trở thành bit ACKA (Acknowledge Input, tác động mức thấp), thiết bị nhận dữ
liệu dùng tín hiệu này để báo cho 8255A biết dữ liệu đã được nhận và sẵn sàng nhận dữ liệu
mới.
Bit PC3 trở thành bit INTRA (Interrupt Request, tác động mức cao), bit này có mức
logic bằng 1 khi bit OBFA = 1, ACKA = 1 và bit INTEA = 1. Tín hiệu INTRA tác động đến ngõ
vào ngắt của vi xử lý để báo cho vi xử lý biết thiết bị bên ngoài đã nhận dữ liệu từ cổng A.
Các bit PC4, PC5 vẫn là bit nhập/ xuất dữ liệu bình thường tùy thuộc vào từ điều
khiển. Các bit D0 – D2 trong thanh ghi điều khiển dùng để thiết lập cấu hình cho cổng B.
* Nhóm B được cấu hình ở mode 1.
+ Cổng B được cấu hình là cổng nhập dữ liệu.
Chức năng các đường tín hiệu được trình bày như hình vẽ:
WR\
PC7
PC6
PC3
PC4,5
PA0–PA7
INTE
A OBFA\
ACKA\
INTRA
I/O
WR\
PC1
PC2
PC0
PB0–PB7
INTE
B OBFB\
ACKB\
INTRB
Từ điều khiển :
1 x x x X 1 1 x
Hình 6.6 : Chức năng các đường tín hiệu khi cổng B là cổng nhập dữ liệu
Chức năng của các bit điều khiển giống như khi nhóm A hoạt động ở mode 1 và cổng
A được cấu hình là cổng nhập dữ liệu.
+ Cổng B được cấu hình là cổng xuất dữ liệu.
Chức năng các đường tín hiệu được trình bày như hình vẽ :
Từ điều khiển:
1 x X x x 1 0 x
Hình 6.7 : Chức năng các đường tín hiệu khi cổng B là cổng xuất dữ
liệu
Chức năng của các từ điều khiển giống như khi nhóm A hoạt động ở mode 1 và cổng
A được cấu hình là cổng xuất dữ liệu.
* Nhóm A được cấu hình ở mode 2.
Mode 2 là kiểu hoạt động strobed bi-directional IO : có hai chức năng
nhập xuất dữ liệu.
Từ điều khiển khi nhóm A được cấu hình ở mode 2 và chức năng của các đường tín
hiệu được trình bày ở hình vẽ:
RD\
PC2
PC1
PC0
PB0–PB7
INTE
B STBB\
IBFB
INTRB
Từ điều khiển :
1 0 1 1 D3 x x x
Hình 6.8: Chức năng các đường tín hiệu khi nhóm A hoạt động ở mode 2
Các đường tín hiệu của cổng C trở thành các đường điều khiển của cổng A.
Bit PC7 trở thành bit OBFA, PC6 trở thành bit ACKA, PC4 trở thành bit STBA, PC5 trở
thành bit IBFA và bit PC3 trở thành bit INTRA, chức năng của các bit điều khiển giống như ở
mode 1, chỉ khác tín hiệu INTRA = 1 khi OBFA = 1 và INTE1 = 1 hoặc IBFA = 1 và INTE2 =
1.
Các bit PC0 – PC2 là các bit nhập xuất dữ liệu bình thường tùy thuộc vào từ điều
khiển trong thanh ghi điều khiển.
Một chú ý cần thiết là khi nhóm A được cấu hình ở mode 2 thì nhóm B chỉ được cấu
hình ở mode 0.
IV. GIAO TIẾP GIỮA VI XỬ LÝ VỚI 8255A:
Vi mạch 8255A có thể giao tiếp với vi xử lý theo 2 kiểu: kiểu nhập/xuất (kiểu I/O) và
kiểu bộ nhớ.
Khi vi xử lý giao tiếp với 8255A theo kiểu I/O nó chỉ dùng được 8 đường địa chỉ từ A0
– A7 mà thôi còn khi giao tiếp kiểu bộ nhớ, nó dùng được cả 16 đường địa chỉ, vì vậy dung
lượng giao tiếp kiểu I/O thấp hơn dung lượng giao tiếp kiểu bộ nhớ.
1. Giao tiếp kiểu I/O.
Khi thiết kế vi xử lý giao tiếp với 8255A theo kiểu I/O thì dữ liệu sẽ được truy xuất
bằng 2 lệnh : IN addr-port và OUT addr-port. Dữ liệu giao tiếp luôn chứa trong thanh ghi
A. Địa chỉ cổng (addr-port) có độ dài là 8 bit.
Cũng giống như bộ nhớ, vi xử lý có thể giao tiếp với nhiều vi mạch 8255, với 8 đường
địa chỉ thì có tất cả 256 địa chỉ, mà mỗi vi mạch chiếm 4 địa chỉ (3 cổng và thanh ghi điều
khiển) nên số vi mạch 8255 tối đa có thể giao tiếp của vi xử lý là 256/4 = 64 vi mạch.
Khi kết nối giữa vi xử lý với vi mạch 8255A thì đường địa chỉ A0 và A1 dùng để lựa
chọn các cổng và thanh ghi điều khiển, còn các đường địa chỉ còn lại từ A2 – A7 dùng để lựa
chọn vi mạch hoạt động, thông thường các đường địa chỉ này được đưa vào vi mạch giải mã
rồi các ngõ ra của vi mạch giải mã sẽ đưa đến CS\ của các vi mạch 8255A.
Một ví dụ khi thiết kế vi xử lý giao tiếp với 4 vi mạch 8255A:
WR\
PA0–PA7
OBFA\
ACKA\
PC3
PC7
PC6
PC4
PC5
STBA\
IBFA
RD\
INTE
1
INTE
2
PC2,1,0 I/O
INTE
A
Sơ đồ kết nối như hình vẽ : (vi mạch 74139).
Hình 6.9: Sơ đồ kết nối vi xử lý với vi mạch 8255A
Trong đó, đường A0 và A1 được nối với 8255A như đã trình bày ở trên, đường A2, A3
được đưa vào vi mạch giải mã 2 đường thành 4 đường để lựa chọn vi mạch 8255A.
Từ đó, ta có bảng địa chỉ của các vi mạch 8255A như sau :
IC A7 A6 A5 A4 A3 A2 A1 A0 Hex
8255A-1 0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
00
03
8255A-2 0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
1
04
07
8255A-3 0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
1
08
0B
8255A-4 0
0
0
0
0
0
0
0
1
1
1
1
0
1
0
1
0C
0F
2. Giao tiếp kiểu bộ nhớ.
Khi thiết kế 8255A giao tiếp với vi xử lý theo kiểu bộ nhớ thì chức năng của 8255A
không thay đổi, chỉ thay đổi kiểu truy xuất. Với kiểu I/O thì địa chỉ của các cổng và thanh ghi
điều khiển là 8 bit thì ở kiểu bộ nhớ, địa chỉ của các cổng và thanh ghi điều khiển là 16 bit,
khi đó cách kết nối cũng tương tự như kết nối vi xử lý với bộ nhớ thông thường, và mỗi vi
mạch 8255A cũng được coi như là bộ nhớ với 4 ô nhớ: 3 cổng và thanh ghi điều khiển, truy
xuất dữ liệu bằng cách dùng các lệnh truy xuất dữ liệu của bộ nhớ.
Cách kết nối tương tự như khi vi xử lý kết nối với bộ nhớ nên ở đây không cần trình
bày lại.
DECODER
2 TO 4 LINE
đến CS\ của 8255A -1
đến CS\ của 8255A -2
đến CS\ của 8255A -3
đến CS\ của 8255A -4
A2
A3
BEGIN
KHỞI PHÁT: GHI TỪ
CHẾ ĐỘ
GHI LỆNH :
DTR, A{RxEN,RTS
ĐỌC TRẠNG THÁI:
DSR, RxRDy
Kiểm tra sẵn
sàng :DSR=
RxRDY=1
ĐỌC SỐ LIỆU TỪ
THANH GHI ĐỆM
SỐ LIỆU
END
HÌNH 7.2
BEGIN
KHỞI PHÁT: GHI
TỪ CHẾ ĐỘ
GHI LỆNH :
DTR, TxEN
ĐỌC TRẠNG THÁI:
DSR, TxRDy
GHI SỐ LIỆU RA
THANH GHI ĐỆM
SỐ LIỆU
GHI LỆNH PHÁT: RTS
END
HÌNH 7.1
Kiểm tra sẵn sàng:
DSR = TxRDY =1
CHƯƠNG VII: PHẦN CỨNG VÀ PHẦN MỀM
GIAO TIẾP
I. LƯU ĐỒ VÀ CHƯƠNG TRÌNH TRUYỀN DỮ LIỆU
1. LƯU ĐỒ TRUYỀN DỮ LIỆU:
2. LƯU ĐỒ NHẬN DỮ
LIỆU:
3. CHƯƠNG TRÌNH TRUYỀN DỮ LIỆU
;xxxxxxxxxxxxxxxxxxxxx
;chuong trinh con delay
org 6200h
delay: mvi b,3
x0: dcr b
jnz X0
ret
;xxxxxxxxxxxxxxxxxxxxx
;chuong trinh truyen du lieu
org 4100h
mvi a,00h ;xoa reg lenh
out 01h
call delay
out 01h
call delay
out 01h
call delay
mvi a,40h ;xoa cac thanh ghi noi
out 01h
call delay
mvi a,0ceh ;goi tu dk che do
out 01h
call delay
lxi d,6500h
mvi a,03h ;goi tu lenh
out 01h
call delay
x1: in 01 ;doc tg trang thai
ani 10000001b ;giu MSB va LSB
cpi 81h
jnz x1
ldax d
mov l,a
out 00h ;doc byte dia chi de truyen
call delay
mvi a,21h ;goi tu lenh de truyen di
out 01
call delay
inr e
mvi a,03h
out 01h
call delay
x2: in 01h
ani 81h
cpi 81h
jnz x2
ldax d
mov h,a
out 00h
call delay
mvi a,21h
out 01h
call delay
inr e
mvi a,03h
out 01h
call delay
x13: in 01h
ani 81h
cpi 81h
jnz x13
ldax d
mov c,a
out 00
call delay
mvi a,21h
out 01h
call delay
x4: mvi a,03h
out 01h
call delay
x3: in 01h
ani 81h
cpi 81h
jnz x3
mov a,m ;truyen du lieu
out 00h
call delay
mvi a,21h
out 01h
call delay
inr l
dcr c
jnz x4
;hien chu E de biet cham dut
lxi h,0a000h
mvi m,79h
hlt
4. CHƯƠNG TRÌNH NHẬN DỮ LIỆU:
;x-chuong trinh nhan du lieu-x
org 4300h
mvi a,00h ; xoa cac thanh ghi
out 01h
call delay
out 01h
call delay
out 01h
call delay
mvi a,40h ;xoa cac thanh ghi noi
out 01h
call delay
mvi a,0ceh ;nap tu che do
out 01h
call delay
mvi a,26h ;nap tu lenh
out 01h
call delay
y5: in 01h
ani 82h
cpi 82h
jnz y5
in 00h ;cat byte dia chi thap
mov e,a
mov l,a
y6: in 01h
ani 82h
cpi 82h
jnz y6
in 00h ;cat byte dia chi cao
mov d,a
mov h,a
y7: in 01h
ani 82h
cpi 82h
jnz y7
in 00h
mov c,a
y8: in 01h
ani 81h
cpi 81h
jnz y8
in 00h ;nap du lieu vao o nho
stax d
inr e
dcr c
jnz y8
pchl
end
II. THIẾT KẾ VÀ THI CÔNG PHẦN GIAO TIẾP:
1. GIỚI THIỆU VI MẠCH MAX 232:
Vi mạch MAX 232 chuyển đổi mức TTL ở ngõ vào thành mức +10V hoặc –10V ở phía
truyền và các mức +3V… +15V hoặc –3V … -15V thành mức TTL ở phía nhận. Trên hình
7.3 mô tả cách sắp xếp chân và sơ đồ cấu trúc của vi mạch MAX 232.
Đường dẫn TxD dẫn trực tiếp đến chân 11 của vi mạch MAX 232 còn bộ đệm nối ra ở
chân 14 được nối trực tiếp tới chân số 2 của cổng nối tiếp.
Việc sắp xếp chân ở ổ cắm nối tiếp được lựa chọn sao cho có thể dùng một cáp nối trực
tiếp cổng nối tiếp của hệ phát triển, với cổng nối tiếp của máy tính thường là COM 2.
Với đường dẫn RxD mọi việc cũng diễn ra tương tự chân 13 của vi mạch được nối đến
chân 3 của cổng nối tiếp.
2. SƠ ĐỒ MẠCH KẾT NỐI:
Vì sử dụng kit 8085 đã có nên kết nối các đường data của 8255 của kit với 8251 của
board giao tiếp.
Sơ đồ kết nối như sau:
O
1 16
2 15
3 MAX 14
232
4 13
5 12
6 11
7 10
8 9
C1+
V+
C1-
C2+
C2-
V-
T2OUT
R2IN
Vcc
GND
T1OUT
R1IN
R1OUT
T1IN
T2IN
R2OUT
HÌNH 7.3
HÌNH 7.4
3. SƠ DỒ MẠCH IN: Gồm hai mặt :mặt trên và mặt dưới.
Board mạch cụ thể như sau:
MẶT DƯỚI
MẶT TRÊN
KếT LUậN
Qua thời gian thực hiện, dưới sự hướng dẫn tận tình của Thầy Nguyễn Đình Phú
cùng sự giúp đỡ rất nhiều của quý thầy cô trong khoa, em đã cố gắng hoàn thành luận văn
đúng theo yêu cầu và thời gian quy định. Trong luận văn chúng em đã thực hiện được những
công việc sau:
Khảo sát phần lý thuyết:
- Giới thiệu vi xử lý.
- Giới thiệu cách giao tiếp.
- khảo sát kit vi xử lý 8085.
Thi công mạch điện cho phần giao tiếp.
Mặc dù đã rất cố gắng, nhưng do kiến thức và thời gian có hạn nên có những phần
chúng em chưa làm được như: phần giao diện màn hình. Và em sẽ không tránh khỏi những
điều thiếu sót, nhầm lẫn khác, kính mong quý thầy cô thông cảm bỏ qua.
Người thực hiện mong mỏi các bạn sinh viên khoa điện ở những khóa sau bổ xung cho
luận văn này hoàn chỉnh hơn.
Sinh viên thực hiện
Nguyễn Trung Dũng
HƯỚNG PHÁT TRIỂN ĐỀ TÀI
Ngày nay với sự phát triển nhanh chóng của khoa học kỹ thật và đất nước ta đang
chuyển mình sang nền sản xuất công nghiệp. Do đó, để đáp ứng với nhu cầu thực tế thì
chúng ta cần phải nghiên cứu thêm các loại giao diện nối tiếp khác để tăng thêm được
khoảng cách và tốc độ truyền. Ngoài ra, còn có thể dựa trên tập luận án này để viết
thêm nhiều chương trình khác có thể ứng dụng trong thực tế và cải tiến lại chương
trình này để tiện lợi cho người sử dụng …
Sinh viên thực hiện
Nguyễn Trung Dũng
TÀI LIỆU THAM KHẢO
1. ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY VI TÍNH
Ngô Diện Tập _ NXB KHKT Hà Nội _ 1996
1. ĐIỀU KHIỂN VÀ GHÉP NỐI CÁC THIẾT BỊ NGOẠI VI
Trần Bá Thái _ NXB KHKT Hà Nội _ 1984
2. KỸ THUẬT GHÉP NỐI MÁY VI TÍNH
Nguyễn Mạnh Giang _ NXB GD Hà Nội _1997
3. TRUYỀN DỮ LIỆU
Tống Văn On _ ĐH KỸ THUẬT TPHCM _ 1999
4. VI XỬ LÝ TRONG ĐO LƯỜNG VÀ ĐIỀU KHIỂN
Ngô Diện Tập _ NXB KHKT Hà Nội _ 1996
5. KỸ THUẬT VI XỬ LÝ
Văn Thế Minh _ NXB GD _ 1997
6. ASSEMBLY LANGUAGE TOOLS and TECHNIQUES FOR
THE IBM MICROCOMPUTERS
Julio Sanches _ Prentice Hall _ 1990
7. MICROCOMPUTER INTERFACING
Bruce A.Artwick _ Prentice Hall _ 1980
PHỤ LỤC
CHƯƠNG TRÌNH TRUYỀN DỮ LIỆU CỦA MÁY TÍNH
; TERMINAL.ASM
; STACK
stack segment stack
db 300 dup('?')
stack ends
; DATA
data segment
prompt db 'File name:$'
filename db 30 dup(0)
buffer db 512 dup(0)
buffrr db 512 dup(0)
handle dw ?
openerr db 0dh,0ah,'OPEN ERROR - COPDE'
errcode db 30h,'$'
;messages
MENU_MS db ' **TERMINAL PROGRAM**',0dh,0ah
db ' to redisplay this MENU',0dh,0ah
db ' to set communications protocol',0dh,0ah
db ' to display protocol installed',0dh,0ah
db ' to open file.hex and trasnmit',0dh,0ah
db ' to exit the TERMINAL program',0dh,0ah
db 'All character typed are transmitter',0dh,0ah
db 'All character receiver are display',0dh,0ah
db 0dh,0ah,'$'
PROT_MS db '* Installed communications protocol',0dh,0ah
db 'Baud rate:'
Baud% db '2400',0dh,0ah
db 'Parity:'
Par% db 'Even',0dh,0ah
db 'Stop bit:'
Stop% db '1',0dh,0ah
db 'Word length:'
Word% db '8',0dh,0ah,0ah,'$'
Baud$$ db '110 150 300 600 1200 2400 4800 9600'
Par$$ db 'odd noneven'
baud_menu db 0dh,0ah,'**New communication parameter'
db 'rs input **',0dh,0ah
db 'baud rate:',0dh,0ah
db '1 = 110',0dh,0ah
db '2 = 150',0dh,0ah
db '3 = 300',0dh,0ah
db '4 = 600',0dh,0ah
db '5 = 1200',0dh,0ah
db '6 = 2400',0dh,0ah
db '7 = 4800',0dh,0ah
db '8 = 9600',0dh,0ah
db 'Select: $'
par_menu db 0dh,0ah,'Pariry:',0dh,0ah
db '1 = odd',0dh,0ah
db '2 = none',0dh,0ah
db '3 = even',0dh,0ah
db 'Select: $'
Stop_menu db 0dh,0ah,'Stop bit:',0dh,0ah
db '1 = 1 stop bit',0dh,0ah
db '2 = 2 stop bit',0dh,0ah
db 'Select: $'
Word_menu db 0dh,0ah,'Word length:',0dh,0ah
db '1 = 7 bit',0dh,0ah
db '2 = 8 bit',0dh,0ah
db 'Select: $'
err1_ms db 0dh,0ah,'*** cannot transmit ***',0dh,0ah
card_base dw 02f8h ;address of RS 232 card
inT_num db 0ch
setup_byte db 0bbh ;
;Origin
O_int_seg dw 0000h ;segment
O_int_off dw 0000h ;offset
;circular buffer and pointer:
circ_buf db 20 dup(00h)
dw 0
data_in dw 0 ;imput pointer
data_out dw 0 ;output pointer
data ends
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CODE xxxxxxxxxxxxxxxxxx
code segment
assume CS:code
start:
mov ax,data
mov ds,ax
assume ds:data
mov es,ax
assume es:data
;display MENU at cursor
mov dx,offset menu_ms ;messages
call show_message
;hardware type
push ds
mov dx,0f000h
mov ds,dx
mov al,ds:[0fffeh] ;code to AL
;get addr of the RS232 card from BIOS data area
mov dx,0
mov ds,dx
mov cx,ds:0400h
pop ds
mov card_base,cx
;determine interrupt number:
; 0bh IRQ4 all other
cmp al,0fdh
jne set_address
mov int_num,0bh
;save/install interrupt
set_address:
mov ah,53
mov al,int_num
int 21h
mov o_int_seg,es
mov o_int_off,bx
mov ah,37
mov al,int_num
mov dx,offset cs:rs232_int
push ds
push cs
pop ds
int 21h
pop ds
;set protocol
mov al,10111011b
mov ah,0
mov dx,0
int 14h
call comm_on
call flush ;
monitor:
mov ah,1
int 16h
jz ser_imp
jmp char_typed
ser_imp:
sti ;interrupt on
mov cx,50
delay: nop
nop
loop delay
;test for new data received
cli
mov bx,data_out
cmp bx,data_in
jne new_data
sti
jmp monitor
;process char
char_typed:
mov ah,0
int 16h
;test for ,,, and keys
cmp ax,3b00h
jne test_f2
jmp show_menu ;F1 key pressed
test_f2:
cmp ax,3c00h
jne test_f3
jmp set_protocol ;F2 key pressed
test_f3:
cmp ax,3d00h
jne test_f4
jmp show_protocol ;F3 key pressed
test_f4:
cmp ax,3e00h
jne test_f9
jmp tran_file ;F4 key pressed
test_f9:
cmp ax,4300h
je dos_exit
jmp show_and_send ;F2 key pressed
dos_exit:
call comm_off
mov ah,37
mov al,int_num
mov dx,o_int_off
mov ax,o_int_seg
mov ds,ax
int 21h
;exit
mov ah,76
mov al,0
int 21h
;redisplay menu
show_menu:
mov dx,offset menu_ms
call show_message
jmp monitor
;new data receiver
new_data:
lea si,circ_buf
mov bx,data_out
add si,bx
mov al,byte ptr[si]
;update output pointer
inc bx
cmp bx,20
jne ok_out_ptr
mov bx,0
ok_out_ptr:
mov data_out,bx
sti
call tty
jmp monitor
set_protocol:
call comm_off
baud_rates:
mov dx,offset baud_menu
call show_message
call get_key
call tty
cmp al,'1'
jc baud_rates
cmp al,'9'
jnc baud_rates
sub al,30h ;ascii to binary
sub al,1 ;to range 0 to 7
push ax
mov cl,4
mul cl
mov si,offset baud$$
mov ah,0
add si,ax
mov di,offset baud%
mov cx,4
cld
push ds
pop es
rep movsb
pop ax
mov cl,5
shl al,cl
mov setup_byte,al
parity:
mov dx,offset par_menu
call show_message
call get_key
call tty
;valid input range is "1" to "3"
cmp al,'1'
jc parity
cmp al,'4'
jnc parity
;input is valid range
sub al,30h
push ax
;select 4 byte parity message and place in display area
sub al,1
mov al,4
mul cl
mov si,offset par$$
mov ah,0
add si,ax
mov di,offset par%
mov cx,4
cld
push ds
pop es
rep movsb
pop ax
mov cl,3
shl al,cl
or setup_byte,al
stopbits:
mov dx,offset stop_menu
call show_message
call get_key
call tty
;valid input range is "1" or "2"
cmp al,'1'
jc stopbits
cmp al,'3'
jnc stopbits
mov si,offset stop%
mov byte ptr[si],al
sub al,31h
mov cl,2
shl al,cl
or setup_byte,al
word_length:
mov dx,offset word_menu
call show_message
call get_key
call tty
;valid input range is '1' or '2'
cmp al,'1'
jc word_length
cmp al,'3'
jnc word_length
push ax
;Input in valid range. Add 6 and move input to display area
add al,6
mov si,offset word%
mov byte ptr[si],al
pop ax
sub al,30h
inc al
or setup_byte,al
;install new parameter
mov al,setup_byte
mov dx,0
mov ah,0
int 14h
;line feed and cariage reture before exit
mov al,0dh
call tty
mov al,0ah
call tty
;communication
call comm_on
jmp monitor
;
;display protocol
show_protocol:
mov dx,offset prot_ms
call show_message
jmp monitor
;**************************************************************
;output and display
show_and_send:
mov cx,2000
push ax
thre_wait:
mov dx,card_base
add dx,5
in al,dx
jmp short $+2
test al,20h
jnz ok_2_send
loop thre_wait
;wait period timed out,display error message and exit
pop ax
mov dx,offset err1_ms
call show_message
jmp monitor
ok_2_send:
pop ax
;place in transmitter hoding register to send
mov dx,card_base
out dx,al
jmp short $+2
;display character
call tty
jmp monitor
;**************************************************************
;CAC CHUONG TRINH CON
comm_on proc near
cli ;interrupt off
;reset buffer pointer to start of buffer
mov data_in,0
mov data_out,0
;set dx to base address of RS 232 card from BIOS
mov dx,card_base
mov dl,0fch
mov al,00001011b
out dx,al
jmp short $+2
;set bit 7
mov dl,0fbh
in al,dx
jmp short $+2
and al,7fh
out dx,al
jmp short $+2
in al,21h
jmp short $+2
and al,0e7h
out 21h,al
jmp short $+2 ;I/o delay
;reenable interrupt
sti
ret
comm_on endp
comm_off proc near
in al,21h
or al,18h
out 21h,al
jmp short $+2
ret
comm_off endp
show_message proc near
mov ah,9
int 21h
ret
show_message endp
tty proc near
tty_one:
push ax
mov ah,14
mov bx,0
int 10h
pop ax
cmp al,0dh
jne not_cr
mov al,0ah
jmp tty_one
not_cr: ret
tty endp
flush proc near
flush_1:
mov ah,1
int 16h
jz no_old_chars
mov ah,0
int 16h
jmp flush_1
no_old_chars:
ret
flush endp
get_key proc near
mov ah,0
int 16h
ret
get_key endp
rs232_int:
sti ;interrupt on
push ax
push bx
push dx
push di
push ds
mov dx,data
mov ds,dx
assume ds:data
data_check:
mov dx,card_base
mov dl,0fdh
in al,dx
jmp short $+2
test al,1eh
jnz data_error
jmp data_check
data_error:
mov al,'1'
jmp store_byte
data_ready:
mov dl,0f8h
in al,dx
jmp short $+2
and al,7fh
store_byte:
lea di,circ_buf
mov bx,data_in
add di,bx
mov byte ptr[di],al
inc bx
cmp bx,20
jne ok_in_ptr
mov bx,0
ok_in_ptr:
mov data_in,bx
mov al,20h
out 20h,al
jmp short $+2
pop ds
pop di
pop dx
pop bx
pop ax
iret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tran_file:
call get_name ;doc ten file
lea dx,filename ;dx chua offset cua ten file
mov al,0
call open
jc open_error
mov handle,ax
read_loop:
lea dx,buffer ;tro toi vung dem
mov bx,handle ;lay the file
call read ;doc file,AX = so byte doc duoc
or ax,ax ;ket thuc file
je pexit ;dung, ket thuc file
mov cx,ax ;CX chua so byte doc duoc
call display ;hien thi file
jmp read_loop ;lap lai
open_error:
lea dx,openerr ;lay thong bao loi
add errcode,al
mov ah,9
int 21h ;hien thi thong bao loi
;**************************************************************
;output and display
;show_and_send:
pexit:
mov cx,2000
pthre_wait:
mov dx,card_base
add dx,5
in al,dx
jmp short $+2
test al,20h
jnz pok_2_send
loop pthre_wait
;wait period timed out,display error message and exit
mov dx,offset err1_ms
call show_message
jmp ppexit
pok_2_send:
call con_hex ;goi chtr con chuyen sang so hex
lea dx,buffrr
mov cx,256
call display
mov cx,256
;place in transmitter hoding register to send
mov dx,card_base
lea di,buffrr ;tro toi vung dem
ppl: mov al,[di] ;lay byte data
out dx,al
jmp short $+2
call edelay
inc di
loop ppl
;display character
; call tty
ppexit: mov bx,handle ;lay the file
call close ;dong the file
jmp monitor
;**************************************************************
get_name proc near
push ax
push dx
push di
mov ah,9 ;ham hien thi chuoi
lea dx,prompt
int 21h
cld
lea di,filename ;DI tro toi ten file
mov ah,1 ;ham doc ki tu tu ban phim
read_name:
int 21h
cmp al,0dh ;co phai CR
je done ;dung ket thuc
stosb ;luu no vao trong chuoi
jmp read_name ;tiep tuc doc vao
done: mov al,0
stosb ;luu byte 0
pop di
pop dx
pop ax
ret
get_name endp
open proc near
mov ah,3dh ;ham mo file
mov al,0 ;chi doc
int 21h
ret
open endp
read proc near
push cx
mov ah,3fh ;ham mo file
mov cx,512 ;chi doc
int 21h
pop cx
ret
read endp
display proc near
push bx
mov ah,40h ;ham ghi file
mov bx,1 ;the file cho man hinh
int 21h ;dong file
pop bx
ret
display endp
close proc near
mov ah,3eh ;ham dong file
int 21h ;dong file
ret
close endp
edelay proc near
push ax
push bx
mov ax,06h
edel2: mov bx,0ffffh
edel1: dec bx
jnz edel1
dec ax
jnz edel2
pop bx
pop ax
ret
edelay endp
;++++++++++++++++++++++++++++++++++++++++++++
con_hex proc near
push ax
push bx
push cx
push dx
push di
push si
mov ax,0b800h
mov bx,0
cld
lea si,buffrr
mov cx,260
mov al,0
xxx8: mov [si],al
inc si
loop xxx8
lea si,buffrr
lea di,buffer
xxx3: mov al,[di] ;lay byte data
cmp al,3ah ;so sanh voi ma dau ':'
jz xxx2 ;nhay neu la dau ':'
inc di
jmp xxx3 ;quay lai de tim dau ':'
xxx2: call ktra_end ;goi chuong trinh kiem tra ket thuc
cmp ax,0 ;dung la het data thi lam cho AX=0000
jnz xxx4
xxx6: pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
xxx4: mov al,[di] ;lay byte data
mov [si],al ;dung la byte 3Ah can luu vao
call goi_ht
inc di
inc si
;xu li so byte can goi
mov al,[di] ;lay so can goi MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay so can go LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so HEX ADDR_H
add al,1
mov dl,al ;luu so byte can xu li con lai
call goi_ht
;xu li phan dia chi can goi
inc di
inc si
mov al,[di] ;lay byte ADDR_L-MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay byte ADDR_L-LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so HEX ADDR_H
call goi_ht
inc di
inc si
mov al,[di] ;lay byte ADDR_H-MSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay byte ADDR_H-LSD
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so byte can goi dang HEX
call goi_ht
;xu li cac byte con lai
inc di ;bo byte 00
inc di ;
xxx1: inc di
inc si
mov al,[di] ;lay so byte thu nhat
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
mov cl,4
rol al,cl
mov ah,al
inc di
mov al,[di] ;lay so byte thu 2
sub al,30h ;tru di 30 de thanh so hex
call so_lon ;kiem tra so ABCDEF
or al,ah ;or 2 data lai thanh 1 byte
mov [si],al ;cat so byte can goi dang HEX
call goi_ht
dec dl
cmp dl,0
jnz xxx1 ;quay lai vi chua
inc di ;bo byte cuoi thu nhat
inc di ;bo byte thu 2
inc di ;bo ma xuong hang
jmp xxx3 ;het 1 hang data
con_hex endp
;chuong trinh kiem tra ket thuc
ktra_end proc near
push di
inc di
mov al,[di] ;lay byte data
cmp al,30h ;kiem tra byte 0 thu nhat
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 2
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 3
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 4
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 5
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 6
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 0 thu 7
mov al,[di] ;lay byte data
cmp al,30h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte 1 thu 8
mov al,[di] ;lay byte data
cmp al,31h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte F thu 9
mov al,[di] ;lay byte data
cmp al,46h
jnz kt_exit ;nhay den de thoat vi khong phai
inc di ;neu dung thi kiem tra byte F thu 10
mov al,[di] ;lay byte data
cmp al,46h
jnz kt_exit ;nhay den de thoat vi khong phai
mov ax,0
pop di
ret
kt_exit:
mov ax,1111h ;nap data sao cho khac khong la 1
pop di
ret
ktra_end endp
goi_ht proc near
RET
push di
mov di,bx
mov ah,1
stosw
mov bx,di
pop di
ret
goi_ht endp
so_lon proc near
cmp al,9
jg yyy
ret
yyy: sub al,7
ret
so_lon endp
code ends
end start
MỤC LỤC
Trang
Lời cảm tạ
Lời nói đầu
PHẦN GIỚI THIỆU CHUNG
CHƯƠNG CƠ SỞ LÝ LUẬN
Chương I: CẤU TRÚC VI XỬ LÝ 8085
I. Cấu Trúc Bên Trong Của Vi Xử Lý 8085 ..........................................
II. Sơ Đồ Cấu Trúc Bên Ngoài Và Chứ Năng Các Chân Của
Vi Xử Lý 8085 .................................................................................
III. Bộ Nhớ ..........................................................................................
IV. Kết Nối Bộ Nhớ Với Vi Xử Lý .......................................................
V. Vấn Đề Giải Mã Cho Bộ Nhớ ..........................................................
Chương II: GIỚI THIỆU TẬP LỆNH CỦA VI XỬ LÝ 8085 ...............
Chương III: GIAO TIẾP VỚI MÁY TÍNH
I. Giao Tiếp Song Song
1. Giao Tiếp Qua Cổng Máy In ...........................................................
2. Giao Tiếp Qua Cổng Slot Card .......................................................
II. Giao Tiếp Nối Tiếp Qua Cổng COM RS232
1. Vài Nét Cơ Bản Về Cổng nối Tiếp .................................................
2. Sự Trao Đổi Của Các Đường Tín Hiệu ...........................................
Chương IV: GIỚI THIỆU HỆ THỐNG KIT 8085
1. Tần Số Làm Tần Số Làm Việc ........................................................
2. Tổ Chức Bộ Nhớ ............................................................................
3. Các IC Ngoại Vi .............................................................................
4. Khối Giải Mã Hiển Thị Sử Dụng IC 8279 ......................................
5. Khối Giài Mã Bàn Phím ..................................................................
PHẦN GIAO TIẾP
Chương V: Giao Tiếp Nối Tiếp Dùng Vi Mạch 8251
I. Truyền Thông Tin Nối Tiếp ...............................................................
II. Vi Mạch Usart 8251 .........................................................................
1. Sơ Đồ Chân Và Sơ Đồ Khối ...........................................................
2. Các Thanh Ghi ................................................................................
III. Ưng Dụng Của 8251 Để Truyền Thông Tin Nối Tiếp
1. Truyền Thông Tin Nối Tiếp Giữa Hai Kit Vi Xử Lý .......................
2. Truyền Thông Tin Nối Tiếp Giữa Vi Xử Lý Và Máy Tính ..............
Chương VI: Giao Tiếp Song Song Dùng Vi Mạch 8255
I. Giơi Thiệu Về Vi Mạch 8255 ............................................................
II. Sơ Đồ Chân, Sơ Đồ Logic, Chức Năng Các Chân Của Vi Mạch 8255 ..
III. Cấu Trúc Bên Trong và Hoạt Động Của Vi Mạch 8255 ..................
1. Sơ Đồ Khối, Cấu Trúc Bên Trong Của Vi Mạch 8255 ...................
2.Hoạt Động Của Vi Mạch 8255 .........................................................
3. Từ Điều Khiển ................................................................................
IV. Giao Tiếp Giữa Vi Xử Lý Với 8255 ...............................................
1. Giao Tiếp Kiểu I/O .........................................................................
2. Giao Tiếp Kiểu Bộ Nhớ ..................................................................
Chương VII. Phần Cứng Và Phần Mềm Giao Tiếp
I. Lưu Đồ Và Chương Trình Truyền- Nhận Dữ Liệu
1. Lưu Đồ Truyền Dữ Liệu .................................................................
2. Lưu Đồ Nhận Dữ Liệu ....................................................................
3. Chương Trình Truyền Dữ Liệu .......................................................
4. Lưu Đồ Nhận Dữ Liệu ....................................................................
II. Thiết Kế Và Thi Công Phần Giao Tiếp
1. Giới Thiệu Về Vi Mạch Max 232....................................................
2. Sơ Đồ Mạch Kết Nối ......................................................................
3. Sơ Đồ Mạch In ................................................................................
PHẦN TỔNG KẾT
Phụ Lục
Hướng Phát Triển Đề Tài
Kết Luận
Tài Liệu Tham Khảo
Mục Lục
Các file đính kèm theo tài liệu này:
- Đồ án tốt nghiệp - Phân tích thiết kế hệ thống - GIAO TIẾP MÁY TÍNH VỚI KIT VI XỬ LY 8085.pdf