Tải bản đầy đủ (.doc) (26 trang)

Tiểu luận thiết kế dùng chip vi điều khiển 8051 áp dụng vào đo nhiệt độ của lò

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (316.27 KB, 26 trang )

Thiết kế hệ vi xử lý 8 bit
I. Yêu cầu
Phần cứng
1. Bộ vi xử lý
2. Bộ nhớ chơng trình ROM :8KB từ địa
chỉ 0000H
3. Bộ nhớ dữ liệu RAM : 8KB ( địa chỉ
tuỳ chọn )
4. Cổng vào tơng tự 8 kênh nhận tín
hiệu đo nhiệt độ từ 0V(5V tơng ứng
với nhiệt độ 0((100(C, các cổng vào
ra số liệu và mạch điều khiển.
Phần mềm
1. Tín hiệu cho phép chạy và dừng chơng trình. Tín hiệu dừng khẩn cấp
2. Đọc tín hiệu đo nhiệt độ từ 8 kênh
và lu trữ vào vùng nhớ RAM .
3. Sau mỗi lần đọc tính nhiệt độ
trung bình cộng của 8 kênh và gửi ra
cổng hiển thị bằng đèn LED.
4. So sánh nhiệt độ của từng kênh
với giá trị nhiệt độ trung bình. Nếu
kết quả lớn hơn hoặc nhỏ hơn giá trị
cho phép cho trớc thì gửi tín hiệu báo
động cao hoặc thấp tơng ứng với
kênh đó .Giá trị cho phép này đặt
trong một ô nhớ của RAM
III.


5. Chơng trình dừng lại và báo động
bằng còi khi xảy ra một trong các


trờng hợp sau:
Có ít nhất 4 kênh đo vợt quá
hoặc nhỏ hơn giới hạn
cho phép
so với giá trị trung bình
Giá trị nhiệt độ trung bình lớn
hơn hoặc nhỏ hơn giá trị giới hạn
MAX, MIN tơng ứng. Các giá trị giới
hạn MAX, MIN đợc đặt trong 2 ô nhớ
của RAM
II. Các bớc tiến hành
1. Chọn bộ vi xử lý (8085 hoặc 8051,).
Thiết kế sơ bộ sơ đồ khối
2. Thiết kế bộ nhớ, cổng vào /ra bằng
mạch logic,mạch giải mã, mạch
chốt,ADC,Xác định địa chỉ cho các
tín hiệu vào /ra. Lập bản đồ bộ nhớ
3. Chọn linh kiện .Nghiên cứu và
chọn chế độ làm việc của linh
kiện phù hợp với yêu cầu (logic và
vật lý) cho thiết kế ở bớc 2.
4. Thiết kế sơ đồ chi tiết cho hệ
5. Xây dựng phần mềm trên cơ sở sơ
đồ đã thiết ở bớc 4:
Xây dựng lu đồ chơng trình
Xây dựng cấu chúc chơng
trình
Soạn thảo chơng trình bằng mã
ngữ của bộ vi xử lý đã chọn
I.


II.

2


LI M U
Vào năm 1971 tập doàn INTEL đã cho ra đời họ vi xử lý đầu tiên 4004 là
vi xử lý 4 bit .Và từ đó đến nay nó liên tục phát triển và nâng cao từ họ vi xử
lý 4 bit đầu tiên đến nay là vi xủ lý 32 bit và 64 bit với tần số xung nhịp
f=100ữ200 MHz , ngày nay chúng đợc ứng dụng rộng rãi vào trong cuộc sống
và đặc biệt là trong các ngành công nghiệp
Bên cạnh họ vi xử lý, vào năm 1976 INTEL giới thiệu bộ vi điều khiển
(microcontroler) 8748, một chip tơng tự nh các bộ vi xử lý và là chip đầu tiên
trong họ vi điều khiển MCS 48, bao gồm 1 CPU , 1Kbyte EPROM, 64 byte
RAM, 27 chân xuất nhập và một bộ định thời 8 bit
Độ phức tạp , kích thớc và khả năng của bộ vi điều khiển đợc tăng lên một bậc
quan trọng vào năm 1980 khi INTEL công bố chip 8051, bộ vi điều khiển đầu
tiên của họ vi điều khiển MCS 51. Chip này chứa trên 60000 transistor, bao
gồm 4 K byte ROM, 128 byte RAM , 32 dờng xuất nhập, 1 port và 2 bộ định
thời 16 bit đây là một số lợng mạch đáng chú ý trong một IC đơn chip. Các
thành viên mới đựơc thêm vào họ MCS 51 và các biến thể ngày nay gần nh
gấp đôi các đặc trng này
Dới sự phát triển mạnh mẽ đó của công nghệ vi xử lý thì việc tìm hiểu nghiên
cứu để nắm bắt công nghệ, tìm cách ứng dụng vào thực tế là một công việc
quan trọng của sinh vên,những ngời kỹ s tơng lai
Với kiến thức về vi xử lý đợc học trong hai kỳ, có sự tham khảo trong sách
vở, và đặc biệt đợc sự giúp đỡ chỉ bảo tận tình của thày giáo em đã hoàn thành
nhiệm vụ thiết kế dùng chip vi điều khiển 8051 áp dụng vào đo nhiệt độ của lò.
Thông qua bản thiết kế này em đã đợc áp dụng những kiến thức đã học vào

công việc thiết kế phần cứng và viết phần mềm cho hệ vi điều khiển.
Tuy vậy, đây mới chỉ là phần lý thuyết , em rất muốn thiết kế mạchthật để
thấy đợc phần thiếu sót trong khi thiết kế và lập trình.Nhng do thời gian có hạn
cũng nh kiến thức còn hạn chế nên không thể tránh khỏi những thiếu xót
Em mong thày cô chỉ bảo và giúp đỡ em

I.

II.

3


Thiết kế hệ vi điều khiển 8051
I. Giới thiệu vi điều khiển 8051.
Là vi xử lý đơn chíp 8 bit đợc sử dụng cho những ứng dụng công nghiệp, đợc
hãng intel công bố vào năm 1980.
8051 là bộ vi điều khiển đầu tiên của họ vi điều khiển
MCS 51, với những đặc điểm sau:
Độ dài từ dữ liệu là 8 bit
Rất tiện dùng cho hệ điều khiển
Tập lệnh rất phong phú với 256 lệnh
ROM bên trong là 4 K
RAM bên ngoài là 128 byte
Có 32 đờng vào ra theo hai hớng qua 4port xuất nhập
( I/O port) 8 bit, và có thể địa chỉ riêng từng đờng
Có 2 bộ định thời 16 bit
Không gian địa chỉ của ROM & RAM có thẻ đến 64K
Có 6 nguồn ngắt ,5 vector ngắt với 2 mức u tiên
Đã có bộ giao động bên trong với tần số 12Mhz

Có 2 thanh chứa A & B mỗi thanh 8 bit, trong đó B thờng dùng cho phép
chia

Sơ đồ khối của chip 8051

Đ

I.

II.

4


Tổ chức bộ nhớ trong 8051:
8051 có 2 khoảng địa chỉ độc lập cho bộ nhớ chơng trình( ROM ) và bộ
nhớ dữ liệu( RAM ) . Sự độc lập của bộ nhớ chơng trình và bộ nhớ dữ liệu cho
phép bộ nhớ dữ liệu đợc xử lí bởi địa chỉ 8 bit . Nó có thể đợc lu trữ và thao tác
nhanh hơn bởi CPU 8 bit . Tuy nhiên địa chỉ 16 bit cũng có thể đợc phát ra
thông qua thanh ghi DPTR.
Bộ nhớ chơng trình (ROM,EPROM) là bộ nhớ chỉ có đọc . Bộ nhớ này
có thể lên tới 64Kbyte . Trong 8051 4Kbyte thấp nhất của bộ nhớ chơng trình
là trên chip.Bộ nhớ ngoài có thể đọc đợc nhờ tín hiệu chốt của chân PSEN.
Bộ nhớ dữ liệu RAM độc lập với bộ nhớ chơng trình 128 byte thấp nhất
của bộ nhớ dữ liệu trên chip và nó có thể truy nhập đến 64Kbyte ngoài CPU sẽ
phát ra các tín hiệu RD và WR cần thiết trong suốt quá trình xử lí bộ nhớ dữ
liệu .


a/ Bộ nhớ chơng trình( ROM ) :

4 Kbyte ROM trong có thể đợc chọn bởi nối chân EA vào mức 0 (nếu bằng 1
thì ROM ngoài ) . Khi truy nhập bộ nhớ ngoài sử dụng cổng P0 và P2 làm 16 đờng vào ra . Trong đó P0 làm chức năng Bus địa chỉ và Bus dữ liệu, chân ALE
xuất hiện tín hiệu chốt địa chỉ( byte thấp của dịa chỉ 16 bit)
b/ Bộ nhớ dữ liệu :
Bộ nhớ dữ liệu đợc chia thành 4 vùng :
FF

SFR
80
7F

RAM thường đa mụcđích

30
2F

Bit addressable
20
1F
18
17
10
0F
08
07
00

Bank 3
Bank 2
Bank 31

Bank 0

- Vùng 1 :Địa chỉ từ 00H đến 1FH là phần thấp nhất đợc chia thành 4
khối của 8 thanh ghi . Các lệnh của chơng trình sẽ gọi các thanh ghi
này từ R0 đến R7 . Hai bit trong thanh ghi trạng thái (RS0,RS1 ) sẽ

I.

II.

5


lựa chọn khối 4 này .
- Vùng 2: Địa chỉ từ 20H đến 2FH bao gồm 16 byte là vùng ô nhớ địa
chỉ theo bit .
- Vùng 3: Địa chỉ từ 30H đến 7FH làm chức năng thông thờng của bộ
nhớ RAM
- Vùng các thanh ghi chức năng đặc biệt (SFR).Có 21 thanh ghi chức
năng đặc biệt chiếm phần trên của RAM nội từ địa chỉ 80H đến FFH.
Sơ đồ chân của 8051

Address Bus
8051
ROM

RAM

II. Sơ đồ khối của hệ thống:


I.

II.

I/O

Ngoai vi

Data Bus

6

Control Bus


a. Bộ vi điều khiển 8051:Có chức năng điều khiển hoạt động của toàn bộ hệ
thống
b. Bộ nhớ chơng trình ROM ( Read Only Memory):
Chỉ có thể đọc số liệu viết trong ROM, không thể viết vào trong quá trình
lập trình, khi nguồn nuôi mất thì số liệu trong ROM vẫn còn.
ROM đợc dùng để chứa chơng trình điều hành hoặc các chơng trình ứng
dụng users program
c. Bộ nhớ dữ liệu RAM ( Random Access Memory):
Nghĩa là tại thời điểm bất kỳ ngời dùng cũng có thể viết số liệu vào trong
RAM hoặc đọc từ RAM ra bằng lệnh W/R
Khi nguồn nuôi mất thì số liệu trong RAM cũng mất, nh vậy RAM đợc
dùng để chứa số liệu trao đổi giữa hệ vi điều khiển và thiết bị ngoại vi
d. Các cổng vào ra I/O:
Các vi mạch vào ra để làm cổng vào ra số liệu, các vi mạch này sẽ trao đổi
trực tiếp số liệu với ngoại vi ( các cảm biến, công tắc tơ, )

Các thiết bị ngoại vi trao đổi tín hiệu với vi xử lý trực tiếp qua I/O
e. Các thiết bị ngoại vi:
Là các sensor đo nhiệt độ để cảm biến nhiệt độ của đối tợng cần đo, thông
qua bộ biến đổi A/D biến các đại lợng tơng tự thành thông tin về nhiệt độ đa
vào cổng vào ra I/O để đa vào hệ vi điều khiển xử lý.Bộ hiển thị đèn LED để
hiển thị nhiệt độ đo

Quan hệ về mặt trao đổi thông tin giữa các khối chức năng:
Từ ngoại vi , các bộ sensor cảm biến nhiệt độ đầu vào của nó là
I.

II.

7


nhiệt độ của đối tợng đo, đầu ra là giá trị điện áp biến thiên từ
0Vữ5V, giá trị biến thiên điện áp này đuợc đa đến bộ biến đổi tơng tự số
A/D
Đầu ra của bộ A/D là các tín hiệu số (số hexa) mang thông tin về
nhiệt độ.
Thông tin này đa đến cổng vào ra I/O , thông qua Data Bus vào vi xử

Vi xử lý định địa chỉ và cất số liệu vào bộ nhớ dữ liệu RAM
III. Thiết kế bộ nhớ, cổng vào ra, mạch giải mã, mạch chốt,
ADC
1. Thiết kế bộ nhớ:
Hầu hết các bộ vi sử lý(CPU) đều có không gian nhớ chung cho dữ
liệu và chơng trình vì chơng trình thờng đợc lu trữ trên đĩa
và đợc nạp vào RAM để thực thi. Vì vậy cả hai dữ liệu và chơng

trình đều đợc lu trú trong RAM.
Các chíp vi điều khiển thờng đợc dùng làm thành phần trung tâm trong
các thiết kế hớng điều khiển, trong đó bộ nhớ có dung lợng giới hạn,
không có ổ đĩa và hệ điều hành. Chơng trình điều khiển phải thờng trú
trong ROM
Do vậy 8051 có không gian nhớ riêng cho chơng trình và dữ liệu. Cả
hai bộ nhớ này đều đặt bên trong chip
PROGRAM MEMORY

DATA MEMORY

FFFFH
EXTERNAl

EXTERNAL

INTERNAL
FFH

EA=1
INTER
NAL

EA=0
EXTER
NAL

00

0000


< 0000>

RD

PSEN

Bộ nhớ ngoài

I.

II.

8

WR


Bộ nhớ chơng trình EPROM
Trong vi điều khiển bộ nhớ ch- CS 0 ơng trình của nó có 4K byte ROM
trong,và bộ nhớ ngoài EPROM2732 có
dung lợng 4K. Đây là bộ nhớ lập
trình xoá bằng tia cực tím, nó có tốc độ truy nhập rất nhanh, nó có 12 đờng
chọn địa chỉ và có 8 đờng ra dữ liệu. EPROM chỉ đợc hoạt động khi chân #OE
ở mức tích cực thấp, nó đợc vi điêù khiển chọn làm việc khi chân #CE cũng đợc
tích cực thấp. EPROM đợc nuôi với mức điện áp 5V, điện áp này đợc đa vào bộ
nhớ thông qua chân Vpp . Địa chỉ của EPROM trong hệ thống là
0000ữ0FFFH.Địa chỉ này đợc chọn bởi vi mạch giải mã địa chỉ 74138, với đầu
chọn chip là
Sơ đồ chân của EPROM


2732

Bộ nhớ ngoài RAM
Bên cạnh bộ nhớ chơng trình
CS1 EPROM ta còn sử dụng bộ nhớ ngoài
RAM có dung lợng 8K byte, có 13
đờng địa chỉ 8 đờng dữ liệu. Nó có
địa chỉ 2000ữ3FFF, địa chỉ này đợc chọn ra trong vùng địa chỉ của vi điều
khiển bởi chân #. Ngoài ra còn có đờng chọn vỏ khác là CS2 đợc nối tích cực
và có hai đờngtín hiệu yêu cầu đọc viết là #OE, #WE .
Sơ đồ chân của RAM

I.

II.

9


2. Các mạch phụ trợ
a. Mạch giải mã 74LS138
Khi muốn có nhiều đầu ra chọn vỏ từ bộ giải mã thì không nên dùng mạch
NAND đơn giản nữa mà nên dùng mạch giải mã đã chế tạo chuẩn.
Nó bao gồm 14 chân, trong đó:
ữ là các đờng ra địa chỉ, tích cực ở CS 70 mức thấp,có thể dùng chọn cho bộ
nhớ 8 KB
A,B,C là 3 đờng địa chỉ vào , tích cực cao.
E1 ,E2 là các đầu vào cho phép làm viêc , tích cực ở mức thấp.
E3 là các đầu vào cho phép làm viêc , tích cực ở mức cao.

Ta có bảng chân lý sau:
C B A E1

E2

E3 CS 0

CS1

CS 2

CS 3

CS 4

X
X
X
0
0
0
0
1
1
1
1

X
1
X

0
0
0
0
0
0
0
0

X
X
0
1
1
1
1
1
1
1
1

1
1
1
1
0
1
1
1
1

1
1

1
1
1
1
1
0
1
1
1
1
1

1
1
1
1
1
1
0
1
1
1
1

1
1
1

1
1
1
1
0
1
1
1

X
X
X
0
0
1
1
0
0
1
1

X
X
X
0
1
0
1
0
1

0
1

1
X
X
0
0
0
0
0
0
0
0

1
1
1
0
1
1
1
1
1
1
1

U1
74LS138
74LS138

A2
A1
A0

Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0

E3
E2
E1

CS 5

CS 6

CS 7

1
1
1
1
1
1
1`

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
0
1
1
1
0
Sơ đồ chân vi mạch:
b. Mạch
chốt
74HC373


Khi port 0 đợc sử dụng làm bus
địa chỉ/dữ liệu đa hợp. Chân ALE
của VXL xuất hiện tín hiệu dể chốt địa chỉ, tín hiệu này đợc nối vào đầu vào
chốt của vi mạch 74HC373 và tín hiệu địa chỉ đợc chốt ở đây trong 1/2 chu kỳ
đầu của bộ nhớ.Chân port 0 sẽ xuất nhập dữ liệu hợp lệ trong suốt 1/2 chu kỳ
còn lại
c. Bộ chuyển đổi tơng tự số ADC 0809
Bộ ADC 0809 là một thiết bị CMOS tích hợp với một bộ chuyển đổi tơng
sang số 8 bit, bộ chọn kênh và mật bộ logic điều khiển tơng thích. Bộ chuyển
đổi tơng tự số này sử dụng phơng pháp chuyển đổi xấp xỉ. Bộ chọn kênh có thể
chọn ra kênh cần chuyển đổi bằng 3 chân chọn địa chỉ.
I.

II.

10


Thiết bị này loại trừ khả năng cần thiết điều chỉnh điểm zero bên ngoài và khả
năng điều chỉnh tỉ số làm cho ADC đễ dàng giao tiếp với các bộ vi xử lý.
- ý nghĩa các chân:

- IN0 IN7: 8 đầu vào tơng tự
- A,B,C : các tín hiệu chọn kênh
- Các chân 2.1-2.7: là các đầu ra số
- ALE cho phép chốt số liệu đầu vào
- Start: xung cho phép bắt đầu chuyển đổi
- Clk:đầu vào xung clock
- Ref(+): điện áp vào chuẩn +5v

- Ref(-): điện áp vào chuẩn 0
- Vcc: nguồn cung cấp
Các đặc điểm của ADC 0809
- Độ phân giải 8 bít
- Tổng sai số cha chỉnh 1LSB
- Thời gian chuyển đổi 100 às
- Nguồn cung cấp 5 V
- Điện áp vào 0-5V
- Tần số xung clock 10kHz 1028 kHz
- Dễ dàng giao tiếp với vi xử lý hoặc dùng riêng
- Không cần điều chỉnh zero hoặc thang đo
Nguyên lý hoạt động:

Khi có tín hiệu ALE và Start ở mức tích cực nó sẽ chốt tín hiệu ở đầu
vào của kênh đợc chọn bởi 3 chân A,B,C và bắt đầu chuyển đổi trong khoảng
thời gian 100(s. Sau đó nó phát ra xung EOC báo đã chuyển đổi xong.
Khi có tín hiệu Enable ( OE ) ở mức tích cực sẽ cho phép các thiết bị có

I.

II.

11


đọc số liệu ở đầu ra.

Việc lựa chọn các kênh tuân theo quy luật sau:
C
0

0
0
0
1
1
1
1
X

B
0
0
1
1
0
0
1
1
X

A
0
1
0
1
0
1
0
1
X


Kênh Vào
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
(?)

d. Bộ phận hiển thị:
Ta dùng đèn LEG 7 thanh, đèn này đợc nối với đầu ra của mạch giải mã
BCD/7 seg chọn loại vi mạch 74LS47
Sơ đồ chân vi mạch nh hình sau:
U1
74LS47
A3
A2
A1
A0

g
f
e
d
c
b
a


test
RBI RBO

U1
e. Cổng mạch vào/ ra dùng vi
74LS373
mạch logic một chiều
OE
E
Cổng ra:cổng ra đơn giản có thể là mạch lật D để
D7
Q7
D6
Q6
chốt lại 1 bit
D5
Q5
Ta dùng cổng ra 8 bit 74LS373 là tổ hợp 8 mạch D
D4
Q4
D3
Q3
nh trên
D2
Q2
Sơ đồ chân vi mạch nh sau:
D1
Q1
D0

Q0
D0ữD7 là các tín hiệu đầu vào dữ liệu
Q0ữQ7 là các tín hịu dữ liệu đợc chốt ở đầu ra.
Khi có tín hiệu tích cực thấp vào đầu vào OE thì tín hiệu đợc chốt ở đầu ra Q.
E là chân cho phép vi mạch hoạt động . Ta nối chân này xuống đất.

Cổng vào cũng dùng vi vạch vào một chiều 74LS244 có sơ đồ chân nh
I.

II.

12


sau
Nguyên lý hoạt động của vi mạch tơng tự nh trên

U1
74LS244

OEa
Ia3
Ia2
Ia1
Ia0
OEb
Ib3
Ib2
Ib1
Ib0


f. Mạch chốt 7475:
Đầu vào số liệu D0ữD3 đợc chốt lại ở đầu ra Q0ữQ3 khi có
tín hiệu chốt đa vào đầu vào E01.Tín hiệu đầu ra này đợc
giữ lại đến khi có tín hiệu mới đợc chốt tiếp

Ya3
Ya2
Ya1
Ya0
Yb3
Yb2
Yb1
Yb0

U2
74LS75

D3
D2
E23
D1
D0
E01

__
Q3
Q3
__
Q2

Q2
__
Q1
Q1
__
Q0
Q0

IV. Thiết kế phần mềm
1. Lập bản đồ bộ nhớ
Theo trên ta đã phân vùng bộ nhớ cho bộ nhớ dữ liệu và chơng trình. Ta có bản đồ bộ nhớ nh sau:
7475

FFFF
H

74LS373
74LS244
ADC0809
I.

II.
13
RAM 8K

6000
H
5FFF
H
4000



ROM 8K

3FFF
H
2000h
1FFF
H
0000
H

Vi mạch ROM , RAM 8 K nên dùng 13đờng địa chỉ từ A0ữA12
Từ A13ữA15 dùng để chọn vùng nhớ cho các vi mạch, nó đợc đa vào đầu vào
mạch giải mã 74LS138.
A13
A14
A15
Đầu ra
0
0
0
CS 0
0

0

1

CS1


0

1

0

CS 2

0

1

1

CS 3

1

0

0

CS 4

1

0

1


CS 5

1

1

0

CS 6

1

1

1

CS 7

CS 0 0000Hữ0FFFH và đợc chọn bởi
Vùng nhớ ROM 4K có địa chỉ từ
CS1 2000Hữ3FFFH và đuợc chọn bơi
Vùng nhớ RAM 8K có địa chỉ từ
Mạch ADC 0809 đợc phân vùng từ CS 2 địa chỉ 4000Hữ5FFFH và đợc chọn
bởi . Tiếp theo là mạch vào ra logic 74LS244 đợc bố chí ở vùnh nhớ 6000H,
74LS373 ở vùng nhờ 6001H.

2. Lập lu đồ chơng trình:
a. Lu đồ chơng trình chính:


I.

II.

14


Start

Lap thong
so ban dau

Start
?

INT 1

No
Yes

False
Kenh
⊆8

TinhT°tb

Vao t°

Hien thi


Thuc hien chuong
trinh va cho ngat

True

Dung
?
Yes

False
Kenh +1

T°tb
>MAX

No

False

T°tb
END
N

True

T° kenh
so T° tb

True

Hien thi
False
Cao ⊇

thap
⊇4

4
True

True

b. Lu ®å ch¬ng tr×nh phôc vô ng¾t INT 1 ®Ó vµo sè liÖu:
False

Bell

I.

II.

15

RetI


c. Lu ®å ch¬ng tr×nh phôc vô ng¾t ngoµi INT 0 (Dõng khÈn cÊp)

INT 0


Phuc vu ngat
INT0

I.

II.

RETI
16


d. Ngoµi ra cßn cã c¸c lu ®å ch¬ng tr×nh con t¹o chÔ, chèng rung
Start

R7=N1

R6=N2

R6-1R6

Start
R6=0
?
False

False

IN Port ,
R7-1R7
compare MASK


R7=0
?Ket
qua=0?

end
False

Lu ®å ch¬ng tr×nh chèng dung

True

True
True

DELAY

IN Port ,
compare MASK

Ket
qua=0?
True
I.

False II.

17

END



;***--------------Ch¬ng tr×nh hîp ng÷ -------------***
ORG 8000H
LJMP MAIN
ORG 0003H
LJMP EXOISR
ORG 0013H
LJMP EX1ISR
PortA EQU 6000H
PortB EQU 6001H
I.

II.

18


PortC EQU 6002H
MASK1 EQU 0010.0000B
MASK2 EQU 0100.0000B
MASK3 EQU 1000.0000B
MAX EQU 43H
MIN EQU 44H
CHOPHEP EQU 45H
MAIN:
;**** Thực hiện vòng lặp chờ ấn START ****
;****
****
Wait1: MOV A,P1

XRL A,#MASK1
JNZ Wait1
CALL DELAY_20ms ;Trễ để chống dung
MOV A,P1
XRL A,#MASK1
JNZ Wait1
;****
****
;**** Cho phép ngắt ngoài và thiết lập nghắt u tiên ****
MOV IE,#85H
MOV IP,#1; Ưu tiên ngắt ngoài INT0
SETB IT0
SETB IT1
;**** Thực hiện chơng trình và chờ ngắt ****
MOV SP,#5FH; Khởỉ tạo đỉnh stack tại 60H
MOV PSW,#0000.1000B; Làm việc với bank 1
Khoi_tao:
MOV R3,#9; Vòng lặp để đo các kênh
MOV R2,#1; số kênh đo đợc
MOV R0,#00H; Phần thấp địa chỉ chọn kênh đo
MOV R1,#40H; Phần cao địa chỉ 2 chọn CS
DATA_INPUT:
MOV P0,R0; Chọn kênh
MOV P2,R1; Chọn thiết bị ngoài ADC
Wait: ; ****
Chờ ngắt
****
NOP
NOP
JMP Wait

;****
;****Thực hiện quét bàn phóm xem có dừng chơng trình****
MOV A,P1
XRL A,#MASK2
JNZ CONTINUE
CALL DELAY_20ms

I.

II.

19


MOV A,P1
XRL A,#MASK2
JZ END
CONTINUE:
INC R0
INC R2
DEC R3
JNZ DATA_INPUT ;Nếu đo cha đủ 8 thì đo tiếp
JZ Khoi_tao ;Nếu đo đủ rồi thì bắt đầu lại từ đầu
LJMP END
;****
****
;**** Chơng trình phục vụ ngắt ngoài INT0 ****
EXOISR:
Wait2:MOV A,P1
XRL A,#MASK3

JNZ Wait2
CALL DELAY_20ms
MOV A,P1
XRL A,#MASK3
JNZ Wait2
JMP END;
RETI
;****Chơng trình con tạo chễ chống nhiễu****
DELAY_20ms:
MOV R6,#200 ;Số vòng lặp ở ngoài là 200 lần
Trễ_2: MOV R7,#20 ;Số vòng lặp ở trong là 20 lần
Trễ_1: NOP
NOP
DEC R7
JNZ Trễ_1
NOP
NOP
DEC R6
JNZ Trễ_2
JET
;****
****
;**** Chơng trình phục vụ ngắt ngoài INT1 ****
EX1ISR:
MOV A,R2
SUBB A,#8 ; Xem số kênh đo đợc đã đủ 8 cha
JC ĐO ; Nếu cha đủ thì tiếp tục đo
JNC Tinh_TB; Nếu đã đủ rồi thì tính Ttb
ĐO:
MOV DPTR,#PortA


I.

II.

20


MOVX A,@DPTR
CALL STANDARD ;Chuẩn hoá số liệu vào
MOV DPL,R0;
MOV DPH,#20H;
MOVX @DPTR,A ; chuyển số liệu sau khi chuẩn hoá vào địa chỉ
;**** tơng ứng của nó
RETI
Tinh_TB:
MOV 40H,#8; 40H chứa vòng lặp 8 kênh đo
MOV B,#8
;****Ta có (DPH) = 20H từ phần trên ****
MOV R4,#00H; R4 chứa byte thấp địa chỉ nhiệt độ đo
MOV R5,#0FH; R5 chứa byte thấp địa chỉ của phần nguyên nhiệt độ
Loop1:
MOV DPL,R4
MOV A,@DPTR
INC R4
DIV AB
MOV DPL,R5
MOVX @DPTR,A
INC DPTR
MOV A,B

MOVX @DPTR,A
INC R5
DJNZ 40H,Loop1
;****Thực hiện cộng phần nguyên của nhiệt độ đo****
MOV 40H,#8
MOV 41H,#0
MOV DPTR,200FH
Loop2:
MOVX A,@DPTR
ADD A,41H
MOV 41H,A
INC DPTR
DJNZ 40H,Loop2
;**** 41H chứa tổng phần nguyên ****
;****Thực hiện tính tổng của phần d ****
MOV 40H,#8
MOV 42H,#0
MOV DPTR,2010H
Loop3:
MOVX A,@DPTR
ADD A,42H
MOV 42H,A

I.

II.

21



INC DPTR
DJNZ 40H,Loop3
;****42H chứa tổng phần d ****
;****Ta cộng thêm phần d vào phần nguyên****
MOV A,42H
MOV B,#8
DIV AB
ADD A,41H
MOV 41H,A
MOV A,B
MUL A,#100
MOV B,#8
DIV AB
MOV 42H,A; 42H chứa nhiệt độ phần thập phân
CALL DISPLAY
;****Thực hiện so sánh T với khoảng TB [MIN,MAX]****
MOV A,41H
SUBB A,#MAX; Ta so sánh phần nguyên của nhiệt độ với MAX
JNC ALARM ; Nếu nhiệt độ lớn hơn MAX thì báo động
MOV A,41H
SUBB A,MIN ;So sánh phần nguyên của nhiệt độ với nhiệt độ MIN
JC ALARM ; Nếu nhiệt độ nhỏ hơn nhiệt độ MIN thì báo động
;****
****
;**** So sánh T từng kênh với T TB cho phép ****
MOV DPTR,#2000H
MOV R7,#200 ; Số lần lặp lại hiển thị đèn các kênh có nhiệt độ cao
Repeat_3:
MOV 40H,#9 ;Thực hiện vòng lặp 8 lần tơng ứng với 8 kênh đo
Loop 4:

DJZ 40H, END_COMPARE
MOVX A,@DPTR
INC DPTR
SUBB A,41H ;So sánh nhiệt độ của kênh đo với nhiệt độ trung bình
MOV 09H,C ;lu giữ dấu của phép toán
SUBB A,45H
JC Loop 4
MOV C,09H ;Lấy lại dấu của phép toán
JC LESS
JNC GREAT
LESS :
INC 47H; tăng thêm số lợng kênh có nhiệt độ đo nhỏ trong 47H
CALL Green_LED
JMP Loop4
GREAT:

I.

II.

22


INC 46H ; tăng thêm số lợng kênh có nhiệt độ đo lớn trong 46H
CALL Red_LED
JMP Loop 4
END_COMPARE
MOV A,46H
SUBB A,#4
JNC ALARM

MOV A,47H
SUBB A,#4
JNC ALARM
CALL DELAY_4ms
DJNZ R7 ,Repeat_3
JMP RETI
ALARM:
SETB P1.0
JMP ALARM
RETI
STANDARD:
;****Chơng trình con chuẩn hoá số liệu vào****
MOV 30H,A
MOV B,#2
DIV AB
MOV 31H,A; Phần nguyên 1(31H)
MOV A,B; D 1A
MOV B,#10
MUL AB
MOV 32H,A
MOV A,30H
MOV B,#10
DIV AB
MOV 33H,A;Phần nguyên 2(33H)
MOV A,B
MOV B,#10
MUL AB
ADD A,32H; Cộng tổng 2 lần d (A)
SUBB A,#10
MOV A,#0

JC CONG
MOV A,32H
INC A
CONG:
ADD A,31H
ADD A,32H
RET

I.

II.

23


;****Chơng trình con hiển thị T**** TB
;****Để hình ảnh nhìn thấy đợc mịn ta cho hiển thị 10ms/1hình****
DISPLAY:
MOV DPTR ,#2100H
MOV A,41H ;Lấy phần ngutên nhiệt độ trung bình (A)
MOV B,#10
DIV AB
MOVX @DPTR,A; Cất số hàng chục vào ô nhớ RAM
MOV A,B
INC DPTR
MOVX @DPTR,A ;Cất số hàng đơn vị vào ô nhớ tiếp theo
INC DPTR
MOV A,42H
MOV B,#10
DIV AB

MOVX @DPTR,A;Cất số thập phân thứ nhất vào ô nhớ tiếp
MOV A,B
INC DPTR
MOV @DPTR,A ;Cất số thập phân thứ hai vào ô nhớ tiếp
;**** Thực hiện hiển thị nhiệt độ trung bình
****
Repeat 2: MOV DPTR,#2100H
MOV R5,#1000.0000B ; R5 chứa thứ tự sáng của đèn
MOV R6,#0001.0000B ; R6 điều kiện để kết thúc
MOV R7,#125; Số lần lặp lại của hiển thị 4 đèn
Repeat 1:
MOVX A,@DPTR; đầu tiên hiển thị số hàng chục
MOV #PortC,A
MOV A,R5
RL A ;Chuyển hiển thị đến đèn tiếp theo
MOV #Port B,A
CALL DELAY_4ms
INC DPTR
XOR A,R6
JNZ Repeat 1
DEC R7
JNZ Repeat 2
RET
;**** Phần chơng trình con hiển thị báo nhiệt độ thấp của từng kênh***
Green_LED:
;****lúc này DPTR đang chứa địa chỉ kênh làm việc****
MOV A,DPL;
RR A
RR A
RR A


I.

II.

24


MOV #PortB,A
SETB P1.4
SETB P1.2
CALL DELAY_4ms
RET
;****Phần chơng trình con hiển thị báo nhiệt độ cao của từng kênh****
Red_LED:
MOV A,DPL
RR A
RR A
RR A
MOV #PortB,A
SETB P1.3
SETB P1.1
CALL DELAY _4ms
RET
;****Chơng trình con tạo trễ 4ms****
DELAY_4ms:
MOV R6, #50; R6 chứa số lần thực hiện vòng lặp ở ngoài
Tao_tre4:MOV R7,#15 ; R7 chứa số lần thực hiện vòng lặp ở trong
Tao_tre3:NOP
NOP

DEC R7
JNZ Tao_tre3
NOP
NOP
DEC R6
JNZ Tao_tre4
JET
END

I.

II.

25


×