Bài tập dài vi xử lý

o Bộ nhớ ngoài: ta thiết kế bộ nhớ Ram ngoài 8K dùng chip 6264. o Cổng vào ra: Do số lượng chân của chip hạn chế nên ta dùng thêm chip 8255 để mở động các kênh vào ra số. o Chuyển đổi ADC: chọn bộ ADC có 8 kênh vào tương tự , độ phân rải 8 bit. Do đầu ra của cảm biến đo có nhiệt độ nằm trong khoảng 0-10V nên để tương thích với mức tín hiệu của ADC ta cần có các mạch chuyển đổi thích hợp. o Màn hiển thị: làm nhiệm vụ hiển thị giá trị nhiệt độ trung bình hoặc nhiệt độ từng kênh. Ta sử dụng màn LCD 2x16. o Đèn báo hiệu trạng thái làm việc của hệ: dùng loại đèn led bình thường. o Bàn phím: ta thiết kế bàn phím có 13 phím trong đó 1 phím làm nhiệm vụ Reset hệ thống, các phím còn lại dùng để đặt các tham số cho hệ. Kêt nối giữa VXL và ngoại vi được tổ chức dưới dạng bus:

doc38 trang | Chia sẻ: Dung Lona | Lượt xem: 3685 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài tập dài vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BàI tập dàI vi xử lý Nội dung thiết kế Phần cứng : Bộ vi xử lý 1. Bộ nhớ chương trình ROM : 8KB từ địa chỉ 0000H. 2. Bộ nhớ dữ liệu RAM : 8KB (địa chỉ tuỳ chọn ). 3.Cổng vào ra tương tự có 8 kênh nhận tín hiệu đo nhiệt độ từ 0-10V tương ứng với 00C đến 1000C, các cổng vào ra số và các mạch điều khiển Phần mềm : 1. Chế độ chạy, dừng chương trình và dừng khẩn cấp. 2. Đọc tín hiệu nhiệt độ từ cổng vào ra tương tự và lưu trữ vào 2 vùng nhớ tương ứng của RAM . 3. Sau mỗi lần đọc ,tính giá trị trung bình nhiệt độ và gửi ra cổng hiển thị bằng 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. 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ị MAX và MIN tương ứng.Các giá trị tới hạn MAX và MIN được đặt trong 2 ô nhớ của RAM. II-Các bước tiến hành : 1 . Chọn bộ VXL (8085 hoặc 8051..). Thiết kế sơ bộ dạng sơ đồ khối . 2 . Thiết kế bộ nhớ , cổng vào ra, mach giải mã , mạch chốt , ADC ... Xác định địa chỉ cho các tín hiệu 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 hệ . 5 . Xây dựng phần mềm trên cơ sở sơ đồ đã thiết kế ở bước 4 . + Xây dựng lưu đồ chương trình . + Xây dựng cấu trúc chương trình . + Soạn thảo chương trình bằng mã ngữ của bộ VXL đã chọn . phần I. Thiết kế mạch phần cứng Chương I .định hướng thiết kế Thiết kế một hệ vi xử lý bao gồm cả việc thiết kế tổ chức phần cứng và viết phần mềm cho nền phần cứng mà ta thiết kế. Việc xem xét giữa tổ chức phần cứng và chương trình phần mềm cho một thiết kế là một vấn đề cần phải cân nhắc. Vì khi tổ chức phần cứng càng phức tạp, càng có nhiều chức năng hỗ trợ cho yêu cầu thiết kế thì phần mềm càng được giảm bớt và dễ dàng thực hiện nhưng lại đẩy cao giá thành chi phí cho phần cứng, cũng như chi phí bảo trì. Ngược lại với một phần cứng tối thiểu lại yêu cầu một chương trình phần mềm phức tạp hơn, hoàn thiện hơn; nhưng lại cho phép bảo trì hệ thống dễ dàng hơn cũng như việc phát triển tính năng của hệ thống từ đó có thể đưa ra giá cạnh tranh được. Từ yêu cầu đặt ra đối với hệ VXL, ta có thể phân chia hệ thành các khối chức năng như sau: Bộ VXL: Chức năng của bộ VXL là giám sát và điều khiển hoạt động của toần hệ thống. Hệ đo nhiệt độ của ta có 8 kênh, không cần yêu cầu cao về cấu hình phần cứng, hơn nữa chức năng của hệ cũng tương đối đơn giản nên ta chọn dùng VXL 8 bit AT89C52 của hẵng Atmel vì giá thành của loại chip này tương đối thấp, phù hợp với mục đích nghiên cứu học tập. AT89C52 có những đặc điểm sau: Là bộ vi điều khiển 8 bit thuộc họ MCS-51. Đặc điểm của các chip vi điều khiển nói chung là nó được tích hợp với đầy đủ chức năng của một hệ VXL nhỏ, rất thích hợp với những thiết kế hướng điều khiển. 1 bộ VĐK thường bao gồm: mạch VXL, bộ nhớ chương trình và dữ liệu, bộ đếm và định thời, bộ tạo xung, các cổng vào/ra nối tiếp và song song, bộ điều khiển ngắtẳ Vi điều khiển AT89C52 cùng với các họ vi điều khiển khác nói chung trong những năm gần đây được phát triển theo các hướng sau: Giảm nhỏ dòng tiêu thụ. Tăng tốc độ làm việc hay tần số xung nhịp của CPU . Giảm điện áp nguồn nuôi. Có thể mở rộng nhiều chức năng trên chip, mở rộng cho các thiết kế lớn. Những đặc điểm đó dẫn đến đạt được hai tính năng quan trọng là: giảm công suất tiêu thụ và cho phép điều khiển thời gian thực nên về mặt ứng dụng nó rất thích hợp với các thiết kế hướng điều khiển. Vi điều khiển thuộc họ MCS-51 được hỗ trợ một tập lệnh phong phú nên cho phép nhiều khả năng mềm dẻo trong vấn đề viết chương trình phần mềm điều khiển. Các chip thuộc họ MCS-51 hiện được sử dụng phổ biến và được coi là chuẩn công nghiệp cho các thiết kế khả dụng. Vì những lý do trên mà việc lựa chọn vi điều khiển 8051 là một giải pháp hoàn toàn phù hợp cho thiết kế. Ngoại vi: Bộ nhớ ngoài: ta thiết kế bộ nhớ Ram ngoài 8K dùng chip 6264. Cổng vào ra: Do số lượng chân của chip hạn chế nên ta dùng thêm chip 8255 để mở động các kênh vào ra số. Chuyển đổi ADC: chọn bộ ADC có 8 kênh vào tương tự , độ phân rải 8 bit. Do đầu ra của cảm biến đo có nhiệt độ nằm trong khoảng 0-10V nên để tương thích với mức tín hiệu của ADC ta cần có các mạch chuyển đổi thích hợp. Màn hiển thị: làm nhiệm vụ hiển thị giá trị nhiệt độ trung bình hoặc nhiệt độ từng kênh. Ta sử dụng màn LCD 2x16. Đèn báo hiệu trạng thái làm việc của hệ: dùng loại đèn led bình thường. Bàn phím: ta thiết kế bàn phím có 13 phím trong đó 1 phím làm nhiệm vụ Reset hệ thống, các phím còn lại dùng để đặt các tham số cho hệ. Kêt nối giữa VXL và ngoại vi được tổ chức dưới dạng bus: AT89C51 Khối vào tương tự 8 kênh Khối hiển thị Control Bus Address Bus Mạch giao tiếp 8255 Data Bus ROM RAM Chương 2. GiớI THIệU Bộ Vi Điều Khiển AT89C52 AT89C51 là VXL thuộc họ MCS-8051 nên ta nghiên cứu cấu trúc chung của họ 8051, từ đó chỉ ra những tính năng riêng của version này . Bên trong bộ VXL 8051 Sơ đồ khối Sơ đồ khối tổng quát của một vi điều khiển 8051 có thể được mô tả như sau: Hình 2.1: Cấu trúc của vi điều khiển 8051. Bộ tạo dao động CPU Điều khiển ngắt. Nguồn ngắt trong. 4Kbyte Bộ nhớ chương trình trong. 128byte Bộ nhớ RAM trong 2bộ đếm / định thời Khối đ.khiển quản lý Bus. Port 0 Port 1 Port 2 Port 3 Giao diện nối tiép. XTAL 1.2 /PSEN/ALE Cổng I/O 8 bit Cổng I/O Đchỉ cao Dữ liệu 8 bit Cổng I/O Đchỉ thấp Dữ liệu 8 bit Cổng I/O Các chức năng đắc biệt Dữ liệu 8 bit Nguồn ngắt ngoài Đếm sự kiện. Chức năng của các khối : Khối xử lý trung tâm CPU: Bộ não của chip 8051 là khối xử lý trung tâm (CPU=Central Processing Unit ), khối này có chứa các thành phần chính : Thanh chứa ACC (A ): có độ dài 8 byte, là thanh ghi quan trọng nhất và được sử dụng trong phần lớn các lệnh của 8051. Thanh ghi chứa phụ B cũng có độ dài 8 bit, thường được dùng cho phép nhân và phép chia hoặc lưu trữ các kết quả trung gian của quá trình tính toán. Khối số học và logic (ALU=Arithmetic Logical Unit) : đảm nhiệm vai trò xử lý các phép toán logic và số học bẳng mạch cứng. Từ trạng thái chương trình (PSW= Program Status Word ). Các băng thanh ghi (Bank): gồm có 4 bank, mỗi bank gồm 8 thanh ghi 8 bit. Thực chất các thanh ghi này là các ô nhớ có độ dài 8 bit nên có thể được truy xuất qua địa chỉ trong bộ nhớ hoặc qua tên . Con trỏ ngăn xếp (SP) có độ dài 8 byte để lưu giữ địa chỉ đỉnh ngăn xếp. Thanh ghi này mặc định có giá trị 07H, tuy nhiên giá trị này có thể được thay đổi bởi người dùng. Ngoài ra, khối xử lý trung tâm còn chứa: Thanh ghi đếm chương trình (PC= Progam Counter ) dài 2 byte để chứa địa chỉ của lệnh tiếp theo của chương trình. Sau khi được Reset, CPU bắt đầu làm việc tại địa chỉ 0000h, là địa chỉ đầu được ghi trong thanh ghi chứa chương trình (PC) và sau đó, thanh ghi này sẽ tăng lên 1 đơn vị và chỉ đến các lệnh tiếp theo của chương trình. Bộ giải mã lệnh Bộ điều khiển thời gian và logic Bộ tạo dao động: Khối xử lý trung tâm nhận trực tiếp xung nhịp từ bộ tạo dao động được lắp thêm vào, linh kiện phụ trợ có thể là một khung dao động làm bằng tụ gốm và thạch anh. Ngoài ra, còn có thể đưa một tín hiệu giữ nhịp từ bên ngoài vào. Khối điều khiển ngắt: Chương trình đang chạy có thể cho dừng lại nhờ một khối logic ngắt ở bên trong. Các nguồn ngắt có thể là: các biến cố ở bên ngoài, sự tràn bộ đếm/bộ định thời hay có thể là giao diện nối tiếp. Tất cả các ngắt đều có thể được thiết lập chế độ làm việc thông qua hai thanh ghi IE (Interrupt Enable) và IP (Interrupt Priority). Khối điều khiển và quản lý Bus : Các khối trong vi điều khiển liên lạc với nhau thông qua hệ thống Bus nội bộ được điều khiển bởi khối điều khiển quản lý Bus điều khiển việc truy nhập của các thành phần. Các bộ đếm và định thời: Vi điều khiển 8051 có chứa hai bộ đếm tiến 16 bit có thể hoạt động như là bộ định thời hay bộ đếm sự kiện bên ngoài hoặc như bộ phát tốc độ Baud dùng cho giao diện nối tiếp. Trạng thái tràn bộ đếm có thể được kiểm tra trực tiếp hoặc được xoá đi bằng một ngắt. 89C51 và 1 số chíp khác cung cấp thêm 1 bộ đếm và định thời thứ 3 nữa . các cổng vào/ra: Vi điều khiển 8051 có bốn cổng vào/ra (P0 .. P3), mỗi cổng chứa 8 bit, độc lập với nhau. Nhằm mục đích phục vụ cho quá trình điều khiển, các cổng vào ra được thiết kế quy chiếu bộ nhớ và cho phép truy xuất theo từng bit. Người dùng có thể truy xuất cổng dựa thông qua tên hoặc địa chỉ của chúng trong bộ nhớ. Ngoài ra, các cổng vào ra này còn có thêm 1 số chức năng khác nữa như dùng để truy xuất bộ nhớ ngoàI( port 0 và port 2) hoặc làm nhiệm vụ vào ra cho các chức năng đặc biệt (port 3). Giao diện nối tiếp: Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ làm việc độc lập với nhau. Bằng cách đấu nối các bộ đệm thích hợp, ta có thể hình thành một cổng nối tiếp RS-232 đơn giản. Tốc độ truyền qua cổng nối tiếp có thể đặt được trong một vùng rộng phụ thuộc vào một bộ định thời và tần số dao động riêng của thạch anh. Bộ nhớ chương trình: Bộ nhớ chương trình có dung lượng 4K, là bộ nhớ ROM chỉ cho phép ghi 1 lần. Chip AT89C52 có bộ nhớ chương trình là Flash Rom có dung lượng 8K byte, cho phép ghi xoá nhiều lần bằng tín hiệu điện. Bộ nhớ dữ liệu RAM (Ramdom Acces Memory) có dung lượng 128 byte, riêng chip AT89C52 có 256 byte nhớ dữ liệu. Sự sắp xếp chân ra của vi điều khiển 8051: Phần lớn các bộ vi điều khiển 8051 được đóng vào vỏ theo kiểu hai hàng DIL(Dual In Line) với tổng số là 40 chân ra, một số ít còn lại được đóng vỏ theo kiểu hình vuông PLCC (Plastic Leaded Chip Carrier) với 44 chân và loại này thường được dùng cho những hệ thống cần thiết phải tiết kiệm diện tích. 8051 P1.0 P1.1 P1.2 P1.4 P1.5 P1.3 P1.6 P1.7 RST (TxD) P3.1 ( |INT0) P3.2 (RxD) P3.0 ( |INT1) P3.3 (T0) P3.4 (T1) P3.5 ( |RD) P3.7 XTAL2 ( |WR) P3.6 XTAL2 GND VCC + 5V P0.0 (A/D 0) P0.1 (A/D 1) P0.3 (A/D 3) P0.4 (/D 4) P0.2 (A/D 2) P0.5 (A/D 5) P0.6 (A/D 6) P0.7 (A/D 7) ALE |PSEN |EA P2.7 (A15) P2.6 (A14) P2.5 (A13) P2.3 (A11) P2.2 (A10) P2.4 (A12) P2.1 (A9) P2.0 (A8) Hình 2.2: Sơ đồ chân của vi mạch 8051 DIL. Bảng 2.1: Chức năng các chân của vi điều khiển 8051. Chân Ký hiệu Chức năng 1-->8 P1.0-->P1.7 Cổng giả hai hướng P1, có thể tự do sử dụng 9 Reset Lối vào Reset, khi hoạt động ở mức High(1) 10-->17 P3.0-->P3.7 Cổng giả hai hướng P3, sắp xếp tất cả các đường dẫn với chức năng đặc biệt 18 XTAL2 Lối ra của bộ dao động thạch anh bên trong 19 XTAL1 Lối vào của bộ dao động thạch anh bên trong 20 Vss Nối mát ( 0V ) 21-->28 P2.0-->P2.7 Cổng giả hai hướng P2, chức năng đặc biệt là các đường dẫn địa chỉ A8..A15 29 |PSEN Progam Strobe Enable, xuất ra các xung đọc dùng cho bộ nhớ chương trình bên ngoài 30 ALE Address Latch Enable, xuất ra các xung điều khiển để lưu trữ trung gian các địa chỉ 31 |EA External Access, khi được nối với mát là để làm việc với ROM ngoại vi 32-->39 P1.0-->P1.7 Cổng hai hướng cực máng hở P0 hay Bus dữ liệu hai hướng dùng cho ROM, RAM và thiết bị ngoại vi đồng thời cũng chuyển giao 8 bit địa chỉ thấp 40 Vdd Nguồn nuôi dương ( +5V ) Các chân ra của bộ vi điều khiển 8051 gồm có: EA: Đóng vai trò quyết định xem vi điều khiển làm việc với chương trình bên trong hay bên ngoài. Với loại 8051 không có ROM trong thì chân này phải được nối với mát. Loại thông thường có thể làm việc tuỳ theo cách lựa chọn giữa ROM trong hay ROM ngoài, khi đang ở chế độ làm việc với bộ nhớ ROM trong, loại có chứa bộ nhớ ROM có thể truy nhập tự động lên bộ nhớ chương trình bên ngoài. Reset: Trạng thái Reset được thiết lập bằng cách giữ tín hiệu Reset ở mức cao trong thời gian ít nhất là 2 chu kỳ máy. ALE: Tín hiệu chốt 8 bit địa chỉ thấp trong suốt quá trìng truy nhập bộ nhớ mở rộng. Thông thường tín hiệu ALE được phát ra với tần số bằng 1/6 tần số dao động thạch anh và có thể sử dụng với mục đích định thời gian hoặc xung nhịp đồng hồ ngoài. Tuy nhiên, tín hiệu ALE sẽ bị bỏ qua trong mỗi quá trình truy nhập bộ nhớ dữ liệu ngoài. PSEN: Tín hiệu đọc bộ nhớ chương trình ngoài, khi vi điều khiển truy nhập bộ nhớ chương trình nội thì PSEN được đặt ở mức cao. XTAL1, XTAL2: Một bộ tạo tín hiệu giữ nhịp với tần số được xác định bởi bộ cộng hưởng thạch anh được lắp thêm vào, tần số này xác định tốc độ làm của bộ vi điều khiển. Thông thường các lệnh được thực hiện bằng 1/12 tần số dao động của thạch anh. Các bộ đếm cố thể làm việc trong nhiều chế độ khác nhau. Khi hoạt động như là bộ định thời, các bộ đếm nhận được các xung từ một bộ chia trước ở bên trong, bộ này chia tần số riêng của bộ cộng hưởng thạch anh cho 12 . Thay cho một bộ định thời 16 bit, một bộ đinh thời 8 bit có thể được tạo ra bằng việc nạp tự động sau khi cấp nguồn, các xung dẫn từ bên ngoài vào qua T0 và T1 cũng có thể được đếm, các xung này có tần số cực đại bằng 1/24 giá trị tần số của bộ cộng hưởng thạch anh. P0..P3: Các công vào/ra. Cổng P3 cũng đảm nhận một số chức năng đặc biệt của bộ vi điều khiển : Chân Ký hiệu Chức năng P3.0 RxD Nhận dữ liệu vào bộ nhớ qua cổng nối tiếp P3.1 TxD Truyền dữ liệu vào bộ nhớ qua cổng nối tiếp P3.2 |INT0 Ngắt ngoài 0 (Tích cực thấp) P3.3 |INT1 Ngắt ngoài 1 (Tích cực thấp) P3.4 T0 Lối vào của Timer 0 P3.5 T1 Lối vào của Timer 1 P3.6 WR Viết vào bộ nhớ (Tích cực thấp) P3.7 RD Đọc bộ nhớ (Tích cực thấp) Tổ chức bộ nhớ: Cấu trúc chung của bộ nhớ: Một đặc trưng trong thiết kế bộ nhớ của họ MCS-51 so với các hệ VXL thông thường là chia bộ nhớ thành 2 vùng không gian nhớ riêng biệt: vùng nhớ dữ liệu(data memory) và vùng nhớ chương trình(program memory). Họ 51 cho phép mở rộng bộ nhớ tối đa tới 64K byte cho cả 2 loại bộ nhớ Sơ đồ bộ nhớ của 8051: 00H 0000H Bộ nhớ Chương trình Bộ nhớ dữ liệu Bộ nhớ mở rộng Bộ nhớ mở rộng PSEN WR RD FFH |EA=1 Bộ nhớ trong |EA=0 Bộ nhớ ngoài FFFFH Hình 2.3: Cấu trúc bộ nhớ của họ MCS-51. 8051 phân biệt bộ nhớ ngoài và bộ nhớ trong cho cả 2 loại bộ nhớ dữ liệu và chương trình. 1 chip 8051 chuẩn có 4K rom và 128 byte ram được tích hợp sẵn bên trong chip. Một số version sau này có 1 vài thay đổi về dung lượng bộ nhớ cũng như loại bộ nhớ sử dụng. Chip AT89C52 có 8K Flash Rom và 256 byte ram trong. Đối với những ứng dụng yêu cầu dung lượng nhớ lớn hơn thì người dùng có thể dùng các chip nhớ ngoài. 8051 cho phép truy suất tới bộ nhớ ngoài nhờ các chân PSEN đối với program memory và RD,WR đối với data memory. Tuy nhiên giới hạn tối đa của bộ nhớ ngoài là 64K đối với cả 2 loại bộ nhớ vì bus địa chỉ chỉ có 16 bit. Cấu trúc vùng ram trong: chip 8051 chuẩn có 128 byte ram trong (00H-7FH)và vùng nhớ các thanh ghi đặc biệt cũng có dung lượng 128 byte(80H-FFH). Các chip 52 có thêm vùng 128 byte ram trong mang địa chỉ cao (80H-FFH). Tuy nhiên vùng ram cao này được phân biệt với vùng nhớ của các thanh ghi có chức năng đặc biệt qua phương pháp truy nhập. Hình 2.4 Sơ đồ vùng nhớ ram thấp của 8051 Vùng nhớ trong của 8051 được chia thành 3 vùng: Vùng các băng thanh ghi( 00h đến 1Fh) gồm 32 ô nhớ chia thành 4 bank, mỗi bank có 8 thanh ghi từ R0 đến R7. Người dùng có thể chọn băng thanh ghi nhờ 2 bit RS1, RS0 trong thanh ghi PWS. Các ô nhớ này được truy cập theo tưng byte có thể theo địa chỉ trong bộ nhớ hoặc qua tên. Vùng nhớ định địa chỉ bit(20h đến 2Fh) gồm 16 byte nhớ. Đặc điểm của vùng nhớ này là cho phép truy cập đến từng bit nhớ độc lập. Các bit được đánh địa chỉ từ 00h(bit 0 của ô nhớ 20h) đến 7Fh(bit 7 của ô nhớ 2Fh) Vùng nhớ công dụng chung gồm 80 byte từ địa chỉ 30h đến 7Fh. Các ô nhớ này có thể được truy suất từng byte 1 cách trực tiếp hay gián tiếp. Ngăn xếp của 8051 nằm ngay trong vùng nhớ ram và được đánh dấu bởi thanh ghi SP(stack pointer) chứa địa chỉ của đỉnh ngăn xếp( mặc định có giá trị là 07h). Khi sử dụng ngăn xếp, ta cần chú ý đặt lại giá trị cho thanh ghi SP nếu cần thiết để không bị xung đột với vùng nhớ dữ liệu chứa toán hạng được chương trình truy nhập. Thanh ghi ghi chức năng đặc biệt SFR(Special Function Registers): Các thanh ghi này cũng là 1 phần của vùng ram trong được đánh địa chỉ 80h đến FFh. Tuy nhiên, thực tế thiết kế của chip 8051 chuẩn chỉ sử dụng 21 ô nhớ trong vùng này cho những mục đích khác nhau, các ô nhớ còn lại có thể được sử dụng như 1 vùng nhớ tự do của chương trình. Riêng các chip 52 thì sử dụng thêm 1 vài ô nhớ nữa cho những mở rộng về phần cứng. H 2.5 Địa chỉ các thanh ghi đặc biệt Chức năng: P0, P1, P2, P3: Các cổng vào ra, mỗi bít ứng với 1 chân của vi điều khiển. Cho phép truy nhập theo từng bit. SP (Stack Pointer): Đây là con trỏ ngăn xếp của vi điều khiển. DPH, DPL (Data Pointer High, Data Pointer Low): Tạo thành 1 cặp thanh ghi con trỏ dữ liệu DPTR 16 bit trỏ đến ô nhớ dữ liệu ngoài. PCON (Power Control): thanh ghi chọn mode làm việc cho chip. Ngoài ra bit PCON.7 con cho phép sử dụng để tăng gấp đôi tốc độ baud khi truyền qua cổng nối tiếp. TCON (Timer Control): Thiết lập cấu hình làm việc cho bộ Timer/Counter. TMOD (Timer Mode): Xác định chế độ làm việc cho từng bộ Timer/Counter. TL0/TH0 (Timer 0 Low/High): Cặp thanh ghi tương ứng với Timer0. TL1/TH1 (Timer 1 Low/High): Cặp thanh ghi tương ứng với Timer1. SCON (Serial Control): Thiết lập cấu hình cho cổng nối tiếp. SBUF (Serial Buffer): Bộ đệm khi truyền hoặc nhận dữ liệu qua cổng nối tiếp. IE (Interrupt Enable): Cho phép ngắt hoặc cấm ngắt. IP (Interrupt Priority): Thiết lập mức ưu tiên cho các ngắt. PSW (Program Status Word ): Thanh ghi từ trạng thái chương trình lưu trữ một số bit quan trọng được đặt hoặc xoá bởi các lệnh của 8051: cờ nhớ, cờ nhớ phụ, cờ tràn và cờ chẵn lẻ. Ngoài ra, 2 bit RS0 và RS1 trong PSW còn cho phép chọn băng thanh ghi để làm việc trong bộ nhớ RAM trong. ACC (Accumulator): Thanh ghi tích luỹ, đây là một trong những thanh ghi được sử dụng nhiều nhất trong vi điều khiển 8051. Thanh ghi này có ký hiệu là A. B (B Register): Thanh ghi B được sử dụng khi thực hiện các phép toán nhân, chia và cũng có thể được dùng như thanh ghi phụ hay thanh ghi lưu trữ số liệu tạm thời. Các thanh ghi có địa chỉ tận cùng 0 hoặc 8 cho phép truy nhập theo bit. Các bit đó cũng được địa chỉ hoá như vùng ram thấp với chỉ số từ 80H đến FFh. Chương III. Thiết kế PHầN CứNG Tổ chức bộ nhớ (Memory Map). Từ cấu trúc của vi điều khiển 8051 giới thiệu ở chương II và yêu cầu thiết kế ta tiến hành phân chia các vùng nhớ như sau: Bộ nhớ chương trình sử dụng Flash rom của chip 89C52 có dung lượng 8K byte có địa chỉ vật lý: 0000H á 1FFFH. Bộ nhớ dữ liệu: được mở rộng thêm 8K RAM ngoài, với địa chỉ vật lý 0000h đến 1FFFh. ở đây ta dùng chip 6264 có dung lượng nhớ 64K. Mạch ghép nối vào/ ra sử dụng IC8255 với địa chỉ của từng cấu hình như sau: Địa chỉ cổng PA : 2000H Địa chỉ cổng PB : 2001H Địa chỉ cổng PC : 2002H Địa chỉ PSW : 2003H Ghép nối các linh kiện Nguyên tắc ghép nối Hệ VXL của ta được tổ chức theo cấu trúc dạng Bus, vì vậy việc tổ chức truy nhập các thiết bị ngoại vi là 1 yêu cầu bắt buộc. Dữ liệu được trao đổi giữa bộ VXL với bộ nhớ ngoài và các cổng vào ra được thực hiện qua cổng P0 và P2 như sau: Các bit P0.0 đến P0.7 và P2.0 đến P2.4 là các đầu vào địa chỉ Các bit P2.5 đến P2.7 dùng để giải mã chọn chip. Vì vậy, các chân này là đầu vào nhị phân cho chip giải mã IC74138 Chân dữ liệu của chip P0(dùng chung với địa chỉ) được chốt bằng mạch chốt 74373. RD,RW: tín hiệu điều khiển việc đọc hoặc ghi bộ nhớ ngoài. IC 8255 Vi mạch 8255 là một vi mạch được sử dụng phổ biến để giao tiếp trong các hệ VXL 8 – 16 bit. Sử dụng 8255A làm cho việc thiết kế để ghép nối bộ VXL với các thiết bị ngoại vi đơn giản đi nhiều, độ mềm dẻo của thiết kế sẽ tăng lên và linh kiện phụ trợ đi kèm cũng giảm đi nhiều. Do có khả năng lập trình được nên nó có thể vừa dùng như cổng nhận số liệu cũng như xuất số liệu tuỳ nội dung của từ điều khiển mà người lập trình đưa vào. Sơ đồ chân và sơ đồ chức năng của 8255A. Sơ đồ chức năng và sơ đồ chân của 8255A được thể hiện dưới hình vẽ sau: PA3 PA2 PA1 PA0 RD\ CS\ GND A1 A0 PC7 PC6 PC5 PC4 PC0 PC1 PC2 PC3 PB0 PB1 PB2 PA4 PA5 PA6 PA7 WR\ RESET D0 D1 D2 D3 D4 D5 D6 D7 Vcc PB7 PB6 PB5 PB4 PB3 1 20 21 40 D0 – D7 PA0 – PA7 PB0 – PB7 PC0 – PC7 RD\ WR\ RESET A0 A1 CS\ 8255A 8255A H 3.1 Sơ đồ chân và sơ đồ chức năng của 8255 Trong đó: Chân 1 á 4, 37 á 40 (PA0 – PA7): là các đường xuất nhập có tên là cổng A. Chân 18 á 25 (PB0 – PB7): là các đường nhập xuất có tên cổng B. Chân 10 á 13, 14 á 17 (PB0 – PB7): là các đường nhập xuất có tên cổng C. Chân 27 á 34 (D0 – D7): là các đường dữ liệu (data) hoạt động hai chiều, dẫn tín hiệu điều khiển từ vi xử lý ra các thiết bị bên ngoài đồng thời nhận các dữ liệu từ các thiết bị điều khiển bên ngoài vào vi xử lý. Chân 35 (Reset input): ngõ vào xóa, chân reset phải được nối với tín hiệu reset out của vi xử lý để không làm ảnh hướng đến mạch điều khiển. Khi reset, các cổng của 8255A là các ngõ vào, đồng thời tất cả các dữ liệu trên thanh ghi bên trong 8255A đều bị xóa, 8255A trở về trạng thái ban đầu săn sàng làm việc. Chân 6 (CS\): tín hiệu ngõ vào chip select (CS\) được điều khiển bởi vi xử lý, dùng để lựa chọn 8255A làm việc khi vi xử lý giao tiếp với nhiều thiết bị. Chân 5 (RD\): ngõ vào đọc dữ liệu (Read Input). Chân 36 (WR\) : ngõ vào ghi dữ liệu (Write Input). Chân 8,9 (A1, A0): ngõ vào địa chỉ (Address Input), dùng nhận địa chỉ vào để lựa chọn thanh ghi và các cổng. Bảng địa chỉ lựa chọn thanh ghi và các cổng: A1 A0 Cổng và thanh ghi 0 0 Cổng A 0 1 Cổng B 1 0 Cổng C 1 1 Thanh ghi điều khiển Chân 26 (Vcc) : nguồn 5 VDC. Chân 7 (GND) : GND 0 VDC. Cấu trúc bên trong và hoạt động của 8255A. Sơ đồ khối cấu trúc bên trong của vi mạch 8255A. PA7 – PA0 Port A Điều khiển nhóm A PC7 – PC4 Port C (4 bit cao) Đệm s dữ liệu D7 – D0 Nhóm A PC3 – PC0 Port C (4 bit thấp) Điều khiển nhóm B PB7 – PC0 RD\ Logic điều khiển ghi/đọc Port B CS\ WR\ A0 A1 Nhóm B H 3.2 Sơ đồ khối chức năng của vi mạch 8255 Hoạt động của vi mạch 8255A: Từ sơ đồ khối cấu trúc bên trong của vi mạch 8255A ta thấy các cổng của 8255A được chia thành 2 nhóm: Nhóm A gồm cổng A và 4 bit cao của cổng C. Nhóm B gồm cổng B và 4 bit thấp của cổng C. Cấu hình làm việc của 2 nhóm sẽ do nội dung của thanh ghi điều khiển quyết định. Giao tiếp với 8255: Đường dữ liệu: gồm 8 đường dữ liệu (D0 - D7). Đường địa chỉ: gồm 2 đường (A0 – A1) dùng để lựa chọn cổng hoặc thanh ghi điều khiển như đã trình bày ở trên. Đường điều khiển: gồm các đường /RD, /WR, /CS, Reset dùng để điều khiển việc hoạt động của 8255A. Để sử dụng các cổng làm công cụ giao tiếp, người sử dụng phải gửi từ điều khiển ra thanh ghi điều khiển để 8255A định cấu hình làm việc cho các cổng đúng như yêu cầu của người lập trình. Từ điều khiển CWR(control word register) Từ điều khiển của 8255 là 1 thanh ghi 8 bit. Giá trị của từ điều khiển xác định mode hoạt động và chế độ làm việc(vào/ra) cho các cổng. Định nghĩa chế độ các cổng Khi D7 =1, 8255A sẽ sử dụng thông tin trong CWR để định nghĩa chế độ các cửa. Nội dung của CWR xác định chức năng của 24 đường ghép nối với thiết bị ngoại vi. Phần mềm của hệ thống sẽ định nghĩa chế độ của PA, PB một cách độc lập; còn PC có thể được định nghĩa độc lập hay chia làm hai phụ thuộc vào chế độ của PA và PB. 1 D6 D5 D4 D3 D2 D1 D0 Nhóm B PCL (4 bit thấp) 1 = Input 0 = Output PB 1 = Input 0 = Output Mode select 1 = mode 0 0 = mode 1 Nhóm A Mode select 00 = mode 0 01 = mode 1 1x = mode 2 Cổng A 1 = Input 0 = Output PCH (4 bit cao) 1=Input 0=Output H3.3 ý nghĩa của các bit trong thanh ghi điều khiển 8255 cho phép thiết lập 3 chế độ hoạt động cho cổng: Mode 0 (Vào ra cơ sở): chế độ này cho phép mỗi cổng là cổng vào hay ra, thực hiện sự trao đổi dữ liệu 1 cách đơn giản không có “hand shaking”. Mode 1: vào ra dữ liệu theo cơ chế “hand shaking”. Chế độ này dùng cho 2 cổng A,B, các bit của cổng C sẽ được sử dụng để làm tín hiệu giao tiếp khi trao đổi dữ liệu. Cổng vào: H 3.4 mode 1, cổng vào STB: chốt dữ liệu vào bộ chốt( mức tích cực thấp) IBF: chuyển lên mức cao khi dữ liệu đã được chốt. INTR: tạo ngắt tới CPU để yêu cầu quá trình nhận dữ liệu vào. Cổng ra: H 3.5 Mode 1, cổng ra OBF: chuyển về mức 0 khi có dữ liệu được gửi tới 1 cổng ra nào đó. ACK: có mức tích cực thấp, dùng để báo dữ liệu gửi ra đã được 8255 chấp nhận. INTR: báo ngắt về CPU sau khi dữ liệu đã được chấp nhận. Mode 2 là chế độ làm việc vào ra 2 hướng theo cơ chế hand shaking. Mode hoạt động này có 1 số đặc điểm sau: Chỉ dùng đối với cổng A Chế độ vào ra 2 hướng được điều khiển bởi 5 bit của cổng C Dữ liệu vào ra đều được chốt Lập/xoá bit: Nếu D7=0 thì CWR là lệnh để lập/xoá bit của Port C. Lệnh này cho phép lập/xoá bất kỳ bit nào của C một cách độc lập. 0 D6 D5 D4 D3 D2 D1 D0 1: Lập 0: Xoá Cửa C D3 D2 D1 bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Không dùng=000 Ghép nối 8255 với vi điều khiển H 3.6 Ghép nối 8255 với VĐK Đường dữ liệu tương ứng được nối với bus dữ liệu đia chỉ dùng chung AD0..AD7. Tín hiệu chọn cổng hoặc thanh ghi được nối với 2 bit thấp nhất của bus địa chỉ A0, A1. Chọn cổng A1 A0 Địa chỉ Port A 0 0 2000h Port B 0 1 2001h Port C 1 0 2002h CWR 1 1 2003h H 3.7 Bảng chọn ô nhớ của 8255 Các chân điều khiển vào ra WR,RD tương ứng được nối với tín hiệu điều khiển WR, RD của hệ thống Đầu vào chọn chip CS được nối với tín hiệu chọn chip IC4 từ IC 74138. Cổng PA,PB,PC đều làm việc ở mode 0, cổng ra Cổng Mode Trạng thái Ghép nối Điều khiển A 0 Out PA0..PA7 8xLED B 0 Out PB0..PB7 8xLED C 0 Out PC0..PC7 ADC 0809 H 3.8 Bảng ghép nối cổng ra của 8255 Bộ nhớ RAM ngoài( 6264) Đối với RAM ngoài ta sử dụng loại SRAM vi mạch dùng trong thiết kế là 6264 (8Kx8). 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 /CE của giải mã địa chỉ và có hai đường tín hiệu yêu cầu đọc viết là /OE, /WE . Ghép nối 6264 với VXL: H 3.9 Ghép nối 6264 Tín hiệu giải mã chọn chip IC2 tương ứng với tổ hợp đầu vào A13A14A15=000, địa chỉ bộ nhớ ram ngoài nằm trong khoảng 0000h đến 1FFFh. Vi mạch ADC0809. Bộ ADC 0809 là bộ chuyển đổi tương tự số 8 bit với 8 kênh vào tương tự thuộc họ CMOS . 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ý. Các đặc điểm cơ bản của ADC 0809 Nguồn nuôi đơn Vcc=4,5V đến 6,0V Dải tín hiệu lối vào tương tự 5V khi nguồn nuôi là +5V. Có thể mở rộng thang đo bằng các giải pháp kỹ thuật cho từng mạch cụ thể. Dễ dàng giao tiếp với vi xử lý vì đầu ra có bộ đệm 3 trạng thái nên có thể ghép trực tiếp vào kênh dữ liệu của hệ VXL. Tổng sai số chưa chỉnh ±1/2LSB. Thời gian chuyển đổi 100 ms . Tần số xung clock 10kHz – 1028 kHz. Đảm bảo sai số tuyến tính trong dải nhiệt độ từ –400C á 85OC. IN3 IN4 IN5 IN6 IN7 START EOC 2-6 2-6 2-8 2-3 2-2 2-1 Ref(-) Output enable clock Vcc Ref(+) GND 2-7 IN2 IN1 IN0 A B C ALE 2-4 ADC-0809 Bảng chân lý và sơ đồ chân của vi mạch ADC0809. A B C Cổng 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7 ý 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ấu trúc bên trong của ADC 0809 Cấu trúc bên trong của ADC0809 được thể hiện ở hình vẽ dưới: Hoạt động chuyển đổi: Các bit địa chỉ ở lối vào A,B,C từ bộ giải mã địa chỉ sẽ chốt và xác định kênh đầu vào nào được chọn. Khi một kênh được chọn đồng thời yêu cầu START ,ALE được tích cực, yêu cầu độ rộng xung START không nhỏ hơn 200ns . Giá trị điện áp cần được chuyển đổi sẽ được chốt lại ở cổng vào tương ứng xung Start bắt đầu chuyển đổi . Sau xung START khoảng 10μs đầu ra EOC (end of convert) lúc này xuống thấp thực sự bắt đầu quá trình chuyển đổi. Trong suốt quá trình chuyển đổi EOC luôn ở mức tích cực thấp, đồng thời đầu ra 3 trạng thái của ADC0809 bị thả nổi. Sau khoảng 100 ms, ADC0809 thực hiện việc chuyển đổi xong, dữ liệu đầu vào được đưa đến bộ đệm đầu ra ba trạng thái đồng thời chân tín hiệu EOC chuyển lên mức cao báo cho VXL biết để đọc kết quả vào. Giản đồ thời gian của quá trình chuyển đổi ADC Ghép nối ADC0809 với VXL8051. Các kênh vào Analog được nối vào các đầu vào tương ứng của ADC. Mỗi kênh đó có địa chỉ riêng do tổ hợp 3 bit địa chỉ A,B,C quy định. Chân Ghép nối Chức năng A PC0(8255) Chọn kênh B PC1(8255) Chọn kênh C PC2(8255) Chọn kênh ALE PC3(8255) Chốt địa chỉ kênh OE PC4(8255) Đọc đầu ra START PC5(8255) Bắt đầu chuyển đổi 2-8..2-1 Port 2(8952) Dữ liệu đầu ra EOC INT2(8952) Tạo ngắt Khi chuyển đổi xong, ADC0809 dùng tín hiệu ra chân EOC để báo cho VXL biết quá trình chuyển đổi đã kết thúc. Vì vậy ta kết nối EOC với đầu vào ngắt ngoài /INT2 của 8051. Tín hiệu ra của ADC được nối với cổng P2 của 8952. Vì vậy, để đọc kết quả chuyển đổi từ ADC, xung lên được áp vào chân OE của ADC(chân này có mức tích cực cao), sau đó ta đọc kết quả vào VXL qua cổng P2. Khi chưa có tín hiệu OE, đầu ra ở trạng thái thả nổi. Mạch tạo dao động cho ADC0809: Tần số dao động của mạch f= Tần số dao động chuẩn của ADC là 600Hz=> 640 = Với R từ 100 đến vài kΩ, chọn R=1K=>C=560pF Đèn báo hiệu kênh vượt quá giới hạn cho phép Dàn đèn này gồm 16 đèn : 8 xanh (báo thấp) và 8 đỏ (báo cao). Dữ liệu sẽ được đưa vào 8225A và được chốt ở đó.Cổng PA điều khiển dàn đèn đỏ và cổng PB điều khiển dàn đèn xanh. Các đèn được nối chung catot xuống GND. Các vi mạch phụ trợ khác. Mạch giải mã 74HC138: 74HC373 là vi mạch giải mã “vào 3 ra 8”, là loại IC tốc độ cao nên có thể đáp ứng được với tốc độ của chip: thời gian trễ truyền đạt tpd khoảng 20ns ở nhiệt độ 25oC. Sơ đồ chân: Chức năng của các chân tín hiệu: Chân Chức năng Tích cực Y0..Y7 Đầu ra Thấp A,B,C Đầu vào Cao G2A,G2B Tín hiệu cho phép Thấp G1 Tín hiệu cho phép Cao Ta có bảng chân lý của 74HC138 như sau: Bảng chân lý mạch giải mã địa chỉ 74HC138 Vi mạch chốt 74HC373: Đây là mạch có tác dụng chốt lại số liệu ở đầu vào khi có tín hiệu tích cực, đầu ra sẽ không bị biến đổi khi tín hiệu đầu vào đã mất. Nó chỉ thay đổi khi tín hiệu chốt tích cực trở lại. Bên ngoài vỏ cũng có tín hiệu /OE cho phép hoạt động. Khi có yêu cầu chốt chân LE sẽ được tích cực. Sơ đồ chân: Ghép nối với 89C52: Chân /OE (số 1) của 74LS373 được nối đất. Chân LE(số 11) của 74LS373 được nối với chân ALE (số 30) của 8051. PHầN 2: XÂY DựNG CHƯƠNG TRìNH ĐIềU KHIểN Lưu đồ thuật toán Mã nguồn ; 10H-17H: CONTAIN TEMPERATURE VALUE FOR 8 CHANNEL TEMP_1 EQU 10H TEMP_2 EQU 11H TEMP_3 EQU 12H TEMP_4 EQU 13H TEMP_5 EQU 14H TEMP_6 EQU 15H TEMP_7 EQU 16H TEMP_8 EQU 17H TEMP_AVR EQU 18H TEMP_MIN EQU 19H TEMP_MAX EQU 1AH TEMP_OFFSET EQU 1BH ; LED BIT FOR 8 LOW LEDS LO_LED EQU 20H ; LED BIT FOR 8 HIGH LEDS HI_LED EQU 21H PORTC EQU 22H ;vung nho' bit tuong ung voi PORTC cua 8255 PA_ADDR EQU 2000H ;dia chi cua portA cua 8255 PB_ADDR EQU 2001H ;dia chi cua portB cua 8255 PC_ADDR EQU 2002H ;dia chi cua portC cua 8255 CW_ADDR EQU 2003H ;dia chi cua control word cua 8255 ;SPEAKER LED SPEAKER EQU 16H ;portc.6 MESSAGE_1: DB "AVERAGE TEMP:",0 MESSAGE_4: DB "MIN:",0 MESSAGE_5: DB "MAX:",0 ;============================================================== ORG 0000H JMP RESET ;reset ORG 03H ;external interrupt 0 JMP TIMER_INTR0 ;============================================================== SET_MODE_8255: MOV DPTR,#2003H MOV A,#80H ;A,B,C deu la cong ra,mode 0 MOVX @DPTR,A ;KHOI TAO GIA TRI BAN DAU CHO 8255 RESET_PORT: MOV DPTR,#PA_ADDR MOV A,#00H MOVX @DPTR,A MOV DPTR,#PB_ADDR MOVX @DPTR,A MOV DPTR,#PC_ADDR MOVX @DPTR,A ;========================SET MODE TIMER======================== SET_MODE_TIMER: MOV TMOD,#011H ;00010001, MODE 0 ;=====================LCD INITIALIZATION======================= INIT_LCD: call delay30_ms ;function set clr p3.4 ;E=0 clr p3.0 ;RS=0 clr p3.1 ;R/W=0 mov p2,#38h setb p3.4 clr p3.4 call delay39_us ;display off control clr p1.7 clr p3.4 mov p2,#08h setb p3.5 clr p3.5 call delay39_us ;display clear clr p3.4 clr p3.0 clr p3.1 mov p2,#01h setb p3.4 clr p3.4 call delay2_m ;entry mode set clr p3.4 clr p3.0 clr p3.1 mov p2,#07h setb p3.4 clr p3.4 ;LCD_START: MOV A,#38H ;5X8 CALL LCD_CON ;=================DELAY PROCEDURE FOR TIME===================== delay30_ms: mov r6,#0ffh here15_2: mov r7,#80h here15_1: djnz r7,here15_1 ;f(ocs)=4Mhz=>1 cycle=3us djnz r6,here15_2 ret delay39_us: mov r6,#20h here39: djnz r6,here39 ret delay2_m: mov r6,#0ffh here2_1 : djnz r6,here2_1 ret DELAY_200_uS: mov r7,#70 here200 : djnz r7,here200 ret ;===============KHOI TAO CAC THAM SO MAC DINH================== INIT_VALUE: MOV SP,#50H MOV TEMP_MAX,#20H ;Tmax MOV TEMP_MIN,#11H ;Tmin MOV TEMP_OFFSET,#05H ;Toffset SET_INTERRUPT: MOV IE,#0AFH ;10101111 AJMP MAIN_LOOP ;==================TIMER0 INTERRUPT ROUNTINE=================== TIMER_INTR0: DEC R6 JNZ INTR0_RET CLR C INTR0_RET: RETI ;==================WRITE MESSAGE TO LCD======================== JMP LCD_CLEAR CALL DISP_MES_1 CALL DISP_MES_4 CALL DISP_MES_5 CALL DISP_MIN_TEMP CALL DISP_MAX_TEMP ;====================START MEASURING TEMP====================== MAIN_LOOP: MOV R5,#08H NEXT_MUX: CALL START_ADC CALL DELAY_200_uS CALL END_CONVERSION DJNZ R5,NEXT_MUX CALL TEMP_CALCULATE ;COUNT FOR AVERAGE TEMP CALL DISP_AVR_TEMP ;DISPLAY CALL ALARM_1 CALL ALARM_2 JMP DELAY_1_SEC ;=========================DELAY_1_SEC========================= ;USE TIMER0-MODE 1 DELAY_1_SEC: MOV TH0,#00H MOV TL0,#00H MOV R6,#05 SETB C SETB TCON.4 WAIT: JC WAIT JMP MAIN_LOOP ;======================ANALOG TO DIGITAL======================= START_ADC: ;bat dau chuyen doi ADC MOV A,PORTC ;vung bit tuong ung voi portc ANL A,#0D0H ;11010000 ORL A,R5 DEC A MOV DPTR,#PC_ADDR ;PORT C MOVX @DPTR,A ;SET ADDR ORL A,#08H ;SET BIT4- 00001000 MOVX @DPTR,A ;ALE STROBE ANL A,#0F7H ;CLR BIT4- 11110111 ORL A,#20H ;SET BIT 6-00100000 MOVX @DPTR,A ;SET START BIT ANL A,#0DFH ;CLR START BIT-11011111 MOVX @DPTR,A RET ;=====================CONVERSION COMPLETE====================== END_CONVERSION: MOV A,PORTC ORL A,#010H ;OUTPUT ENABLE-00010000 MOV DPTR,#2002H ;OE=1 MOVX @DPTR,A MOV A,P0 ;READ ADC ACALL ADC_TO_TEMP MOV R0,#010H MOV R1,A MOV A,R5 ADD A,R0 MOV R0,A DEC R0 ;MEMORY ADDRESS MOV A,R1 MOV @R0,A ;WRITE TEMP TO MEMORY ANL A,#0EFH ;11101111 MOVX @DPTR,A ;OE=0 RET ;=================CONVERT ADC INPUT TO TEMP==================== ADC_TO_TEMP: MOV B,#64H MUL AB MOV ACC,B RET ;==================COUNT FOR AVERAGE TEMP====================== TEMP_CALCULATE: MOV R0,#TEMP_1 MOV A,@R0 MOV R1,#07H MOV R2,#00H TEMP_LOOP1: INC R0 ;DIA CHI O NHO LUU GIA TRI NHIET DO CLR C ADD A,@R0 MOV B,A MOV A,R2 ADDC A,#00H MOV R2,A MOV A,B DJNZ R1,TEMP_LOOP1 ;DEVIDE BY 8 MOV R1,#03H TEMP_LOOP2: MOV B,A MOV A,R2 RRC A MOV R2,A MOV A,B RRC A DJNZ R1,TEMP_LOOP2 MOV TEMP_AVR,A ;LUU GIA TRI NHIET DO TRUNG BINH RET ;==========================ALARM 1============================ ALARM_1: MOV A,TEMP_MAX MOV R0,TEMP_AVR CLR C SUBB A,R0 JC ON_ALARM_1 ;TEMP_AVR > TEMP_MAX=>DUNG CHUONG TRINH CLR C MOV A,TEMP_AVR MOV R0,TEMP_MIN SUBB A,R0 JC ON_ALARM_1 ;TEMP_AVR DUNG CHUONG TRINH JMP NO_ALARM_1 ON_ALARM_1: JMP STOP NO_ALARM_1: RET ;========================ALARM 2============================== ALARM_2: MOV R0,#TEMP_1 ;KENH SO 1 MOV R2,#08H ;LAP 8 LAN MOV R3,#00 ;SO KENH CO NHIET DO NGOAI KHOANG CHO FEP ALARM2_LOOP1: MOV A,TEMP_AVR ADD A,TEMP_OFFSET ;Ttb+Dt SUBB A,@R0 ;Ttb+Dt-Ti JC ALARM2_LABEL1 ;Ti-Ttb>Dt MOV A,@R0 ADD A,TEMP_OFFSET ;Ti+Dt SUBB A,TEMP_AVR ;Ti+Dt-Ttb JC ALARM2_LABEL1 ;Ttb-Ti>Dt JMP ALARM2_LABEL2 ALARM2_LABEL1: INC R3 ALARM2_LABEL2: MOV A,@R0 ;Ti SUBB A,TEMP_MIN ;Ti-Tmin JC ON_LOW_LED ;Ti<Tmin MOV A,@R0 SUBB A,TEMP_MAX JC ALARM2_LABEL3 ;Ti<Tmax JZ ALARM2_LABEL3 ;Ti=Tmax ON_HI_LED: MOV A,R2 MOV R4,A MOV A,#00H SETB C HI_SHIFT_LOOP: RRC A DJNZ R4,HI_SHIFT_LOOP ORL HI_LED,A JMP ALARM2_LABEL3 ON_LOW_LED: MOV A,R2 MOV R4,A MOV A,#00H SETB C LOW_SHIFT_LOOP: RRC A DJNZ R4,LOW_SHIFT_LOOP ORL LO_LED,A ALARM2_LABEL3: DJNZ R2,ALARM2_LOOP1 ;CHUYEN KENH MOV R3,A SUBB A,#04 JC ALARM2_RET JMP STOP ALARM2_RET: MOV DPTR,#2000H MOV A,LO_LED MOVX @DPTR,A MOV DPTR,#2001H MOV A,HI_LED MOVX @DPTR,A RET ;===========================STOP=============================== STOP: ;SECURITY SETB SPEAKER ;COI BAO DONG MOV DPTR,#2002H MOV A,PORTC MOVX @DPTR,A ORL PCON,#02 ;ENTER POWER-DOWN MODE ;======================DISPLAY MESSAGE ======================== DISP_MES_1: MOV A,#80H ; ROW 1- COL 1 CALL LCD_CON MOV DPTR,#MESSAGE_1 ; "AVERAGE TEMP:" CALL LCD_DISP RET DISP_MES_4: MOV A,#0C0H ;ROW 2, COL 1 CALL LCD_CON MOV DPTR,#MESSAGE_4 ; " MIN: " CALL LCD_DISP RET DISP_MES_5: MOV A,#0C8H ;ROW 2, COL 9 CALL LCD_CON MOV DPTR,#MESSAGE_5 ; " MAX:" CALL LCD_DISP RET ;=======================LCD DISPLAY============================ LCD_DISP: MOV A,#0 MOV R0,A LCD_LOOP1: MOV A,R0 MOVC A,@A+DPTR JZ END_DISP CALL LCD_DATA MOV A,#06H CALL LCD_CON ;SHIFT RIGHT INC R0 SJMP LCD_LOOP1 END_DISP: RET DISP_AVR_TEMP: MOV A,#08EH ;ROW 1-COL 14 CALL LCD_CON MOV A,TEMP_AVR MOV B,#10 DIV AB ADD A,#48 ;HANG CHUC CALL LCD_DATA MOV A,#08FH ;ROW 1-COL 15 CALL LCD_CON MOV A,B ADD A,#48 ;HANG DON VI CALL LCD_DATA RET DISP_MIN_TEMP: MOV A,#0C4H ;ROW 2-COL 4 CALL LCD_CON MOV A,TEMP_MIN MOV B,#10 DIV AB ADD A,#48 ;HANG CHUC CALL LCD_DATA MOV A,#0C5H ;ROW 2-COL 5 CALL LCD_CON MOV A,B ADD A,#48 ;HANG DON VI CALL LCD_DATA RET DISP_MAX_TEMP: MOV A,#0CDH ;ROW 2-COL 13 CALL LCD_CON MOV A,TEMP_MAX MOV B,#10 DIV AB ADD A,#48 ;HANG CHUC CALL LCD_DATA MOV A,#0CEH ;ROW 2-COL 14 CALL LCD_CON MOV A,B ADD A,#48 ;HANG DON VI CALL LCD_DATA RET ;========================LCD CONTROL=========================== LCD_CLEAR: MOV A,#01H ; CLEAR LCD CALL LCD_CON LCD_CON: CALL LCD_READY MOV P0,A ; DATA CLR P3.0 ; RS=0 CLR P3.1 ; R/W=0 SETB P3.4 ; E=1 CLR P3.4 ; E=0 RET LCD_DATA: CALL LCD_READY MOV P0,A ; DATA SETB P3.0 ; RS=1 CLR P3.1 ; R/W=0 SETB P3.4 ; E=1 CLR P3.4 ; E=0 RET LCD_READY: SETB P0.7 CLR P3.0 ;RS=0 SETB P3.1 ;R/W=1 LCD_BUSY: SETB P3.5 ;E=1 CLR P3.5 ;E=0 JB P0.7,LCD_BUSY RET END_PROG: END

Các file đính kèm theo tài liệu này:

  • docDO149.DOC