Xưởng điện tử Bài 7:Giám sát và điều khiển
Thực tập công nhân
Trang 34
BÀI 7
GIÁM SÁT VÀ ĐIỀU KHIỂN THIẾT BỊ
I. MỤC ĐÍCH YÊU CẦU
- Hiện nay, vi xử lý và vi điều khiển đóng vai trò rất quan trọng trong lĩnh vực
điều khiển tự động. Các bộ điều khiển dùng linh kiện rời dần dần được thay thế
bởi các bộ điều khiển dùng vi xử lý. Mặc dù đã được học các vấn đề cơ bản như
quét bàn phím, quét bảng đèn, điều khiển động cơ bước, điều rộng xung,… tuy
nhiên đa số sinh viên đều gặp nhiều khó khăn khi phải phối hợp các lý thuyết cơ
bản trên để được chương trình hoàn chỉnh điều khiển một đối tượng cụ thể. Mục
đích của bài thực hành này giúp sinh viên làm quen với vi điều khiển thông dụng
hiện nay và ứng dụng chúng để điều khiển các đối tượng cụ thể. Bài thực hành tập
trung vào phương pháp thiết kế chương trình sao cho dễ sửa chữa, mở rộng.
- Bài thực hành này yêu cầu sinh viên phải biết trước cấu tạo và lập trình
89C51
II. NỘI DUNG
1. Kiến trúc của vi điều khiển 8951.
2.
IC vi điều khiển 8951 thuộc họ MCS51 có các đặc điểm sau :
+ 4 kbyte Flash.
U1
AT89C51
9
18
19
29
30
31
1
2
3
4
5
6
7
8
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
39
38
37
36
35
34
33
32
RST
XTAL2
XTAL1
PSEN
ALE/PROG
EA/VPP
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
Xưởng điện tử Bài 7:Giám sát và điều khiển
Thực tập công nhân
Trang 35
+ 128 byte RAM
+ 4 port I/0 8 bit
+ Hai bộ định thời 16 bits
+ Giao tiếp nối tiếp
+ 64KB không gian bộ nhớ chương trình ngoài
+ 64 KB không gian bộ nhớ dữ liệu ngoài
a.Port0: là port có 2 chức năng, ở trên chân từ 32 đến 39 của MC 8951.
Trong các thiết kế cỡ nhỏ không dùng bộ nhớ ngoài, P0 được sử dụng như là
những cổng I/O. Còn trong các thiết kế lớn có yêu cầu một số lượng đáng kể bộ
nhớ ngoài thì P0 trở thành các đường truyền dữ liệu và 8 bit thấp của bus địa chỉ.
b. Port1: là một port I/O chuyên dụng, trên các chân 1-8 của MC8951.
Chúng được sử dụng với một múc đích duy nhất là giao tiếp với các thiết bị ngoài
khi cần thiết.
c. Port2: là một cổng có công dụng kép trên các chân 21 – 28 của MC 8951.
Ngoài chức năng I/O, các chân này dùng làm 8 bit cao của bus địa chỉ cho những
mô hình thiết kế có bộ nhớ chương trình ROM ngoài hoặc bộ nhớ dữ liệu RAM có
dung lượng lớn hơn 256 byte.
d. Port3: là một cổng có công dụng kép trên các chân 10 – 17 của MC 8951.
Ngoài chức năng là cổng I/O, những chân này kiêm luôn nhiều chức năng khác
nữa liên quan đến nhiều tính năng đặc biệt của MC 8951, được mô tả trong bảng
sau:
Bit Tên Chức năng chuyển đổi
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
RxD
TxD
0INT
1INT
T0
T1
ÖWR
RD
Ngõ vào dữ liệu nối tiếp.
Ngõ xuất dữ liệu nối tiếp.
Ngắt ngoài 0.
Ngắt ngoài 1.
Ngõ vào TIMER 0.
Ngõ vào của TIMER 1.
Điều khiển ghi dữ liệu lên bộ nhớ ngoài.
Điều khiển đọc bộ nhớ dữ liệu ngoài.
Bảng 2.1 : Chức năng của các chân trên port3
e. PSEN (Program Store Enable): 8951 có 4 tín hiệu điều khiển, PSEN là
tín hiệu ra trên chân 29. Nó là tín hiệu điều khiển để cho phép truy xuất bộ nhớ
chương trình mở rộng và thường được nối đến chân OE (Output Enable) của một
EPROM để cho phép đọc các byte mã lệnh của chương trình. Tín hiệu PSEN ở
mức thấp trong suốt phạm vi quá trình của một lệnh. Các mã nhị phân của
chương trình được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của
8951 để giải mã lệnh. Khi thi hành chương trình trong ROM nội PSEN sẽ ở mức
cao.
Xưởng điện tử Bài 7:Giám sát và điều khiển
Thực tập công nhân
Trang 36
f. ALE (Address Latch Enable ): Tín hiệu ra ALE trên chân 30 tương hợp
với các thiết bị làm việc với các xử lý 8585, 8088. 8951 dùng ALE để giải đa hợp
bus địa chỉ và dữ liệu, khi port 0 được dùng làm bus địa chỉ/dữ liệu đa hợp: vừa là
bus dữ liệu vừa là byte thấp của địa chỉ 16 bit . ALE là tín hiệu để chốt địa chỉ vào
một thanh ghi bên ngoài trong nữa đầu của chu kỳ bộ nhớ. Sau đó, các đường Port
0 dùng để xuất hoặc nhập dữ liệu trong nữa sau chu kỳ của chu kỳ bộ nhớ.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và
có thể được dùng là nguồn xung nhịp cho các hệ thống. Nếu xung trên 8951 là
12MHz thì ALE có tần số 2MHz. Chân này cũng được làm ngõ vào cho xung lập
trình cho EPROM trong 8951.
g. EA (External Access): Tín hiệu vào EA trên chân 31 thường được nối lên
mức cao (+5V) hoặc mức thấp (GND). Nếu ở mức cao, 8951 thi hành chương
trình từ ROM nội trong khoảng địa chỉ thấp (4K). Nếu ở mức thấp, chương trình
chỉ được thi hành từ bộ nhớ mở rộng. Người ta còn dùng chân EA làm chân cấp
điện áp 21V khi lập trình cho EPROM trong 8951.
h. RST (Reset): Ngõ vào RST trên chân 9 là ngõ reset của 8951. Khi tín hiệu
này được đưa lên mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong 8951
được đưa vào những giá trị thích hợp để khởi động hệ thống.
i.OSC: 8951 có một bộ dao động trên chip, nó thường được nối với thạch
anh giữa hai chân 18 và 19. Tần số thạch anh thông thường là 12MHz.
j. POWER: 8951 vận hành với nguồn đơn +5V ( 20%. Vcc được nối vào
chân 40 và Vss (GND) được nối vào chân 20.
2. Tìm hiểu về tập lệnh của 89C51.
Một số lệnh thường gặp.
ACALL addr11 : Gọi chương trình con(gọi đến địa chỉ tuyệt đối).
Mô tả: ACALL gọi không điều kiện một chương trình con đặt tại địa chỉ được chỉ
ra trong lệnh. Lệnh này tăng nội dung của PC bởi 2 để PC chứa địa chỉ của lệnh kế
lệnh ACALL, sau đó cất nội dung 16 bit của PC vào stack(Byte thấp cất trước) và
tăng con trỏ stack SP bởi 2. Do vậy chương trình con được gọi phải được bắt đầu
trong cùng khối 2K của bộ nhớ chương trình với Byte đầu tiên của lệnh theo sau
lệnh ACALL. Các cờ khong bị ảnh hưởng.
LCALL addr16 : Gọi chương trình con. Chương trình con được gọi phải được bắt
đầu trong cùng khối 64K của bộ nhớ chương trình với Byte đầu tiên của lệnh theo
sau lệnh LCALL. Các cờ khong bị ảnh hưởng.
ADD A,<src-byte>: Cộng
Mô tả: ADD Cộng nội dung của một byte ở địa chỉ được chỉ ra trong lệnh với nội
dung thanh chứa và đặt kết quả vào thanh chứa.
ADD có 4 kiểu định địa chỉ cho toán hạn nguồn: thanh ghi, trực tiếp, thanh ghi
gián tiếp hoặc tức thời.
AJMP addr11: Nhảy đến địa chỉ tuyệt đối. Đích nhảy đến phải trong cùng khối
2K của bộ nhớ chương trình với byte đầu tiên của lệnh theo sau lệnh AJMP.
Xưởng điện tử Bài 7:Giám sát và điều khiển
Thực tập công nhân
Trang 37
ANL <dest-byte>,<src-byte>: thực hiện phép toán AND từng bít giữa hai toán
hạng được chỉ ra trong lệnh và lưu kết quả vào toán hạn đích. Các cờ không bị ảnh
hưởng.
CJNE <dest-byte>,<src-byte>,rel : So sánh và nhảy nếu không bằng. Cờ nhớ
được set bằng 1 nếu giá trị nguyên không dấu của toán hạn trước nhỏ hơn giá trị
nguyên không dấu của toán hạn sau. Ngược lại cờ nhớ bị xoá.
CLR bit: Xoá bít.
CPL bit: Lấy bù bit.
DEC byte: Byte chỉ ra trong lệnh được giảm đi 1, cờ nhớ không bị anhư hưởng.
DIV AB: chia số nguyên không dấu 8 bit chứa trong thanh chứa cho số nguyên
không dấu 8 bít chứa trong thanh ghi B. Thương số chứa trong thanh chứa A còn
dư số chứa trong thanh ghi B.
DJNZ <byte>,<rel-addr): giảm byte chỉ ra trong toán hạn đầu trong lệnh và rẽ
nhánh đến địa chỉ được chỉ ra bưởi toán hạn thứ hai trong lệnh nếu kết quả sau khi
giảm khác 0.
INC byte: Byte chỉ ra trong lệnh được tăng bởi 1, cờ nhớ không bị anhư hưởng.
JB bit,ret : Nhảy nếu bít được set bằng 1.
MOV dest-byte>,<src-byte> : Di chuyển nội dung của toán hạng nguồn đến toán
hạn đích.
MUL AB: Nhân các số nguyên không dấu 8 bit chứa trong thanh chứa A và trong
thanh ghi B. Byte thấp của tích số 16 bit được cất trong thanh chứa cong byte cao
cất trong thanh ghi B.
RL A: 8 bít trong thanh chứa A được quay trái 1 bit.
SETB <bit>: Set bit bằng 1.
Một số ví dụ.
Chương trình hiển thị giây và phút dùng bộ định thời.
#include <Rc51Regs.inc>
GIAY EQU 31H ; Địa chỉ của RAM lưu giá trị của giây
PHUT EQU 32H ; Địa chỉ của RAM lưu giá trị của phút
ORG 00H
LJMP MAIN
ORG 001BH ;Vector của bộ định thời 1
LJMP T0ISR
ORG 0030H
MAIN: MOV R1,#0
MOV GIAY,#0
MOV PHUT,#0
LAP: MOV A,GIAY
CJNE A,#60,HT
INC PHUT
MOV GIAY,#00H
MOV A,PHUT
CJNE A,#60,HT
MOV PHUT,#00H
Xưởng điện tử Bài 7:Giám sát và điều khiển
Thực tập công nhân
Trang 38
HT: MOV A,GIAY
ACALL HTGIAY
MOV A,PHUT
ACALL HTPHUT
MOV TMOD,#12H
MOV IE,#8AH ;Cho phép ngắt do các bộ định thời
SETB TF1 ; Buột ngắt do bộ định thời 1
CJNE R1,#100,LAP
MOV R1,#0
INC GIAY
LJMP LAP
; Chương trình ngắt
T0ISR: CLR TR1
MOV TH1,#HIGH(-10000)
MOV TL1,#LOW(-10000)
SETB TR1
INC R1
RETI
; Chương trình con hiển thị giây
HTGIAY: MOV B,#10
DIV AB
ADD A,#10H
MOV P2,A
ACALL DELAY
MOV A,B
ADD A,#00
MOV P2,A
ACALL DELAY
RET
; Chương trình con hiển thị phút
HTPHUT: MOV B,#10
DIV AB
ADD A,#30H
MOV P2,A
ACALL DELAY
MOV A,B
ADD A,#20H
MOV P2,A
ACALL DELAY
RET
DELAY: MOV R0,#200
DJNZ R0,$
RET
END
Chương trình sử dụng ngắt ngoài 0.
Xưởng điện tử Bài 7:Giám sát và điều khiển
Thực tập công nhân
Trang 39
#include <Rc51Regs.inc>
ORG 00H
LJMP MAIN
LJMP EXOISR ;Địa chỉ vector EXT 0
ORG 001BH
LJMP T0ISR
ORG 0030
MAIN:
SETB IT0 ; Tác động cạnh âm
MOV TMOD,#11H
MOV IE,#81H ; Chỉ cho phép EX0
LJMP $
EXOISR:
SETB TF1 ; Buột ngắt do bộ định thời 1
SETB ET0
SETB ET1 ; Cho phép các ngắt do bộ định thời
RETI
T0ISR: CLR TR1
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
SETB TR1
CPL P0.1 ; Tạo xung ra
RETI
END
3. Điều khiển công suất.
- Điều khiển tải DC:
R1
Q2
R0
Vcc
p1.0
Rtai
Đây là sơ đồ điều khiển khá đơn giản cả về phần cứng lẫn phần mềm, tuy
nhiên sơ đồ thường chỉ áp dụng để điều khiển các tải DC công suất nhỏ.
dm
on
T
dmhd
I
T
T
dtI
T
I
on
==
∫
0
2
1
T
on
: Thời gian dòng điện chạy qua tải
T
OFF
: Thời gian dòng điện không chạy qua tải
T = T
on
+ T
OFF