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:
v Độ dài từ dữ liệu là 8 bit
v Rất tiện dùng cho hệ điều khiển
v Tập lệnh rất phong phú với 256 lệnh
v ROM bên trong là 4 K
v RAM bên ngoài là 128 byte
v 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
v Có 2 bộ định thời 16 bit
v Không gian địa chỉ của ROM & RAM có thẻ đến 64K
v Có 6 nguồn ngắt ,5 vector ngắt với 2 mức ưu tiên
v Đã có bộ giao động bên trong với tần số 12Mhz
v Có 2 thanh chứa A & B mỗi thanh 8 bit, trong đó B thường dùng cho phép chia
25 trang |
Chia sẻ: huong.duong | Lượt xem: 2857 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Thiết kế hệ vi điều khiển 8051, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Thiết kế hệ vi xử lý 8 bit
Yêu cầu
Phần cứng
Bộ vi xử lý
Bộ nhớ chương trình ROM :8KB từ địa chỉ 0000H
Bộ nhớ dữ liệu RAM : 8KB ( địa chỉ tuỳ chọn )
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
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
Đọc tín hiệu đo nhiệt độ từ 8 kênh và lưu trữ vào vùng nhớ RAM .
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.
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
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
Các bước tiến hành
Chọn bộ vi xử lý (8085 hoặc 8051,). Thiết kế sơ bộ sơ đồ khối
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ớ
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.
Thiết kế sơ đồ chi tiết cho hệ
Xây dựng phần mềm trên cơ sở sơ đồ đã thiết ở bước 4:
Xây dựng lưu đồ 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
LờI NóI Đầ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 trưng 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.Nhưng 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
Thiết kế hệ vi điều khiển 8051
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
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 lưu 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 :
SFR
RAM thường đa mụcđích
Bit addressable
Bank 3
Bank 3
Bank 2
Bank 1
Bank 0
FF
80
7F
30
2F
20
1F
18
17
10
0F
08
07
00
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ẽ 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
Sơ đồ khối của hệ thống:
Address Bus
8051
ROM
RAM
I/O
Ngoai vi
Data Bus
Control Bus
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ộ 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 “ user’s program”
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
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
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à 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ử lý
Vi xử lý định địa chỉ và cất số liệu vào bộ nhớ dữ liệu RAM
Thiết kế bộ nhớ, cổng vào ra, mạch giải mã, mạch chốt, ADC
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 lưu 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 lưu 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
EXTERNAl
EXTERNAL
INTERNAL
FFFFH
EA=0
EXTERNAL
EA=1
INTERNAL
FFH
00
0000
PSEN
RD WR
PROGRAM MEMORY DATA MEMORY
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
Bộ nhớ ngoài
Bộ nhớ chương trình EPROM
Trong vi điều khiển bộ nhớ chươ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 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
Các mạch phụ trợ
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 ở 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
E3
X
X
X
1
X
X
1
1
1
1
1
1
1
1
X
X
X
X
1
X
1
1
1
1
1
1
1
1
X
X
X
X
X
0
1
1
1
1
1
1`
1
1
0
0
0
0
0
1
0
1
1
1
1
1
1
1
0
0
1
0
0
1
1
0
1
1
1
1
1
1
0
1
0
0
0
1
1
1
0
1
1
1
1
1
0
1
1
0
0
1
1
1
1
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
1
1
1
1
0
1
0
0
1
1
1
1
1
1
0
1
1
1
1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
Sơ đồ chân vi mạch:
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
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ỉ.
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ố chưa chỉnh ±1LSB
Thời gian chuyển đổi 100 ms
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 100ms. 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ó đọc số liệu ở đầu ra.
Việc lựa chọn các kênh tuân theo quy luật sau:
C
B
A
Kênh Vào
0
0
0
IN0
0
0
1
IN1
0
1
0
IN2
0
1
1
IN3
1
0
0
IN4
1
0
1
IN5
1
1
0
IN6
1
1
1
IN7
X
X
X
(?)
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:
Cổng mạch vào/ ra dùng vi mạch logic một chiều
Cổng ra:cổng ra đơn giản có thể là mạch lật D để chốt lại 1 bit
Ta dùng cổng ra 8 bit 74LS373 là tổ hợp 8 mạch D như trên
Sơ đồ chân vi mạch như sau:
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ư sau
Nguyên lý hoạt động của vi mạch tương tự như trên
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
Thiết kế phần mềm
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
74LS373
74LS244
ADC0809
RAM 8K
ROM 8K
FFFFH
6000H
5FFFH
4000H
3FFFH
2000h
1FFFH
0000H
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
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
Vùng nhớ ROM 4K có địa chỉ từ 0000Há0FFFH và được chọn bởi
Vùng nhớ RAM 8K có địa chỉ từ 2000Há3FFFH và đuợc chọn bơi
Mạch ADC 0809 được phân vùng từ đị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.
Lập lưu đồ chương trình:
Lưu đồ chương trình chính:
Start
Lap thong so ban dau
Start ?
Thuc hien chuong trinh va cho ngat
Dung ?
END
Yes
No
Yes
No
Lưu đồ chương trình phục vụ ngắt INT 1 để vào số liệu:
INT 1
Kenh Í8
Vao t°
Kenh +1
RetI
TinhT°tb
Hien thi
T°tb<MIN
T°tb >MAX
T° kenh so T°tb
Hien thi
Cao ấ 4
thap ấ4
Bell
True
False
False
False
True
True
True
False
False
True
Lưu đồ 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
RETI
Ngoài ra còn có các lưu đồ chương trình con tạo chễ, chống rung
Start
R7=N1
R6=N2
R6-1àR6
R6=0?
R7-1àR7
R7=0?
end
False
False
True
True
Lưu đồ chương trình chống dung
Start
IN Port , compare MASK
Ket qua=0?
DELAY
IN Port , compare MASK
Ket qua=0?
END
False
False
True
True
;***--------------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
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ỉ 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
MOV A,P1
XRL A,#MASK2
JZ END
CONTINUE:
INC R0
INC R2
DEC R3
JNZ DATA_INPUT ;Nếu đo chưa đủ 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 chưa
JC ĐO ; Nếu chưa đủ thì tiếp tục đo
JNC Tinh_TB; Nếu đã đủ rồi thì tính T°tb
ĐO:
MOV DPTR,#PortA
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
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 [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° 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 ;lưu 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:
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ư 1àA
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
;****Chương trình con hiển thị T°****
;****Để 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
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
Các file đính kèm theo tài liệu này:
- P0152.doc