Thiết kế hệ 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:

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

 

doc25 trang | Chia sẻ: huong.duong | Lượt xem: 2848 | Lượt tải: 2download
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:

  • docP0152.doc
Tài liệu liên quan