Đề tài Thiết kế hệ vi xử lý 8 bit

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 và nhận định trên ta có những định hướng sơ bộ cho thiết kế như sau: 1. Chọn bộ vi xử lý: Từ yêu cầu dùng VXL 8 bit ta dự kiến dùng các chip vi điều khiển thuộc họ MCS-51 của Intel, mà cụ thể ở đây là dùng chip 89C51 vì những lý do sau: + AT89C51 thuộc họ MCS-51, là chip vi điều khiển 8 bít đơn chíp CMOS có hiệu suất cao, công suất nguồn tiêu thụ thấp và có 4 Kb bộ nhớ ROM Flash xoá được lập trình được. Chíp này được sản xuất dựa theo công nghệ bộ nhớ không mất nội dung có độ tích hợp cao của Atmael + AT89C51 có các đặc trưng chuẩn sau: 4Kb Flash, 128 byte RAM, 32 đường xuất nhập, bộ định thời / đếm 16 bit, một cấu trúc ngắn hai mức ưu tiên và 5 nguyên nhân ngắt, một port nối tiếp song song công, mạch dao động và mạch dao động và mạch tạo xung trên chíp. Vì những lý do trên mà việc lựa chọn vi điều khiển 89C51 là một giải pháp hoàn toàn phù hợp cho thiết kế. 2. Tổ chức ngoại vi: + Xử lý tín hiệu vào ta dùng thiết bị chuyển đổi tương tự/ số (ADC) có 8 kênh vào tương tự kết nối với 8 tín hiệu đo nhiệt độ từ 0 ¸ 10V tương ứng với nhiệt độ từ 0o ¸ 200oC. + Xử lý việc hiển thị kết quả nhiệt độ trung bình ta dùng 3 LED 7 thanh để hiển thị tương ứng với các nhiệt độ trong dải 0 ¸ 2000C. + Tín hiệu cho phép chạy được xử lý bằng cách dùng một nút ấn Reset hệ thống. + Tín hiệu báo động được xử lý bằng một còi báo động kết nối với một cổng bất kỳ phục vụ cho vào/ra. + Nếu có yêu cầu dùng các phím để định các mode hoạt động, cũng như đặt lại giá trị MAX và MIN thì bàn phím cũng phải được kết nối với các cổng giao tiếp vào/ra (ở đây yêu cầu dùng 8255). Tất cả các thiết bị phải được kết nối với nhau thông qua các bus cần thiết gồm bus dữ liệu, bus địa chỉ và bus điều khiển. PHẦN I: THIẾT KẾ MẠCH PHẦN CỨNG CHƯƠNG I: ĐỊNH HƯỚNG THIẾT KẾ 1. Chọn bộ vi xử lý 2. Tổ chức ngoại vi CHƯƠNG II: NỘI DUNG THIẾT KẾ I. Tổ chức phần cứng hệ VXL89C51 1. Hệ vi xử lý AT89C51 1.1 Sơ đồ chân hệ vi xử lý AT89C51 1.2 Tổ chức bộ nhớ 1.2.1 Cấu trúc chung của bộ nhớ 1.2.2 Bộ nhớ chương trình 1.2.3 Bộ nhớ số liệu 2. Tổ chức bộ nhớ (Memory Map) 3. Khối hiển thị 4. Khối các thiết bị giao tiếp/ghép nối II. Giới thiệu linh kiện và tổ chức phối ghép 1. Thiết kế bộ nhớ 2. Vi mạch ADC0809 a. Bảng chân lý và sơ đồ chân của vi mạch ADC0809 b. Cấu trúc bên trong của ADC 0809 3.Vi mạch giao tiếp song song PPI 8255 a. Sơ đồ chân và sơ đồ chức năng của 8255A b. Cấu trúc bên trong và hoạt động của 8255A c. Từ điều khiển d. Ghép nối 8255A với VXL8051 e. Ghép nối 8255A với thiết bị ngoại vi 4. Thiết kế khối hiển thị 5. Khối vào dữ liệu 6. Các vi mạch phụ trợ khác a. Mạch giải mã 74LS138 b. Vi mạch chốt 74LS373 III. Sơ đồ thiết kế chi tiết PHẦN II: THIẾT KẾ PHẦN MỀM LƯU ĐỒ THUẬT TOÁN 1. Lưu đồ của chương trình 1.1 Chương trình chính 1.2 Chương trình đọc dữ liệu 8 kênh từ ADC 1.3. Chương trình tính giá trị trung bình của 8 kênh đọc được từ ADC 1.4. Chương trình tách số trung bình cộng ra hàng chục, đơn vị 1.5. Chương trình con quét phím LỜI KẾT

doc50 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2494 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế hệ vi xử lý 8 bit, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐỀ TÀI THIẾT KẾ HỆ VI XỬ LÝ 8 BIT YÊU CẦU Phần cứng : Bộ vi xử lý 8 bit (8085, 89C51 ¼.) Bộ nhớ chương trình ROM : 8KB từ địa chỉ 0000H Bộ nhớ dữ liệu RAM 8kB có địa chỉ tuỳ chọn. Cổng vào tương tự 8 kênh nhận tín hiệu nhiệt độ từ 0 – 10V tương ứng vói nhiệt độ từ 0 – 200 độ C. 5. Nhập dữ liệu vào từ bàn phím 16 phím 6. Khối hiển thị dữ liệu dùng màn hình tinh thể lỏng LCD. 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 từ 8 kênh đo lư trữ trong vùng nhớ RAM . Sau mỗi lần đọc tính giá trị trung bình của nhiệt độ và gửi kết quả ra cổng hiển thị bằng LCD Chương trinh dừng lại báo động bằng còi nếu xảy ra một số điều kiện sau: - Giá trị trung bình giá trị min hoặc max tương ứng cho trước.Các giá trị max & min này được đặt ở trong 2 ô nhớ RAM. - Có 4 kênh đo vượt quá hoặc nhỏ hơn giá trị giới hạn cho phép so với giá trị trung bình. 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 và nhận định trên ta có những định hướng sơ bộ cho thiết kế như sau: 1. Chọn bộ vi xử lý: Từ yêu cầu dùng VXL 8 bit ta dự kiến dùng các chip vi điều khiển thuộc họ MCS-51 của Intel, mà cụ thể ở đây là dùng chip 89C51 vì những lý do sau: + AT89C51 thuộc họ MCS-51, là chip vi điều khiển 8 bít đơn chíp CMOS có hiệu suất cao, công suất nguồn tiêu thụ thấp và có 4 Kb bộ nhớ ROM Flash xoá được lập trình được. Chíp này được sản xuất dựa theo công nghệ bộ nhớ không mất nội dung có độ tích hợp cao của Atmael + AT89C51 có các đặc trưng chuẩn sau: 4Kb Flash, 128 byte RAM, 32 đường xuất nhập, bộ định thời / đếm 16 bit, một cấu trúc ngắn hai mức ưu tiên và 5 nguyên nhân ngắt, một port nối tiếp song song công, mạch dao động và mạch dao động và mạch tạo xung trên chíp. Vì những lý do trên mà việc lựa chọn vi điều khiển 89C51 là một giải pháp hoàn toàn phù hợp cho thiết kế. 2. Tổ chức ngoại vi: + Xử lý tín hiệu vào ta dùng thiết bị chuyển đổi tương tự/ số (ADC) có 8 kênh vào tương tự kết nối với 8 tín hiệu đo nhiệt độ từ 0 ¸ 10V tương ứng với nhiệt độ từ 0o ¸ 200oC. + Xử lý việc hiển thị kết quả nhiệt độ trung bình ta dùng 3 LED 7 thanh để hiển thị tương ứng với các nhiệt độ trong dải 0 ¸ 2000C. + Tín hiệu cho phép chạy được xử lý bằng cách dùng một nút ấn Reset hệ thống. + Tín hiệu báo động được xử lý bằng một còi báo động kết nối với một cổng bất kỳ phục vụ cho vào/ra. + Nếu có yêu cầu dùng các phím để định các mode hoạt động, cũng như đặt lại giá trị MAX và MIN thì bàn phím cũng phải được kết nối với các cổng giao tiếp vào/ra (ở đây yêu cầu dùng 8255). Tất cả các thiết bị phải được kết nối với nhau thông qua các bus cần thiết gồm bus dữ liệu, bus địa chỉ và bus điều khiển. Sơ đồ khối cho thiết kế phần cứng của hệ thống như sau: VXL 89C51 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 II NỘI DUNG THIẾT KẾ I. tổ chức phần cứng hệ VXL89C51. 1. Hệ vi xử lý AT89C51: 1.1 Sơ đồ chân hệ vi xử lý AT89C51: Port 0 Port 0 là port xuất nhập 8 bit hai chiều cực D hở. Port 0 còn được cấu hình làm bus địa chỉ ( byte thấp ) và bus dữ liệu đa hợp trong khi truy xuất bộ nhớ dữ liệu ngoài vcà bộ nhỡ chư[ng trình ngoài. Port 0 cũng nhận các byte mã trong khi lập trình cho Flash và các byte mã trong khi kiểm tra chương trình. Port 1 Port 1 là port xuất nhập 8 bít. Port 1 cũng là byte địa chỉ thấp trong thừi gian lập trình cho Flash và kiểm tra chương trình. Port 2 Port 2 là port xuất nhập 8 bit hai chiều. Port 2 tạo ra byte cao của địa chỉ trong thời gian tìm nạp lệnh từ bộ nhớ chương trình ngoài và trong thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng địa chỉ 16 bit Port 2 cũng nhận các địa chỉ cao và tín hiệu điều khiển trong thời gian lập trình cho Flash và kiểm tra chương trình. Port 3 Port 3 là port xuất nhập 8 bit hai chiều. Port 3 cũng còn được dùng làm chức năng khác của AT89C51 các chức năng được liệt kê như sau: Chân của port Chức năng P3.0 RxD ( ngõ vào của port nối tiếp ) P3.1 TxD ( ngõ ra của port nối tiếp ) P3.2 ( ngõ và ngắt ngoài 0 ) P3.3 ( ngõ vào ngắn ngoài 1 ) P3.4 TO ( ngõ vào bên ngoài của bộ định thời 0 ) P3.5 T1 ( ngõ vào bên ngoài của bộ định thời 1 ) P3.6 ( điều khiển bộ nhớ dữ liệu ngoài ) P3.7 ( điều khiển đọc bộ nhớ dữ liệu ngoài ) Port 3 cũng nhận một vài tín hiệu điều khiển cho việc lập trình Flash và điều khiển chương trình. RST Ngõ vào reset. ALE/ xung của ngõ ra cho phép chốt địa chỉ ALE cho phép chốt byte thấp của địa chỉ trong thời gian truy xuất bộ nhớ ngoài. Chân này cũng được dùng làm ngõ vào xung lập trình ( ) trong thời gian lập trình Flash. Chân cho phép bộ nhớ chương trình ngoài , điều khiển truy xuất bộ nhớ chương trình ngoài. Chân cho phép truy nhập bộ nhớ ngoài , phải được nối với GND để cho phép chíp vi điều khiển tìm nạp lệnh tờ các vị trí ô nhớ của bộ nhớ chương trình ngoài Chân nối với VCC để thực hiện chương trình bên trong chíp. còn nhận điện áp cho phép lập trình VPP trong thời gian lập trình cho Flash , điện áp này cấp cho bộ phận có yêu cầu điện áp 12V XTAL1 Ngõ vào đến mạch khuyếch đại dảo của mạch dao động và ngõ đến mạch xung clock bên trong chíp. XTAL2 Ngõ ra từ mạch khuyếch đại đảo của mạch dao động. 1.2 Tổ chức bộ nhớ: 1.2.1 Cấu trúc chung của bộ nhớ: Tất cả các vi điều khiển thuộc họ MCS-51 đều phân chia bộ nhớ thành hai vùng địa chỉ cho bộ nhớ dữ liệu và bộ nhớ chương trình. Sự phân chia logic giữa bộ nhớ dữ liệu và bộ nhớ chương trình cho phép truy nhập bộ nhớ dữ liệu bằng 8 bit địa chỉ giúp cho việc lưu trữ và thao tác dữ liệu nhanh hơn.Tuy nhiên, chúng ta có thể sử dụng địa chỉ bộ nhớ dữ liệu 16 bit thông qua thanh ghi DPTR. Bộ nhớ chương trình là loại bộ nhớ chỉ cho phép đọc, không cho phép ghi. Một số vi điều khiển được tích hợp sẵn bộ nhớ chương trình bên trong với dung lượng khoảng 4kbyte hay 8 kbyte, số còn lại phải sử dụng bộ chương trình mở rộng mà quá trình truy nhập được thực hiện thông qua sự điều khiển bằng tín hiệu PSEN (Progam Strobe Enable). Tuy nhiên, vi điều khiển 8051 cho phép ta sử dụng đến 64kbyte bộ nhớ chương trình bằng cách sử dụng cả bộ nhớ chương trình bên trong và bên ngoài. Bộ nhớ số liệu chiếm giữ vùng địa chỉ phân chia của bộ nhớ chương trình. Dung lượng của bộ nhớ dữ liệu có thể mở rộng lên tới 64 kbyte. Trong quá trình truy nhập bộ nhớ số liệu, CPU phát ra các tín hiệu đọc và tín hiệu viết số liệu thông qua các chân RD và WR. 00H 0000H Bộ nhớ Chương trình Bộ nhớ Số 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. Chúng ta có thể kết hợp bộ nhớ chương trình mở rộng với bộ nhớ số liệu mở rộng bằng cách cho hai tín hiệu RD và PSEN qua một cổng logic AND, lối ra của cổng AND này sẽ tạo tín hiệu đọc cho bộ nhớ mở rộng. 1.2.2 Bộ nhớ chương trình: Sau khi Reset, CPU bắt đầu thực hiện chương trình từ địa chỉ 0000H. Vùng đầu của bộ nhớ chương trình là vùng chứa các vector ngắt, mỗi ngắt được phân chia một vùng địa chỉ cố định trong trong bộ nhớ chương trình. Khi xuất hiện ngắt, CPU sẽ nhảy tới địa chỉ này, đây cũng là địa chỉ đầu của chương trình con phục vụ ngắt. Các vector ngắt cách nhau 8 byte, vì vậy nếu chương trình con phục vụ ngắt quá dài (>8 byte) thì tại vector ngắt ta phải đặt một lệnh nhảy không điều kiện tới vùng địa chỉ khác chứa chương trình con phục vụ ngắt. 1.2.3 Bộ nhớ số liệu: Phía bên phải của Hình 2.3 biểu diễn không gian bộ nhớ dữ liệu của MCS-51. Chúng ta có thể sử dụng tới 64 Kbyte bộ nhớ số liệu ngoại vi. Độ rộng bus địa chỉ của bộ nhớ số liệu ngoài có thể là 8 bit hoặc 16 bit. Bus địa chỉ rộng 8 bit thường được sử dụng để liên kết với một hoặc nhiều đường vào ra khác để định địa chỉ cho RAM theo trang. Trong trường hợp bus địa chỉ rộng 16 bit, cổng P2 sẽ phát ra 8 bit địa chỉ cao còn cổng P1 sẽ phát ra 8 bit địa chỉ thấp. Bằng cách này, ta có thể truy nhập trực tiếp lên bộ nhớ dữ liệu ngoài với độ lớn tối đa là 64 Kbyte. Bộ nhớ số liệu trong được chia ra làm 3 vùng: +128 byte cao. +128 byte thấp. +Vùng dành cho các thanh ghi chức năng đặc biệt (SFR). Địa chỉ của bộ nhớ số liệu trong luôn là 8 bit, và có thể quản lý được 256 byte bộ nhớ. 2. Tổ chức bộ nhớ (Memory Map): Từ cấu trúc của vi điều khiển 89C51 giới thiệu ở chương I và yêu cầu thiết kế ta tiến hành phân bổ các vùng nhớ như sau: Bộ nhớ chương trình 8K ROM chia làm hai vùng: ROM trong (On-chip) có địa chỉ vật lý: 0000H ¸ 0FFFH. Bộ nhớ dữ liệu được mở rộng thêm 8K RAM ngoài, với địa chỉ vật lý: 2000H ¸ 3FFFH. 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: 4000H Địa chỉ cổng PB: 4001H Địa chỉ cổng PC: 4002H Địa chỉ của từ điều khiển PSW: 4003H Địa chỉ của ADC08098 kênh vào tương tự: 6000H ¸ 6007H. 3. Khối hiển thị : Khối hiển thị gồm 8 LED 7 đoạn được tổ chức theo kiểu sáng luân phiên 2.5 ms một lần. LED sáng được chọn bởi 89C51 qua đường điều khiển từ cổng P0.0 -> P0.3. Dữ liệu được hiển thị dưới dạng mã 7 thanh cũng được 89C51 gửi tới LED qua đường data. Để phù hợp giữa số liệu đưa ra cổng của 8255 (ở dạng BCD) với số liệu hiển thị ra LED 7 đoạn, ta sử dụng mạch phần cứng. Vì vậy trong khối hiển thị ta sử dụng vi mạch SN7447 để giải mã số BCD ra mã 7 thanh và để điều khiển bộ đèn hiển thị. 4. Khối các thiết bị giao tiếp/ghép nối. Cổng vào ra tương tự/số dùng ADC0809. Số liệu vào tương tự từ 8 cảm biến nhiệt độ sẽ được kết nối vào 8 cổng vào của ADC, ADC được điều khiển bởi VXL89C51 thực hiện việc chuyển đổi số liệu sang dạng số và lưu trữ vào một vùng nào đó trong RAM trong. Cổng vào/ ra số dùng vi mạch PPI 8255 có khả năng lập trình thực hiện quá trình phối hợp trao đổi dữ liệu; cụ thể ở đây là số liệu vào giữa ADC với VXL và số liệu từ VXL ra LED. II. Giới thiệu linh kiện và tổ chức phối ghép. 1. Thiết kế bộ nhớ: Xem xét cấu trúc của 89C51 và yêu cầu cần 8K cho nhớ chương trình ta thiết kế thêm vùng nhớ chương trình dùng thêm 8Kb ROM đặt ở ngoài. Đối với yêu cầu cho nhớ dữ liệu, vì 89C51 đã có 128 bytes RAM trong và yêu cầu cần thiết kế bộ nhớ dữ liệu là 4Kb nên để dễ dàng cho thiết kế ta sử dụng thêm 8Kb RAM ngoài để mở rộng bộ nhớ dữ liệu cho hệ thống. Bộ nhớ ROM ngoài Thực ra thì ta có thể dùng bộ nhớ ROM ngoài là các chíp nhớ EPROM có dung lượng 4K hoặc 8K có bán trên thị trường để mở rộng bộ nhớ.Tuy nhiên, để cho đơn giản ta lựa chọn giải pháp là dùng bộ nhớ ROM 8k trên chíp vi điều khiển 89S51.Như vậy sẽ đơn giản hơn rất nhiều cho thiết kế mà vẫn phù hợp với nội dung phạm vi cho phép của chương trình. Bộ nhớ RAM ngoài Đối với RAM ngoài ta sử dụng loại SRAM vi mạch dùng trong thiết kế là 6264. Cũng 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 /CS2 của giải mã địa chỉ. 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 6264: 2. Vi mạch ADC0809: 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ý. Các đặc điểm cơ bản của ADC 0809 Nguồn nuôi đơn ± 5 V, hiệu suất cao. 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. a. Bảng chân lý và sơ đồ chân của vi mạch ADC0809. A B C X 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 X X X (?) * ý 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 b. 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. c. Ghép 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. Các đầu vào địa chỉ này kết nối với đường địa chỉ A0A1A2 của Bus địa chỉ của hệ thống. Các đường địa chỉ cao của hệ thống được dùng để tạo tín hiệu chọn chip (/CS) cho ADC0809. + Tín hiệu /CS được đưa tới đầu vào của mạch OR để khởi động ADC (Start) khi có tín hiệu /WR đồng thời chốt địa chỉ (ALE) của kênh hiện hành có giá trị là giá trị 3 bit A,B,C. Tín hiệu /CS cũng được đưa tới đầu vào của mạch OR thứ hai để tạo tín hiệu OE cùng với /RD nhằm chốt dữ liệu đã biến đổi xong ở đầu ra. + Vì khi biến đổi xong, ACD0809 dùng tín hiệu ra chân EOC để báo cho VXL biết mã nhị phân tương ứng với mức cao của tín hiệu đầu vào đã được tạo ra. Vì vậy ta kết nối EOC với đầu vào ngắt ngoài /INT1 của 8051. + 8 bit dữ liệu thường được ghép trực tiếp với Bus dữ liệu hệ thống vì bản thân bộ đệm ra là 3 trạng thái, cũng có thể ghép qua 8255. 3.Vi mạch giao tiếp song song PPI 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. a. 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 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. b. 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. Port A Port C (4 bit cao) Nhóm A Port C (4 bit thấp) Port B Nhóm B Điều khiển nhóm A Điều khiển nhóm B Đệm bus dữ liệu Logic điều khiển ghi/đọc RD\ WR\ CS\ A0 A1 D7 – D0 PA7 – PA0 PC7 – PC4 PC3 – PC0 PB7 – PC0 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. Vi mạch 8255 giao tiếp với vi xử lý thông qua các đường sau : - Đường dữ liệu: gồm 8 đường dữ liệu (D0 - D7). Mã lệnh, các dữ liệu đều được truyền đi trên đường này. - Đườ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. c. Từ điều khiển: Từ điều khiển là dữ liệu được gửi tới thanh ghi điều khiển (CWR) của 8255. Giá trị của từ điều khiển sẽ xác định cấu hình làm việc cho các cổng của 8255A, đó là việc lựa chọn chức năng nhập hay xuất của các cổng. Trong từ điều khiển có một bit để phân biệt hai chức năng điều khiển khác nhau là: + Định nghĩa chế độ các cửa (bit D7 của từ điều kiển là 1). + Lập/xoá các bit của Port C (bit D7của từ điều khiển là 0). Đị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 Trong chế độ này có thể có 3 chế độ làm việc khác nhau tuỳ thuộc vào nội dung của hai bit D6D5, cụ thể là: + Chế độ 0(Vào ra cơ sở): D6D5 = 00,ở chế độ này 8255A cho khả năng xuất/nhập dữ liệu đơn giản qua cả 3 cổng A, B, C một cách độc lập. + Chế độ 1 : D6D5 =01, đây là chế độ vào ra có chốt (Strobe), nghĩa là có sự đối thoại giữa ngoại vi và hệ VXL thông qua các bit của cổng C. Trong chế độ này, với nhóm A. thì PA dùng để trao đổi số liệu và nửa cao của PC (PC4 ¸ PC7) để đối thoại giữa ngoại vi và VXL. Còn ở nhóm B thì PB dùng để trao đổi số liệu và PCL để đối thoại. + Chế độ 2: D6D5 =1x. Cổng A dùng vào/ra hai chiều, các bit PC3 ¸ PC7 dùng làm tín hiệu đối thoại. Cổng PB có thể làm việc như ở chế độ 1. 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 d. Ghép nối 8255A với VXL8051. + Với hệ thống đơn giản có thể phối ghép trực tiếp 8255A với VXL. Đầu vào /CS được nối vào một trong các /CSi của giải mã địa chỉ 74LS138 (sẽ đề cập sau). + Các tín hiệu /RD, /WR của 8255 cũng được kết nối tương ứng với các tín hiệu điều khiển việc xuất/nhập dữ liệu của 8051. + Đầu vào Reset (chân 35) có thể kết nối với chân Reset của 8051 nếu muốn 8255A cùng Reset với hệ thống khi ấn nút reset hoặc có thể để ở mức tích cực thấp. + Hai tín hiệu vào địa chỉ A1A0 được nối trực tiếp vào Bus địa chỉ hệ thống. A1A0 được giải mã bên trong mạch 8255A để chọn các cửa vào/ra A, B, C và CWR như đã đề cập ở trên. + Các chân số liệu của 8255 có thể kết nối trực tiếp vào Bus số liệu của hệ thống mà không cần đệm 3 trạng thái, vì bản thân các cổng P0 của 8051 đều có đệm 3 trạng thái rồi. e. Ghép nối 8255A với thiết bị ngoại vi: Phần ghép nối với thiết bị ngoại vi của 8255A thông qua 24 đường số liệu và điều khiển ở các cổng A, B, C. Các đường ghép nối này được định nghĩa bằng chương trình như giới thiệu ở trên. Bằng cách chọn chế độ làm việc thích hợp và chính xác vi mạch 8255A có thể đáp ứng được những nhu cầu ghép nối tinh vi. D0-D7 PA PB PC A0 A1 RD WR CS 8255A AD0-AD7 Đệm BUS S/L 74245 Chốt Đ/C Thấp 74373 Giải mã đ/c (3/8) RD WR ALE/P 8051 P1 P3.0¸P3.5 A14 A15 P2 (P3.7) (P3.6 4. Thiết kế khối hiển thị: Ở đây ta dùng khối hiển thị là dùng khối hiển thị tinh thể lỏng LCD: Khối hiển thị này có ưu điểm là: - Màn hình đang dần có giá thành hạ - Khả năng hiển thị số, ký tự và đồ họa tốt hơn nhiều so với đèn LED. - Sử dụng thêm bộ điều khiển làm tươi LCD và như vậy giải phóng CPU khỏi công việc này .Còn đối với LED luôn cần CPU hoặc bằng cách nào đó để duy trì việc hiển thị dữ liệu. - Dễ dàng lập trình các kí tự ,đồ họa. Chức năng các chân của LCD VCC : chân nối nguồn 5V VSS : chân đất VEE : chân điều khiển độ tương phản của LCD. RS : chân này dùng để chọn thanh ghi.Nếu RS=0 thì thanh ghi mã lệnh được chọn còn nếu RS=1 thì thanh ghi dữ liệu được chọn và cho phép người dùng gửi dữ liệu hiển thị lên LCD R/W : chân vào đọc ghi cho phép người dùng đọc/ghi thông tin từ /lên LCD R/W=0 thì đọc, còn R/W=0 thì là ghi lên LCD. E : chân cho phép được LCD sử dụng để chốt thông tin hiện có trên chân dữ liệu .Khi dữ liệu được cấp đến thì một xung cao xuống thấp được áp đến chân E để LCD chốt dữ liệu trên chân dữ liệu.Xung này phải rộng tối thiểu là 450ns. D0-D7 : Đây là 8 chân dữ liệu trên 8 bít ,được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Ta có thể gửi các mã lệnh đến để điều khiển hiển thị trên LCD ,các mã lệnh này được cho trong tài liệu kỹ thuật của LCD. Trong hệ thống ,khi ghép nối thì các chân của LCD có thể ghép qua 8051 hoặc có thể ghép qua các chân của cổng giao tiếp 8255 tùy theo sở thích của người sử dụng. 5. Khối vào dữ liệu: Khối vào dữ liệu mà ta sử dụng đó là bàn phím số 16 phím được dùng rộng rãi.Nguyên tắc hoạt động của bàn phím thực chất là nguyên tắc hoạt động của ma trận phím .Chương trình để chạy bàn phím là chương trình dùng thuật toán "bẫy phím " nghĩa là liên tục quét hàng của bàn phím ,đồng thời khi phát hiện có phím nhấn ,cột tương ứng =0 thì bộ Vi xử lý của ta hoàn toàn có thể xác định được hàng và cột của phím được ấn và từ đó cho mã của phím. 6. Các vi mạch phụ trợ khác: a. Mạch giải mã 74LS138: Nó bao gồm 14 chân, trong đó: Y0 ¸ Y7 là các đường ra địa chỉ, tích cực ở mức thấp. 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 chức năng của 74LS138 như sau: C B A /E1 /E2 E1 /Y0 /Y1 /Y2 /Y3 /Y4 /Y5 /Y6 /Y7 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 b. Vi mạch chốt 74LS373: Đâ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. Trong ghép nối với 89C51: + 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 89C51. III.Sơ đồ thiết kế chi tiết. PHẦN II THIẾT KẾ PHẦN MỀN LƯU ĐỒ THUẬT TOÁN 1.Lưu đồ của chương trình: START Ấn start? S - Khởi tạo chế độ của 8255A - Cho phép ngắt ngoài - Nhập giá trị min, max ,trung bình - STOP Đ Đ có chọn kênh? Đ Có đk báo động? S Báo động Đọc từ ADC Hiện to trung bình S 1.1 Chương trình chính: -Ấn phím chọn kênh -Hiển thị to kênh đó Đợi 20s 1.2 Chương trình đọc dữ liệu 8 kênh từ ADC: Start -Đợi chuyển đổi xong -Đọc kênh thứ i R2=j=8 Chờ đọc xong Đọc xong ? N j=j-1 j=0 N End Y Y Chương trình con dùng để tính giá trị trung bình: dùng pp đợi trễ tg chuyển đổi của ADC.( sau khoảng 100us) Start -Đọc kênh thứ i(0£i£7) -Chia cho 8 -Phần nguyên =Ai -Phần dư=Bi Đọc xong? TBC=SAi+(SBi)/8 End N Y Start -Đọc kênh thứ i từ ADC -Đưa gía trị đọc được vào vùng nhớ RAM tương ứng End Start -Đọc số TBC -TBC/10 -A=phần nguyên -B=phần dư -Hàng chục =A -Hàng chục =B End 1.3. Chương trình tính giá trị trung bình của 8 kênh đọc được từ ADC: 1.4. Chương trình tách số trung bình cộng ra hàng chục, đơn vị 1.5 .Chương trình con quét phím . Bắt đầu Nối đất hàng tiếp theo Đọc tất cả các hàng Đọc tất cả các hàng Đọc tất cả các cột phím hàng này đựoc ấn tất cả phím được ấn S Tìm phím được ấn Xác định mã quét Đ Đọc tất cả các hàng Trở về tất cả phím được ấn S Đ Chờ phím nhẫn xong Đọc tất cả các cột có phím được ấn S Đ Chương trình hiển thị đèn LED qua các cổng của 8255. nhiệt độ kênh so với tb nhiệt độ kênh>tb hết kênh Quay R4,R5 Đưa R4 ra PA,R5 ra PB Tăng R4,R6 Tăng R5,R7 Xóa C, R4, R5, R6, R7 Đ S Khác Bằng Đ S Chương trình phần mềm viết bằng ngôn ngữ Assembly: ; ------------- READS51 generated header -------------- ; module : C:\thang45\thang45.asm ; created : 10:37:23, Sunday, April 23, 2006 ; ----------------------------------------------------- #include CONGA EQU 4000H CONGB EQU 4001H CONGC EQU 4002H ONHOMIN EQU 40H ADC EQU 6000H LED EQU 8000H ORG OO00H LJMP MAIN ORG 0003H LJMP CHONKENH ORG 0013H ; NUT AN STOP LJMP STOP RETI MAIN: ACALL PAPC_RA ;----------------------- MOV IE,#10000101B ACALL START_LCD ACALL NHOM START: ACALL PAPC_RA ACALL BANPHIM MOV A,R6 CJNE A,#'C',START ACALL NHAPGIATRI ;NHAP GIA TRI MIN,Max VA TB ACALL XOAMANHINH LAMLAI: ACALL DOCDATATHANG ;DOC DU LIEU TU ADC ACALL TINHTB ;TINH GIA TRI TB. ACALL DISPLAYLED ;HIEN THI CAO THAP CUA KENH. ACALL HETCHUONGTRINH ;-------------- TINHTB: ACALL TINHTOAN ACALL XOAMANHINH MOV A,38H MOV B,#10 DIV AB ADD A,#48 MOV R1,A ACALL HIENTHI MOV A,B ADD A,#48 MOV R1,A ACALL HIENTHI RET ;------------ NHAPGIATRI: MOV R0,#ONHOMIN ACALL XOAMANHINH; DAU TIEN XOA HET MAN HINH ACALL NHAPMIN ;goi gia tri max LAP1: ACALL BANPHIM ;go mot phim nao do MOV A,R6 MOV R1,A CJNE A,#'A',LUU1 ;phim do co phai la "A" ko? ACALL XOAMANHINH ;xoa LCD ACALL NHAPMAX ;goi gia tri min LAP2: ACALL BANPHIM MOV A,R6 MOV R1,A CJNE A,#'A',LUU2 ACALL XOAMANHINH ACALL NHAPTB LAP3: ACALL BANPHIM MOV A,R6 MOV R1,A CJNE A,#'A',LUU3 SJMP THOAT LUU1: ACALL LUU SJMP LAP1 LUU: MOV @R0,A INC R0 ACALL READY ACALL HIENTHI;hien thi gia tri len LCD RET LUU2: ACALL LUU SJMP LAP2 LUU3: ACALL LUU SJMP LAP3 THOAT: RET ;----------- NHAPMIN: ; nhap gia tri min ACALL READY ; kiem tra xem LCD da san sang chua ;goi chuong trinh con cho PaPc_vao MOV A,#'N' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'H' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'A' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'P' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#86H ; nhap ma cua dau space MOV R1,A ACALL DUALENH ACALL READY MOV A,#'M' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'I' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'N' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#':' MOV R1,A ACALL HIENTHI RET ;------------- NHAPTB: ; nhap gia tri min ACALL READY ; kiem tra xem LCD da san sang chua ;goi chuong trinh con cho PaPc_vao MOV A,#'N' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'H' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'A' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'P' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#86H ;DICH CON TRO SANG PHAI MOV R1,A ACALL DUALENH ACALL READY MOV A,#'T' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'R' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'B' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#':' MOV R1,A ACALL HIENTHI RET ;------------ NHAPMAX: ACALL READY ; kiem tra xem LCD da san sang chua ;goi chuong trinh con cho PaPc_vao MOV A,#'N' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'H' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'A' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'P' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#86H ; nhap ma cua dau space MOV R1,A ACALL DUALENH ACALL READY MOV A,#'M' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'A' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'X' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#':' MOV R1,A ACALL HIENTHI RET ;------------ BANPHIM: OVER: ACALL DELAY ;tao tre 20ms MOVX A,@DPTR ;lay lai gt nhan ANL A,00001111B ;che bit khong dung CJNE A,#00001111B,OVER1 ;sau 20ms neu P@ van khac chung to chac chan la van co phim. Bay gio tim hang SJMP OVER ;nhay ve neu do chi la nhieu OVER1: ;hoac do an nho tay. MOV DPTR,#CONGB ;nap gia tri dia chi cua cong B MOV A,#11111110B ;tiep dat hang 0 MOVX @DPTR,A INC DPTR ;nap dia chi cho cong C; MOVX A,@DPTR ;lay gia tri cong C ANL A,#00001111B ;che 4 bit cao khong dung CJNE A,#00001111B,HANG0 ;neu bien thien chung to khong duoc an nen ;nhay den chuong trinh tim cot MOV DPTR,#CONGB ;lay dia chi cong B MOV A,#11111101B MOVX @DPTR,A ;tiep dat hang 1 INC DPTR MOVX A,@DPTR ANL A,#00001111B ;che 4 bit cao khong dung CJNE A,#00001111B,HANG1 MOV DPTR,#CONGB MOV A,#11111011B MOVX @DPTR,A ;kiem tra tiep hang 2 INC DPTR MOVX A,@DPTR ANL A,#00001111B CJNE A,#00001111B,HANG2 MOV DPTR,#CONGB MOV A,#11110111B MOVX @DPTR,A ;tiep dat hang 3 INC DPTR MOVX A,@DPTR ANL A,#00001111B CJNE A,#00001111B,HANG3 LJMP OVER HANG0: MOV DPTR,#MA0 ;kiem tra cot 0 SJMP TIMCOT HANG1: MOV DPTR,#MA1 ;kiem tra cot 1 SJMP TIMCOT HANG2: MOV DPTR,#MA2 ;kiem tra cot 2 SJMP TIMCOT HANG3: MOV DPTR,#MA3 ;kiem tra cot 3 SJMP TIMCOT TIMCOT: RRC A ;quay phai A va co nho vao co C JNC LAYDL ;neu co CY o muc thap, lay du lieu INC DPTR ;neu khong thi nhay den cot du lieu tiep cho SJMP TIMCOT ;den khi co C bang 0. LAYDL: CLR A ;xoa thanh ghi A MOVC A,@A+DPTR MOV R6,A K1: MOV DPTR,#CONGB MOV A,#00 MOVX @DPTR,A MOV DPTR,#CONGC MOVX A,@DPTR ANL A,#00001111B CJNE A,#00001111B,K1 RET ;------------------ ORG 400H MA0: DB '7' DB '8' DB '9' DB ':' MA1: DB '4' DB '5' DB '6' DB '*' MA2: DB '1' DB '2' DB '3' DB '-' MA3: DB 'A' DB '0' DB 'C' DB 'D' PBPC_VAO: MOV A,#10000001B MOV DPTR,#4003H MOVX @DPTR,A RET DELAY: MOV R1,#250 LAP: MOV R2,#250 AGAIN: DJNZ R2,AGAIN DJNZ R1,LAP RET START_LCD: ACALL PAPC_RA MOV R1,#38H ACALL DUALENH MOV R1,#0EH ACALL DUALENH MOV R1,#01H ACALL DUALENH MOV R1,#06H ACALL DUALENH ACALL DELAY ; DE CHO LCD HOAT DONG SONG CHU KHONG CO LA BI MAT CHU "N" RET READY: MOV A,#10000000B ;TU DE LAP BIT D7 LEN 1 MOV DPTR,#4000H MOVX @DPTR ,A ; LUC NAY PA.7 BANG 1 MOV DPTR,#4003 MOV A,#90H ; tu dk PA lam vao, PB,PC ra MOVX @DPTR,A MOV A,#01000000B ;R/W BANG 1 DE DOC THANH GHI LENH tu dk LCD kiem tra san sang MOV DPTR,#4002H ;DUA RA CONG C MOVX @DPTR,A ;dua DPTR Tre_ready: MOV A,#01100000B ; SET BIT PC.5 LEN 1 DE E = 1 NHAN XUNG CAO XUONG THAP MOVX @DPTR , A ; DUA RA LCD MOV A,#01000000B ; XOA DE CHOT DU LIEU MOVX @DPTR,A MOV DPTR,#4000H MOVX A,@DPTR ;lay du lieu cong PA JB ACC.7,Tre_ready LCALL PAPC_RA RET DUALENH: ACALL READY MOV A,R1; LAY R1 LAM TRUNG GIAN VI A DUNG NHIEU QUA MOV DPTR,#4000H MOVX @DPTR,A MOV DPTR,#4002H MOV A,#00100000B; SEM LAI LENH NAY MOT CHUT MOVX @DPTR,A MOV A,#00H MOVX @DPTR,A RET HIENTHI: ACALL READY MOV A,R1 MOV DPTR,#4000H MOVX @DPTR,A MOV A,#10100000B MOV DPTR,#4002H MOVX @DPTR,A CLR ACC.5 MOVX @DPTR,A RET PAPC_RA: MOV DPTR,#4003H ; nhap dia chi 4.000H de chon 8255(2) ; 0100.0000.0000.0000.A0A1:00 ; chon congPA MOV A,#10000001B ; tu dk cong ra (tat ca cac cong la ra) MOVX @DPTR,A ;nap control word to control register RET XOAMANHINH: ACALL READY ACALL START_LCD MOV A,#01H MOV R1,A ACALL DUALENH ACALL START_LCD RET ;-------------------- XULYKETQUA: MOV R1,#ONHOMIN ;bat dau dia chi chua nhiet do max ,min va tb BATDAU: CJNE R1,#46H,TIEP1 SJMP DATGIATRI TIEP1: MOV A,@R1; lay o nho dau tien CLR C SUBB A,#30H; tru 30 de chuyen tu ma ASCI sang ma thuc MOV B,#10 ; lay 10 nap vao B MUL AB; nhan chu so hang chuc MOV R2,A; luu tam vao r2 INC R1;tang o nho tiep theo MOV A,@R1 CLR C SUBB A,#30H MOV @R1,A; lay chu so hang don vi MOV A,R2 ;lay lai gia tri cua so hang chuc ADD A,@R1;cong voi so hang don vi DEC R1;ve o nho dau tien MOV @R1,A;lay lai gia tri cua A dat vao o nho do INC R1 INC R1;nhay den o nho tiep theo(cach 2 o) SJMP BATDAU; SAU chuong trinh thi add(max) = 40h ;add(min) = 42h ;add(tb) = 44h DATGIATRI: ;add(min) = 40h MOV A,42H ;add(max) = 41h MOV 41H,A ;add(tb) = 42h MOV A,44H MOV 42H,A ;MOV @R1,A RET ;------------------------- DOIMA2: ADD A,#30H RET ;---------------- CHUYENMATHANG: MOV B,#10 DIV AB ACALL DOIMA2 MOV R2,A ACALL READY MOV A,R2 MOV R1,A ACALL HIENTHI MOV A,B ACALL DOIMA2 MOV R2,A ACALL READY MOV A,R2 MOV R1,A ACALL HIENTHI RET ;----------------------- DOCDATATHANG: MOV R1,#30H MOV DPTR,#6000H MOV R2,#8 DOCTIEP: MOV A,#00H MOVX @DPTR,A ACALL TREs ACALL TREs MOVX A,@DPTR MOV @R1,A INC R1 INC DPTR DJNZ R2,DOCTIEP RET ;-------------------- TREs: MOV R5,#20; LAN11: MOV R3,#20; LAN21: MOV R4,#100; DOI1: DJNZ R4,DOI1 DJNZ R3,LAN21 DJNZ R5,LAN11 RET ;--------------------- TINHTOAN: MOV R2,#00; MOV R1,#00; MOV R3,#00; MOV R0,#30H; Tinh_V: MOV A,@R0 ;lay kenh 1 MOV B,#08 DIV AB ;chia cho 8 ADD A,R1 ;so nguyen vao R0 MOV R1,A MOV A,B ADD A,R2 ;so du vao MOV R2,A INC R0 CJNE R0,#37H,tinh_V ;vong den khi 37H MOV A,R2; MOV B,#08; DIV AB; ADD A,R1 MOV 38H,A ;gia tri trung binh de vao dia chi 38H trong RAM RET ;-------------------- DISPLAYLED: CLR C ;xoa C MOV R0,#30H ;R0 lam thanh ghi chua dc MOV R4,#00H ;dung R4 bao cao MOV R5,#00 ;dung R5 bao thap MOV R6,#00 ;dung R6 lam bao so kenh co t > ttb MOV R7,#00 ;dung R7 lam bao so kenh co t < ttb VONG_LAP: MOV A,@R0 CJNE A,42H,SOSANH ;nhay den so sanh LJMP bo_qua ;thoat khoi chuong trinh SOSANH: JNC CAO ;nhay den cao neu c = 0(@R0 > NDTB) LJMP THAP ;C = 1 nhay den thap CAO: INC R6 ;so kenh co t > ttb INC R4 ;dk led cao LJMP bo_qua ;Nhay de THAP: INC R7 ;so kenh co t < ttb INC R5 ;dk led thap Bo_qua: MOV A,R4 ;chuyen R4 vao A RL A ;quay trai A MOV R4,A ;tra cho R4,thuc chat quay R4 MOV A,R5 ;chuyen R5 den A RL A ;quay trai A MOV R5,A ;chuyen tra lai cho R5 INC R0; CJNE R0,#38H,VONG_LAP Dua_ra_led: MOV DPTR,#8003H ;chon 8255(1) MOV A,#80H ;nap tu dk control register MOVX @DPTR,A ;gui ra cong PD MOV DPTR,#8000H ;lay cong PA MOV A,R4 ;dua tu dk cac bit cong PB MOVX @DPTR,A MOV A,R5 INC DPTR MOVX @DPTR,A RET ;----------------------- COIBAODONG: ;de coi o chan Pc.0 cua 8255(1) CLR C ;xoa co C MOV A,#3 CJNE A,5H,SAU1 ;so sanh R6 voi R6 > 3 C = 1 SAU1: JC BAODONG ;C = 1, nhay den bao dong CLR C ;xoa C MOV A,#3H ;neu so kenh lon hon 3 CJNE A,6H,SAU2 ;R7 > 3, C = 1 SAU2: JC BAODONG ;C = 1, nhay den bao dong CLR C ;xoa C MOV A,41H ;41h chua nhiet do max CJNE A,38H ,SAU3 ;Ttb > Tmax C = 1 SAU3: JC BAODONG ;C = 1, nhay den bao dong CLR C ;xoa C MOV A,38H ;dua nhiet do trung binh da tinh vao A CJNE A,40H,SAU4 ;Tmin > Ttb C = 1 SAU4: ;Tmin luu o 40H JC BAODONG ;C = 1, nhay den bao dong LJMP HET ;neu ko thi nhay den ket thuc ;----------------------- BAODONG: MOV R6,#200 COI1:MOV R7,#100 COI2:DJNZ R7,COI2 DJNZ R6,COI1 CPL P3.5 SJMP BAODONG ;------------------- HET : RET ;-------------------- CHONKENH: ;ngat phai uu tien nhI ACALL NHAPKENH ;sau khi goi LCD hien chu "Nhap kenh tu 0->7:" ACALL BANPHIM ;GO mot phim chon kenh (chi duoc tu 0- > 7) MOV A,R6 ;GIU GIA TRI CUA PHIM AN MOV R7,A MOV R1,A ACALL HIENTHI MOV A,#':' MOV R1,A ACALL HIENTHI MOV A,R7 CLR C SUBB A,#48 ADD A,#2FH ;den dia chi bat dau chua du lieu MOV R0,A MOV A,@R0 MOV B,#10 DIV AB ADD A,#48 MOV R1,A ACALL HIENTHI MOV A,B ADD A,#48 MOV R1,A ACALL HIENTHI TAMDUNG: ACALL BANPHIM MOV A,R6 CJNE A,#'D',TAMDUNG RETI ;-------------- NHAPKENH: ACALL PAPC_RA ACALL XOAMANHINH ;goi ctr con xoa LCD ACALL READY ; kiem tra xem LCD da san sang chua MOV A,#'K'; MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'E' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'N' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'H' MOV R1,A ACALL HIENTHI ACALL READY RET NHOM: ACALL READY ; kiem tra xem LCD da san sang chua ;goi chuong trinh con cho PaPc_vao MOV A,#'N' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'H' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'O' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'M' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'4' MOV R1,A ACALL HIENTHI ACALL READY RET ;-------------------- STOP:ACALL XOAMANHINH ACALL READY ; kiem tra xem LCD da san sang chua ;goi chuong trinh con cho PaPc_vao MOV A,#'S' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'T' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'O' MOV R1,A ACALL HIENTHI ACALL READY MOV A,#'P' MOV R1,A ACALL HIENTHI ACALL READY SJMP $ RET ;---------------- HETCHUONGTRINH: MOV R5,#200; LAN111: MOV R3,#200; LAN211: MOV R4,#100; DOI11: DJNZ R4,DOI11 DJNZ R3,LAN211 DJNZ R5,LAN111 RET END LỜI KẾT Qua thời gian làm đồ án đã giúp chúng em hiểu thêm về việc thiết kế một hệ thống trong công nghiệp có sử dụng vi điều khiển đặc biệt là vi điều khiển 89C51. Trong công nghiệp hiện nay việc đưa các vi điều khiển vào để tạo ra các thiết bị thông minh là cần thiết. Từ đó các hệ thống được tao ra sẽ gon nhẹ hơn và giải quyết nhiệm vụ nhanh hơn, dễ dàng hơn. Trong thiết kế hệ thống này đã đáp ứng được yêu cầu của bài toán đặt ra, vận dụng tốt những tính năng ưu việt của vi điều khiển 89C51 cũng như kết nối các thiết bị được sử dụng một cách hợp lý. Được sự chỉ bảo, giúp đỡ tận tình của các thầy hướng dẫn, chúng em đã hoàn thành việc thiết kế hệ thống thu thập số liệu 8 kênh tự động. Nhưng do thời gian có hạn và kiến thức thực tế chưa có nên việc tìm hiểu cũng như vận dụng còn nhiều hạn chế, chúng em rất mong được sự góp ý của các thầy để mạch thiết kế được hoàn thiện hơn. Chúng em xin chân thành cảm ơn các thầy ! NHÓM ĐỒ ÁN

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

  • doc[webtailieu.net]-DDientu68.doc