1. Trình bày cấu trúc sơ đồ khối vi mạch giao tiếp song song 8255.
2. Lập trình 8255 sao cho port A, port B, port C là xuất, mode 0.
3. So sánh giao tiếp ngoại vi song song và giao tiếp ngoại vi nối tiếp.
4. Truyền dữ liệu nối tiếp là gì? Đồng bộ và bất đồng bộ? Song công và đơn
công?
5. Chuẩn RS232 là gì?
6. Kết nối giữa máy tính và modem.
7. Kết nối giữa PIC 16F877A và RS232
8. Vẽ mạch truyền dữ liệu giữa máy tínhvà vi điều khiển PIC 16F877A sử dụng
MAX232/MAX233
198 trang |
Chia sẻ: phanlang | Lượt xem: 3657 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Bài giảng Vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
một phần.
Mạch giải mã đầy đủ giải mã cho tất cả các đường địa chỉ, mỗi ô nhớ có duy
nhất 1 địa chỉ. Cách giải mã này được dùng trong hệthống hoàn chỉnh. Ví dụ : máy
tính có RAM 256KB nhưng được giải mã đầy đủ 1MB để khi cần có thể lắp thêmbộ
nhớ vào.
Mạch giải mã không đầy đủ là mạch giải mã bỏ qua một số đường địa chỉ
cao, một ô nhớ có nhiều địa chỉ(về mặt logic), nhưng không thể có 1 địa chỉ chọn
nhiều ô nhớ trong mạch giải mã. Mạch giải mã phải mang tính kinh tế và khả thi.
1.Giải mã địa chỉ bằng cổng logic :
Ví dụ : Hãy giải mã địa chỉ sao cho eprom 2764 có địa chỉ là A000h-BFFFh
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 A000h
. . . . . . .
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 BFFFh
địa chỉ không thay đổi địa chỉ thay đổi theotừng IC nhớ
đưa vào mạch giải mã đưa vào IC nhớ
address bus của data bus của 16F877A
16F877A
A13
A14 LS00
CS GND
A15
Mạch giải mã đơn giản dùng cổng NAND, địa chỉ A000h-BFFFh
Trong mạch giải mã đơn giản cho eprom này, xung chip select sẽ tác động khi ta đọc
địa chỉ A000h -> BFFFh, 3 bit địa chỉ phần cao A13=0, A14=0 và A15 =1 được đưa
vào cổng NAND để tạo xung chọn vùng nhớ 8KB, đặt tại địa chỉ cao trong không
gian địa chỉ của PIC 16F877A. Mỗi ô nhớ cụ thể của vi mạch nhớ eprom 2764 sẽ do
các bit thấp còn lạiA0-A12 chọn ra.
A0-A12
EPROM
2764
CE OE
157
2. Giải mã địa chỉ bằng mạch giải mã (decoder) và các cổng logic:
Vi mạch 74LS138 : giải mã 3Ỉ8
Chọn các đầu ra của mạch giải mã
đầu vào
các đầu vào
cho phép
74LS139: 2 bộ giải mã 2Ỉ 4
Đối với hệ PIC 16F877A nếu ta muốn kết nối nhiều EPROM và/ hoặc nhiều RAM
thì cấn phải có mạch giải mã địa chỉ. Thí dụ nếu ta sử dụng các EPROM 8KB và
RAM 8KB thì bus địa chỉ phải được giải mã để chọn các IC nhớ theo các vùng 8K
: 0000H-1FFFH, 2000H-3FFFH,vv..
Thường người ta dùng IC giải mã 74LS138 với các ngõ ra của nó nối với các ngõ
vào chọn chip trên các IC nhớ. Hình 2. 13 minh họa hệ thống sử dụng các EPROM
8KB 2764 và các RAM 8KB 6264. Chú ý là do có các đường cho phép riêng ( /RD
và /WR cho bộ nhớ dữ liệu) nên 16F877A có thể truy cập đến 64KB cho mỗi
EPROM và RAM.
Ví dụ : Giả thiết trong hệ PIC 16F877A ta cần ghi bộ nhớ 64 KB cho các vi mạch
nhớ eprom 8KB(8xIC 2764). Hãy thiết kế mạch giải mã dùng IC 74LS138 để thực
hiện.
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0001h
. . . . . . .
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFFh
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 2001h
. . . . . . .
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3FFFh
……….
………
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 E000h
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 E001h
. . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FFFFh
không đổi thay đổi theo từng IC nhớ eprom 2764
A0-A12
Sơ đồ mạch giải mã địa chỉ :
A /Y0
B /Y1
C
74LS138
G2a
G2b
G1 /Y7
158
A0-A12
D0-D7
A13 CS 1 0v
A14 CS ROM 2
A15
các chân chọn chip cho 7 IC eprom2764
+5V CS ROM 8 : FE000h-FFFFFh
Hình 2.13a
Ví dụ : Giả thiết trong hệ PIC 16F877A ta cần đọc ghi bộ nhớ 64 KB cho các vi mạch
nhớ RAM 8KB(8xIC 6264). Hãy thiết kế mạch giải mã dùng IC 74LS138 để thực
hiện.
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0001h
. . . . . . .
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFFh
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 2001h
. . . . . . .
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3FFFh
……….
………
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 E000h
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 E001h
. . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FFFFh
không đổi thay đổi theo từng IC nhớ RAM 6264
A0-A12
Sơ đồ mạch giải mã địa chỉ :
A Y0
B Y1
C
74LS138
G2a
G2b
G1 Y7
A0-A12
D0-D7
OE
EPROM1
2764 8K
159
A0-A12
D0-D7
A13 CS 1 RD
A14 CS 2 WR
A15
các chân chọn chip cho 7 IC RAM 6264
+5V CS RAM 8 : FE000h-FFFFFh
Hình 2.13b
Ví dụ : Thiết kế mạch giải mã địa chỉ 12KB bộ nhớ , trong đó 1 ROM 2KB + 1
SRAM 4KB + 3 SRAM 2KB
Bản đồ bộ nhớ : 0000h Ỉ2FFFh
0000h
07FFh A11 CSrom
0800h A12 CSram1
A13 CSram2
0FFFh A14 CSram 3
1000h A15
CSram4
17FFh +5V
1800h
1FFFh
2000h
2FFFh
9.2. Thiết kế kit vi xử lý
9.2.1.Thiết bị phát triển dùng vi xử lý:
Ta trình bày vài phương pháp phát triển và hiệu chỉnh chương trình trước khi nạp
nó vào PROM.
Phân phối bộ nhớ điển hình của máy vi tính thông thường (hình 1)
Phân phối bộ nhớ trong thiết bị phát triển dùng máy vi tính cho trên hình 2.
A Y0
B Y1
C
74LS138
G2a
G2b
G1 Y7
A0-A12
D0-D7
OE
WE
RAM 1
6264 8K
ROM 2K
RAM 1,
2K
RAM 2,
2K
RAM 3,
2K
RAM 4,
4K
A /Y0
B /Y1
C /Y2
G2a /Y3
G2b /Y4
/Y5
G1 /Y6
/Y7
160
Địa chỉ Bộ nhớ
FFFFH
Khởi động lại
Con trỏ ngăn xếp
0000H
Hình 1 : Máy vi tính thông thường
Hệ thống monitor bao gồm 1 vùng ROM để chứa chương trình service, một vùng
RAM để chứa tạm thời thông tin và chương trình vào/ra. Thành phần quan trọng
nhất của chương trình hướng dẫn là chương trình vào ra thông tin.
+ Chương trình vào.
+ Chương trình đọc.
+ Chỉ thị nội dung ô nhớ
+Ghi số liệu vào ô nhớ.
Phân phối bộ nhớ trong thiết bị phát triển dùng máy vi tính cho trên hình 2.
Địa chỉ Bộ nhớ
Địa chỉ khởi động lại
Địa chỉ ngắt
Chương trình của người sử dụng (PROM)
.
.
.
Thiết bị vào ra của người sử dụng
Ngăn xếp của người sử dụng
Số liệu của người sử dụng
161
FFFFH
Khởi động lại
Khởi động lại Monitor
Con trỏ ngăn xếpcủa
Monitor
Con trỏ ngăn xếp
0000H
Hình 2 : Thiết bị phát triển dùng máy vi tính
Hình 3 :Chỉ thị sau khi gọi địa chỉ ô nhớ FC00H và đưa vào số 8E
9.1.2. Hệ thống phát triển vi xử lý:
Hình 4: Cấu trúc của một hệ phát triển
Ngôn ngữ Assembly và trình biên dịch Assembler: MPLAB, CCS C
F C 0 0 8 E
Bộ nhớ
đĩa
Thiết bị phát triển
dùng máy vi tínhVào ra
Máy lập trình để
nạp chương trình
vào rom
Địa chỉ khởi động lại
Chuyển mạch
Địa chỉ ngắt
-------------------------------------------------
Chương trình của người sử dụng (RAM)
.
.
.
Chương trình hướng dẫn (Monitor ROM)
Ngăn xếp của monitor
RAM của monitor
Vào ra của monitor
Thiết bị vào ra của người sử dụng
Ngăn xếp của người sử dụng
Số liệu của người sử dụng (RAM)
162
Kit vi xử lý đơn giản
Mạch điện tối thiểu dùng với PIC 16F877A
Hình 5: Hệ thống tối thiểu
Kit vi xử lý mở rộng
Một ví dụ thiết kế kit vi xử lý: gồm CPU 16F877A, EPROM 8KB, RAM 8KB có
tầm địa chỉ , 8255
ROM : 0000H-1FFFH, RAM : 2000H-3FFFH
8255: 4000h-5FFFh (chỉ dung 4000h-4003h)
Phương pháp thiết kế :
1/ Thiết kế mạch nguồn
2/Thiết kế clock
3/Mạch Reset
4/Thiết kế mạch giải mã
5/Sơ đồ kit vi xử lý
3.1.3.Sơ đồ Kit vi điều khiển:
163
Hình 6: Hệ phát triển vi điều khiển PIC 16F877A.
(Tham khảo: Sạp N6 , chợ Điện tử Nhật Tảo, Nguyễn Kim, Quận 10, Tp. HCM).
Kit ph át tri ển c ủa t ác gi ả D. W. Smith t ại website:
164
Hình 7 : Kit phát triển vi điều khiển PIC (Tham khảo trong sách [1]).
9.3. PPI 8255
8255 có 3 cổng song song A, B, C, mỗi cổng 8 bit, thường được chia ra :
A : 8 bit , PA0-PA7
B : 8 bit , PB0-PB7
CL : 4 bit , PC0-PC3
CH : 4 bit, PC4-PC7
Có 3 mode (chế độ hoạt động )
-mode 0 : xuất nhập đơn giản dùng A,B,C
-mode 1 : xuất nhập có điều kiện
-mode 2: là bus 2 chiều (dùng A)
9.3.1.Tổng quát : Cấu trúc khối của 8255
a.Bộ đệm truyền dữ liệu : bộ đệm 8 bit, 2 chiều , 3 trạng thái dùng để
giao tiếp 8255 với CPU. Dữ kiện được phát hay nhận bởi bộ đệm khi thực hiện lệnh
IN, OUT bởi CPU. Các từ điều khiển cũng truyền qua dữ kiện
b.Phần kiểm soát đọc/ghi : chức năng của khối này là kiểm soát tất cả
các sự truyền đạt bên trong và ngoài của từ điều khiển và dữ kiện. Nó nhận ngõ vào
từ tuyến địa chỉ và điều khiển của CPU, phát ra các lệnh cần thiết cho cả 2 nhóm
điều khiển A và B.
165
/CS : ngõ vào =0 cho phép truyền tin giữa 8255 và CPU
//RD: =0 cho phép 8255 gởi dữ kiện đến CPU trên tuyến dữ kiện chủ yếu là cho
phép CPU đọc dữ kiện từ 8255
WR : =0 CPU xuất từ điều khiển hay dữ liệu ra 8255
A0 và A1 : để chọn cổng A,B,C
A1 A0 chọn cửa
0 0 port a
0 1 port b
1 0 port c
1 1 từ điều khiển
RESET : =1 xóa tất cả các thanh ghi bên trong gồm thanh ghi điều khiển và các cổng
A,B,C ở mode nhận.
c.Điều khiển nhóm A và B
Cấu hình hoạt động của mỗi nhóm được lập trình bởi phần mềm, chủ yếu là,
CPU xuất từ điều khiển đến 8255. Từ điều khiển gồm các thông tin như chế độ
(mode), bit set, bit reset, vv… sẽ khởi động cấu hình hoạt động của 8255.
Thanh ghi từ điều khiển chỉ có thể viết vào mà không thể đọc ra.
d.Các cửa (port) A, B, C :
8255 gồm 3 cổng A, B, C. Mỗi cổng gồm 8 bit. Các cổng này có thể lập trình
bởi phần mềm để có thể hoạt động ở chế độ thích hợp.
Cổng A : gồm bộ đệm, cài ngõ ra 8 bit và cài ngõ vào 8 bit.
Cổng B : gồm bộ đệm, cài ngõ ra 8 bit và cài ngõ vào 8 bit.
Cổng C : đệm và cài ngõ ra 8 bit và đệm 8 bit ngõ vào (không cài).
Cửa C có thể chia làm 2 phần, mỗi phần 4 bits cho điều khiển mode.
Mỗi phần được dùng kết hợp với cửa A hay B để tạo nên các tín hiệu điều
khiển.
166
PA0-PA7
PC4-PC7
D0-D7
PPC0-PC3
Giao RD
Tiếp WR
A1
A0
Reset PB0-PB7
CS
Hình 8: Sơ đồ khối của 8255
Bảng làm việc của 8255
A1 A0 /RD /WR /CS Hoạt động
Nhập 0 0 0 1 0 A data bus
0 1 0 1 0 B data bus
1 0 0 1 0 C data bus
Xuất 0 0 1 0 0 data bus A
0 1 1 0 0 data bus B
1 0 1 0 0 data bus C
1 1 1 0 0 data bus từ điều khiển
1 1 0 1 0 tổng trở cao
x x x x 1 của data bus
9.3.2.Mô tả chi tiết
a.Lập trình xuất nhập để chọn chế độ (Mode) :
Có ba chế độ hoạt động cơ bản thiết lập do phần mềm :
Đệm dữ
liệu
Điều khiển
đọc ghi
Điều
khiển
nhóm 1
(group A)
Điều
khiển
nhóm 2
(group B)
Port
A
CH
CL
Port
B
167
Mode 0 : vào ra cơ bản
Mode 1 : vào ra bắt tay (chỉ cho phép 1 trong 2 chiều)
Mode 2: truyền dữ liệu 2 chiều
Khi reset, tất cả các cổng được thiết lập ở chế độ nhập (input), tức là cả 24
đường đều ở 3 trạng thái.Sau khi reset, 8255 có thể duy trì ở chế độ nhập mà không
cần khởi động gì thêm. Trong khi thực hiện chương trình hệ thống, có thể chọn bất kì
mode nào bằng cách xuất đến 8255 từ điều khiển. Điều này cho phép chỉ cần 1 8255
mà có thể phục vụ nhiều kiểu thiết bị ngoại vi.
Các chế độ của cổng A và B có thể định nghĩa riêng biệt. Còn cổng C được
chia làm 2 phần cho 2 nhóm tùy yêu cầu định nghĩa chế độ cổng A và B. Ta có từ
điều khiển cho 8255 như sau :
Control word :
D7 D6 D5 D4 D3 D2 D1 D0
Nhóm B
Mode set flag Port C 1 : in
1= (phần thấp) 0 : out
active
port B 1 : in
0 : out
Chọn chế độ 0 : mode 0
1 : mode 1
Nhóm A
Port C (phần cao) : 1 : in
0 : out
port A : 1 : in
0 : out
Chọn mode 00 : mode 0
01 : mode 1
1x : mode 2
Ví dụ : 8255 ở mode 0, port A là nhập, port B,C xuất.
Từ điều khiển : 100100002= 90h
Khi CS=0 8255 được chọn thì port A có địa chỉ 300h
Port B có địa chỉ 301h
Port C có địa chỉ 302h
Từ điều khiển : 303h
Lệnh xuất nhập :
Out &h303, &h90 ; xuất 90h ra từ điều khiển
Out &h301, &hFF ; xuất FFh ra cổng B
Inp (&h300) ; nhập số liệu từ cổng A
Mov dx, 301h
Out dx, 0ffh
Mov dx, 300h
In ax, dx
168
b.Đặc tính xóa/thiết lập bit cho cửa C khi nó dùng làm tín hiệu trạng
thái/điều khiển cho cửa A/B :
Ta dùng lệnh OUT xuất ra từ điều khiển trong đó bit D7=0
Khi chọn mode 2 cho port A, các bit D3, D4, D5 không còn ý nghĩa nữa. Lúc
đó port A là 2 chiều, còn phần cao của C sẽ làm tín hiệu điều khiển và trạng thái cho
port A
Ở mode 1 : CH điều khiển cổng A, còn CL điều khiển cổng B. Khi giao tiếp
thiết bị ngoại vi, cổng C làm việc ở chế độ dạng bit.
Bit set và reset flag, phần còn lại của từ điều khiển có ý nghĩa như sau :
X x x Bit set/reset
Bit set/reset flag 0 : reset
0=active 1 : reset
Bit select
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
Mỗi lần xuất ra 1 từ điều khiển đến 8255 với D7=0, chỉ tác động đến chỉ 1 bit
của port C( được chọn bởi bit select)
c.Chức năng kiểm soát ngắt quãng
Khi 8255 được lập trình ở mode 1 hay 2, các tín hiệu điều khiển được cung
cấpcó thể được dùng để yêu cầu ngắt quảng CPU. Tín hiệu yêu cầu ngắt quảng phát
ra từ port C có thể bị cấm hay cho phépbằng cách set hay reset flip-flop INTE tương
ứng, dùng chức năng set/reset bit của port C.
Chức năng này cho phép CPU cấm hay cho phép các thiết bị I/O đã xác định
ngắt quảng CPU mà không làm ảnh hưởng các thiết bị khác trong cấu trúc ngắt
quảng.
9.3.3.Các chế độ hoạt động
a.Mode 0 : Vào/ra cơ bản , đơn giản
Không có bắt tay, dữ liệu được ghi và đọc 1 cách đơn giản đến hay từ 1 cửa
đã chỉ ra.
Các đặc tính cơ bản ở mode 0 :
.2 cổng 8 bit và 2 cổng 4 bit
.Bất kì cổng nào cũng có thể là ra hay vào
.Ngõ ra được cài
.Cho phép 16 dạng vào/ra ở mode
Ví dụ : từ điều khiển 83h xác định port A ra, B vào
Phần cao của C : ra, phần thấp của C : vào
b.Mode 1 : Vào/ra có bắt tay, dùng cho port A, port B
D7 D6 D5 D4 D3 D2 D1 D0
169
Ở mode 1, cổng A và B dùng những đường ở cửa C để phát hay nhận các tín
hiệu bắt tay. A và B xuất nhập có điều kiện.
*Ở chế độ nhập :
-STB (strobe input) ngõ vào, =0 :cài dữ liệu vào 8255
-IBF (input buffer full) ngõ ra, =1 :đã có dữ liệu, thông báo cho biết vùng đệm đã
đầy. Nói cách khác, mức thấp của STB sẽ thiết lập IBF=1, và IBF bị xóa bởi cạnh
lên của RD.
-INTR (interrupt request) :ngõ ra = 1 để yêu cầu ngắt quảng
CPU.INTR được set bởi STb=1 và IBF=1, INTE=1
-INTR bị reset bởi cạnh xuống của RD
-INTE A kiểm soát bởi bit set/reset PC4
-INTE B kiểm soát bởi bit set/reset PC2
*Cổng B : STBB=PC2 (input)
IBF = PC1
INTR = PC0
INTEB = PC2 (output)
Cổng A PA0-PA7
STBa
IBF
INTR a về CPU
RD I/O
INTE a=PC4 (xoá/lập bit)
*Ở chế độ xuất :
-OBF (output buffer full) :ngõ ra, =0 đã có dữ liệu(được set bởi cạnh lên của xung
WR từ CPU) báo là CPU vừa xuất 1 byte ra cổng đó, và bị reset bởi ACK=0 do
ngoại vi (tức là ở mức không tích cực)
-ACK (Acknowledge input) :=0 đã lấy dữ liệu, thông báo cho 8255 biết thông tin từ
A hay B đã nhận bởi ngoại vi.
-INTR (interrupt request) : mức 1 ở ngõ ra dùng để yêu cầu ngắt quảng CPU khi
ngoại vi đã nhận dữ liệu phát bởi CPU.
INTR được set bởi ACK=1 và OBF=1, INTE=1
-INTR bị xóa bởi cạnh xuống của xung WR
-INTE A kiểm soát bởi bit set/reset PC6
-INTE B kiểm soát bởi bit set/reset PC2
*Cổng B : OBFB=PC1
INTEA
PC4
PC5
PC3
PC6,7
170
ACK = PC2
INTR = PC0
INTEB = PC2
Cổng A
PA0-PA7
OBFa
ACKa
INTR a
WR I/O
INTE a =PC6 (xoá / lập bit)
c.Mode 2 : Xuất nhập tuyến 2 chiều, bắt tay
Các đặc tính cơ bản của mode 2:
. Chỉ dùng cho nhóm A
. 1 cửa 2 chiều 8 bit (A) và 1 cổng điều khiển 5 bit (C) cho cổng A
. Cả ra/vào đều có cài
Cổng A PA0-PA7
INTRa
OBFa
ACKa
WR STBa
RD IBFa
Từ điều khiển :
PC2-0 0 :in
1 : out
Port B 0: in
1 : out
Group B Mode
0 : mode 0
1 : mode 1
Định nghĩa các tín hiệu điều khiển xuất nhập 2 chiều :
*INTR (interrupt request)
Mức 1 ở ngõ ra này báo cho CPU biết yêu cầu ngắt quảng cho phép nhập hay
xuất (chung)
PA0-PA7
PC7
INTEa
PC6
PC3
PC4 5
PA0-PA7
PC3
PC7
INTE1PC6
PC4
INTE2
PC5
1 1 x x x 1/0 1/0 1/0
171
*Phép xuất :
-OBF (output buffer ful) output
OBF xuống 0 để báo cho ngoại vi biết CPU đã ghi dữ liệu ra cửa A
-ACK (acknowledge) input
Mức 0 từ ngoại vi cho phép bộ đệm ra 3 trạng thái của cửa A mở để phát dữ
liệu, ngược lại, bộ đệm ra ở 3 trạng thái
-INTE 1 (INTE F-F liên quan với OBF)
Kiểm soát bởi bit set/reset PC6
*Phép nhập :
-STB : mức thấp ở ngõ vào này cài data vào mạch cài ngõ nhập
-IBF (input buffer full) output
Mức 1 thông báo cho CPU biết dữ liệu đã nạp vào mạch cài nhập
-INTE 2 (liên quan với IBF)
Kiểm soát bởi bit set/reset PC4
Kết hợp mode 2 và các mode khác :
Mode 2 và mode 0 (in) : từ điều khiển : 1 1 x x x 0 1 1/0
Mode 2 và mode 0 (out) : từ điều khiển : 1 1 x x x 0 0 1/0
Mode 2 và mode 1 (in) : từ điều khiển : 1 1 x x x 1 1 x
Mode 2 và mode 1 (out) : từ điều khiển : 1 1 x x x 1 0 x
Sự kết hợp các mode đặc biệt :
Có 1 số tổ hợp các mode mà không phải tất cả cửa C đều dùng làm điều
khiển hay trạng thái. Các bit còn lại được dùng như sau :
Nếu lập trình là ngõ vào :
Tất cả các ngõ vào được truy xuất qua phép đọc cửa C bình thường
Nếu lập trình là ngõ ra :
Các bit ở phần cao cửa C (C4-C7) phải được truy xuất riêng rẽ dùng chức
năng bit set/reset
Các bit ở phần thấp cửa C(C0-C3) có thể truy xuất dùng chức năng bit
set/reset như nhóm 3 bằng cách ghi ra cửa C
Đọc trạng thái port C :
Ở mode 0, port C truyền dữ liệu đến hay từ ngoại vi khi 8255 được lập trình ở
mode 1 hay mode 2, cửa C trở nên các tín hiệu điều khiển bắt tay cho port A hay B
Đọc nội dung cửa C cho phép người lập trình kiểm tra trạng thái của mỗi thiết bị
ngoại vi và thay đổi chiều chương trình tương ứng
Không có lệnh đặc biệt để đọc thông tin trạng thái từ C. Phép đọc bình
thường port C dùng để thực hiện chức năng này
Ta có dạng từ trạng thái mode 1 :
D7 D6 D5 D4 D3 D2 D1 D0
Nhóm A Nhóm B
Mode 1 (input)
I/O I/O IBFa INTEa INTRa INTEb IBFb INTRb
172
Nhóm A Nhóm B
Mode 1 (output)
Nhóm A Nhóm B
Mode 2 Định nghĩa bởi chọn mode 0 hay 1
9.3.4. Ứng dụng của 8255
Ứng dụng của 8255 gồm có :
1. Ghép nối với bàn phím .Ví dụ : điều khiển bàn phím (mode 0)
2. Mode 0 : điều khiển đèn bảy đoạn
3. Ghép nối 8255 với ADC, DAC
4. Điều khiển motor bước , motor DC
5. Truyền số liệu :
-truyền nối tiếp bất đồng bộ : (RS232) . Ví dụ : cổng COM1 , COM 2
-truyền song song đồng bộ : cổng ghép nối với máy in (LPT1, LPT2)
-xuất nhập song song dùng IC 74LS373/374, 74LS245/244
-giao tiếp máy tính.
Sơ đồ chân 8255
OBFa INTEa 1/0 1/0 INTRa INTEb OBFb INTRb
OBFa INTE1 IBFa INTE2 INTRa X X X
173
U4
8255
34
33
32
31
30
29
28
27
5
36
9
8
35
6
4
3
2
1
40
39
38
37
18
19
20
21
22
23
24
25
14
15
16
17
13
12
11
10
D0
D1
D2
D3
D4
D5
D6
D7
RD
WR
A0
A1
RESET
CS
PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
Hình 9.
9.4. GIAO TIẾP NGOẠI VI NỐI TIẾP:
9.4.1.Gới thiệu về truyền dữ liệu nối tiếp :
So sánh giữa truyền dữ liệu song song và truyền dữ liệu nối tiếp :
- Truyền dữ liệu song song ( ví dụ với máy in)
. Nhanh , nhưng khoảng cách không lớn.
. Đắt tiền.
. Truyền từ 2 bit trở lên.
- Truyền dữ liệu nối tiếp ( ví dụ qua đường dây điện thoại)
.Khỏang cách truyền xa
.Rẻ tiền hơn
. Truyền từng bit một
174
(a)
one bit/data line
(b)
Hình (a) Truyền dữ liệu song song và (b) truyền dữ liệu nối tiếp
Bất đồng bộ và đồng bộ
Có hai phương pháp truyền dữ liệu nối tiếp
Đồng bộ (synchronous) : mỗi lần truyền một khối dữ liệu (các ký tự) với tốc độ
không đổi.
-Bất đồng bộ (asynchronous): mỗi lần truyền 1 byte.
8051 có sẵn một UART ở bên trong
Duplex (song công và) simplex ( Đơn công)
Tx and Rx Only Tx
(a) (b)
Hình : Duplex (a) và Simplex (b)
-Duplex là truyền dữ liệu mà hai bên đều có thể phát/thu.
-Simplex là truyền dữ liệu mà chỉ có một bên phát và bên kia thu.
Trong duplex lại được chia thành hai loại :
-Full duplex (song công): dữ liệu được truyền đồng thời theo hai chiều.
-Half duplex (bán song công) : dữ liệu được truyền mỗi lần theo một chiều.
Truyền dữ liệu nối tiếp:
-Trong giao tiếp nối tiếp, dữ liệu song song được đổi ra thành chuỗi bit liên tiếp và
tạo thành 1 dãy xung không nhất định.
-Cách đổi dữ liệu song song ra nối tiếp mà người ta thường dùng là nhờ một thanh
ghi dịch tác động theo cạnh của 1 xung đồng bộ (gọi là xung truyền hay xung nhận)
-Như vậy vấn đề quan trọng nhất trong truyền nối tiếp là thời điểm bắt đầu dữ liệu
và độ rộng cùa mỗi bit
-Độ rộng bit cũng thể hiện tốc độ truyền dữ liệu. Chẳng hạn, dữ liệu truyền đi có độ
rộng bit được tính là 20ms thì trong 1 giây (sec) truyền được 1/(20.10-3)=50 bit. Lúc
Sender Receiver
Sender
City A
Receiver
City B
PC PC PC Printer
175
đó người ta nói tốc độ truyền là 50 bit/s hay là 50 bauds (đơn vị đo tốc độ truyền
trong giao tiếp nối tiếp)
-Theo hình vẽ sau, nếu xung truyền tác động theo cạnh xuống thì ta thấy ngay độ
rộng bit chính bằng chu kì xung truyền. Suy ra tốc độ truyền bằng tần số xung
truyền.
-Chỉ cần xác định sai 1 trong 2 yếu tố trên là không thể nhận đúng dữ liệu được
CLK
Data 1 1 0 1 0 0 1 0
Độ rộng bit
Dạng truyền dữ liệu nối tiếp
-Tùy theo cách xác định thời điểm bắt đầu có dữ liệu mà người ta chia giao tiếp nối
tiếp ra thành phương pháp truyền nối tiếp đồng bộ hay bất đồng bộ
a. Truyền đồng bộ :
Trong cách truyền đồng bộ, dữ liệu được truyềnliên tục thành khối và có kiểm
tra theo tổng kiểm tra (checksum)
Nếu kèm theo dữ liệu, người ta truyền cả xung clock thì gọi là đồng bộ cứng. Lúc
đó nơi nhận sẽ dùng xung clock để lấy mẫu dữ liệu. Như vậy, ứng với mỗi bit dữ
liệu, người ta gửi kèm theo 1 xung clock ở đầu bit.
-Người ta có thể dùng cách đồng bộ khác mà không phải gửi xung clock theo, chỉ gởi
dữ liệu thôi. Cách này gọi là đồng bộ mềm. Lúc đó việc đồng bộ đượ thực hiện
bằng các kí tự đặc biệt gọi là kí tự đồng bộ( SYN)
-Dữ liệu truyền đi theo từng khối và có kí tự Syn ở đầu khối
-Ký tự SYN được chọn sao cho không trùng với kí tự nào trong dữ liệu
-Nếu không thể chọn được ký tự SYN thì có thể dùng 2 ký tự SYN1 và SYN2 với
điều kiện tổ hợp SYN1 và SYN2 đi liền nhau không có trong dữ liệu.
Khối dữ liệu nối tiếp đồng bộ mềm
-Nơi nhận phải tiến hành dò tìmkí tự SYN(1 hoặc 2 kí tự). Sau khoảng thời gian bằng
độ rộng bit, dữ liệu nối tiếp được dịch vào và đổi ra song song. Dữ liệu song song
này được so sánh với kí tự SYN và quá trình này được lập lại cho đến khi phát hiện
ra kí tự SYN là coi như đã đồng bộ và sẽ bắt đầu lấy dữ liệu ngay sau kí tự SYN
b. Truyền bất đồng bộ :
-Dữ liệu được đặt vào một khung truyền nhận gồm có thêm bit bắt đầu (start bit), bit
kiểm tra chẵn lẻ(parity bit) và các bit kết thúc (stop bit)
SYN SYN Khối dữ liệu Tổng kiểm tra
176
-Theo chuẩn RS232C, giao tiếp giữa các đường liên lạc nối tiếp của 2 máy tính ,
khung dữ liệu gồm có 1 bit bắt đầu, không có hoặc có 1 bit kiểm tra (mà có thể chọn
chẵn hoặc lẻ), dữ liệu dài từ 5 đến 8 bit và số bit kết thúc có thể lá 1, 1 1/2, hoặc 2
bit như hình vẽ sau :
Start bit Data bit Parity bit Stop bit
Khung dữ liệu nối tiếp bất đồng bộ
Start bit Data bit(5-8) Parity bit Stop bit
1 LSB … MSB 0-1 1, 1+1/2, 2
Chiều dài 1 ký tự
Dạng xung của khung dữ liệu nối tiếp bất đồng bộ
9.4.2. Chuẩn giao tiếp nối tiếp RS-232
Chuẩn giao tiếp nối tiếp RS232 được qui định bởi EIA (electronics industries
association= Hiệp hội công nghiệp điện tử ) vào năm 1960 và các chuẩn nối tiếp
RS232 có sửa đổi là RS232A (năm 1963), RS232B (năm 1965) và RS232C (năm
1969). Hai chữ đầu ES có nghĩa là recommended standard.
RS 232 được qui định trước khi xuất hiện họ logic TTL, do đó các mức điện áp của
nó không tương thích với TTL (họ TTL ra đời vào năm 1968).
a. Giao tiếp nối tiếp bất đồng bộ
Giao tiếp nối tiếp bất đồng bộ là giao tiếp mà các bit lần lượt được gửi ra
đường truyền và xung đồng bộ nơi phát không nhất thiết phải đồng bộ với xung đồng
hồ nơi thu
Ngoài các bit dữ liệu muốn phát thì trên đường truyền còn có thêm các bit để
bắt tay và để kiểm tra người ta gọi là thông tin khung
1-2 bit dừng
Bit khởi động bit kiểm tra chẵn lẻ
Trong thực tế bit khởi động ngược với trạng thái đường truyền, bit dừng cùng
với trạng thái đường truyền
Số bit dừng : 1; 1,5; 2 bit
Độ dài ký tự : 5, 6, 7, 8 bit
1 5 – 8 1 1, 1+1/2, 2
177
Các IC chuyên dụng để thu phát bất đồng bộ : 6402, 6850, 8251, 8250
b. Giao diện RS-232
Khi muốn truyền thông tin đi khoảng cách xa, chúng ta không thể truyền trực
tiếp mức TTL (0v-5v) vì :
-Do suy giảm ở nơi thu , khó phân biệt được mức tín hiệu 0 và 1
-Do lẫn nhiễu nơi thu
Vì vậy người ta phải :
-Điều chế tín hiệu phát khởi bằng một sóng mang ít bị suy giảm trên đường dây
-Tăng mức điện áp TTL
-Sử dụng đường dây điện thoại
Đối với mạch trao đổi thông tin khoảng cách xa vì mức điện áp TTL của các
thiết bị số khác với mức đường dây điện thoại, do đó cần phải có các khối ghép nối
chuẩn. Tùy tốc độ trao đổi tin, khoảng cách và các loại modem cũng như đường dây
truyền mà ta có các phối hgép chuẩn khác nhau : RS232C, RS 449, RS423A
+Thông số kỹ thuật của chuẩn RS-232C
Chuẩn RS232C áp dụng cho tốc độ truyền số liệu tối đa là 20kbps và khoảng
cách cực đại là 15 m
Đó là khối ghép nối chuyển mức TTL (0-5v) lên mức điện thế của điện thoại
(+/-15v)
Trong đó các đường truyền số liệu dùng mức logic âm :
-tín hiệu logic 1 ở giữa –5v - -15v
-tín hiệu logic 0 ở giữa +5v - +15v
Tuy nhiên tín hiệu điều khiển dùng tín hiệu logic dương
+Sơ đồ chân của RS232C :
Chốt ra ổ 9 chân Chốt ra ổ 25 chân Chức năng
1 8 DCD :data carrier detect
2 3 RXD :receive data
Vi xử
lý 1
Khối
ghép nối
song
á
Khối
ghép nối
nối tiếp -
Vi xử
lý 2
Vi xử
lý
Khối
ghép nối
song
song- nối
tiếp
RS2
32C Modem
Mo
dem
RS2
32C
Khối
ghép nối
nối tiếp-
song song
Vi xử
lý
178
3 2 TxD :transmit data
4 20 DTR : data terminal ready
5 7 GND : mass
6 6 DSR :data set ready
7 4 RTS :request to send
8 5 CTS :clear to send
9 22 RI :ring indicator
-Các đường dữ liệu
TxD: dữ liệu được truyền từ modem trên đường truyền
RxD : dữ liệu được thu bởi modem trên đường truyền
-các đường báo hiệu thiết bị sẵn sàng
DSR:báo 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 song
RTS:tín hiệu báo thiết bị đầu cuối yêu cầuphát dữ liệu
CTS :modem đáp ứng nhu cầu gửi dữ liệu của thiết bị đầu cuối
-Các đường trạng thái song song 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ừ đường truyền
RI: modem tự động trả lời (báo rằng đã phát tín hiệu chung từ đường truyền)
9.4.3. MAX232
Mạch lái đường dây : các IC thông dụng là MAX232, MC 1488 và MC 1489, DS275
Trong các hệ phát triển sẽ được trình bày, việc ghép nối với máy tính được thực
hiện qua cổng nối tiếp. Thông thường, có 2 cách ghép nối bộ vi xử lý với cổng nối
tiếp.
1/ Cách đơn giản là dùng transistor làm bộ đệm.
2/ Ghép nối các đường truyền và nhận (TxD và RxD, chân 10 và 11) của bộ vi xử lý
với bộ đệm /nhận dùng vi mạch, chẳng hạn loại MAX232 của hãng MAXIM.
Vi mạch MAX232 chuyển đổi mức TTL ở lối 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.Hình sau mô tả cách sắp xếp chân và sơ đồ cấu trúc vi mạch MAX232.
179
U2
MAX232
13
8
11
10
1
3
4
5
2
6
12
9
14
7
R1IN
R2IN
T1IN
T2IN
C+
C1-
C2+
C2-
V+
V-
R1OUT
R2OUT
T1OUT
T2OUT
(a)
5V
+
DTR
RTS
Lối vào Lối ra
TTL/CMOS RS232
Lối ra Lối vào
(b)
Hình :Sắp xếp chân (a ) và sơ đồ cấu trúc (b) của vi mạch MAX232
Đường dẫn TxD dẫn trực tiếp đến chân 11 của vi mạch MAX232, còn bộ
đệm lối ra ở chân 14 được nối trực tiếp với chân 2 của cổng nối tiếp.
Việc sắp xếp chân ở cổng nối tiếp được lựa chọn sao cho có thể dùng 1 cáp
nối trực 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 dùng COM2.
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 với chân 3 của cổng nối tiếp.
Vi mạch MAX232 có 2 bộ đệm và 2 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 MAX232. Còn chân RTS ( chân 10 của 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
+5V Ỉ +10V
--------------------
-+10V Ỉ -10V
180
nối tiếp qua những cầu nối, để khi không dùng đến có thể để hở mạch các cầu này.
Cách truyền dữ liệu đơn giản nhất đến máy tính PC là chỉ dùng 3 đường dẫn : TxD,
RxD và GND ( hoặc mass).
+12V
TTl level RS-232 output
-12 V
TTL level RS-232 input
Hình : Ví dụ mạch lái đường dây dùng MC 1488 và MC1489
Ví dụ kết nối giữa các thiết bị
Ví dụ : Máy tính và modem
Computer (DTE) Modem (DCE)
TxD 2 TxD 2
RxD 3 RxD 3
RTS 4 RTS 4
CTS 5 CTS 5
DSR 6 DSR 6
GND 7 GND 7
DCD 8 DCD 8
DTR 20 DTR 20
RNG 22 RNG 22
Hình : Giao tiếp giữa máy tính và modem
Chuỗi sự kiện truyền thông:
1- Xác nhận DTr- Tôi đang “ON”. Bạn cũng đang “ON” phải không?
2- Đợi DSR – Vâng, tôi đang “ON”
3- Xác nhận RTS- Tôi có thể gửi dữ liệu được không ?
4- Đợi CTS- Vâng , bạn có thể.
5- Truyền (phát)- Bắt đầu truyền dữ liệu
/TxD
UART
/RxD
1488
1489
181
Kết nối PIC 16F877A với RS232
MAX232 DB-9 (RS232 con)
25(RC6) 11 14 2 RxD
26 (RC7) 12 13 3 TxD
GND
9.5.Ứng dụng:
9.5.1. Điều khiển led đơn
Thí dụ 1: Điều khiển led sử dụng port A và port E: xem chương thí dụ chương 4.
Thí dụ 2: chương trình điều khiển 8 led chạy đuổi d ùng PORTB. PIC 16F877A cĩ
Fosc là 4 Mhz.
Logic 0: led sang.
Logic 1: led tắt.
PORTA EQU 5;nghĩa là portA là ơ nhớ 5.
PORTB EQU 6;nghĩa là portB là ơ nhớ 6.
PORTC EQU 7
PORTD EQU 8
PORTE EQU 9
TRISA EQU 85H; TRISA (chọn I/O portA) là ơ nhớ 85H
TRISB EQU 86H; TRISB (chọn I/O portB) là ơ nhớ 86H
TRISC EQU 87H
TRISD EQU 88H
TRISE EQU 89H
COUNT EQU 20; COUNT là ơ nhớ 20H, thanh ghi để đếm sự kiện.
;***************************************
LIST P=16F87A ; chúng ta đang dùng 16F877A
ORG 0 ; địa chỉ bắt đầu là 0
GOTO START; nhảy đến START
;***************************************
;Bit cấu hình
__CONFIG H’3FF2’ ; chọn dao động HS, WDT off, PUT on, bảo vệ mã bị cấm.
;Phần chương trình con
;trì hỗn 500 microgiây
delay500us movlw .166
movwf count
again decfsz count
PIC
16F877A
TX
RX
T1 in T1 out
R1 out R1 in
182
goto again
return
; trì hỗn 10 miligiây
delay movlw .20
movwf count
again1 call delay500us
decfsz count
goto again1
return
;Phần cấu hình.
START BSF STATUS,5; trở lại bank 1
MOVLW B’11111111’; 6 bit của port A là I/P (ngõ vào)
MOVWF TRISA
MOVLW B’00000000’
MOVWF TRISB ; PortB là output (ngõ ra)
MOVLW B’11111111’
MOVWF TRISC; portC l à ngõ vào
MOVLW B’00000000’
MOVWF TRISD; PortD là output (ngõ ra)
MOVLW B’11111111’; 3 bit của port E là I/P (ngõ vào)
MOVWF TRISE
BCF STATUS,5 ;trở lại bank 0
BCF STATUS,6
CLRF PORTA ; xĩa PORTA
CLRF PORTB ;xĩa PORTB
CLRF PORTC ;xĩa PORTC
CLRF PORTD ;xĩa PORTD
CLRF PORTE ;xĩa PORTE
;chương trình chính bắt đầu
loop movLw 0FEh
movwf portb
call delay
movLw 0FDh
movwf portb
call delay
movLw 0FBh
movwf portb
call delay
movLw 0F7h
movwf portb
call delay
movLw 0EFh
movwf portb
call delay
movLw 0DFh
movwf portb
call delay
183
movLw 0BFh
movwf portb
call delay
movLw 7Fh
movwf portb
call delay
goto loop
END
Chú ý: ch ư ơng tr ình con delay500us t ạo tr ễ 500μs, c ịn delay t ạo tr ễ 10 ms.
9.5.2. Điều khiển LCD:
S ơ đ ồ m ạch k ết n ối LCD t ới 16F84 đ ư ợc minh h ọa ở h ình. C ấu h ình n ày l à cho
b ộ đi ều khi ển LCD HD44780 v à c ĩ th ể đ ư ợc d ùng v ới b ất k ì hi ển th ị s ử d
ụng chip n ày.
PIC 16F84 đi ều khi ển hi ển th ị LCD.
Cấu tạo, hoạt động của LCD
GND +5V -5V
D0 D1 D2 D3 D4 D5 D6 D7 RS R/W EN
1 2 3
7 8 9 10 11 12 13 14 4 5 6
184
Bít RS R/W D7 D6 D5 D4 D3 D2 D2 D0 Chức năng
0 0 0 0 0 0 0 0 0 0 Xoá LCD và bộnhớ, con trỏ hiện
tại.
0 0 0 0 0 0 0 0 1 0 Chỉ xóa và con trỏ hiện tại.
0 0 0 0 0 0 0 1 I/O S Tác động màn hình như hiển thị
ký tự được viết.
I/O=1/0: con trỏ R/L, màn hình
L/R.
S=1/0: dịch màn hình/con trỏ.
0 0 0 0 0 0 1 D C B D=1/0: màn hình on/off.
C=1/0: con trỏ on/off.
B=1/0: con trỏ nhấp nháy/không
nhấp nháy.
0 0 0 0 0 1 S/C R/L 0 0 S/C=1/0: màn hình/con trỏ
R/L: dịch một khoảng trống R/L.
0 0 0 0 1 DL N F 0 0 DL=1/0: 8/4 bit trên kí tự.
N=1/0:2/1 dòng kí tự.
F=1/0: 5x10/5x7 chấm(dot)/ký
tự.
0 0 0 1 Địa chỉ kí tự Ghi tới địa chỉa Ram kí tự sau
điều này.
0 0 1 Hiển thị địa chỉ dữ liệu Ghi tới địa chỉa Ram hiển thị ï
sau này.
0 1 Loại ký tự Ghi byte với RAM cuối được
chọn.
1 1 Loại ký tự Đọc byte với RAM cuối được
chọn.
Mạch kết nối:
RB1 nối với RS.
RB2 nối với R/W.
RB3 nối với EN.
RB4—RB7 nối với D4—D7.
185
Hình : Kết nối LCD với vi điều khiển:
Vi ết ch ư ơng tr ình hi ển th ị ch ữ HANOI tr ên LCD d ùng PIC 16F84.
Vi ết ch ư ơng tr ình hi ển th ị ch ữ HANOI tr ên LCD d ùng PIC 16F877A.
9.5.3. Điều khiển led 7 đoạn:
*Trường hợp led 7 đoạn loại catốt chung:
Thiết kế một mạch mà đếm và hiển thị trên led 7 đoạn (loại catốt chung), số lần một
nút nhấn được ấn tới 10. Mã nhị phân để lái led 7 đoạn như sau:
Số PORTB
B7 B6 B5 B4 B3 B2 B1 B0
0 0 1 1 1 0 1 1 1
1 0 1 0 0 0 0 0 1
2 0 0 1 1 1 0 1 1
3 0 1 1 0 1 0 1 1
4 0 1 0 0 1 1 0 1
5 0 1 1 0 1 1 1 0
6 0 1 1 1 1 1 0 0
7 0 1 0 0 0 0 1 1
8 0 1 1 1 1 1 1 1
9 0 1 0 0 1 1 1 1
Xét mạch điện như sau:
Hình: Sơ đồ mạch của điều khiển led 7 đoạn.
Dp g f e d c b a
B7 B3 B2 B4 B5 B6 B0 B1
0 0 1 1 1 1 1 1 số 0 ( mã 77h)
Mở rộng chương trình cho PIC 16F877A.
Xét mạch sau:
186
Hình: Kết nối vi điều khiển với led 7 đoạn trong chế độ multiplex.
Viết chương trình hiển thị số 30 trên hai led.
Mở rộng cho PIC 16F877A.
*Tr ư ờng h ợp led 7 đo ạn lo ại anod chung: D ùng port B k ết n ối 7 thanh, c ịn port A
đi ều khi ển ch ọn led (c ấp đi ện).
N ếu RA0=0 th ì transistor d ẫn l àm Vc=VE=+5V v à anod c ủa led 0 đ ư ợc c ấp đi ện,
portB n ối v ới c ác thanh a,b,..,g,dp.
RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
1 1 1 1 1 1 1 0 FEh (ch ọn led 0)
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
Dp g f e d c b a
1 1 0 0 0 0 0 0 C0H (s ố 0)
+5V
RA0
Led 0
b0 B1 B7
187
Vi ết ch ư ơng tr ình hi ển th ị s ố 0 tr ên led 0.
Vi ết ch ư ơng tr ình hi ển th ị ch ữ HUI tr ên 3 led ( led 0, led 1, led 2).
9.5.4. Điều khiển led ma trận:
Sơ đồ nguyên lí: Phân tích sơ đồ điều khiển ma trận led.
Hình : Sơ đồ nguyên lý led ma trận. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi
xử lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM).
Ma trận gồm 8 hàng và 8 cột(red-col. và green col.). Dùng port C –hàng, port B/Port
D-column red (cột đỏ).
-Nguyên lý một led sáng :PortB quét coat, PortC quét hàng; thí dụ led(1,1) sáng thì
Va>Vk , nghĩa là PortC,0=’0’ và PortB,0=’0’. Khi đó Vk=0,8v; TST PNP Q1 dẫn
làm Va≈VE=5V.
Nếu muốn PortC,0=’0’ và PortB,0=’1’ (cột tích cực mức logic ‘1’) led sáng thì ta
dùng bộ đệm đảo ở cột , còn hàng không đệm đảo.
-Nguyên lý 1 dãy led sáng : Thí dụ chữ L
Phương pháp quét cột (không có đệm đảo) (ACT=’0’) và hiển thị hàng
(ACT=’0’): tuần tự cho cột tích cực mức 0 và xuất dữ liệu hàng .
Thí dụ: chữ T, PortB quét cột, PortC quét hàng.
Quét cột 0: PortB,0=’0’ ;PortC,0ỈPortC,7=’0’ : mã hàng, cột là (00h, Feh).
Quét cột 1: PortB,1=’0’ ;PortC,0ỈPortC,7=’0’ : mã hàng, cột là (00h, FDh).
Quét cột 2: PortB,2=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, FBh).
Quét cột 3: PortB,3=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là ( E7h, F7h).
Quét cột 4: PortB,4=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, EFh).
Quét cột 5: PortB,5=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, DFh).
Quét cột 6: PortB,6=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, BFh).
Quét cột 7: PortB,7=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, 7Fh).
Phương pháp quét cột (có đệm đảo) (ACT=’1’) và hiển thị hàng (ACT=’0’): tuần
tự cho cột tích cực mức 1 và xuất dữ liệu hàng .
THí dụ : Hiện chữ T, dùng PortB quét cột, portC quét hàng
188
Chương trình led matrix:
dùng để tạo chữ, số và các ký hiệu.
9.5.5. Điều khiển nút nhấn, b àn ph ím:
Điều khiển nút nhấn:
Sơ đồ mạch của nút nhấn vi điều khiển.
Viết chương trình điều khiển nút nhấn (dùng PIC 16F84).
-Đợi cho nút nhấn SW1 đĩng.
-Bật led 1.
-Đợi cho SW1 nhả.
-Tắt led 1.
-Lặp lại.
Bài tập: làm lại thí dụ trên sử dụng vi điều khiển PIC 16F877A.
-Qu ét b àn ph ím:
189
K ết n ối b àn ph ím v ới vi đi ều khi ển.
Port B: RB0, RB1, RB2 n ối v ới c ột C1,C2,C3 v à RB3, RB4, Rb5, RB6 n ối v ới h
àng R1,R2,R3,R4.
B àn ph ím g ồm 4 h àng v à 3 c ột.
C ột 1, C1 C ột 2, C2 C ột 3, C3
H àng 1, R1 1 2 3
H àng 2, R2 4 5 6
H àng 3, R3 7 8 9
H àng 4, R4 * 0 #
Vi ết ch ư ơng tr ình (d ùng PIC 16F84) hi ển th ị ph ím nh ấn: khi ph ím 1 đ ư ợc nh ấn
hi ển th ị s ố nh ị ph ân 1 tr ên port A., khi ph ím 2 đ ư ợc nh ấn hi ển th ị s ố nh ị ph ân
2 tr ên port A.
B ài t ập: l àm l ại th í d ụ tr ên d ùng PIC 16F877A.
Khối bàn phím, nut nhấn và công tắc:
Phân tích sơ đồ điều khiển :
-Nút nhấn:
190
Hình : Sơ đồ nguyên lý nut nhấn. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi xử
lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM).
Gi ả s ử portB đi ều khi ển 8 n út nh ấn SW0-SW7.
Khi nh ấn n út SW0, bit nh ận đ ư ợc l à logic 0 : RB0=’0’ .
Khi nh ả nh út nh ấn SW0, bit nh ận đ ư ợc l à logic 1, RB0=’1’.
-Công tắc:
Hình : Sơ đồ nguyên lý công tắc. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi xử
lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM).
-Bàn phím:
191
Hình : Sơ đồ nguyên lý bàn phím. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi xử
lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM).
Bài tập : Chương trình điều khiển bàn phím và hiển thị mã của phím nhấn trên 8 led
đơn dưới dạng số nhị phân.
dùng port B (RB0Ỉ RB3 : hàng, RB4Ỉ RB7: cột) xuất tuần tự cho từng cột bằng 0.
Sau đó kiểm tra mức logic của 4 ngõ nhập để xem có phím nhấn: khi có phím nhấn
thì hàng cột chập nhau, ngõ nhập ở mức logic 0, từ đó ta tính ra mã quét của phím
đó.
Giải thuật điều khiển bàn phím:
Quét phím
Đ Có phím nhấn?
S
I=4 S
Đ
Thoát
i=0
Cột i=’0’
I=i+1
Cờ C=’0’
Mã
phím
192
Mã phím
Hàng 0 Đ
S
Hàng 1 Đ
S
Hàng 2 Đ
S
Hàng 3 Đ
S
End
Chương trình:
Dự án
Dự án 1: điều khiển tốc độ motor DC loại nhỏ
Viết chương trình điều khiển motor DC loại nhỏ:
Sơ đồ khối cho điều khiển tốc độ của động cơ một chiều loại nhỏ sử dụng
vi điều khiển PIC 16F877A: (hình 1)
Yêu cầu là sử dụng vi điều khiển để điều khiển tốc độ động cơ DC theo
chiều thuận và ngược và hiện thực ở hai tốc độ (nhanh và chậm). Cơng tắc
(nút nhấn) được dung tạo ra hai tốc độ và tác động quay ngược.
Sơ đồ khối được minh họa ở hình 1, sử dụng vi điều khiển PIC 16F877A.
Phương pháp điều khiển tốc độ là bằng điều rộng xung (PWM) dung PIC
16F877A. Đặt chân 7 RC1=’0’ (logic 0) và áp dụng PWM vào chân RC2
làm cho động cơ quay thuận. Việc điều khiển quay thuận hay nghịch đạt
được bằng thiết kế cầu của mạch điều khiển động cơ. Nếu nút nhấn khơng
Mp+0
Mp+4
Mp+8
Mp+12
Cờ
C=’0’ Cờ C=’1’
193
được nhấn thì động cơ vẫn ổn định. Giả sử nút nhấn 1 được thiết lập
PWM ở tỉ số 6:4 và nút 2 được thiết lập PWm với tỉ số 9:1.
offon
onon
TT
T
T
TPWM +==
PIC 16F877A
Động cơ
Hình 1
Nút nhấn dùng RA0, RA1, RA2
Tỉ số 6:4 cĩ chu kì tổng T=6+4=10 và 6 chu kì ở mức cao (1), 4 ở mức
thấp (0). Tỉ số 9:1 cĩ T=10, và 9 ở mức 1, và 1 ở mức 0.
Động cơ chạy
Ngược chiều
Tốc độ 1
Tốc độ 2
Ngược chiều
Mạch lái
động cơ
Nút nhấn 1
Nút nhấn 2
Nút nhấn 3
194
Hình 2: Mạch điều khiển cầu sử dụng ngõ vào từ chân RC2 và RC1 để
điều khiển tốc độ động cơ một chiều thứ nhất và hướng quay.
Động cơ ngừng (off) khi RC2 và RC1 ở logic 0, cực C của T1 và T6 ở mức
cao. Vì vậy T2 và T4 sẽ dẫn (on) trong khi T3 và T5 tắt (off)(khơng dẫn)
và khơng cĩ dịng dẫn qua động cơ giữa 5V và đất (GND, mass).
Động cơ quay(on): khi RC1=’0’, cực C của T6 sẽ cao, T4 dẫn và T5 tắt.
Nếu tín hiệu PWM áp dụng vào RC2 thì khi PWM ở logic 1, T1 dẫn, cực
C của T1 ở mức thấp; vì vậy T2 tắt và T3 dẫn. Do đĩ dịng điện dẫn qua
đất thong qua transistor T3, động cơ Dc và qua transistor T4 lên nguồn
+5V.
Động cơ quay ngược(reverse): Nếu RC2=’0’ (logic 0) thì T2 dẫn và T3 tắt.
Nếu tín hiệu PWM áp dụng vào RC1 thì khi PWM là logic cao (1),
transistor T4 tắt và T5 dẫn, tạo ra dịng điện dẫn ngược thong qua T5,
động cơ và T2.
2/Viết chương trình Điều khiển động cơ bước.
Dự án 2: Điều khiển tốc độ của động cơ bước
Yêu cầu là dung vi điều khiển để lái động cơ bước trong cả hai chiều
quay thuận và ngược và để hiện thực sắp xếp hai tốc độ (nhanh và chậm).
Nút nhấn được dùng tạo ra hai tốc độ và đảo chiều quay. Hình vẽ được
minh họa ở hình 3, sử dụng vi điều khiển PIC 16F877A.
PIC 16F877A
Động cơ
Hình 3: Sơ đồ khối của điều khiển động cơ bước sử dụng vi điều khiển PIC
16F877A.
Động cơ chạy RB7
RB6
RB5
RB4
Tốc độ 1
Tốc độ 2
Ngược chiều
Mạch lái
động cơ
Nút nhấn 1
Nút nhấn 2
Nút nhấn 3
195
Mạch điều khiển cho động cơ bước
Hình 4: Sắp xếp mạch phù hợp để cung cấp mạch lái cho động cơ bước.
Trình tự xung điều khiển:
RB7 RB6 RB5 RB4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Nếu đầu A cĩ RB7=logic 1 thì transistor Q1 dẫn, cĩ dịng điện Ic qua cuộn
dây và cuộn dây thành nam châm điện, tương tác với nam châm vĩnh cửu
rotor làm động cơ quay một gĩc. Tương tự cho đầu B, C, D (bit RB6, RB5,
RB4 tương ứng).
3/Mạch báo trộm.
4/ Hột súc sắc điện tử.
5/Bộ timer mạch phản ứng.
IV.Tổng kết bài:
-Tĩm tắt các ý chính trong bài.
-Chuẩn bị bài mới.
V. Câu hỏi và bài tập về nhà:
Chương 9: Thiết kế hệ vi xử lí và hệ phát triển vi điều khiển
Giải mã địa chỉ :
1.Thiết kế mạch giải mã địa chỉ sao cho bộ nhớ
196
12 KB = 1 ROM 2KB + 1 SRAM 4KB + 3x SRAM 2KB
Địa chỉ : 0000h –2FFFh
2. Thiết kế mạch giải mã địa chỉ cho hệ vi xử lý gồm :
1 EPROM 2764, 1 RAM 6264, 2 PPI 8255. Vùng địa chỉ như sau :
EPROM : 0000h-1FFFh, RAM : 2000h-3FFFh
8255(1) : A000h-BFFFh (chỉ dùng A000h-A003h)
8255(2) : E000h-FFFFh (chỉ dùng E000h-E003h)
3.Thiết kế mạch giải mã địa chỉ : 8x 1 KB (8 IC EPROM 1KB)
4. Thiết kế mạch giải mã địa chỉ 8 KB trong đó 2x ROM 2 KB và 4xSRAM 1KB
5. Thiết kế mạch giải mã địa chỉ 8 KB trong đó 1Rom 2Kb + 2xSRAM 1Kb +
1xSRAM 4KB
6. Hãy giải mã địa chỉ sau cho EPROM 2764 có địa chỉ là A000h-BFFFh dùng
cổng logic hay IC 74LS138
8. Thiết kế mạch giải mã địa chỉ cho để sử dụng với các thiết bị 1 : 8000H-
9FFFH và thiết bị 2 : 0000H-1FFFH.
9. Giao tiếp với bộ nhớ RAM HM6264 và ROM 27C256, hai số đầu trong các
thiết bị này chỉ RAM(62) hoặc ROM(27). Các số tiếp theo để chỉ dung lượng
theo K bits, có thể có các bộ nhớ 4, 8, 16, 32 và 64KB ( nghĩa là các số theo sau
62/27 là 32, 64, 128, 256 và 512).
10. Thiết kế mạch giao tiếp bộ nhớ 64KB (từ 8 chip EPROM mỗi chip 8KB) với
8031/8051.
11. Thiết kế mạch giải mã địa chỉ cho bảng bộ nhớ sau :
0000H-BFFFH là tầm địa chỉ của 48 KB RAM (mỗi chip RAM 8KB)
C000H-DFFFH là tầm địa chỉ cổng xuất 1 bit.
E000H-FFFFH là tầm địa chỉ cổng nhập 1 bit
Thiết kế kit vi xử lý :
1.Thiết kế kit xử lý gồm CPU PIC 16F877A, RAM 8KB, EPROM 8KB,
2xIC8255
2.Thiết kế kit vi xử lý CPU PIC 16F877A, RAM 16KB, EPROM 16KB,
2xIC8255
3.Thiết kế kit vi xử lý CPU PIC 16F877A, RAM 64KB, EPROM 64KB,
2xIC8255
4. Kit vi điều khiển tối thiểu và kit mở rộng là gì?
Thiết kế ngoại vi:
1. Trình bày cấu trúc sơ đồ khối vi mạch giao tiếp song song 8255.
2. Lập trình 8255 sao cho port A, port B, port C là xuất, mode 0.
3. So sánh giao tiếp ngoại vi song song và giao tiếp ngoại vi nối tiếp.
4. Truyền dữ liệu nối tiếp là gì? Đồng bộ và bất đồng bộ? Song công và đơn
công?
5. Chuẩn RS232 là gì?
6. Kết nối giữa máy tính và modem.
7. Kết nối giữa PIC 16F877A và RS232
8. Vẽ mạch truyền dữ liệu giữa máy tính và vi điều khiển PIC 16F877A sử dụng
MAX232/MAX233
197
9. Thiết kế mạch giao tiếp PIC 16F877A với led 7 đoạn
10. Thiết kế bàn phím 16 key giao tiếp với PIC 16F877A sử dụng
a)port B của 16F877A
b) port A của 8255
Lập trình điều khiển :
1. Điều khiển led đơn chạy đuổi, sáng dần, tắt dần và hai bìa vào ra.
2. Điều khiển đóng nhả rờle.
3. Điều khiển hiển thị led 7 đoạn.
4. Điều khiển ma trận led hiển thị chữ HANOI, DHCN.
5. Điều khiển bàn phím.
Dự án
1/Dự án 1: điều khiển tốc độ motor DC loại nhỏ
Viết chương trình điều khiển motor DC loại nhỏ:
2/Dự án 2: Điều khiển tốc độ của động cơ bước
Viết chương trình Điều khiển động cơ bước.
3/Mạch báo trộm.
4/ Hột súc sắc điện tử.
5/Bộ timer mạch phản ứng.
198
Tài liệu tham khảo:
1. D.W. Smith, PIC in Practice: A project-based approach, 2nd ed., Elsevier, 2006.
2. Tài liệu PIC của bộ mơn Điện tử Cơng nghiệp, trường ĐHCN Tp. HCM.
3. Datasheet của PIC 16F84A, 16F877A. Website:
4. Website :
Phần mềm MPLAB IDE v6.60 (lập trình hợp ngữ), Phần mềm CCS : PCW C
Compiler IDE v3.227 (gồm PCB, PCM, PCH) (lập trình C).
Phần mềm nạp WinPic800.
Phần mềm PICC Lite, Hi-Tech C for PIC 10/12/16 MCUs: user’s guide.
MPLAB C18 C Compiler for PIC 18 MCUs.
5. Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp. HCM, 2003.
6. Trương Trác, Chip đơn PIC16C84 và ứng dụng của chúng, Tạp chí Điện tử
(Electronic Fan) từ số 117 (tháng 7/2003) đến số 122 (tháng 12/2003).
7. Myke Predko, Programming and customizing the PIC microcontroller, 3rd
edition, Tab Electronics, McGrawHill, 2008(Ebook).
8. Nebojsa, Dragan Andric, PIC microcontrollers.
9. Văn Thế Minh, Kỹ thuật vi xử lý, NXB GD, 1997.
10. Douglass V.Hall, Microprocessors and interfacing: Programming and
Hardware, 2nd ed., Macmillan/McGraw-Hill, 1992.
11. John Morton, The PIC microcontroller: your personal introductory course, 3rd
ed., Newnes, 2005.
12. Nigel Gardner, PICmicro MCU C: An introduction to programming the
microchip PIC in CCS C, Copyright Bluebird Electronics 2002.
Các file đính kèm theo tài liệu này:
- bai_giang_vi_xu_ly_0289.pdf