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.
109 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1551 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Luận văn Giao tiếp máy tính với vi xử lý 8085, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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
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.
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.
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ông việc trên được mô tả bằng lưu đồ sau:
Đ
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
Busy=1
Xuất dliệu ra bus
Strobe=1
ACK=1 & Error=0
AF=1
Đọc Error=0
sai
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
Hình 17: Lưu đồ chương trình con xuất dữ liệu.
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.
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.
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
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
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).
Khi phím Go được gõ thì quá trình nhận dữ liệu của kit thực sự bắt đầu.
Kit báo sẳn sàng chờ máy tính gửi dữ liệu xuống.
Đọc strobe cho tới khi bằng 1, để biết dữ liệu đã được gởi ra bus dữ liệu.
Xuất Busy=1, ACK=0.
Đọc dữ liệu và cho ACK=1. Lúc này kit đã nhận được dữ liệu nhưng chưa biết dữ liệu có chắc chắn đúng không. Sau đó bắt đầu kiểm tra.
Đọc AF cho tới khi bằng 1, biết máy tính sẳn sàng nhận dữ liệu kiểm tra.
Xuất nible cao của dữ liệu kiểm tra (bằng 4 bit cao của port B) và bit Error=0 (bit PB3).
Đọc AF cho tới khi bằng 0, để biết máy tính sẳn sàng nhận4 bit thấp của dữ liệu kiểm tra.
Xuất 4 bit thấp và Error bằng 1.
Lúc này, máy tính đang nhận và so sánh dữ liệu đã gởi đi. Và kết quả so sánh được báo cho kit ở thanh ghi dữ liệu, tức portA của 8255. Kit đọc strobe cho tới khi strobe bằng [0] biết kết quả kiểm tra đã sẳn sàng.
Đọc port A lấy kết quả kiểm tra.
Nếu kết quả kiểm tra là đéng thì thực hiện khâu xử lý dữ liệu (lưu dữ liệu vào nơi cần thiết) và quay lại nhận dữ liệu kế tiếp. Nếu kết quả là sai thì bỏ qua khâu xử lý dữ liệu mà quay trở lại nhập lại dữ liệu cũ.
Quá trình xẩy ra cho đến khi khâu xử lý dữ liệu nhận ra đã nhập đến dữ liệu cuối cùng thì kết thúc khâu xử lý sẽ thoát như lưu đồ sau đây:
Start
(c) = 00h
Lấy dữ liệu vừa nhận được làm byte cao của địa chỉ bắt đầu vùng nhớ đặt dữ liệu.
H ¬ (B)
Lấy dữ liệu vừa nhận được làm byte thấp của địa chỉ bắt đầu vùng nhớ đặt dữ liệu.
L ¬ (B)
Lấy dữ liệu vừa nhận được làm byte cao của địa chỉ chấm dứt vùng nhớ đặt dữ liệu.
D ¬ (B)
(c) = 01h
(c) = 02h
1
A
Đ
Đ
Đ
S
S
S
Hình 19: Lưu đồ chương trình xử lý dữ liệu (trang1).
Return
Lấy dữ liệu vừa nhận được làm byte thấp của địa chỉ bắt đầu vùng nhớ đặt dữ liệu.
E ¬ (B)
(c) = 03h
A
1
Đ
S
Tăng biến đếm lên một đơn vị.
Cất byte dữ liệu vừa nhận được vào ô nhớ có địa chỉ nằm trong con trỏ địa chỉ (HL)
M ¬ (B)
Tăng giá trị con trỏ địa chỉ lên một đơn vị
HL¬(HL) + 1
Đã trỏ đến địa
chỉ cuối
(HL)=(DE)
Reutrn
End.
S
Đ
Busy = 0
End.
Hình 19: Lưu đồ chương trình xử lý dữ liệu (trang 2).
Yù tưởng: Nhập 2 địa chỉ đầu và cuối vào 2 cặp thanh ghi HL và DE. Cặp thanh ghi HL còn được coi là con trỏ địa chỉ trỏ đến ô sẽ chứa dữ liệu. Chương trình sẽ so sánh địa chỉ mà con trỏ trỏ đến với địa chỉ kết thúc. Nế chưa bằng thì lưu dữ liệu. nếu bằng thì thoát chương trình.
Giải thích lưu đồ:
Chương trình con bắt đầu ở start.
Bốn bước so sánh đầu tiên để nhập địa chỉ đầu, cuối vào 2 cặp thanh ghi.
Nếu nội dung thanh ghi C lớn hơn 3 thì 2 cặp thanh ghi đã nhận đầy đủ các địa chỉ đầu cuối. Nên chương trình sẽ cất nội dung vủa nhận được vào ô nhớ có địa chỉ ghi trong cặp thanh ghi HL.
Quay lại nhận dữ liệu kế tiếp.
Nếu con trỏ đã trỏ đến địa chỉ cuối, thì chương trình đã được nhận đầy đủ, lúc này sẽ xuất ra từ “End,” để báo hoàn tất chương trình.
Chấm dứt chương trình.
Chương VII:
CHƯƠNG KẾT LUẬN
KẾT LUẬN
Qua 7 tuần ngắn ngủi, người thực hiện đề tài đã hoàn tất công trình.
Mục đích của đề tài là hoàn thành một chương trình, như một công cụ học tập, có khả năng đọc một file dữ liệu đã được lưu trên máy tính và sau đó, lọc những nội dung cần thiết cho bài thực tập vi xử lý, rồi truyền tải nội dung đó vào bộ nhớ RAM ở kit thực tập 8085.
Đề tài đã nhằm vào những nội dung chính sau:
Thứ nhất: giới thiệu về kit thực tập sử dụng. Trong phần này, các linh kiện quan trọng của kit được đề cập đền như CPU 8085, ngoại vi 8255, IC hiển thị 8279.
Thứ hai: giới thiệu về kết nối Kit và máy tính: cổng kết nối, các thanh ghi. Bên cạnh đó là những yêu cầu để vận dụng phương pháp truyền dữ liệu trong đề tài.
Sau cùng là nội dung chủ yếu của đề tài: những dẫn luận để xây dựng lưu đ62 chương trình truyền và nhận dữ liệu, phương pháp và thực hiện viết chương trình.
Tóm lại, thành quả của công trình là chương trình truyền dữ liệu có những ưu điểm về mặt yêu cầu cấu hình máy tính sử dụng, cách sử dụng đơn giản, và quan trọng nhất là có khả năng phát triển về sau. Có thể để làm tài liệu tham khảo cho sinh viên điện tử - tin học và những ai quan tâm đến dạng đề tài này.
Tuy nhiên, đề tài còn có một số hạn chế: cần phải có máy tính để có thể sử dụng chương trình; phải nhập chương trình vào máy tính trước tiên ở dạng ngôn ngữ Assembly.
Về phía người thực hiện đề tài, trong thời gian ngắn ngủi với sự nổ lực của bản thân và với bao tâm huyết đã đổ ra của người giáo viên trong sự giúp đỡ tận tình, đã hoàn thành công trình nghiên cứu với kết quả khả quan. Đây thật sự là một vinh dự, một niềm tự vui lớn cho sinh viên đối với môi trường sư phạm, đối với thầy cô và cả đối với bản thân.
PHẦN PHỤ ĐÍNH
A.Chương trình nhận dữ liệu ở Kit thực tập vi xử lý 8085.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuong trinh nhan du lieu tu may tinh goi xuong Thiet bi thuc tap
;vi xu li 8085.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Org 2500h
MVI A,99h ;khoi tao 8255, Mode 0: PortA nhap du lieu, PortB xuat
OUT RegCNT ;trang thai, PortC nhan lenh dieu khien.
MVI A,80h ;bao cho may tinh biet thiet bi dang ban.
OUT PortB
MVI C,00h ;reset bien dem dia chi.
CALL READY ;xuat chu "READY" ra hien thi tren 5 LED 7 doan.
WaitGO: CALL KEYBRD ;doi nhan phim.
CPI KeyGO ;chuong trinh chi thuc hien tiep khi nhan dung
JNZ WaitGO ;phim "GO".
CALL SENDING ;nhan dung phim "GO" se xuat hien "SENDING" tren 8 LED.
MVI A,00h ;bao cho may tinh biet thiet bi da san sang tiep ;nhan
OUT PortB ;du lieu.
CkSTB1:IN PortC ;doc lenh dieu khien STROBE tai PortC.
ANI 01h
CPI 01h
JNZ CkSTB1 ;neu STROBE # 1 thi doi tiep.
MVI A,80h ;bao BUSY\ = 0, ACK = 0.
OUT PortB
IN PortA ;doc du lieu vao.
MOV B,A ;tam cat du lieu vao thanh ghi B.
MVI A,0C0h ;bao ACK = 1.
OUT PortB
ChkAF1: IN PortC ;doc lenh dieu khien AF.
ANI 02h
CPI 02h
JNZ ChkAF1 ;neu AF # 1 thi doi tiep.
MOV A,B ;hoan tra B lai cho A.
ANI 0F0h ;che nibble thap va reset bit ERROR = 0.
OUT PortB ;xuat nibble cao va bao ERROR = 0.
ChkAF0: IN PortC ;doc lenh dieu khien AF.
ANI 02h
CPI 00h
JNZ ChkAF0 ;neu AF # 0 thi doi tiep.
MOV A,B ;hoan tra B lai cho A.
RLC ;dich 4 bit thap thanh 4 bit cao tuong ung.
RLC
RLC
RLC
ANI 0F0h ;che nua byte thap thap.
ORI 08h ;set bit ERROR = 1.
OUT PortB ;xuat nibble thap va bao ERROR = 1.
ChkSTB0:IN PortC ;doc lenh dieu khien STROBE.
ANI 01h
CPI 00h
JNZ ChkSTB0 ;neu STROBE # 0 thi doi tiep.
IN PortA ;doc du lieu.
CPI 0FFh ;FFh la ma bao du lieu dung.
JZ NoChk
CALL PROCESS
NoChk: MVI A,40h ;bao BUSY\ = 1.
OUT PortB
JMP ChkSTB1 ;chuan bi nhan byte ke tiep.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Chuong trinh con hien thi "READY" tren nam LED 7 doan.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
READY: PUSH PSW
MVI A,10h ;khoi tao 8279: hien thi 8 ki tu,loi vao phai,
STA CntI79 ;quet ban phim co lap ma, khoa ngoai 2 phim.
MVI A,3Eh ;lap trinh xung Clock = 100 KHz.
STA CntI79
MVI A,0C3h ;xoa hien thi va xoa FIFO.
STA CntI79
MVI A,01h ;tri hoan 0.1 ms > 160 us.
CALL DELAY
MVI A,90h ;bat dau ghi vao tai LED dau tien ben phai, co
STA CntI79 ;tang dia chi tu dong.
MVI A,31h ;cho hien thi "R".
STA DataI79
MVI A,79h ;cho hien thi "E".
STA DataI79
MVI A,77h ;cho hien thi "A".
STA DataI79
MVI A,5Eh ;cho hien thi "D".
STA DataI79
MVI A,6Eh ;cho hien thi "Y".
STA DataI79
POP PSW
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuong trinh con hien thi "SENDING" tren bay LED 7 doan.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SENDING:POP PSW
MVI A,10h ;khoi tao 8279: hien thi 8 ki tu,loi vao phai,
STA CntI79 ;quet ban phim co lap ma, khoa ngoai 2 phim.
MVI A,3Eh ;lap trinh xung Clock = 100 KHz.
STA CntI79
MVI A,0C3h ;xoa hien thi va xoa FIFO.
STA CntI79
MVI A,01h ;tri hoan 0.1 ms > 160 us.
CALL DELAY
MVI A,90h ;bat dau ghi vao tai LED dau tien ben phai, co
STA CntI79 ;tang dia chi tu dong.
MVI A,6Dh ;cho hien thi "S".
STA DataI79
MVI A,79h ;cho hien thi "E".
STA DataI79
MVI A,37h ;cho hien thi "N".
STA DataI79
MVI A,5Eh ;cho hien thi "D".
STA DataI79
MVI A,06h ;cho hien thi "I".
STA DataI79
MVI A,37h ;cho hien thi "N".
STA DataI79
MVI A,6Fh ;cho hien thi "G".
STA DataI79
POP PSW
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuong trinh con xu li du lieu: Chuong trinh nay se nhan dia chi bat
;dau va dia chi cham dut cua vung du lieu, cac ma may cua chuong trinh
;tren may tinh do xuong se duoc dat trong pham vi vung nay.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PROCESS:MOV A,C ;kiem tra xem co phai day la byte thu nhat ;khong ?
CPI 00h
JNZ A1
MOV H,B ;neu dung thi cat byte thu nhat vao thanh ghi H.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A1: MOV A,C ;kiem tra xem co phai day la byte thu hai khong ?
CPI 01h
JNZ A2
MOV L,B ;neu dung thi cat byte thu hai vao thanh ghi L.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A2: MOV A,C ;kiem tra xem co phai day la byte thu ba khong ?
CPI 02h
JNZ A3
MOV D,B ;neu dung thi cat byte thu ba vao thanh ghi D.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A3: MOV A,C ;kiem tra xem day co phai la byte thu tu khong ?
CPI 03h
JNZ A4
MOV E,B ;neu dung thi cat byte thu tu vao thanh ghi E.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A4: MOV M,B ;ke tu byte thu nam tro di se duoc cat vao o nho co
INX H ;dia chi do cap thanh ghi HL quan li.
MOV A,D
CPI H
RNZ
MOV A,E
CMP L
RNZ ;thoat neu HL tro den dia chi cham dut nam trong DE.
CALL END ;cho hien thi "END." tren ba LED 7 doan.
MVI A,40h ;bao BUSY\ = 1.
OUT PortB
HLT
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuong trinh con hien thi "END." tren ba LED 7 doan.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ END: PUSH PSW
MVI A,10h ;khoi tao 8279: hien thi 8 ki tu,loi vao phai,
STA CntI79 ;quet ban phim co lap ma, khoa ngoai 2 phim.
MVI A,3Eh ;lap trinh xung Clock = 100 KHz.
STA CntI79
MVI A,0C3h ;xoa hien thi va xoa FIFO.
STA CntI79
MVI A,01h ;tri hoan 0.1 ms > 160 us.
CALL DELAY
MVI A,90h ;bat dau ghi vao tai LED dau tien ben phai, co
STA CntI79 ;tang dia chi tu dong.
MVI A,79h ;cho hien thi "E".
STA DataI79
MVI A,54h ;cho hien thi "N".
STA DataI79
MVI A,0DEh ;cho hien thi "D.".
STA DataI79
POP PSW
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Hai chuong trinh con sau day da co san trong thiet bi thuc tap Vi xu ;li 8085
;nen nguoi thuc hien de tai nay thay khong can thiet phai viet lai va ;trinh bay
;ra. Do la 2 chuong trinh:
;KeyKRB : Chuong trinh con quet ban phim. Ma cua phim an duoc cat ;trong thanh
; ghi A.
;DELAY : Chuong trinh con tri hoan theo thoi hang 0.1 ms. He so tri ;hoan duoc
; nap vao thanh ghi A.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;#####################################################################;Khai bao cac nhan duoc su dung.
;##################################################################### RegCNT equ 03h
PortA equ 00h
PortB equ 01h
PortC equ 02h
CntI79 equ 0A001h
DataI79 equ 0A000h
KEYBRD equ 0216h
DELAY equ 0310h
KeyGO equ 17h
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ End
B.Module Demo.cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "screen.h"
#include "mouse.h"
#include "button.hpp"
#include "textbox.hpp"
#include "list.hpp"
#include "disklist.hpp"
#include "send.hpp"
#define NumBox 2
#define NumBut 2
LPEVENT lpEvent; //bien chua cac bien co chuot
char szMessage[128];
BUTTON But[NumBut],NutKiem;
TEXTBOX Box[NumBox],Port;
char DiskName[27],DName;
char ftype[15]="*.prn";
char inter_Path[100]="";
char RequF[100];
unsigned int St_address,End_address=0;
char Sta_hex[5],End_hex[5];
//---------------------------------------------------------
int TestPressedButton(int x,LPEVENT lpEvent);
int TestPressTexbox(int x,LPEVENT lpEvent,char layra[],unsigned *attribp);
void MainProgram();
int TestPressList(LIST L,LPEVENT lpEvent,char s[],unsigned *attrib,char *typ);//nhap bang liet ke
int SendFile();
//---------------------------------------------------------
void main(void)
{
InitGraphics();
InitValues("Download Program.");
InitScreen();
if (!InitMouse(&MainWindow.rViewPort))
{
OutMessage("Mouse driver not found. Init mouse and return");
getch();
closegraph();
exit(1);
}
ShowMouse();
MainProgram();
closegraph();
}
//---------------------------------------------------------
void MainProgram()
{
char Name[20],buffer[MAXPATH];
unsigned attrib,Attribp;
SEND Send;
LIST L;
But[0].InitButton(200,380,250,400,LIGHTGRAY,"Send");
But[1].InitButton(400,380,450,400,LIGHTGRAY,"Exit");
Box[0].InitTextBox(50,70,477,90,GREEN,LIGHTGREEN,"Open File");
Port.InitTextBox(50,270,250,290,GREEN,LIGHTGREEN,"Out port");
Port.GetS_in("LPT1");
L.InitList(480,70,500,90,LIGHTGRAY);
But[0].OutButton();//xuat nut lenh
But[1].OutButton();//xuat nut lenh
Box[0].OutTextBox();//xuat hop nhap text
Port.OutTextBox();
L.Show();
setcolor(BLACK);
line(50,150,250,150);
line(50,150,50,215);
setcolor(WHITE);
line(50,215,250,215);
line(250,150,250,215);
outtextxy(50,130,"Free memory request");
outtextxy(55,158,"Start ad :");
outtextxy(55,178,"End ad :");
outtextxy(55,198,"Total :");
OutMessage("Click mouse to chose action");
int kkkk;
char RequestFile[15]="";
do//kiem tra nhap chuot chon cong viec
{
ShowMouse();
lpEvent = GetEvent();//lay bien co chuot
if(TestPressedButton(2,lpEvent)==0)//kiem tra xem da click vao nut nao
//0:nhan OK
{
char InName[100],OutName[100];
Box[0].GetS(InName);
if(InName[strlen(InName)-1]=='\\')
InName[strlen(InName)-1]='\0';
_dos_getfileattr(InName,&attrib);
if(attrib==16)
{
OutMessage("");
OutError("Please enter a file name");
OutMessage("Click mouse to chose action");
}
else//la file
{
if(End_address!=0)
{
if(OutError("Are you sure ?"))
{
OutMessage("Sending... Press Esc to stop if time is over.");
Send.CatFile(Sta_hex,End_hex,inter_Path);
Send.Out();
HideMouse();
if(Send.Out()!=-1)
{
HideMouse();
OutMessage("");
OutError("Task is complete.");
OutMessage("Click mouse to choose action");
}
else
{
HideMouse();
OutMessage("Click mouse to choose action");
}
}
}
}
}//if(TestPressedButton
if(TestPressList(L,lpEvent,Name,&attrib,ftype)==1)
//chon OK
{
switch (attrib)
{
case 16:chdir(Name);
getcwd(buffer, MAXPATH);//lay duong dan hien thoi vao buffer
strcpy(inter_Path,buffer);
Box[0].GetS_in(inter_Path);
Box[0].OutTextBox();
break;
default:
getcwd(buffer, MAXPATH);//lay duong dan hien thoi vao buffer
strcpy(inter_Path,buffer);
if(inter_Path[strlen(inter_Path)-1]!='\\')
strcat(inter_Path,"\\");
strcat(inter_Path,Name);
Box[0].GetS_in(inter_Path);
Box[0].DuongDan(inter_Path);
Box[0].OutTextBox();
break;
}//end switch
}//if(TestPressList(
//chon Cancel
TestPressTexbox(NumBox,lpEvent,inter_Path,&Attribp);//Path lay ra duong dan cho file nhap vao
//ShowMouse();
if(kbhit())
{
kkkk=getch();
if(kkkk==0)kkkk=getch();
}
Box[0].GetS(RequF);
{
int n=strlen(RequF);
if(n>5)//?.???
if(RequF[n-1]!='\\')
{
while(n>0&&RequF[n-1]!='\\')
{
n--;
}
char *strtemp=RequF;
for(int m=0;m<n;m++)
strtemp++;
if(strcmp(RequestFile,strtemp))//neu file chon co thay doi
{
setfillstyle(SOLID_FILL,CYAN);
bar(155,155,245,210);
strcpy(RequestFile,strtemp);
strtemp+=strlen(strtemp)-4;
if(!strcmp(strtemp,".prn"))//neu dung file prn
{
FILE *f;
if ((f = fopen(RequF,"rb")) == NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return ;
}
else//neu mo duoc file
{
clock_t start, end;
int period=0;
char c,address[7],buf[8];
int thoat;
int dem;
char KyTu_Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f'};
int Gtri_Dec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15};
double Value1=0,Value2=0;
char Total[10];
int FindPos,FindValue;
start = clock();
do
{
fread(&c,1,1,f);
end = clock();
}while(c!='\''&&(period=(end - start) / CLK_TCK)<10);
if(period>=2) goto Error;
fseek(f,-5,SEEK_CUR);
fread(address,10,1,f);
address[4]='\0';
strcpy(Sta_hex,address);
HideMouse();
strcat(address," Hex");
outtextxy(170,158,address);
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(address[FindPos]==KyTu_Hex[FindValue])
Value