Đề tài Xây dựng chương trình điều khiển Moniter cho hệ vi xử lý chuyên dụng

Tài liệu Đề tài Xây dựng chương trình điều khiển Moniter cho hệ vi xử lý chuyên dụng: Bộ GIáO DụC Và ĐàO TạO TRường đại học dân lập đông đô Khoa công nghệ thông tin Bài tập tốt nghiệp Đề tài: Xây dựng chương trình điều khiển Moniter cho hệ vi xử lý chuyên dụng Giáo viên hướng dẫn: PTS. Đỗ Xuân Tiến Sinh viên thực hiện : Phạm Thị Hải Lớp b2-khoá 2 Hà nội 6/2000 Lời cảm ơn Mở đầu cho bài tập tốt nghiệp này, em xin gửi lời cảm ơn trân trọng nhất tới thầy Đỗ Xuân Tiến _ Học Viện Kỹ Thuật Quân Sự, là người trực tiếp hướng dẫn em thực hiện bài tập tốt nghiệp này và đã cho em những chỉ dẫn quý giá.Thiếu sự giúp đỡ của thầy em không có được kết quả như ngày hôm nay. Xin chân thành cảm ơn ban giáo vụ khoa Công nghệ Thông tin và các anh chị quản lý phòng máy trường Đại học Dân lập Đông Đô đã luôn sẵn sàng giúp đỡ và tạo mọi điều kiện tốt nhất cho em. Cảm ơn các bạn bè đã luôn quan tâm động viên cổ vũ giúp đỡ để em thực hiện tốt bài tập tốt nghiệp này. Em xin chân thành cảm ơn! Hà nội tháng 6/2000 Sinh viên Phạm Thị Hải lời nói đầu Trong lĩnh vực công nghệ tin ...

doc44 trang | Chia sẻ: hunglv | Lượt xem: 957 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Xây dựng chương trình điều khiển Moniter cho hệ vi xử lý chuyên dụng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Bộ GIáO DụC Và ĐàO TạO TRường đại học dân lập đông đô Khoa công nghệ thông tin Bài tập tốt nghiệp Đề tài: Xây dựng chương trình điều khiển Moniter cho hệ vi xử lý chuyên dụng Giáo viên hướng dẫn: PTS. Đỗ Xuân Tiến Sinh viên thực hiện : Phạm Thị Hải Lớp b2-khoá 2 Hà nội 6/2000 Lời cảm ơn Mở đầu cho bài tập tốt nghiệp này, em xin gửi lời cảm ơn trân trọng nhất tới thầy Đỗ Xuân Tiến _ Học Viện Kỹ Thuật Quân Sự, là người trực tiếp hướng dẫn em thực hiện bài tập tốt nghiệp này và đã cho em những chỉ dẫn quý giá.Thiếu sự giúp đỡ của thầy em không có được kết quả như ngày hôm nay. Xin chân thành cảm ơn ban giáo vụ khoa Công nghệ Thông tin và các anh chị quản lý phòng máy trường Đại học Dân lập Đông Đô đã luôn sẵn sàng giúp đỡ và tạo mọi điều kiện tốt nhất cho em. Cảm ơn các bạn bè đã luôn quan tâm động viên cổ vũ giúp đỡ để em thực hiện tốt bài tập tốt nghiệp này. Em xin chân thành cảm ơn! Hà nội tháng 6/2000 Sinh viên Phạm Thị Hải lời nói đầu Trong lĩnh vực công nghệ tin học như hiện nay, thì sự phát triển nhanh của kỹ nghệ phần cứng và phần mềm làm cho máy tính thục sự trở thành công cụ cá nhân để xử lý thông tin. Ngày nay tốcđộ xử lý của PC nhanh hơn rất nhiều so với tốc độ của các hệ vi xử lý chuyên dụng. Trong khi hệ vi xử lý thực hiện một lệnh thì PC có thể đã thực hiện được hàng trăm, hàng ngàn lệnh. Do vậy việc Xây dựng chương trình điều khiển Moniter cho hệ vi xử lý chuyên dụng là một điều hết sức cần thiết. Vấn đề đặt ra là hãy sử dụng PC kèm theo một chương trình phần mềm cần thiết, một Card giao tiếp giữa PC và hệ vi xử lý chuyên dụng, sao cho có sử dụng một vùng Ram ngay trong PC để mô phỏng cho EPROM để nạp chương trình hệ thống của hệ chuyên dụng. Chúng ta sẽ đi sâu vào tìm hiểu về bộ vi xử lý 8085A của Intel. Đây là bộ vi xử lý điển hình tạo điều khiển chuyên dụng.Nó có khả năng phân biệt 256 địa chỉ cho các thiết bị ngoại vi. Chúng đã được sử dụng rất rộng rãi trong công nghiệp và nhất là để tạo ra các máy tính 8 bít nổi tiếng một thời như Appe II và Commodore 64. Được sản xuất bằng công nghệ Nmos với công nghệ phần tử trên một đơn vị diện tích cao hơn so với công nghệ Pmos hoặc Cmos. Tuy nhiên do khả năng có hạn và thời gian chuẩn bị còn hạn chế, nên đề tài không tránh khỏi những nhầm lẫn, thiếu sót về mọi mặt. Em mong nhận được sự đóng góp ý kiến của các thầy cô cũng như của bạn bè để bài tập tốt nghiệp này được hoàn thiện hơn. Em xin chân thành cảm ơn! Hà nội 5/2000 Sinh viên: Phạm Thị Hải Nội dung của đề tài gồm có ba chương: Chương 1: tổng quan về máy tính và hệ vi xử lý. 1.1. Cấu trúc của máy tính PC 1.2. Giới thiệu sơ lược cấu trúc và hoạt động của hệ vi xử lý 1.3. Việc thực hiện lệnh 1.4. Các chương trình Chương 2: Giao tiếp giữa hệ vi xử lý và máy tính PC 2.1. Hệ vi xử lý chuyên dụng. 2.2. Hệ vi xử lý 8085 INTEL. 2.3. Tổ chức Card giao tiếp giữa hệ vi xử lý và máy tính PC chương 3. Xây dựng phần mềm điều khiển. 3.1. Lưu đồ thuật toán của chương trình hệ thống 3.2. Chương trình hệ thống. Kết luận. chương I: tổng quan về máy tính và hệ vi xử lý 1.1. Cấu trúc của máy tính. Một hệ thống máy tính điển hình bao gồm: khối hệ thống(system unit), bàn phím(keyboard), màn hình(display screen), và các ổ đĩa(disk drives). Khối hệ thống thường được xem xét như là máy tính bởi vì nó tập trung các bảng vi mạch của máy tính. Bàn phím, màm hình và các ổ đĩa được gọi là các thiết bị vào/ra (I/O divices) bởi lẽ chúng thực hiện các thao tác vào/ ra dữ liệu của máy tính. Chúng còn được gọi là các thiết bị ngoại vi. Hiện nay người ta dùng các vi mạch(IC chíp)để xây dựng các mạch điện tử của máy tính. Mỗi vi mạch này có thể bao gồm hàng trăm hay thậm chí hàng ngàn đèn bán dẫn(transistor). Các vi mạch này là mạch số(digital ciruit) bởi vì chúng thao tác với v\các mức tín hiệu điện áp rời rạc, mà điển hình là mức điện áp thấp và một mức diện áp cao. Kí hiệu 0 và 1 đạI diện cho tín hiệu điện áp thấp và cao tương ứng. Trong kỹ thuật lập trình hệ thống thì máy tính PC hoặc mạng máy tính PC đóng vai trò như là một phương tiện quan trọng trong tổ chức hệ thống cũng như trong xây dựng phần mềm diều khiển hệ thống đó. Nhờ đó mà các hệ thống này có tính mềm dẻo và tính thông minh trong các thao tác xử lý, gia công và tạo tín hiệu điều khiển cả theo chức năng và cả theo tham số tạm thời gian thực. Máy tính PC thực chất là hệ vi xử lý đa năng. Cấu trúc bên trong của máy tính có dạng như hình 1.1. Các thành phần chủ yêú được liệt kê trong sơ đồ này là cấu hình cơ bản của máy tính PC. Các thế hệ máy tính khác nhau có kết cấu khác nhau song chức năng của các thành phần hệ thống thay đổi. Trong khối hệ thống là một bảng mạch chính chứa bộ vi xử lý và vi mạch nhớ được gọi là bảng mạch hệ thống(System Board). Bảng mạch hệ thống còn được gọi là bảng mạch mẹ(mother board) bởi vì nó còn chứa các khe cắm(slot) mở rộng dùng để ghép thêm các vỉ mạch khác(add-in board). Các mạch vào/ra thường được đặt vào các vỉ ghép thêm. 1.2. Giới thiệu sơ lược cấu trúc và hoạt động của hệ vi xử lý. Bộ vi xử lý là một thành phần rất cơ bản không thể thiếu được để tạo nên máy tính. Trong thực tế bộ vi xử lý còn phải kêta hợp thêm các bộ phận điện tử khác như bộ nhớ và các khối phối ghép vào/ra để tạo nên một hệ vi xử lý hoàn chỉnh. Cần lưu ý rằng để chỉ một hệ thống có cấu trúc như trên, máy vi tính chỉ là một trong những ứng dụng cụ thể của hệ vi xử lý. Trong sơ đồ này ta thấy rõcác khối chức năng chính của hệ vi xử lý gồm: * Bộ xử lý trung tâm(CPU). CPU Bộ Nhớ Vào/Ra Bus điều khiển Bus số liệu Bus địa chỉ Hình 1.2:Sơ đồ khối của hệ vi xử l 1.2.Giới thiệu sơ lược cấu trúc và hoạt động của hệ VXL Bộ VXL là một thành phần rất cơ bản không thể thiếu được để tạo nên máy tính. Tron thực tế bộ VXL còn phải kết hợp thêm các bộ phận điện tử khác như bộ nhớ và các bộ phối ghép vào ra để tạo nên một bộ VXL hoàn chỉnh. Cần lưu ý rằng để một hệ thống có cấu trúc như trên, thuật nhữ System board CPU Cop-processor (Bộ đồng xử lý) oscilator (Tạo dao động) Interrupt level Rom Speaker connector DAM Ram Keyboard connector CMOS TIMER Battery connector Power supply 115/230 Speaker Keyboard Battery fĩxed disk driver Diskette driver Video & Card Slot Slot mở rộng Chíp AGP Slot PCI Hình 1.1: Sơ đồ khối của máy tính PC “VXL” mang ý nghĩa tổng quát so với thuật ngữ máy vi tính vì máy vi tính chỉ là một trong những ứng dụng cụ thể của hệ VXL. Trong sơ đồ trên ta thấy rõ các khối chức năng chính của hệ VXL gồm: Bộ xử lý trung tâm(CPU) Bộ nhớ bán dẫn (memory, M) Khối phối ghép với các thiết bị ngoại vi(I/O) Các Bus truyền thông tin Trong một máy vi tính, CPU là bộ xử lý đơn chíp. CPU là bộ não của máy vi tính, nó điều khiển mọi hoạt động trong máy tính. Nó sử dụng bộ nhớ để lưu trữ thông tin, các vi mạch vào ra để liên lạc với các thiết bị ngoại vi. Ba khối chức năng đầu tiên liên hệ với nhau thông qua tập các đường dây để truyền tín hiệu chung gọi là Bus hệ thống. Bus hệ thống bao gồm: Bus địa chỉ,bus dữ liệu, bus điều khiển 1.2.1.Bộ xử lý trung tâm(CPU) CPU đóng vai trò chủ đạo trong hệ VXL. Khi hoạt động nó đọc mã lệnh được ghi dưới dạng các bit 0 và 1 từ bọ nhớ, sau đó nó sẽ giải mã lệnh này thành dãy các xung điều khiển ứng với các thao tác trong lệnh để điều khiển các khối thao tác thực hiện từng bưóc các thao tác đó. Để làm được việc này bên trong CPU có các thanh ghi dùng để chứ địa chỉ của lệnh sắp được thực hiện gọi là thanh ghi con trỏ lệnh hoặc bộ đếm chương trình, một số thanh ghi đa năng khác cùng bộ tính toán số học và lozic(ALU) để thao tác dữ liệu. Mặc dù bộ VXL là bộ não của máy tính PC và là chip thông minh nhất của hệ thống, nó cũng không thể giám sát tất cả các hoạt động củamột hệ phức tạp như máy tinh PC. Bởi vậy người ta mới phải bổ trợ thêm cho bộ VXL một số chip chuyên dụng nhất. Chúng cho phép giảm nhẹ một phần công việc của bộ VXL và cho phép nó tập chung vào công việc thưcj hiện chương trình. Các chip này được dùng cho việc liên lạc và điều khiển các thiết bị ngoại vi như ổ đĩa, màn hình ... Sau đây là các chip bổ trợ chính cho bộ VXL Bộ điều khiểnchế độ truy nhập trưc tiếp DMA(8237 DMAC) dùng để vào ra thông tin với đĩa,là công việc tương đối chậm. Bằng cách đó người ta có thể giảm nhẹ công việc cho bộ VXL và tăng tốc độ thực hiện chương trình. Bộ điều khiển cơ chế ngắt (8259). Các tín hiệu ngắt cho phép các đối tượng khác nhau của hệ thống yêu cầu bộ xử lý trung tâm tạm dừng công việc của mình để phục vụ chúng. Vì có nhiều ngắt đến từ các thành phần khác nhau của hệ thống có thể xuất hiện đồng thời cùng môt lúc nên chúng cần phải được chuyển đến bộ điều khiển ngắt và sau đó bộ điều khiển ngắt mới chuyển chúng đến bộ xử lý trung tâm. Bộ điều khiển ngắt cho nỗi yêu cầu ngắt một mức ưu tiên dựa vào chức năng chính của yêu cầu ngắt và nó chuyển đến cho bộ VXL yêu cầu ngắt có mức ưu tiên cao nhất. Bộ ghép nối thiết bị ngoại vi – cổng vào ra có lập trình(8255). Bộ ghép nối thiết bị ngoại vi thực chất là cổng vào ra được điều khiển bằng chương trình. Nó thiết lập liên lạc giữa bộ xử lý trung tâm và các thiết bị ngoại vi như bàn phím. Chíp 8255 có rất nhiều chế độ làm việc từ đơn giản đến phức tạp và đều được cài đặt bằng chương trình. Bộ tạo nhịp CLK là quả tim của hệ thống. Bộ tạo dao động nhịp này dao động với tần số hàng trăm MHz và nó tạo nhịp cho bộ VXL và các thanhf phần khác của hệ thống hoạt động. Bộ tạo thời gian (8253) được dùng như bộ đếm hoặc bộ tạo thời gian. Nó cho phép đưa ra qua các đầu ra của nó các xung có tần số xác định và không đổi. Tần số của các xung này có thể điều khiển bằng chương trình sao cho mỗi đầu ra sẽ cung cấp một tàan số nhất định nào đó. Mỗi đầu ra được nối với thiết bị ngoại vi. Slot – Kênh tổng hợp cung cấp +Địa chỉ cổng IO từ 100h đến 3ffh +Các chân kênh địa chi +Lựa chọn kiểu dữ liệu để trao đổi thông tin +Sử dụng các ngắt cứng +Sử dụng cơ chế DMA +Sử dụng cơ chế làm tươi bộ nhớ Slot có 62 chân và loại bổ xung 36 chân 1.2.2.Bộ nhớ bán dẫn(Hay còn gọi là bộ nhớ trong) Các byte và word: Thông tin xử lý trong máy tính được lưu trữ trong bộ nhớ của nó. Mỗi phần tử vi mạch nhớ có thể chứa một bit dữ liẹu.Mỗi byte có 8 bit dữ liệu. Một mạch nhớ một byte được xác định bởi một con số gọi là địa chỉ(address). Byte đầu tiên có giá trị là 0. Địa chỉ của một byte nhớ là cố định và mỗi byte nhớ trong máy tính có địa chỉ riêng của nó, địa chỉ của các byte nhớ là khác nhau. Còn nội dung của byte nhớ chính là dữ liệu được lưu trữ tức thời trong bộ nhớ. Khi nội dung của một byte nhớ là 8 bit thì số bit của một địa chỉ lại phụ thuộc vào bộ VXL Vị trí của các bit Các vị trí được đánh từ phải sang trái, bắt đầu từ 0. Trong một từ, các bit tù D0 – D7 tạo thành byte thấp và các bit từ D8 – D15 tạo thành byte cao. Để chứa một từ trong bộ nhớ byte ghi thấp vào byte nhớ với địa chỉ thấp, còn byte cao ghi vào byte nhớ với địa chỉ cao. Các thao tác với bộ nhớ Bộ xử lý có thể thực hiện hai thao tác với bộ nhớ: Đọc nội dung của ô nhớ và ghi dữ liệu vaò ô nhớ. Trong các thao tác đọc, bộ VXLchỉ lấy ra bản sao của dữ liệu còn nội dung nguyên thuỷ của nó không đổi. Trong thao tác ghi, dữ liệu được viết vào sẽ trở thành nội dung mới của ô nhớ và dữ liệu nguyên thuỷ của nó sẽ mất đi. Bộ nhớ ROM và RAM: ROM là bộ nhớ cố định chỉ cho phép lấy thông tin từ ra. Trong ROM ta có thể chứa chương trình điều khiển hoạt động của toàn bộ hệ thống khi khởi động và CPU có thể lấy lệnh từ đây mà khởi động hệ thống. RAM là tập hợp các thanh ghi có đọ dài m bit (thông thường là 8 bit) có chức năng lưu trữ và trao đổi thông tin trong hệ thốngvới các thiết bị ngoại vi được ghép nối với nó. Trong RAM chứa một phần của chương trình điều khiển hệ thống, các chương trình ứng dụng dữ liệu hệ thống cùng các kết qủa của chương trình. Các dữ liệu và các chương trình muốn lưu trữ lâu dài sẽ đọc để ở bộ nhớ ngoài. 3.3.Khối phối ghép vào ra(I/O) Các thiết bị ngoại vi được nối với máy tính thông qua các mạch vào ra. Mỗi mạch này chứa vài thanh ghi gọi là cổng vào ra(I/O port). Một số được dùng cho dữ liệu khi số khácđược dùng cho các lệnh điều khiển. Giống như các ô nhớ các cổng vào ra cũng có các địa chỉ và được nối với hệ thống Bus. Tuy nhiên các địa chỉ này được xem như các địa chỉ vao ra và chỉ có thể thực hiện được với các lệnh vào ra. các cổng vào ra thực hiện chức năng để trao đổi giữa CPU và thiết bị ngoại vi. Dữ liệu được nạp vào từ thít bị ngoai vĩe được gửi vao một cổng, taị đó chúng có thẻ được đọc từ CPU. Khi xuất, CPU viết dữ liệu ra cổng, vi mạch vào ra sau đó sẽ chuyển dữ liệu đến thiết bị ngoại vi. Các cổng nối tiếp và song song Dữ liệu truyền giữa một cổngvà một thiết bị ngoại vi có thể dùng bit một (nối tiếp) hay 8 hoặc 16 bit cùng một lúc(song song). Một cổng song song yêu cầu nhiều dây nối hơn trong khi cổng nối tiếp chậm hơn. Các thiết bị chậm như bàn phím thường nối với cổng nối tiếp, ngược lại các thiết bị nhanh như ổ đĩa thường nối với cổng song song. Tuy nhiên có vài thiết bị chẳng hạn như máy in thì có thể nói với cả cổng song song và nối tiếp. Các loại đĩa từ Chúng ta thấy rằng nội dung của RAM sẽ bị mất khi tắt máy do đó đĩa từ được sử dụng để lưu trữ thông tin lâu dài. Có hai loạ đĩa tử :đĩa mềm(floppy disk hay diskettes) và đĩa cứng (hard drive). Thiết bị dùng để viết và đọc thông tin trên đĩa từ gọi là ổ đĩa (disk drive). Đĩa cứng và ổ đĩa của nó được đặt trong một hộp kín và không thể đưa ra khỏi máy tính và bởi vậy nó còn được gọi là ổ đĩa cố đinh(fixed disk). Các chương trình truy nhập thông tin trong đĩa cứng cũng nhanh hơn rất nhiều so với đĩa mềm. Bàn phím Người sử dụng dùng bàn phím để đưa thông tin vào máy tính. Bàn phím có các phím thông thường của một máy chữ ngoài các phím số, phím điều khiển, phím chức năng. Bàn phím có hẳn một bộ VXL riêng mà nó sẽ gửi các tín hiệu đã được mã hoá đến máy tính mỗi khi có phím nào được ấn hay được nhả. Khi một phím được ấn, ký tự tương ứng thường xuất hiện trên màn hình nhưng thật ra không hề có sự liên lạc nào giữa bàn phóm với màn hình. Chương trình đang chạy sẽ nhận dữ liệu từ bàn phím và chương trình sẽ phải gửi dữ liệu ra màn hinh để ký tự được hiển thị. Màn hình Màn hình là thiết bị ra chuẩn của máy tính. Thông tin hiển thị trên màn hình được tạo ra bởi một vi mạch trong máy tính gọi là vi mạch ghép nối màn hình (Video adapter). Hầu hết các vi mạch ghép nối đều có khả năng tạo ra cả các ký tự văn bản lẫn các hình ảnh đồ hoạ. Máy in Mặc dù máy in là một thiết bị đem lại sự phản hồi nhanh chóng bằng hình ảnh nhưng các thông tin trên màn hình không tồn tại lâu dài. các máy in mặc dù chậm nhưng cho các sản phẩm tồn tại lâu dài hơn. Sản phẩm của cac máy in được xem như là các bản sao cứng (hard copy) . 3.4.Các loại Bus Bus địa chỉ thường có từ 16, 20, 24 đến 32 đường dây song song chuyển tải thông tin của các bit địa chỉ. Khi đọc/ghi bộ nhớ CPU sẽ ra đa trên bus này địa chỉ của ô nhớ liên quan. Khả năng phân biệt địa chỉ số (số lượng địa chỉ cho ô nhớ mà CPU có khả năng ohân biệt được) phụ thuộc vào số bit của các bus địa chỉ. Trên sơ đồ khối ta dễ nhận biết một chiều của bus địa chỉ qua chiều của mũi tên. Chỉ có CPU mới có khẳ năng đưa ra địa chỉ trên bus địa chỉ. Bus dữ liêu thường có từ 8, 16, 24, 32 đến 64 đường dây tuỳ theo các bộ VXL cụ thể. Số lượng đường dây quy định số bit dữ liệu mà CPU có khả năng xử lý cùng một lúc chiều muĩ tên trên bus số liệu chỉ ra rằng đây là bus hai chiều, nghiã là dữ liệu có thể được truyền đi từ CPU(dữ liệu vào) hoặc truyền đến CPU(dữ liệu ra). Bus điều khiển thường gồm hàng chục đường dây tín hiệu khác nhau. Mỗi tín hiệu điều khiển có một chiều nhất định. Vì khi hoạt động CPU đưa tín hiệu điều khiển đến các khối khác trong hệ đồng thời nó cũng nhận các tín hiệu này trên hình vẽ được thẻ hiện bằng các đường có mũi tên hai chiều, điều đó không phải chỉ để tính hai chiều của một tín hiệu mà là tính hai chiều của cả nhóm tín hiệu. Hoạt động của hệ VXL cũng có thể được nhìn theo một cách khác. Trong khi hoạt động và tại một thời điểm nhất định về mặt các chức năng mỗi khối trong hệ thống trên tương đương với các thanh ghi trong(nằm tronh CPU) hoặc cac thanh ghi ngoài (nằm rải rác trong bộ nhớ ROM hoặc bộ nhớ RAM và tronh phối ghép I/O). Hoạt động của toàn bộ hệ thực chất là phối hợp hoạt động của các thanh ghi trong và ngoài nói trên để thực hiện sự biến đổi dữ liệu hoặc sự trao đổi dữ liệu theo các yêu cầu đã định trước. 1.3.Việc thực hiện các lệnh. Để xem cách CPU hoạt động, chúng ta hãy xem một lệnh được thực hiện ra sao. Một lệnh của máy tính gồm hai phần: một phần mã lệnh và mộtphần là toán hạng. Mã lệnh xác định kiểu của lệnh, còn các toán hạng thường là các địa chỉ bộ nhớcủa dữ liệu để lệnh thực hiện. Các bước thực hiện một lệnh máy (một chu kỳ nhận lệnh và thực hiện) của CPU là như sau: -Nhận lệnh +Nhận một chỉ thị từ bộ nhớ +Giải mã lệnh để xác định thao tác cần thực hiện +Nhận duac liệu từ bộ nhớ nếu cần thiết -Thực hiện lệnh: +Thực hiện thao tác trên dữ liệu +Lưu trữ kết quả vào bộ nhớ nếu cần thiết 1.4. chương II: giao tiếp giữa hệ vi xử lý và máy tính pc Hệ vi xử lý chuyên dụng. Hệ vi xử lý chuyên dụng là hệ vi xử lý thực hiện một chức năng cụ thể nào đó (tìm tin, thông tin truyền số liệu ...) nên khi thiết kế chỉ sử dụng các tính năng cần thiết của hệ vi xử lý chứ không dùng toàn bộ của hệ vi xử lý. Hệ vi xử lý chuyên dụng hoạt động được nhờ vào chương trình mã máy nạp sẵn trong bộ nhớ EPROM( Erasable programmable read only memory). Chương trình này sẽ quản lý điều hành toàn bộ hệ vi xử lí để hệ vi xử lí hoạt động theo đúng chứa năng, yêu cầu đề ra. Vì nó chỉ sử dụng tính năng cần thiết của hệ vi xử lí cho nên nó một số lợi ích rất cao. Là một hệ vi xử lí chuyên dụng chứ không phải hệ vi xử lí đa phương tiện nên nó có một cấu trúc rất đơn giản. Chỉ sử dụng các tính năng cần thiết của hệ vi xử lí. Nó có thể bỏ qua nhiều các trình duyệt không liên quan nên tốc độ xử lí của máy tính đạt được một tốc độ tối đa là cao nhất. Do đó hệ vi xử lí chuyên dụng được tin cậy với độ tin cậy cao nhất. Chương trình Monitor của hệ vi xử lí đặt trong Rom chịu trách nhiệm điều khiển và điều phối các tính năng trong hệ xử lí chuyên dụng trong máy tính PC. Vì là một chương trình điều khiển chuyên dụng nên nó không thể hoàn thiện ngay khi ở ngoài thiết kế mà phải viết lại làm nhiều lần. Do đó, khi viết một chương trình để nạp vào EPROM rất khó tránh khỏi những lỗi, nhất là những chương trình phức tạp có dung lượng lớn. Chương trình phải viết đi viết lại nhiều lần, mỗi lần sửa là hệ vi xử lí phải dịch một lần sang mã máy. Lúc đó bắt buộc ta phải xoá EPROM đã nạp, sửa chữa lại chương trình, biên dịch lại và nạp lại. Việc xoá và nạp EPROM nhiều lần sẽ tốn thời gian, làm giảm tuổi thọ máy, giảm độ tin cậy của hệ vi xử lí cần thiết cũng như thiết bị làm, xoá và có thể làm hỏng máy, làm tăng chi phí và gây khó khăn cho việc áp dụng kĩ thuật này. Như vậy, để cho một hệ vi xử lý hoạt động theo đúng yêu cầu đề ra, chương trình hệ thống cần phải được sửa đổi và hoàn thiện dần qua nhiều bước và nhiều giai đoạn, vì vậy trong giai đoạn thử nghiệm chương trình hệ thống, việc nạp chương trình hệ thống vào bộ nhớ EPROM là không khả thi. Do đó nếu trong giai đoạn thiết kế một hệ vi xử lý chuyên dụng, thực hiện chức năng thành phần của hệ thống lớn, ta tìm cách mô phỏng bộ nhớ EPROM của hệ bởi một bộ nhớ giả ROM. Nó được tổ chức sao cho có thể đảm nhiệm hai chức năng sau: Hệ vi xử lý chuyên dụng coi nó như bộ nhớ chương trình của mình và có thể hoạt động được trên bộ nhớ giả ROM đó. Có thể thay đổi nội dung trên bộ nhớ giả ROM, tức là có thể sửa đổi hoàn thiện chương trình cho hệ vi xử lý chuyên dụng tới khi hệ hoạt động một cách tối ưu. Có hai giải pháp thực hiện ý tưởng mô phỏng trên là: Dùng bộ nhớ RAM có dung lượng tương đương bộ nhớ EPROM của hệ vi xử lý cần thiết kế(ROM=RAM). Dùng một vùng đệm RAM(Buffer RAM) của PC để làm giả bộ nhớ EPROM(Buffer RAM=ROM). Hệ vi xử lý chuyên dụng PC Chốt kênh địa chỉ Khối điều khiển Chốt kênh dữ liệu, điều khiển Kênh điều khiển Kênh dữ liệu Kênh dữ liệu Kênh địa chỉ Kênh địa chỉ Hình 3.2. Sơ đồ card giao tiếp với hệ VXL Ta chọn giải pháp dùng một vùng đệm trong RAM(Random Access Memory) của PC để làm giả bộ nhớ EPROM là khả thi vì Card mô phỏng rất đơn giản, độ tin cậy cao và hệ thống này mềm dẻo vì mỗi hệ mô phỏng được sử dụng cho các hệ vi sử lý khác nhau nếu chúng dùng cùng một loại CPU. Còn trong trường hợp hệ của hệ vi xử lý dùng PCU loại khác thì ta chỉ phải thay dổi một vài đường tín hiệu điều khiển tương ứng với loại CPU mới trên phần cứng của Card giao tiếp. Giải pháp này được thực hiện như sau + Viết chương trình cho hệ vi xử lý trên máy PC + Chương trình quản lý hệ thống chạy trên PC sẽ tải chương trình vào một vùng đệm của RAM sao cho có thể quản lý địa chỉ và xuất dữ liệu từ vùng RAM đó ra hệ vi xử lý chuyên dụng thông qua Card giao tiếp. Đồng thời qua Card giao tiếp, chương trình hệ thống trên PC sẽ phải luôn luôn kiểm soát và nắm bắt các tín hiệu địa chỉ và các tín hiệu điều khiển từ hệ vi xử lý đưa sang để có thể khống chế và xuất dữ liệu thích hợp cho hệ vi xử lý trong suốt quá trình chạy và điều khiển của hệ thống. Mỗi khi CPU của hệ vi xử lý cần đọc dữ liệu từ EPROM, nó sẽ phát ra tín hiệu địa chỉ và điều kiện tương ứng, chương trình quản lý hệ thống sẽ đáp ứng và quy chiếu đến vùng RAM trong máy tính PC. Sau đó xuất dữ liệu tương ứng ra Bus dữ liệu của hệ vi xử lý cho CPU đọc thay vì đọc từ EPROM. Chức năng của các khối cơ bản như sau: Khối điều khiển do PC điều khiển qua chốt điều khiển để phát hiện chu kỳ máy của CPU trên hệ vi xử lý cần truy nhập EPROM và tạo tín hiệu READY bắt CPU đợi PC xuất dữ liệu ra kênh dữ liệu hệ vi xử lý. Bộ chốt dữ liệu, điều khiển đưa dữ liệu từ RAM mô phỏng trong PC ra kênh dữ liệu của hệ vi xử lý để hệ vi xử lý sử dụng và đưa tín hiệu điều khiển từ PC ra để điều khiển chế độ làm việc của hệ vi xử lý. Bộ chốt địa chỉ để PC đọc địa chỉ trên kênh địa chỉ của hệ vi xử lý trong chu kỳ máy CPU truy nhập EPROM. Như vậy, ta có thể tóm tắt việc xây dựng một hệ vi xử lý chuyên dụng khi sử dụng phương án này như sau: Xây dựng phần cứng cho hệ vi xử lý chuyên dụng. Viết chương trình cho hệ vi xử lý bằng các trình biên dịch tương ứng CPU, dịch chương trình ra mã máy của hệ vi xử lý đồng thời phát hiện, sửa các lỗi logic. Dùng hệ mô phỏng tương ứng cho hệ vi xử lý chạy chế độ mô phỏng chương trình này, phát hiện sai sót và lặp lại các bước trên để sửa đổi chương trình đến khi hệ vi xử lý hoạt động như mong muốn. Nạp chương trình hệ thống dạng mã máy đã hoàn thiện vào bộ nhớ EPROM để hệ vi xử lý chạy chế độ thực. 2.2. hệ vi xử lý 8 bit 8085 intel Hệ vi xử lý ở đây có cấu hình tiêu chuẩn bao gồm các thành phần chính như sau: Đơn vị xử lý trung tâm được chọn là CPU Intel 8085A. Bộ nhớ trong của hệ gồm hai thành phần: bộ nhớ RAM được chọn là loại 6264 và bộ nhớ EPROM được chọn là loại 2764. Cả hai loại trên đều là bộ nhớ có kích thước là (8k*8)bit nên hoàn toàn tương thích với bộ vi xử lý 8085A. Cổng vào/ra để CPU trao đổi dữ liệu với thiết bị ngoại vi chọn là vi mạch 82C55. Hình 3.3 là sơ đồ nối ghép CPU 8085A, RAM 67264, EPROM 2764, bộ giải mã 74LS138, chốt 74LS373, PI/O 82C55 của hệ vi xử lý Intel 8085A. Do đặc điểm của CPU 8085A, kênh dữ liệu ( D0-D7) và kênh địa chỉ phần thấp ( A0- A7) sử dụng chung các chân AD0 -AD7 nên cần sử dụng bộ chốt địa chỉ IC 74LS 373 được điều khiển bằng tín hiệu ALE từ CPU 8085. Tám tín hiệu ra được chốt của IC 373 chính là tín hiệu địa chỉ phần thấp (A0 - A7) sử dụng trên BUS địa chỉ của hệ vi xử lý. Việc quản lý các vùng địa chỉ cho ROM, RAM, PI/O (thường gọi là đánh địa chỉ) được thực hiện như sau: Theo tính chất của CPU 8085A, địa chỉ khởi động của nó sau khi RESET là 0000H, nghĩa là con trỏ lệnh PC của 8085 bắt đầu từ giá trị 0000H, vì vậy EPROM là bộ nhớ chứa chương trình điều khiển hệ phải được CPU quản lý từ địa chỉ 0000H trở đi. ở đây EPROM 2764 là loại 8k x 8, 13 đường địa chỉ (A0- A12) nên CPU cần quản lý nó theo vùng địa chỉ từ 0000H - 1FFFH. Vùng địa chỉ RAM được CPU quản lý tiếp tục ngay sau vùng địa chỉ EPPOM, nghĩa là địa chỉ vùng RAM bắt đầu từ 2000H. ở đây SRAM 6264 là loại 8k x 8, 13 đường địa chỉ nên vùng địa chỉ RAM mà CPU sẽ quản lý nằm trong khoảng từ 2000H - 3FFFH. PI/O 8255 được sử dụng ở chế độ vào ra tách biệt, nghĩa là chỉ có các lệnh IN, OUT trong tập lệnh của 8085 là có tác dụng với nó. Khi thực hiện lệnh IN hoặc lệnh OUT, CPU 8085 phát ra tín hiệu điều khiển IO/M =1 (khác với các lệnh thao tác bộ nhớ ở chỗ khi CPU cần truy nhập bộ nhớ, nó phát ra tín hiệu IO/M =0). Do vậy ta sẽ sử dụng tín hiệu này để CPU quản lý 8255. Ta cần bố trí 2 tín hiệu địa chỉ A0, A1 để định vị các cổng vào ra (PortA, PortB, PortC) cho 8255. Với những lý do nêu trên, IC 138 được sử dụng làm bộ giải mã địa chỉ với chân tín hiệu A (chân 1) được nối với đường địa chỉ A13, chân B (chân 2) nối với tín hiệu IO/M, chân C (pin 3), các chân E1(chân 4), E2 (chân 5) được nối với đất, chân E3 nối với mức 1 (VCC) qua điện trở hạn chế R3. Các chân tín hiệu ra được nối như sau: - Y0 (chân 15) nối với CS1 để chọn EPROM. - Y1 (chân 5) nối với CS2 để chọn RAM. Y3 (chân 5) nối với CS3 để chọn PI/O. Bộ giải mã địa chỉ đươc sử dụng trong hệ thống này là bộ giải mã 74LS138, đây là bộ giải mã từ 3 ra 8 đường. Sơ đồ nguyên lý của vi mạch 74LS138 được trình bày trên hình sau: U A Y0 B Y1 C Y2 Y3 Y4 E1 Y5 E2 Y6 E3 Y7 15 14 13 12 11 10 9 7 1 2 3 4 5 6 74LS138 Sơ đồ nguyên lý của bộ giải mã 74LS138 Vi mạch 74LS138 có chứa một bộ giải mã 1 trong 8 với 3 tín hiệu lựa chọn chíp. Nhờ một con số nhị phân, ở linh kiện này ta có thể chọn đúng lối ra từ một trong số 8 lối ra. Lối ra đã được lựa chọn sau đó sẽ nhận mức low(mức tích cực: mức logic 0), trong khi tất cả các lối ra khác vẫn giữ nguyên mức logic 1. Bộ giải mã làm việc khi E3 có mức logic cao, E2 và E1 đồng thời có mức logic thấp. Khi nó không được phép thì tất cả các cửa ra đều ở mức logic cao. Khi nó được phép thì một trong các đầu ra sẽ có mức logic thấp phụ thuộc vào tổ hợp các tín hiẹu. Ta có bảng sự thật của IC 138 trong trường hợp này như sau : E3 E2 E1 C IO/M A13 A12 - A0 CS1 CS2 CS3 1 0 0 0 0 0 x 0 1 1 1 0 0 0 0 1 x 1 0 1 1 0 0 0 1 0 x 1 1 0 1 0 0 0 x x x 1 1 1 1 0 0 0 x x x 1 1 1 Nhìn vào bảng sự thật ta thấy tất cả các địa chỉ 4000H không có tác dụng gì đối với hệ . Đây là điều cần lưu ý khi lập trình cho hệ . Đường tín hiệu IO/M có vai trò trong việc hoặc là truy nhập bộ nhớ (cả ROM và RAM) hoặc là truy nhập cổng (thông qua PI/O 8255), cụ thể: - Khi IO/M =0, CPU truy nhập bộ nhớ. Khi IO/M =1, CPU truy nhập cổng. Khi CPU truy nhập cổng (IO/M =1) thì A13 luôn bằng 0 vì ta chỉ sử dụng địa chỉ cổng 2 bit (A0,A1), do vậy đảm bảo được sự đúng đắn của tín hiệu chọn P/IO( CS3=0). - Đường tín hiệu A13 làm nhiệm vụ chọn ROM hoặc chọn RAM. - Khi A13=0, CPU truy nhập ROM. - Khi A13=1, CPU truy nhập RAM. - Ta có bản đồ phân vùng bộ nhớ của hệ vi xử lý như hình 3.4. Chúng ta biết rằng CPU 8085 cũng như bất kỳ một CPU nào đều hoạt động chủ yếu dựa vào các thao tác đọc (READ) hoặc ghi (WRITE) , tức là truy xuất vào bộ nhớ hay cổng I/O . Trong khi CPU làm thay đổi các giá trị địa chỉ, dữ liệu và trình tự thao tác, nó vẫn chỉ là thực hiện các thao tác đọc hay ghi. Trừ một số đường tín hiệu điều khiển đặc biệt , các thao tác đọc/ghi là sự trao đổi thông tin duy nhất giữa CPU và các thành phần khác, và đó chính là tất cả sự cần thiết để thực hiện bất kỳ một lệnh hoặc một chương trình nào . Để giúp cho việc thiết kế CARD làm nhiệm vụ giao tiếp giữa hệ vi xử lý và máy tính và thiết kế phần mềm hệ thống quản lý các thao tác mô phỏng cho EPROM , ta cần nắm rõ hơn về cơ chế truy nhập bộ nhớ và cổng của CPU 8085 mà cần thiết nhất ở đây là cơ chế nạp mã lệnh (OPCODE FETCH) và đọc bộ nhớ (READ), thực chất cơ chế nạp mã lệnh cũng chính là cơ chế đọc từ ROM. 2.3. Tổ chức CARD giao tiếp giữa PC và hệ vi xử lý. Từ ý tưởng thực hiện mô phỏng EPROM của CPU 8085A trong hệ thống điều khiển cho ta thấy rằng có thể tận dụng trạng thái chờ (READY) của CPU 8085A, sao cho mỗi khi nó cần truy nhập EPROM để đọc mã lệnh hoặc dữ liệu, ta đưa tín hiệu READY=0 để buộc CPU phải chờ, khi đó trên BUS địa chỉ của hệ vi xử lý vẫn duy trì giá trị địa chỉ cần truy nhập (phần cao A8áA15 do chính CPU duy trì, phần thấp A0áA7 đã được bộ chốt địa chỉ IC 373 chốt lại) và chương trình hệ thống trong máy tính sẽ tiến hành đọc giá trị địa chỉ đó, qui chiếu với vùng RAM mô phỏng để xuất dữ liệu từ địa chỉ tương ứng ra BUS dữ liệu của hệ vi xử lý. Sau đó nếu ta cho CPU 8085A trở lại làm việc thì nó sẽ tiến hành đọc dữ liệu trên BUS dữ liệu mà ta đã đưa ra cho nó và tiến hành tiếp tục chu kỳ lệnh theo mã lệnh hoặc dữ liệu nó vừa nhận được. Còn khi CPU 8085A thực hiện chu kỳ máy không có truy nhập EPROM thì ta cứ để nó làm việc bình thường. Muốn thực hiện được điều đó, cần phải kết hợp giữa việc tổ chức phần cứng và việc tổ chức phần mềm. Nhìn vào biểu đồ thời gian thực hiện một chu kỳ máy, ta thấy tốt nhất là đưa ra tín hiệu READY =0 ngay trong thời đoạn T1 vì đến T2 CPU mới kiểm tra sự có mặt của tín hiệu READY. Ta sẽ sử dụng các tín hiệu ALE và CSROM (trên hệ vi xử lý CSROM được ký hiệu là CS1) sao cho khi có tín hiệu ALE =1 báo bắt đầu một chu kỳ máy và CSROM=0 báo CPU cần truy nhập EPROM thì mạch phần cứng tự động tạo tín hiệu READY=0. Sau khi chương trình hệ thống thực hiện xong các thao tác đọc địa chỉ và xuất ra dữ liệu, chương trình này sẽ tạo ra tín hiệu READY=1 để cho phép CPU làm việc trở lại. CARD giao tiếp giữa hệ vi xử lý và máy tính phải làm được các nhiệm vụ như sau: -Truyền các tín hiệu điều khiển (RESETIN, HOLD) từ chương trình hệ thống sang hệ vi xử lý để khống chế thao tác khởi động,cho phép hoặc cấm CPU làm việc. -Luôn sẵn sàng nắm bắt tín hiệu ALE và CSROM để tạo tín hiệu READY=0 bắt CPU chờ. -Nhập các tín hiệu địa chỉ (A0áA15) từ hệ vi xử lý vào cổng 379h (LPT1) của máy tính để chương trình hệ thống đọc và xử lý qui chiếu đến vùng RAM mô phỏng. -Đưa dữ liệu mà chương trình hệ thống xuất ra từ vùng vùng RAM mô phỏng sang BUS dữ liệu của hệ vi xử lý . -Nhận tín hiệu cho phép CPU trở lại hoạt động của chương trình hệ thống để tạo tín hiệu READY=1cho CPU 8085. Khối các IC3 (74LS 00), IC 4 (74LS73), IC8 (4LS08) làm nhiệm vụ sẵn sàng nắm bắt các tín hiệu ALE=1, CSROM=0 để tự động tạo tín hiệu READY=0 làm dừng CPU và nhận các tín hiệu Clear từ chương trình hệ thống để tạo READY=1 cho IC4 (74LS73). IC này gồm hai triger flipflop JK (IC 4/A và IC 4/B) với các chân J được nối với +5V qua điện trở hạn dòng, các chân K nối đất. Các cửa ra /Q được reset ở mức 1(dương) khi chân Clear =0, khi chân Clear ở mức 1, triger sẽ đợi khi có một sườn xung xuống (chuyển từ mức 1 về mức 0) đặt vào chân CLK thì triger lật trạng thái và cửa ra /Q lật sang mức 0. Khi chân Clear ở mức 0 thì tín hiệu CLK không có tác dụng gì cho việc lật trạng thái triger. IC3 (74LS00) sử dụng hai mạch cổng NAND để nắm bắt đồng thời 2 tín hiệu ALE=1và CSROM=0 để tạo sườn xung xuống kích cho các chân CLK của IC 4. Biểu đồ thời gian của tín hiệu đầu ra IC3 phụ thuộc vào các tín hiệu ALE và CSROM như sau: IC8(74LS08) sử dụng một cổng AND với đầu ra của nó là tín hiệu READY =0 khi một trong hai đầu ra /Q của IC4 ở mức 0 . READY =1 chỉ khi cả hai đầu ra /Q của IC 4 đều ở mức 1 . Việc sử dụng đồng thời hai tín hiệu ALE và CSROM nhằm đảm bảo tạo tín hiệu READY =0 ngay khi bắt đầu một chu kì máy (thời đoạn T1) và chu kỳ máy đó chỉ là chu kỳ CPU cần truy suất EPROM. D7 D6 D5 D4 D3 D2 D1 D0 D0 (Pin 2) D1 (Pin 3) D2 (Pin 4) D3 (Pin 5) D4 (Pin 6) D5 (Pin 7) D6 (Pin 8) D7 (Pin 9) D7 D6 D5 D4 D3 D2 D1 D0 Stat<D3(ERR Pin 15) Stat<D4(SLC Pin 13) Stat<D5(PE Pin 12) Stat<D6 (ACK Pin 10) Stat/D7(BUSY Pin 11) D7 D6 D5 D4 D3 D2 D1 D0 Ctrl/D0 (Strobe Pin 1) Ctrl/D1 (AF Pin 14) Ctrl>D2 (INIT Pin 16) Ctrl/D0(SLCIN Pin 17) DataRegister 378H StatusRegister 379H ControlRegister 37AH Hình 3.5 : Phân bố các Thanh ghi cổng song song LPT1 IC7/1 IC7/2 IC5 138 IC2 374 IC1 374 OE IC6/1 IC6/2 P1 P2 378H (OUT) 37AH (OUT) 379H (IN) DB 25 LPT1 RSIN HOLD READY A8-A15 A0-A7 ADDR.S multiplexed DATA & CTRL multiplexed A12-A15 A8-A11 A4-A7 A0-A3 D0 -D7 P3 CS ROM Hình 3.6. Sơ đồ nguyên lý của card giao tiếp IC3 7400 IC8 7408 IC4/A CLK /Q IC4/B CLK /Q ALE PASS IC6/1 PASS IC6/2 PASS IC7/1 PASS IC7/2 CLK IC2 CLK IC1 CLEAR2 CLEAR1 CLK IC1 AND JK/FF B CLK /Q JK/FF A CLK / Q NAND NAND IC 8(74LS08) CLEAR2 CLEAR1 IC4(74LS73) CSROM IC3(74LS00) READY ALE Hình 3.7. Sơ đồ mạch tạo tín hiệu READY CLK của IC 4. Biểu đồ thời gian của tín hiệu đầu ra IC3 phụ thuộc vào các tín hiệu ALE và CSROM như sau: IC8(74LS08) sử dụng một cổng AND với đầu ra của nó là tín hiệu READY =0 khi một trong hai đầu ra /Q của IC4 ở mức 0 . READY =1 chỉ khi cả hai đầu ra /Q của IC 4 đều ở mức 1 . Việc sử dụng đồng thời hai tín hiệu ALE và CSROM nhằm đảm bảo tạo tín hiệu READY =0 ngay khi bắt đầu một chu kì máy (thời đoạn T1) và chu kỳ máy đó chỉ là chu kỳ CPU cần truy suất EPROM. Hoạt động của các IC3, IC4 và IC8 như sau: Trước khi thực hiện qúa trình mô phỏng, chương trình hệ thống cần tạo ra các tín hiệu Clear1, Clear2 mức 0 để reset IC 4 sao cho các cửa ra /Q đồng thời ở mức 1, do đó tín hiệu READY từ sau mạch AND (IC8: 74LS08) có mức 1 là trạng thái sẵn sàng để CPU làm việc. Sau đó một trong hai tín hiệu CLEAR1, CLEAR2 được nâng lên mức 1, chẳng hạn CLEAR1=1, CLEAR2=0. IC 4/A ở trạng thái sẵn sàng đón đợi tác động của ALE và CSROM từ IC3 đưa sang, còn IC 4/B sẽ không bị tác động. Cả hai triger giữ trạng thái /Q=1 và READY=1(qua cổng AND IC8). CLK IC4 CSROM ALE Hình 3.8. Biểu đồ thời gian mạch tạo sườn xuống kích cho triger IC4 từ hai tín hiệu ALE và /CSROM. t t t Khi bắt đầu một chu kỳ máy truy xuất EPROM, chẳng hạn bắt đầu reset CPU 8085 làm việc từ đầu ,các tín hiệu ALE=1 và CSROM =0 tác động vào IC3 tạo ra sườn xung xuống kích vào IC 4 làm cho IC 4/Alật trạng thái /Q=0, IC 4/B không bị ảnh hưởng. Do đó READY =0. Vẫn trong thời đoạn T1 của chu kỳ máy đó khi ALE chuyển xuống mức 0 (còn CSROM =0 sẽ kéo dài suốt chu kỳ máy) thì đầu ra IC3 lật lên mức 1 sẵn sàng đón đợi cho chu kỳ máy tiếp theo, sườn lên của xung này không có ảnh hưởng gì đến các triger (IC 4/A, IC 4/B). Chuyển sang thời đoạn T2 của chu kỳ máy đó, CPU nhận thấy có tín hiệu READY=0 và nó tạm dừng để chương trình hệ thống đọc địa chỉ và xuất mã lệnh hoặc dữ liệu tương ứng cho nó. Sau khi chương trình hệ thống làm xong việc trên, nó (chương trình phần mềm hệ thống) sẽ đưa đồng thời hai tín hiệu CLEAR1=0 và CLEAR2=1với mục đích reset cho IC 4/A nhằm đưa ra tín hiệu READY=1để CPU bắt đầu trở lại làm việc và đặt cho IC 4/B vào trạng thái đón đợi tác động của ALE và CSROM (nếu có) của chu kỳ máy tiếp sau. Cứ như vậy trong suốt quá trình thực hiện mô phỏng IC 4/A và IC 4/B luân phiên ở trạng thái đợi (Clear=1) và trạng thái reset (Clear=0) bằng cách chương trình hệ thống đưa đồng thời các tín hiệu CLEAR1 và CLEAR2 đảo mức với nhau. Kỹ thuật đảo vai trò của IC 4/A và IC 4/B này là biện pháp hữu hiệu đảm bảo cho IC4 luôn sẵn sàng đáp ứng với tác động của ALE =1 và CSROM=0. Vì sao phải sử dụng cả hai tín hiệu ALE và CSROM để tạo ra tín hiệu READY mà không chỉ sử dụng một mình tín hiệu CSROM. Ta đã thấy rằng tín hiệu ALE=1 chỉ xuất hiện ở thời đoạn T1 đầu chu kỳ máy, còn CSROM=0 duy trì trong suốt chu kỳ máy CPU cần truy xuất EPROM. Nếu chỉ sử dụng CRSOM(sườn xuống) để kích hoạt IC4 tạo ra READY=0, thì có thể đến chu kỳ máy tiếp sau CPU lại cần truy xuất EPROM, như vậy tín hiệu CSROM khó có thể tạo sườn xuống để tiếp tục kích hoạt cho IC4. Khi sử dụng kết hợp cả hai tín hiệu ALE và CSROM thông qua IC3 thì ngay sau khi ALE chuyển về mức 0 thì ở đầu vào CLK của IC4 được nâng lên mức 1và IC4 luôn sẵn sàng để tạo READY=0 khi cần thiết. IC1 có nhiệm vụ đưa dữ liệu (dữ liệu này được lấy từ thanh ghi 378H/LPT1) được chốt ra BUS dữ liệu (qua các đầu ra RD0ữRD7 ) để hệ vi xử lý sử dụng (mà lẽ ra CPU cần đọc nó từ EPROM) . IC này chỉ được phép hoạt động (Truyền 8 bit dữ liệu từ vùng DATBUFF sang hệ vi xử lý) khi chương trình hệ thống đòi hỏi. Còn thì bình thường các chân dữ liệu ra của nó phải ở mức trở kháng cao để không làm ảnh hưởng đến sự làm việc của hệ vi xử lý. Điều đó được thực hiện bằng cách đưa mức 0 (cho phép) hoặc mức 1 (cấm) vào chân /OE (pin 1) của nó. IC2 được điều khiển từ chương trình hệ thống để làm các nhiệm vụ: - Đưa các tín hiệu RESETIN (bit d0)và HOLD (bit d1) được chốt ra BUS điều khiển hệ vi xử lý. - Tạo các tín hiệu CLEAR1(bit d2) CLEAR2 (bit d3) luân phiên đảo mức 1và 0 trong quá trình mô phỏng để IC4 thường trực nắm bắt các tín hiệu ALE và CSROM và khi đó IC4 tự động phát ra tín hiệu READY=0. Cũng nhờ đó chương trình hệ thống có thể chủ động kiểm soát việc phát ra tín hiệu READY=1 cho phép CPU trở lại quá trình tiếp tục làm việc. - Tạo tín hiệu cấm hoặc cho phép IC1 hoạt động (bit d7). Các tín hiệu trên cũng được lấy từ thanh ghi 378H/LPT1 nối vào các cổng vào của IC2. Việc sử dụng thanh ghi 378H multiflexer vừa đảm nhiệm xuất dữ liệu cho hệ vi xử lý (qua IC1) vưà đảm nhiệm xuất các tín hiệu điều khiển cho hệ vi xử lý và cho bản thân CARD giao tiếp như trên cho thấy rõ hơn ý nghĩa của việc sử dụng các IC1 và IC2 là các vi mạch chốt (bằng sườn dương) 74LS374 đối với yêu cầu bắt buộc các tín hiệu đầu ra của chúng không bị ảnh hưởng trực tiếp đến nhau. IC6 (74 LS 244)được tách thành hai phần: phần IC6/1 có nhiệm vụ nhập 4 nible thấp (A0áA3) của byte thấp từ BUS địa chỉ hệ vi xử lý vào máy tính, phần IC6/2 có nhiệm vụ nhập 4 nible cao (A4á A7) của byte thấp từ BUS địa chỉ vào máy tính. IC7 (74LS 244) cũng được tách thành 2 phần: phần IC7/1 có nhiệm vụ nhập 4 nible thấp của byte cao (A8áA11), còn phần IC7/2 làm nhiệm vụ nhập 4 nible cao của byte cao (A12áA15). Việc tạo các tín hiệu xung chốt cho các IC1, IC2 (74LS 374) cũng do phần mềm hệ thống tạo ra qua IC5( 74LS 138). IC5 thực hiện các mệnh lệnh từ phần mềm hệ thống qua thanh ghi điều khiển 37AH cổng LPT1 của máy tính để tiến hành các nhiệm vụ như: - Tạo các xung chốt (bằng sườn dương) vào các chân clock (pin 11) cho các IC1, IC2 bằng cách đưa các chân đó về mức 0 sau đó nâng lên mức 1. Chân CS1 của IC5 được nối với chân clock của IC1, còn CS2 của IC5 được nối với chân clock của IC2. - Tạo các tín hiệu mở thông các IC6, IC7 để nhập các tín hiệu địa chỉ từ BUS địa chỉ hệ vi xử lý vào máy tính bằng cách lần lượt đưa mức 0 vào các chân 1G (pin 1), 2G (pin 19) ứng với mỗi IC cần mở để chương trình hệ thống đọc giá trị địa chỉ ở nible tương ứng. Chân CS5 của IC5 nối với 1G của IC6/1, chân CS6 nối với 2G của IC6/2, chân CS7 nối với 1G của IC7/1, chân CS8 nối với 2G của IC7/2. Các chân CS3, CS4 của IC5 không sử dụng. IC5 làm việc theo nguyên tắc khi chương trình hệ thống cần kích hoạt IC nào trong số các IC1, IC2, IC6/1, IC6/2, IC7/1, IC7/2 thì đầu ra tương ứng của nó được hạ xuống mức 0, sau đó tất cả các đầu ra CS của nó đều ở mức 1. Đó là nhờ có các chân E1, E2 của nó nối vào chân CTRL/D3 của thanh ghi 37AH(LPT1). Nếu CTRL/D3=0 thì cho phép kích hoạt hay mở thông các IC nói trên, còn khi CTRL/D3=1 thì tất cả các đầu ra CS của IC5 đều ở mức 1. Lưu ý rằng tín hiệu CTRL/D3 được đảo so với bit d3 của thanh ghi 37AH . Tín hiệu CSROM =0 ngoài vai trò giúp cho CARD giao tiếp tự động tạo tín hiệu READY=0 như đã nói ở trên, còn được chương trình hệ thống trực tiếp đọc vào qua đường tín hiệu STAT<D3 (bit d3 của thanh ghi 379H) làm cơ sở để chương trình hệ thống thực hiện các thao tác cần thiết trong quá trình mô phỏng. Chương trình hệ thống. Với phần cứng đã được tổ chức như ở mục trên, ta đã có đầy đủ các tham số hệ thống để xây dựng phần mềm điều khiển cho hệ giao tiếp này. 3.4.1. lưu đồ thuật toán của chương trình hệ thống. Thuật toán điều khiển hệ vi xử lý nối ghép được bắt đầu từ việc khởi tạo giao diện thao tác. Một cửa sổ với các thực đơn được hiển thị ra cho phép đưa tiếp các điều kiện điều khiển như MODE làm việc, file cần chạy, các cơ cấu thông báo lỗi...Trong PC sẽ chứ các chương trình điều khiển cho hệ vi xử lý chuyên dụng được nối với nó. Các chương trình con này có thể là độc lập cũng có thể là một tập hợp các unit khác nhau cùng nhiệm vụ điều khiển hệ vi xử lý theo chức năng phức tạp nào đó. Trong các MODE, thì MODE tìm được file cần chạy trong thư viện chương trình và nạp nó vào buffer dành cho ROM giả của hệ vi xử lý là rất quan trọng. Lưu đồ hình sẽ trình bầy thuật toán điều khiển này. Begin + Lưu trữ mạch trạng thái PC + Khởi tạo giao diện thao tác + Hiển thị các bước thực hiện Xác lập trạng thái ban đầu cho hệ vi xử lý và Card nối ghép Chọn chế độ (MOD) thực hiện Model mô phỏng ROM Model2 xem ND data buff Model3 nạp vào data buff Model4 về HĐH PC Hình 3.8: Lưu đồ thuật toán chương trình hệ thống Start MODE1 Kiểm tra file OBJ đã có Xuất kênh địa chỉ Kiểm tra địa chỉ vào Cho phép thực hiện End MODE1 Sai Đúng Sai Đúng Start MODE1 Kiểm tra file OBJ đã có Xuất kênh địa chỉ Kiểm tra địa chỉ vào Cho phép thực hiện End MODE1 Sai Đúng Sai Đúng Hình: Sơ đồ thuật toán MODE1 Hình: Sơ đồ thuật toán MODE1 Hình3.9: Lưu đồ thuật toán MODE 1 Start MODE2 File OBJ đã nạp chưa Hiển thị nội dung OBJ Kiểm tra bàn phím ESC Page down Page up Cuốn lên từng dòng Cuốn xuống từng trang Cuốn lên từng trang Cuốn xuống từng dòng chương trình hệ thống. unit Mod256; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) ListBox1: TListBox; Label1: TLabel; Label2: TLabel; Button1_Open_File: TButton; OpenDialog1: TOpenDialog; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Panel5: TPanel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Button2_ResetVXL: TButton; Button3_Rom_Sim: TButton; Bevel1: TBevel; Panel6: TPanel; Panel7: TPanel; Panel8: TPanel; Image1: TImage; procedure Button1_Open_FileClick(Sender: TObject); procedure Button2_ResetVXLClick(Sender: TObject); procedure Button3_Rom_SimClick(Sender: TObject); private { Private declarations } public { Public declarations } procedure PortI(var b:byte;dia_chi:word); procedure PortO(dia_chi:word;var b:byte); {----------------------------------------} procedure clock_dk; procedure clock_dl; procedure thong_41; procedure thong_42; procedure thong_51; procedure thong_52; procedure Doc_dia_chi; end; var Form1: TForm1; i: word; by,hold:byte; flag:boolean; Buffer: array [0..8000] of byte; implementation {$R *.DFM} procedure TForm1.PortI(var b:byte;dia_chi:word); begin asm mov dx,dia_chi; in al,dx; mov by,al; end; b:=by; end; {------------------------------------} procedure TForm1.PortO(dia_chi:word;var b:byte); begin by:=b; asm mov al,by; mov dx,dia_chi; out dx,al end; end; {------------------------------------} procedure TForm1.clock_dk; var dk: byte; n: integer; begin dk:= $02; {dk:= $02;} portO($37A,dk); dk:= dk or $08; {dk:= $0A;} portO($37A,dk); for n:= 0 to 5000 do begin end; dk:= dk and $00; portO($37A,dk); end; {------------------------------------} procedure TForm1.clock_dl; var dk: byte; n: integer; begin dk:= $03; portO($37A,dk); dk:= dk or $08; portO($37A,dk); for n:= 0 to 5000 do begin end; dk:= dk and $00; portO($37A,dk); end; {-------------------------} procedure TForm1.thong_41; var dk: byte; begin dk:= $01; portO($37A,dk); dk:= $01; portO($37A,dk); dk:= dk or $08; portO($37A,dk); end; {------------------------------------} procedure TForm1.thong_42; var dk: byte; begin dk:= $00; portO($37A,dk); dk:= $00; portO($37A,dk); dk:= dk or $08; portO($37A,dk); portO($37A,dk); end; procedure TForm1.thong_51; var dk: byte; begin dk:= $07; portO($37A,dk); dk:= $07; portO($37A,dk); dk:= dk or $08; portO($37A,dk); end; procedure TForm1.thong_52; var dk: byte; begin dk:= $06; portO($37A,dk); dk:= $06; portO($37A,dk); dk:= dk or $08; portO($37A,dk); end; procedure TForm1.Doc_dia_chi; var dc: byte; j: integer; begin dc:= dc xor dc; i:= i xor i; {-------- Doc 4 bit cao byte dia chi cao---------} thong_52; for j:= 1 to 5000 do begin end; portI(dc,$379); portI(dc,$379); dc:= dc xor $80; { dao d7} dc:= dc shr 4; { dc=0000 ****} i:= i or dc; i:= i shl 4; { i=0000 0000 **** 0000} {-------- Doc 4 bit thap byte dia chi cao---------} thong_51; for j:= 1 to 5000 do begin end; dc:= dc xor dc; portI(dc,$379); portI(dc,$379); dc:= dc xor $80; dc:= dc shr 4; i:= i or dc; i:= i shl 4; { i= 0000 **** **** 0000} {-------- Doc 4 bit cao byte dia chi thap---------} thong_42; for j:= 1 to 5000 do begin end; dc:= dc xor dc; portI(dc,$379); portI(dc,$379); dc:= dc xor $80; dc:= dc shr 4; i:= i or dc; i:= i shl 4; { i= **** **** **** 0000} {-------- Doc 4 bit thap byte dia chi thap---------} thong_41; for j:= 1 to 5000 do begin end; dc:= dc xor dc; portI(dc,$379); portI(dc,$379); dc:= dc xor $80; dc:= dc shr 4; i:= i or dc; { i= **** **** **** ****} end; {------------------------------------} procedure TForm1.Button2_ResetVXLClick(Sender: TObject); var j: longint; b:byte; begin b:=$00; portO($378,b); portO($378,b); hold:= $12; { 0001.0010} portO($378,hold); portO($378,hold); clock_dk; { hold:= hold xor $04; { 0001.0110} {port[$378]:= hold; port[$378]:= hold; clock_dk; } hold:= hold xor $02; { 0001.0000} portO($378,hold); portO($378,hold); clock_dk; for j:= 1 to 999990 do begin end; hold:= hold xor $01; { 0001.0001} portO($378,hold); portO($378,hold); clock_dk; portO($378,hold); { hold= $11= 0001.0001} clock_dk; { reset xong hvxl} Panel6.caption:= 'MODE 1 is selected'; Panel7.caption:= '8085 System '; Panel8.caption:= 'is on now'; end; {------------------------------------} procedure TForm1.Button3_Rom_SimClick(Sender: TObject); var j : longint; k: integer; dk,b: byte; dl, dc: byte; begin flag:=true; b:=$00; portO($378,b); portO($378,b); hold:= $12; { 0001.0010} portO($378,hold);portO($378,hold); clock_dk; hold:= hold xor $04; { 0001.0110} portO($378,hold);portO($378,hold); clock_dk; hold:= hold xor $02; { 0001.0100} portO($378,hold);portO($378,hold); clock_dk; for j:= 1 to 999990 do begin end; hold:= hold xor $01; { 0001.0101} portO($378,hold);portO($378,hold); clock_dk; portO($378,hold); { hold= $15= 0001 0101} clock_dk; { reset xong hvxl} Panel6.caption:= 'MODE 2 is selected'; Panel7.caption:= 'The 8085 Monitor '; Panel8.caption:= 'file is Runing'; while flag=true do begin { Kiem tra CSROM} application.ProcessMessages; portI(dk,$379); { doc CSROM= d3} portI(dk,$379); { doc CSROM= d3} portI(dk,$379); { doc CSROM= d3} dk:= dk and $08; {----------- CSROM= 0, doc dia chi --------------} If dk=$00 then begin Doc_dia_chi; {--------------- xuat du lieu ----------------} dl:= buffer[i]; hold:= hold xor $10; { cho phep chot dl lam viec} portO($378,hold);portO($378,hold); clock_dk; for j:= 1 to 1999 do begin end; portO($378,dl); portO($378,dl); clock_dl; for j:=1 to 1000 do begin end; hold:= hold xor $1C; portO($378,hold);portO($378,hold); clock_dk; for j:= 1 to 999990 do begin end; end { If dk=0} else { dk0} begin hold:= hold xor $0C; {dao hai tin hieu Clear cho IC 74LS73} portO($378,hold);portO($378,hold); clock_dk; end; { else} {bat lan 2} end; { while} end; {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&} procedure TForm1.Button1_Open_FileClick(Sender: TObject); var F_name: file of byte; s: string[30]; F_size,mod256: word; i,j: byte; begin {+++++++++++++++++++++++++++++++++++++++++++} if opendialog1.execute then begin assignfile(F_name,opendialog1.filename); reset(F_name); { mo file} { Mo file} F_size:= FileSize(F_name); { Lay kich thuoc File} i:= 0; listbox1.visible:= true; for i:=0 to F_size-1 do begin if not eof(F_name) then read(F_name,Buffer[i]); ListBox1.Items.Add(' '+inttohex(i,4)+'h-------'+inttohex(buffer[i],2)+'h'); end; Label1.visible:= true; { con tro Buffer} Label2.visible:= true; Label3.visible:= true; { con tro Buffer} Label4.visible:= true; Label4.caption:=intTostr(i+1)+ ' Bytes.'; Label5.visible:= true; Label6.visible:= true; s:= opendialog1.filename; i:= length(s); j:= length(s); repeat i:= i-1; until s[i]= '\'; j:= j-i; s:= copy(s,i+1,j); Label6.caption:= s; ListBox1.setfocus; Closefile(F_name); Panel6.caption:= 'MODE 3 is selected'; Panel7.caption:= 'The 8085 Monitor '; Panel8.caption:= 'file is in DATBUFF'; {+++++++++++++++++++++++++++++++++++++++++++} i:= 0; mod256:=0; for i:=0 to F_size-1 do mod256:= mod256+(Buffer[i]); mod256:= mod256 MOD 256; Label3.caption:= IntToHex(mod256,2)+'H'; end; {-----------------------------------------} end; end.

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

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