Lập trình IO_chương 8
Bus nội: giao tiếp với CPU
Bộ chốt dữ liệu DFF: lưu trữ giá trị của chân. Khi “Write to DFF” = 1: ghi dữ liệu vào DFF
Hai bộ đệm 3 trạng thái (tri-state buffers):
- TB1: điều khiển bởi “Read pin”. Khi “Read pin” = 1: đọc giá trị tại chân ngoài
- TB2: điều khiển bởi “Read DFF”. Khi “Read DFF” = 1: đọc giá trị từ DFF nội
Transistor M1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO (IO Port Programming)
9. Tạo trễ
10.Lập trình Timer/Counter
11.Giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
1
8-1. Cổng 1 (Port 1)
Port 1 (chân 1- 8)
Port 1 được ký hiệu P1
Các chân: P1.0 - P1.7
Sử dụng P1 trong các ví dụ sau đây để chỉ ra hoạt động
của chúng
P1 là cổng ra – output (ghi dữ liệu CPU ra các chân
bên ngoài)
P1 là cổng vào – input (đọc dữ liệu từ các chân bên
ngoài vào CPU bus)
2
8-2. Cấu trúc phần cứng của P1.x
Read DFF Vcc
TB2
Tải
Bus nội D Q P1.x
P1.x
Write to DFF Clk Q M1
TB1
Read pin
8051 IC 3
a. Bus nội: giao tiếp với CPU
b. Bộ chốt dữ liệu DFF: lưu trữ giá trị của chân. Khi
“Write to DFF” = 1: ghi dữ liệu vào DFF
c. Hai bộ đệm 3 trạng thái (tri-state buffers):
- TB1: điều khiển bởi “Read pin”. Khi “Read pin” = 1:
đọc giá trị tại chân ngoài
- TB2: điều khiển bởi “Read DFF”. Khi “Read DFF” =
1: đọc giá trị từ DFF nội
d. Transistor M1
4
Bộ đệm 3 trạng thái (Tri-state Buffer)
Output Input
Trở kháng cao
(hở mạch)
Tri-state control
(kích hoạt 0
mức cao)
0 0 1 1
1 1
5
8-3. Ghi ra cổng output
Vd:
MOV A, #55H
BACK: MOV P1, A
ACALL DELAY
CPL A
SJMP BACK
6
8-3-1. Ghi “1” ra chân output P1.x
Read DFF Vcc
TB2
Tải 2. Chân ra là
1. ghi 1 Vcc
1 P1.x
Bus nội D Q
P1.x
0 output 1
Write to DFF Clk Q M1
TB1
Read pin
8051 IC 7
8-3-2. Ghi “0” ra chân output P1.x
Read DFF Vcc
TB2
Tải 2. Chân ra
nối đất
1. ghi 0
0 P1.x
Bus nội D Q
P1.X
1 output 0
Write to DFF Clk Q M1
TB1
Read pin
8051 IC 8
8-4. Đọc từ chân input & bộ chốt
Khi đọc chân, có hai khả năng sau:
Đọc trạng thái của chân input (bên ngoài)
MOV A,Px
JNB P2.1,Label
JB P2.1,Label
Đọc dữ liệu bộ chốt của chân output (bên trong)
ANL P1,A
ORL P1,A
INC P1
Đọc-Sửa đổi-Ghi
9
8-4-1. Đọc từ chân input
Để P1 là input, P1 phải được lập trình bằng cách ghi “1”
vào tất cả các bit của P1
MOV P1,#0FFH ; P1=11111111B
; P1 là input
BACK: MOV A,P1
MOV P2,A
SJMP BACK
tương tự cho P0, P2, P3
10
Đọc “1” tại chân input
Read DFF 2. MOV A,P1
Vcc Chân ngoài=“1”
TB2
1. ghi 1
MOV P1,#0FFH Tải
1 1
Bus nội D Q P1.x
P1.x
0 M1
Write to DFF Clk Q
3. Read pin=1
Read DFF=0
Write to DFF=1
TB1
Read pin
8051 IC
11
Đọc “0” tại chân input
Read DFF Vcc 2. MOV A,P1
1. Ghi 1 TB2 Tải Chân ngoài=“0”
MOV P1,#0FFH
1 0 P1.x
Bus nội D Q
P1.x
Clk Q 0 M1
Write to DFF
3. Read pin=1
Read DFF=0
Write to DFF=1
TB1
Read pin
8051 IC
12
Các lệnh đọc chân input
Lệnh Ví dụ Mô tả
MOV A,PX MOV A,P2 Đọc P2 vào A
JNB PX.Y,.. JNB P2.1,TARGET Nhảy nếu P2.1 = 0
JB PX.Y,.. JB P1.3,TARGET Nhảy nếu P1.3 = 1
Copy trạng thái chân
MOV C,PX.Y MOV C,P2.4
P2.4 vào CY
13
8-4-2. Đọc chân ouput tức đọc bộ chốt
MOV P1,#55H; P1=01010101
ORL P1,#0F0H; P1=11110101
“Read DFF” kích hoạt TB2 và chuyển dữ liệu từ Q của
DFF vào CPU đọc được P1.7 = 0
CPU thực hiện OR dữ liệu này với bit 1 được 1
D của DFF bị thay đổi thành 1
Ghi KQ ra chân P1.7 = 1
14
Đọc bộ chốt
1. Read pin = 0
Read DFF = 1
Write to DFF = 0 (ban đầu P1.7=0)
Read DFF Vcc
TB2 Tải
2. CPU tính (P1.7 OR 1 ) 4. P1.7 = 1
0
1
0 1
Bus nội D Q P1.7
1 P1.7
0
Write to DFF Clk Q M1
3. Ghi KQ vào DFF
Read pin=0
Read DFF=0
Write to DFF=1 TB1
Read pin
8051 IC
15
Đọc-Sửa đổi-Ghi
Đặc điểm này bao gồm 3 hành động trong 1 lệnh đơn:
1. CPU đọc bộ chốt
2. CPU thực hiện tính toán sửa đổi bộ chốt
3. Ghi ra chân
Chú ý: 8 chân của Port làm việc độc lập nhau
16
Các lệnh có đặc điểm Đọc-Sửa đổi-Ghi
Lệnh Ví dụ
ANL ANL P1,A
ORL ORL P1,A
XRL XRL P1,A
JBC PX.Y, TARGET JBC P1.1, TARGET
CPL CPL P1.2
INC INC P1
DEC DEC P1
DJNZ PX, TARGET DJNZ P1,TARGET
MOV PX.Y,C MOV P1.2,C
CLR PX.Y CLR P1.3
SETB PX.Y SETB P1.4
17
Tóm lại
• 1 chân là output thì có thể ghi dữ liệu trực tiếp ra chân đó
• 1 chân là output thì đọc trạng thái của nó nghĩa là đọc bộ
chốt
• 1 chân là input thì phải set chân đó lên “1” trước khi thao
tác với nó
• 1 chân là input thì đọc trạng thái trực tiếp từ chân
18
Câu hỏi gợi nhớ
Cách ghi dữ liệu ra chân?
Cách đọc dữ liệu từ chân?
Đọc giá trị từ chân bên ngoài
•Tại sao phải set chân trước khi tiến hành đọc?
Đọc giá trị từ bộ chốt
•Lệnh như thế nào gọi là có tính chất Đọc-Sửa đổi-Ghi?
19
Bài toán 1: thao tác bit
Bài toán:
1. Theo dõi bit P1.2 cho đến khi nhận được “1”
2. Khi nhận được “1”, ghi 45H ra P0
3. & gửi xung “High-to-Low” ra chân P2.3
20