Cháy từng bước (Debug).

Một phần của tài liệu luận văn tốt ngiệp thiết kế thi công và viết chương trình điều khiển mạch thực hành cho z80 cpu giao tiếp với máy tính qua ngõ máy in (Trang 52 - 55)

b. Mođ tạ leơnh Z80:

2.4.3. Cháy từng bước (Debug).

Đeơ cĩ theơ đaịt Z80 CPU vào chê đ cháy từng bước với sự can thip trực tiêp từ máy tính sau khi đã đưa chương trình ra RAM chung ta laăn lượt thực hin các bước sau:

Bước 1: Câm tât cạ các CS cụa các IC 8255, RAM chung, 74LS244 (U1), 74LS374 thođng qua

các tín hiu đieău khieơn thích hợp.

Bước 2: Tích cực pin G1 & G2 cụa 74LS244 (U4 & U5) đeơ thođng tuyên địa chư từ Z80 CPU

đên RAM chung.

Bước 3: Đưa EWT (pin 13 cụa IC 74LS74 leđn mức logic cao).

Bước 4: Đưa chađn RESET & WAIT cụa Z80 CPU leđn mức logic '1'. Lúc này KIT sẽ ở tráng

thái baĩt đaău hốt đng theo chương trình đã được ghi vào RAM chung (ở chê đ Debug). Trình tự hốt đng cụa KIT Z80 và quá trình xử lý như sau:

Khi Z80 truy xuât Rom chương trình (ở đađy là RAM chung) tín hiu CSROM sẽ ở mức tích cực thâp, tín hiu này qua coơng đạo sẽ được đưa đên chađn 11 (ngõ vào CLK cụa IC 74LS74_U8B), chađn 9 (ngõ ra Q) cụa 74LS74 sẽ leđn mức logic cao, chađn 8 (ngõ ra /Q) sẽ ở mức logic thâp, mức logic này được đưa vào chađn 4 cụa 74LS74 làm ngõ ra Q (chađn 11 U8A) ở mức logic cao, ngõ ra /Q ở mức logic thâp, ngõ ra /Q được đưa vào chađn WAIT cụa Z80 CPU,

do đĩ Z80 CPU sẽ được đưa vào tráng thái chờ cho đên khi chađn WAIT được đưa leđn mức logic cao.

Rom chương trình sẽ được Z80 truy xuât trong 2 trường hợp: 1. Lây mã lnh (chu kỳ M1).

2. Đĩc dữ liu.

Ở chu kỳ lây mã lnh sẽ cĩ tín hiu M1 đi kèm (mức tích cực thâp). Tín hiu này sẽ được PC nhn biêt qua đường Busy.

Như vy, thođng qua các tín hiu CSROM và M1, cĩ theơ can thip vào từng lnh cụa Z80. Cú theơ:

Đeơ đĩc tráng thái cụa các thanh ghi Z80 CPU theo từng lnh ta thực hin các bước cơ bạn sau:

Giạ sử raỉng breakpoint được đaịt ở dịng thứ n trong file cĩ phaăn mở rng là.asm. Khi thực hin cháy ở chê đ Debug, chương trình dịch sẽ dịch file này đeơ cĩ mt file tương ứng cĩ phaăn mở rng là.bin và mt file thứ hai cĩ phaăn mở rng là.lst (file này dùng khi người sử dúng muơn in hoaịc xem mã máy cụa từng lnh trong tồn b chương trình).

Ví dú: Ta cĩ mt chương trình viêt baỉng ngođn ngữ assembly Z80 như sau: org 0000h ld sp,0FFFEh loop: ld a,11h out (00h),a jp loop

Giạ sử file này được cât dưới teđn example.asm Giá trị trong file example.bin sẽ là:

31 FE FF 3E 11 D3 00 C3 03 00 Giá trị trong file example.lst sẽ là:

org 0000h 0000 31FEFF ld sp,0FFFEh lodp: 0003 3E11 ld a,11h 0005 D300 out (00h),a 0007 C30300 jp loop

Như vy dịng thứ n trong file *.asm sẽ tương ứng với dịng thứ m trong file *.lst theo cođng thức sau: m=n+(n div 60)*2 (sở dĩ cĩ cođng thức này là vì cứ 60 dịng trong file *.asm thì tương ứng sẽ cĩ 2 dịng được theđm vào trong file *.lst). Tái dịng thứ m trong file *.lst ta sẽ đĩc được địa chư tương ứng cụa mt lnh. Do đĩ breakpoint sẽ tương ứng với mt địa chư cú theơ: breakpoint <=> xxxxh.

Chương trìbh Debug sẽ baĩt đaău tái địa chư xxxxh đã được xác định trong bước tređn. Khi Z80 truy xuât Rom chương trình, ta laăn lượt xét mt trong hai trường hợp:

a. Trường hợp truy xuât b nhớ: Cĩ tín hiu chĩn CSROM nhưng khođng cĩ tín hiu M1. b. Trường hợp CPU lây mã lnh: Chia làm 2 lối:

- Lối thứ nhât: Lnh chư cĩ 1 chu kỳ M1.

- Lối thứ hai: Lnh cĩ 2 chu kỳ M1. Chu kỳ M1 thứ nhât luođn baĩt đaău baỉng mt trong 4 giá trị sau: DDH, CBH, FDH, EDH.

Như vy ta sẽ phađn bit được đađu là nơi baĩt đaău cụa mt lnh. Trong trường hợp CPU lây mã lnh, tín hiu CSROM xuât hin đoăng thời với tín hiu M1.

Khi Z80 truy xuât Rom chương trình chađn WAIT sẽ tự đng xuơng mức logic '0' nhờ phaăn cứng như đã giới thiu ở tređn. Trong trường hợp CPU truy xuât (đĩc) b nhớ, ta khođng xử lý gì cạ mà chư caăn set chađn WAIT leđn mức logic '1' đeơ CPU tiêp túc cháy bình thường cho đên khi cĩ tín hiu truy xt b nhớ tiêp theo CPU sẽ tự đng bị đaịt lái vào tráng thái chờ. Trong trường hợp CPU caăn lây mã lnh, đaău tieđn phại xác định mã lnh cĩ bao nhieđu byte nhờ đĩc giá trị đaău cụa mã lnh. Nêu mã lnh cĩ 2 bytes thì vic xử lý mã lnh thứ hai sẽ giơng như trong trường hợp truy xuât b nhớ. Vic xử lý lnh được tiên hành như sau:

Khi cĩ tín hiu M1, đaău tieđn ta sẽ đĩc địa chư đang được đưa vào Rom chương trình, so sánh địa chư này với địa chư xxxxh (tương ứng với đieơm breakpoint), nêu chưa baỉng thì set chađn WAIT cho Z80 CPU tiêp túc cháy cho đên khi địa chư đĩc veă đúng baỉng địa chư xxxxh, lúc này ta sẽ tiên hành đĩc tráng thái cụa các thanh ghi, trình tự đĩc như sau:

Bước 1: Câm CS RAM chung baỉng cách đưa /OER (pin 15 cụa 74LS374_U3) xuơng mức

logic '0' và đưa /CER (pin 6 cụa 74LS374_U3) leđn mức logic '1'.

Bước 2: Đưa giá trị C3 (mã lnh cụa lnh nhạy JP HiAddrLoAddr) leđn data bus, sau đĩ set

chađn WAIT leđn mức logic '1', Z80 CPU sẽ tiêp túc cháy và hốt đng tiêp theo sẽ là đĩc byte thâp và byte cao cụa địa chư đi theo sau mã lnh Jump (C3LLHH), laăn lượt đưa byte thâp và byte cao cụa địa chư leđn data bus thay cho dữ liu từ Rom chương trình. Địa chư này chính là địa chư đaău tieđn cụa đốn chương trình đĩc thanh ghi mà ta đã đưa vào RAM chung ở bước tređn. Mã lnh tiêp theo mà Z80 CPU caăn lây chính là byte đaău tieđn cụa đốn chương trình này, cho phép CS RAM chung baỉng cách đưa /OER leđn mức logic '1', /CER xuơng mức logic '0', sau đĩ set chađn WAIT leđn mức logic '1' đeơ CPU tiêp túc cháy. Ni dung cụa đốn chương trình đĩc thanh ghi bao goăm:

- Cât ni dung các thanh ghi vào stack.

- Laăn lượt đưa ni dung các thanh ghi A, B, C, D, E, H, L, IX, IY, SP ra địa chư 0000h (địa chư này chính là địa chư đaău tieđn cụa RAM chung), khi CPU truy xuât đên địa chư này chính là lúc đĩc ni dung các thanh ghi veă PC. Dùng các lnh EX, EXX đeơ hốn chuyeơn ni dung các thanh ghi AF', BC', DE', HL' sau đĩ đưa ni dung các thanh ghi này ra RAM chung đeơ đĩc veă PC như đã trình bày. Hốn vị lái các thanh ghi AF', BC', DE', HL'.

- Khođi phúc noơi dung các thanh ghi.

Bước 3: Sau khi đã đĩc ni dung các thanh ghi và in ra màn hình, đưa giá trị C3 (mã lnh

cụa lnh nhạy JP HiAddrLoAddr) leđn data bus, sau đĩ set chađn WAIT leđn mức logic '1', Z80 CPU sẽ tiêp túc cháy và hốt đng tiêp theo sẽ là đĩc byte thâp và byte cao cụa địa chư đi theo sau mã lnh Jump, laăn lượt đưa byte thâp và byte cao cụa địa chư trở veă (chính là địa chư cụa lnh mà CPU đã bị chaịn lái trước đĩ) leđn data bus thay cho dữ liu từ Rom chương trình.

Bước 4: Thực hin lnh, chaịn CPU ở lnh tiêp theo và tiêp túc đĩc ni dung các thanh ghi

Như vy vic đĩc ni dung các thanh ghi sẽ được tiên hành trước khi CPU lây mã lnh thứ nhât.

Đeơ thực hin lnh CALL như mt lnh đơn cụa Z80 trong chê đ Debug ta tiên hành như sau:

Đĩc mã lnh, nêu mã lnh chưa phại là C9 (mã lnh RET) thì tiêp túc set chađn WAIT leđn mức logic '1' đeơ CPU tiêp túc cháy bình thường, nêu mã lnh đúng baỉng C9 thì thực hin đĩc tráng thái các thanh ghi tương tự như khi thực hin mt lnh đơn.

Mođ tạ quá trình Debug.

Đaău tieđn chương trình sẽ tự đng tìm dịng tương ứng trong file *.lst (cĩ ni dung giơng với dịng hin tái trong cửa soơ màn hình sốn thạo). Trong file *.lst cĩ lưu giữ địa chư cụa lnh, do vy d dàng tìm được địa chư tương ứng cụa dịng lnh hin tái. Z80 CPU sẽ được cho cháy từ đaău chương trình đên địa chư này, nhờ vào vic thường xuyeđn đĩc veă PC giá trị cụa địa chư được đưa đên RAM chung trong mi laăn cĩ sự truy xuât cụa CPU. Baĩt đaău từ đađy, sau moêi leơnh noơi dung cụa các thanh ghi sẽ được đĩc veă PC. CPU sẽ lây mã lnh kê tiêp sau khi đã thực hin xong mt lnh, trong thời gian chờ lây mã lnh kê địa chư cụa lnh sẽ được đĩc veă PC, dựa vào địa chư này, dị tìm trong file *.lst ta sẽ tìm được sơ hàng tương ứng cụa dịng lnh. Khi cho Z80 CPU tiêp túc thực hin lnh cũng chính là lúc phại đạo màu cụa dịng lnh hin tái tương ứng tređn màn hình. Quá trình Debug sẽ kêt thúc khi người sử dúng nhân phím ESC tređn bàn phím.

Một phần của tài liệu luận văn tốt ngiệp thiết kế thi công và viết chương trình điều khiển mạch thực hành cho z80 cpu giao tiếp với máy tính qua ngõ máy in (Trang 52 - 55)

Tải bản đầy đủ (DOC)

(148 trang)
w