LUÂÄN VĂN TỐT NGHIỆP 36 IV.3. Chương trình Download: Danh sách các lớp: Tên lớp Công dụng Button.hpp Tạo các nút nhấn, và chứa các hành động liên quan Disklist.hpp Liệt kê các ổ đóa trong máy, và chứa các hành động liên quan List.hpp Để vẽ bảng liệt kê các thư mục và file, và chứa các hành động liên quan Mouse.h Chứa các thao tác về chuột Screen.h Chứa các tham số về giao diện màn hình, và chứa các hành động liên quan Textbox.hpp Vẽ khung nhập liệu (tên file, loại file, ) , và chứa các hành động liên quan Xuat.hpp Chứa các thao tác, hành động liên quan đến truyền file Lưu đồ của hàm main(): Giải thích lưu đồ: Hình 13: lưu đồ hàm Main() của chương trình DownLoad. Begin InitGraphics() Khởi tạo thành công Mainpro() closegraph() End CT báo lỗi Đóng chế độ đồ họa Thoát InitValues(…) InitScreen() InitMouse(…) S Đ Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 37 Chương trình bắt đầu ở begin. InitGraphisc():Khởi tạo chế độ đồ họa, vì chương trình này có sử dụng màn hình ở chế độ đồ họa trong môi trường Dos. Nếu khởi tạo không thành công thì thông báo lổi khởi tạo và thoát khỏi chương trình. InitValues(…): hàm này còn khởi tạo các giá trò ban đầu cho màn hình: kích thước cửa sổ, kích thước ký tự. InitScreen(): Vẽ màn hình với các giá trò đã khởi tạo InitMouse(): Khởi tạo chuột. Khởi tạo thành công: kiểm tra, nếu khởi động chuột thành công thì tiếp tục công việc, nếu không thành công thì xuất ra thông báo lỗi và thoát khỏi chương trình. MainPro là chương trình quản lý mọi thao tác của toàn bộ chương trình, từ các thao tác nhập xuất đến các thao tác lựa chọn các tùy chọn. Closegraph(): Đóng chế độ đồ họatrước khi thoát khỏi chương trình. End: kết thúc chương trình. Hàm Main() này được viết bằng ngôn ngữ C : void main(void) { InitGraphics(); InitValues("Chuong trinh truyen du lieu ra RAM"); InitScreen(); if (!InitMouse(&MainWindow.rViewPort)) { OutMessage("Mouse driver not found. Init mouse and return"); getch(); closegraph(); exit(1); } ShowMouse(); MainProgram(); closegraph(); } void main(void): void cho biết rằng hàm main() không trả về môt giá trò nào, nghóa là trong hàm main này không có lệnh return() hoặc lệnh là một lệnh return không có tham sô. (void) cho biết hàm main không cần đối số đưa vào. Lưu đồ hàm Mainpro(): Begin Khởi tạo các giá trò cho các ô nhập text Khởi tạo các giá trò cho các nút chọn A Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 38 Hình 14: Lưu đồ của hàm MainPro(). Giải thích lưu đồhàm MainPro(): Truyền file Return Xác nhận thoát Xác đònh file chọn Click Nút pull down Click nút Exit Nhấn Esc Click nút Send Xuất các ô nhập text ra màn hình Xuất các nút chọn ra màn hình A GetEvent() Click vào ô Open File Gọi chương trình nhập vào đường dẫn Gọi chương trình xuất cửa sổ chọn file Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 39 Khởi tạo các giá trò cho các ô nhập text: trên màn hình sẽ có khung cho phép gõ vào tên file, chương trình con này sẽ khởi tạo các tọa độ, màu chữ cho text. Khởi tạo các giá trò cho các nút chọn: cũng giống như trên, nhưng đối với các nút Send, Exit và nút Pulldown. Xuất các ô nhập text ra màn hình. Xuất các nút chọn ra màn hình. GetEvent: chương trình con lấn biến cố chuột. Biến cố này chứa các thông tin về tọa độ chuột, phím nào của chuột được click, thời gian click lần cuối, … để xáx đònh các lệnh kế tiếp cần thực hiện. Click vào ô Open File: nếu biến cố click chuột xẩy ra tại tọa độ của của ô Open file thì kết quả click vào ô này là TRUE, thực hiện chương trình con nhập vào file cần xuất. Ngược lại thì bỏ qua. Click vào nút Pulldown: nếu biến cố click chuột xẩy ra tại tọa độ của của nút Pulldown thì kết quả click vào ô này là TRUE, gọi chương trình xuất ra cửa sổ chọn File, ngược lại thì bỏ qua. Click nút Send: nếu biến cố click chuột xẩy ra tại tọa độ của của nút Send thì kết quả click vào ô này là TRUE, thực hiện xác nhận file xuất đã nhập vào chưa, nếu file xuất chưa nhập vào thì báo lỗi và bỏ qua lệnh Send, nếu file xuất đã có tên rồi thì xuất file. Click nút Exit: nếu biến cố click chuột xẩy ra tại tọa độ của của nút Exit thì kết quả click vào ô này là TRUE, thực hiện xác nhận muốn thoát khỏi chương trình, nếu xác nhận đúng thì thoát, ngược lại thì bỏ qua lệnh Exit. Nhấn Esc: nếu người dùng nhấn vào nút Esc trên bàn phím thì biến cố Nhấn Esc sẽ là TRUE, thực hiện xác nhận muốn thoát khỏi chương trình, nếu xác nhận đúng thì thoát, ngược lại thì bỏ qua lệnh thoát bằng nút Esc. Sau đó, chương trình lại thực hiện vòng lặp tại hàm lấy biến cố chuột cho tới khi có thao tác mới. Giả sử click chuột vào ô Open File, ô này sẽ đổi trạng thái, các kýtự trong ô sẽ đổi màu báo trạng thái chờ nhập, nhập vào một tên fie có phần mở rộng là “prn” với đầy đủ đường dẫn, sau đó gõ phímEnter thì tên file sẽ được lưu vào một biến toàn cục, và các đòa chỉ đầu và đòa chỉ cuối của chương trình ngôn ngữ máy sẽ được hiện lên ở khung “Free memory request”, và một dòng thông bào bên dưới báo cho biết click Send để truyền file. Giả sử tiếp tục click Send thì một thông báo xác nhận sẽ xuất hiện, muốn xác nhận có chắc là người dùng muốn truyền file không. Nếu trả lời Ok thì chương trình truyền file sẽ được gọi thi hành. Sau đây là lưu đồ của chương trình con thực hiện việc truyền File. Giải thích lưu đồ: Gọi chương trình cắt file: chương trình cắt file thực chất là một chương trình con có nhiệm vụ lọc ra những thông tin quan trọng trong file “x.prn” sẽ được truyền đi, và lưu chúng trong một file “x.tmp” chỉ xuất hiện trong khoảng thời gian chương trình đang cắt file. Sau đó file “x.tmp” này sẽ bò xoá đi khi quá trình truyền file hoàn tất. Quá trình truyền file phải sử dụng bước này để các quá trình bắt tay giữa máy tính và Kit được ổn đònh (thực nghiệm), và việc viết chương trình được rõ ràng hơn. Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 40 Gọi chương trình xuất file: chương trình này sẽ đọc file có tên là “x.tmp” được tạo từ chương trình cắt file. Chương trình này sẽ tuần tự đọc file, nhận tín hiệu bắt tay và gởi dữ liệu cho đến khi hết file. Trong quá trình truyền file, nếu có sự cố, giả sử không bắt tay được vì lý do nào đó, thì chươn trình sẽ đợi, thời gian kéo dài sẽ coi như việc truyền file bi lỗi, và thông báo lỗi sẽ xuất hiện. Nếu truyền thành công thì thông báo hoàn tất công việc. Return: Quay trở về chương trình MainPro. Trong hàm MainPro(), cần quan tâm chương trình con truyền file. Hình 15: Lưu đồ chương trình con có nhiệm vụ truyền file. Trong phần này, ta quay lại công việc cắt file đã giới thiệu ở mục III của chương V. Chương trình con cắt file là để tạo ra một file tạm thời có phần mở rộng .tmp. file này sẽ là một file có cấu trúc đơn giản hơn file .prn rất nhiều nhằm để giúp cho việc truyền file thêm đơn giản. Trước hết hãy khảo sát một file *.prn, file này được dòch ra bởi 1 chương trình dòch Assembler. Trong chương trình, byte lệnh đều tiên bắt đầu ở đòa chỉ 0000hex. Nhận xét rằng mỗi dòng lệnh bắt đầu bở một đòa chỉ bộ nhớ, và liền sau đòa chỉ này là một dấu nháy đơn, mà dấu nháy đơn đầu tiên chỉ xuất hiện tại đòa chỉ của dòng lệnh đầu tiên. để tìm đòa chỉ đầu tiên thì có thể tìm dấu nháy đơn đầu tiên. Đúng Gọi chương trình Cắt file Begin Gọi chương trình xuất file Thành công Thông báo hoàn tất công việc Return. Thông báo lỗi công việc Sai Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 41 MACRO-80 3.4 01-Dec-80 PAGE 1 Org 0000h 0000' 3E 00 MVI A,00h 0002' 32 A001 STA 0A001h 0005' 3E 80 MVI A,80h 0007' 32 A001 STA 0A001h 000A' 3E 06 MVI A,06h 000C' 32 A000 STA 0A000h 000F' 76 HLT MACRO-80 3.4 01-Dec-80 PAGE S Macros: Symbols: No Fatal error(s) Còn đòa chỉ cuối cùng là đòa chỉ của byte cuối cùng của dòng lệnh cuối cùng. Dòng lệnh cuối cùng là dòng lệnh nằm gần từ “Macros” nhất. Từ macros này cũng là từ macros duy nhất. cách tìm đòa chỉ cuối cùng như sau: Tìm từ Macros Dò ngược trở về phíc trên cho đến khi gặp dấu nháy đơn đầu tiên Tiếp tục dò ngược về trước, nếu trong vòng 10 ký tự mà gặp môt ký tự xuống dòng thì thì dấu nháy đơn vừa rồi nằm ngay sau dòng lệnh cuối cùng. Trong dòng lệnh cuối cùng, tìm byte cuối cùng sẽ tính được đòa chỉ cuối cùng. Cách tìm một dòng lệnh: Khi gặp một dấu nháy đơn, thì tìm một ký tự khác dấu nháy đơn hoặc khoảng trắng. Khi gặp ký tự đầu tiên, đó chính là ký tự đầu tiên của byte lệnh. Nếu sau 2 ký tự của lệnh là một khoảng trắng thì 2 ký tự vừa rồi chính là một mã lệnh. Nếu sau 2 lý tự của môt byte lệnh không có khoảng trắng nào, thì 2 ký tự vừa rồi chính là 2 của 4 ký tự báo một đòa chỉ. Nếu sau 2 ký tự tính từ lúc bắt đầu một lệnh là 2 khoảng trắng trở lên thì 2 byte vừa rồi là 2 byte cuối cùng của một dòng lệnh. Bắt đầu một chu kỳ mới tìm dòng mã lệnh. Lưu mã lệnh vào file *.tmp: Đầu tiền lưu đòa chỉ đầu, đòa chỉ cuối vào file. Nếu gặp mã lệnh (2 ký tự) thì ghi tiếp vào file. Nếu gặp mã đòa chỉ thì đổi chổ 2 ký tự sau với 2 ký tự trước của đòa chỉ. Đến khi gặp đòa chỉ cuối cùng thì ghi vào 2 ký tự cuối cùng và đóng file. Công việc trên được mô tả bằng lưu đồ sau: Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 42 Đ S S S Nhận đòa chỉ đầu Begin Nhận đòa chỉ cuối Mở file nguồn Mở file đích Tìm dấu “ ‘” Đọc 2 ký tự lệnh Xét ký tự tiếp theo Không là khoảng trắng Là một khoảng trắng 2 khoảng trắng Lưu 2 ký tự Lưu 2 ký tự sau Đọc 2 ký tự tiếp theo > đòa chỉ cuối Đ S End Đ Đ Hình 16: Lưu đồ chương trình con Cắt file B usy=1 Xuất dliệu ra bus Strobe=1 ACK=1 & Error=0 AF=1 Đọc Error=0 s a Thu nible cao AF=0 Error=1 sai Thu nible thấp Ktra dữ liệu sai Đúng Xuất FF ra data bus AF=0 Strobe=0 Hết dữ liệu Chuẩn bò dữ liệu kế tiếp sai Sai Return Đúng Đúng Sai Đúng Đúng Begin Xuất 00 ra data bus AF=0 Strobe=0 Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 44 Sau khi cắt file, một file mới đã được tạo ra. Chương trình truyền file đến bước xuất file. Dó nhiên trước khi xuất file cũng cần có những thủ tục mở file, đặt các mức logic cần thiết để khởi động cổng: mở file hợp lệ, cho bit AF=0, strobe=0. Giải thích lưu đồ chương trình xuất file: Trước tiên, máy tính xuất strobe=0, AF=0 bằng chách xuất ra port 37Ahex số 03hex (xem lại thanh ghi điều khiển ở mục IV chương IV); Chương trình xuất bắt đầu tại begin. Đọc Busy\ cho tới khi bằng [1]: đợi kit phát ra Busy=[0] báo hiệu đã sẳn sàng nhận dữ liệu. Nếu nhận được Busy\=[1] thì bước xuất dữ liệu được thực hiện, tức là lúc đó máy tính đọc 2 ký tự đầu tiên của file .tmp và xuất ra port 378 của máy tính. Strobe=[1]: để báo cho kit biết dữ liệu đã được gửi ra port để kit biết mà đọc dữ liệu vào. ACK=[1] và Error=[0]: khi nhậndl xong kit sẽ báo ACK=[1], Error=0 để báo cho máy tính biết Kit sẽ gửi dữ liệu để kiểm tra đúng hay sai. AF=[1]: báo cho Kit biết máy tính sẳn sàng nhận dữ liệu. Máy tính đọc bit Error cho tới khi Error = [0] để biết Kit đã gửi về dữ liệu để kiểm tra. Thu Nible cao: Nhận dữ liệu để kiểm tra. Cho AF=[0]: đã nhận xong dữ liệu. Đọc Error cho tới khi Error=[1] để biết đã có dữ liệu mới. Thu nible thấp. Kiểm tra dữ liệu: máy tính sẽ phải ghép nối nible cao với nible thấp lại rồi so sánh với dữ liệu vừa xuất ra, nếu 2 dữ liệu giống nhau thì kết quả xuất dữ liệu sẽ là đúng. Máy tính sẽ xuất ra số FFhex ở thanh ghi data để báo đúng, và xuất AF=0 & strobe=0 để báo xuất xong 1 byte dữ liệu. Ngược lại thì xuất 00hex ra thanh ghi data và xuất AF=0, strobe =0 để báo kết quả sai. Nếu kết quả sai thì quay lại xuất lạ byte vừa rồi đã xuất. Quay lại từ đầu chương trình xuất dữ liệu cho đến khi hết dữ liệu. IV.4. Chương trình nhận dữ liệu ở Kit: Giải thích lưu đồ chương trình nhận dữ liệu: Chương trình bắt đầu tại begin. Trước tiên phải khởi tạo 8255 với các chế độ qui đònh như sau: Port A: nhận dữ liệu từ thanh ghi data theo ket nối phần cứng. Port B: xuất trạng thái Kít trả về máy tính. Port C: nhận tín hiệu điều khiển từ thanh ghi điều khiển của máy tính. Sau đó báo cho máy tính biết trạng thái bận. Mục đích của công việc này là để đồng bộ thời điểm bắt đầu chương trình nhận dữ liệu với chương trình xuất dữ liệu từ máy tính. Reset biến đếm đòa chỉ đầu và cuối, nơi đặt vùng dữ liệu nhận được từ máy tính. Xuất chử Ready báo cho người sử dụng biết trạng thái sẳn sàng nhận dữ liệu của kit. Chờ người sử dụng gõ phím Go. Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . LUÂÄN VĂN TỐT NGHIỆP 45 Hình 18: Lưu đồ chương trình nhận dữ liệu từ máy tính gởi xuống thiết bò thực tập vi xử lý 8085 (trang 1): Begin Khởi tạo ngoại vi 8255: Port A: nhận dữ liệu. Port B: Xuất trạng thái Port C: nhận tín hiệu điều khiển. Báo thiết bò bận Reset biến đếm đòa chỉ đầu và cuối, nơi đặt vùng dữ liệu nhận được từ máy tính gởi xuống “READY” Chờ gõ phím “Go” Gõ phím “Go” “SENDING” Busy=0 Sẳn sàng nhận dữ liệu. 1 . LUÂÄN VĂN TỐT NGHIỆP 46 Hình 18: Lưu đồ chương trình nhận dữ liệu từ máy tính gởi xuống thiết bò thực tập vi xử lý 8085 (trang 2). Strobe=1 Busy=1, ACK=0 Đọc dữ liệu, ACK=1 AF=1 Xuất Nible cao +Error=0 AF=0 Xuất Nible thấp +Error=1 Strobe=0 Đọc dữ liệu port A (A)=FF Xử lý dữ liệu Busy=0 1 Đ Đ Đ Đ Đ S S S S S . . Khởi tạo các giá trò cho các ô nhập text: trên màn hình sẽ có khung cho phép gõ vào tên file, chương trình con này sẽ khởi tạo các tọa độ, màu chữ cho text. Khởi tạo các giá trò cho các nút. IV.3. Chương trình Download: Danh sách các lớp: Tên lớp Công dụng Button.hpp Tạo các nút nhấn, và chứa các hành động liên quan Disklist.hpp Liệt kê các ổ đóa trong máy, và chứa các hành động. 0000h 0000' 3E 00 MVI A,00h 00 02& apos; 32 A001 STA 0A001h 0005' 3E 80 MVI A,80h 0007' 32 A001 STA 0A001h 000A' 3E 06 MVI A,06h 000C' 32 A000 STA 0A000h 000F'