II) Phụ lục II mô hình hoạt động của chương trình mô phỏng hệ vi xử lý 8bit Intel LEV85. Addr Code Instr Context A F B C Pend D E Mask H L IF SP PC Variable Break III) Phụ lục III tóm tắt các lệnh, kiến thức về bộ vi xử lý (micro proccessor) 8 bit Intel Nhóm chuyển đổi dữ liệu. 1) IN PORT Nhập số liệu vào với: IN là mã kênh 1 byte và PORT là địa chỉ 8 bit của cổng vào. (Acc) < (Port) Ví dụ: Port_0 = 01h In Port_0 2) OUT PORT Đưa thông tin ra với: OUT là mã kênh 1 byte và PORT là địa chỉ 8 bit của cổng ra. (Port) < (Acc) Ví dụ: Port_1 = 0Bh Out Port_1 3) STA Addr16 Nội dung thanh chứa được chuyển vào ngăn chứa 16bit. (Addr16) < (Acc) Hệ VXL STA M Acc 0Bh (Addr16) 0Bh LDA 4) LDA Addr16 Ngăn nhớ có địa chỉ là nội dung của 2 byte kế tiếp 5) SHLD Addr16 Cất giữ nội dung của thanh HL vào hai ngăn nhớ địa chỉ bắt đầu từ addr16. (Addr16) < (L) (Addr16+1) < (H) Hệ VXL SHLD H L 05h 0Bh Addr16+1 Addr16 6) LHLD Addr16 Hai byte liên tục được trả trở lại thanh HL từ Addr16. (L) < (Addr16) (H) < (Addr16+1) Chú ý: (56) Byte thấp đưa vào ngăn nhớ thấp, byte cao đưa vào ngăn nhớ cao. 7) MOV M,R Chuyển nội dung ngăn nhớ R vào vào ngăn nhớ M. MOV M,B B CDh H L 01h FFh CDh Chú ý: (7) Ngăn nhớ đích ở bên trái dấu , (M) ngăn nhớ nguồn ở bên phải dấu , (R). + R là các thanh ghi 8 bit bên trong bộ vi xử lý (A, B, C, D, E, H, L) + M là ngăn nhớ có địa chỉ là nội dung (HL). ((HL)) < (R) 8) LDAX rp (Acc) < ((rp)) 9) STAX rp ((rp)) < (Acc)
Trang 1Đề cơng ôn tập
môn vi xử lý.
I) Phụ lục I bảng mã
Hex - Ascii
Hex Ascii Hex Ascii
Hex Ascii Hex Ascii
II) Phụ lục II mô hình hoạt
động của chơng trình mô
phỏng hệ vi xử lý 8bit Intel
LEV85.
Addr Code Instr Context
A F
SP PC Variable
Break
III) Phụ lục III tóm tắt các lệnh, kiến thức về bộ vi xử lý (micro proccessor)
8 bit Intel Nhóm chuyển đổi dữ liệu.
1) IN PORT Nhập số liệu vào
với: IN là mã kênh 1 byte và PORT là địa chỉ 8 bit của cổng vào
(Acc) < - (Port)
Ví dụ: Port_0 = 01h
In Port_0
2) OUT PORT Đa thông tin ra
với: OUT là mã kênh 1 byte và PORT là địa chỉ 8 bit của cổng ra
(Port) < - (Acc)
Ví dụ: Port_1 = 0Bh
Out Port_1
3) STA Addr16 Nội dung
thanh chứa đợc chuyển vào ngăn chứa 16bit
(Addr16) < - (Acc)
Hệ VXL STA M
Acc
0Bh (Addr16) 0Bh
LDA
4) LDA Addr16 Ngăn nhớ có
địa chỉ là nội dung của 2 byte kế tiếp
5) SHLD Addr16 Cất giữ nội
dung của thanh HL vào hai ngăn nhớ địa chỉ bắt đầu từ addr16
(Addr16) < - (L) (Addr16+1) < - (H)
Hệ VXL SHLD
05h 0Bh
Addr16+1 Addr16
6) LHLD Addr16 Hai byte
liên tục đợc trả trở lại thanh HL
từ Addr16
(L) < - (Addr16) (H) < - (Addr16+1) Chú ý: (5&6) Byte thấp đa vào ngăn nhớ thấp, byte cao đa vào ngăn nhớ cao
7) MOV M,R Chuyển nội
dung ngăn nhớ R vào vào ngăn nhớ M
MOV M,B
B CDh
Chú ý: (7) Ngăn nhớ đích ở bên trái dấu , (M) ngăn nhớ nguồn ở bên phải dấu , (R)
+ R là các thanh ghi 8 bit bên trong bộ vi xử lý (A, B, C, D, E,
H, L) + M là ngăn nhớ có địa chỉ là nội dung (HL)
((HL)) < - (R)
8) LDAX rp
(Acc) < - ((rp)) 9) STAX rp
((rp)) < - (Acc)
STAX B
Acc FFh
Buffer dùng BC để quản lý Chú ý: (8&9) rp: BC, DE
10) MVI r,data8
(r) < - data
Ví dụ: MVI M,data8
((HL)) < - data8
Nhóm thực hiện các phép tính
Logic 1) CMA Lấy bù của các thanh
chứa Acc
(Acc) < - ( Acc)
2) CMC Lấy bù với các cở
keri (CY)
(CY) < - (CY)
3) STC Đặt giá trị cho cờ keri
= 1
(CY) < - 1
4) ANI data8 Nhân logic với
data8 (Acc) < - (Acc).data8
5) ANA r Nhân logic với r
(Acc) < - (Acc).data8
6) ANA M Nhân logic với HL
(Acc) < - (Acc).((HL))
Trang 2Chú ý: (4,5&6) Dùng để lọc
thông tin tại bit đầu tiên
> dùng lệnh ANI 01h >
Trong thanh chứa Acc chỉ có giá
trị của bit không
7) ORI data8 Cộng logic với
data8
(Acc) < - (Acc)+data8
8) ORA r Cộng logic với r
(Acc) < - (Acc)+r
9) ORA M Cộng logic với HL
(Acc) < - (Acc)+((HL))
10) XRI data8 Cộng modun 2
với data8
(Acc) < - (Acc)data8
11) XRA r Cộng modun 2 với
r
(Acc) < - (Acc)r
12) XRA M Cộng modun 2
với HL
(Acc) < - (Acc)((HL))
13) RLC
A(n) < - A(n-1)
A0 < - A7
CY < - A7
14) RAL
A(n) < - A(n-1)
CY < - A7
A0 < - CY
15) RRC
A(n-1) < - A(n)
CY < - A0
A7 < - A0
16) RAR
A(n-1) < - A(n)
A7 < - CY
CY < - A0
Chú ý: R=Rotube (quay dịch)
Nhóm lệnh thực hiện các phép
tính số học
1) ADI data8 Cộng số học với
data8
(Acc) < - (Acc)+data8
2) ADD r Cộng số học với r
(Acc) < - (Acc)+r
3) ADD M Cộng số học với
HL (Acc) < - (Acc)+((HL))
4) ADC data8 Cộng số học với
data8 có sử dụng nhớ (Acc)< - (Acc)+data8+(CY)
5) ADC r Cộng số học với r có
sử dụng nhớ (Acc) < - (Acc)+r+(CY)
6) ADC M Cộng số học với
HL có sử dụng nhớ (Acc)< - (Acc)+(HL)+(CY)
7) SUI data8 Trừ số học với
data8 (Acc) < - (Acc)-data8
8) SUB r Trừ số học với r
(Acc) < - (Acc)-r
9) SUB M Trừ số học với HL
(Acc) < - (Acc)-((HL))
10) SBI data8 Trừ số học với
data8 có sử dụng nhớ (Acc)< - (Acc)-data8+(CY)
11) SBB r Trừ số học với r có
sử dụng nhớ (Acc) < - (Acc)-r+(CY)
12) SBB M Trừ số học với HL
có sử dụng nhớ (Acc)< - (Acc)-(HL)+(CY)
13) INT r Tăng r lên 1 đơn vị
(r) < - (r)+1
14) INX rp Tăng rp lên 1 đơn
vị
(rp) < - (rp)+1
15) INT M Tăng HL lên 1 đơn
vị
(HL) < - (HL)+1 Chú ý: (13,14&15) Các lệnh trên dùng để tạo bộ dếm
16) DCR r Giảm r đi 1 đơn vị
(r) < - (r)-1
17) DCX rp Giảm rp đi 1 đơn
vị
(rp) < - (rp)-1
18) DCR M Giảm HL đi 1 đơn
vị
(HL) < - (HL)-1
Nhóm lệnh thực hiện rẽ nhánh
chơng trình 1) JMP addr16 Lệnh nhảy (rẽ
nhánh) không điều kiện (PC) < - (byte3)(byte2)
2) J<Đ/k> addr16 Lệnh nhẩy
có điều kiện
<Đ/k> (sử dụng 4 cờ trạng thái)
có thể là:
Z: (Sử dụng cờ Zero)
Z = 1 thì rẽ nhánh
Z = 0 thì bỏ qua lệnh này NZ: (Không có cờ Zero) C: (Sử dụng cờ Carry)
C = 1 thì rẽ nhánh
C = 0 thì bỏ qua lệnh này NC: (Không có cờ Carry) P: (Sử dụng cờ Parity)
P = 1 thì rẽ nhánh
P = 0 thì bỏ qua lệnh này NP: (Không có cờ Parity) S: (Sử dụng cờ dấu Sign)
S = 1 thì rẽ nhánh
S = 0 thì bỏ qua lệnh này NS: (Không có cờ dấu Sign) Chú ý: Đối với hệ vi xử lý 8bit Intel sử dụng 5 cờ
3) CALL addr16 Lệnh gọi
CALL ((SP)-1) < - (PCH) ((SP)-2) < - (PCL) (SP) < - (SP)-2 (PC) < - (Byte3)(Byte2) RET Lệnh quay trở lại lệnh gọi thực hiện công việc tiếp ngay sau lệnh gọi RET thực hiện 3 thao tác
(PCL) < - ((SP)) (PCH) < - ((SP)+1) (SP) < - ((SP)+2) MODUL:
Lệnh đầu
RET
+ a) Cấu trúc lệnh gọi CALL
Main Program
CALL Modul1
Modul1:
RET Chú ý: Cất giữ thông tin trạng thái vào Stack Stack là một phần của bộ nhớ RAM Thông tin ở
Trang 3Stack cất giữ ở LIFO -> để quản
lý nó -> có con trỏ SP
Đối với hệ 8bit (SP) trỏ vào đỉnh
Stack
Đỉnh Stack: Phát triển về phía
địa chỉ thấp khi lu giữ thông tin
trạng thái
Phát triển về phía
địa chỉ cao khi khôi phục thông
tin trạng thái
4) PUSH PSw Lệnh cất giữ
trạng thái PSw
((SP)-1) < - (A)
((SP)-2) < - (F)
(SP) < - (SP)-2
5) PUSH rp Lệnh cất giữ trạng
thái rp
((SP)-1) < - (rpH)
((SP)-2) < - (rpL)
(SP) < - (SP)-2
6) POP PSw Lệnh khôi phục
(lấy lại trạng thái) PSw
(F) < - (SP)
(A) < - ((SP)+1)
(SP) < - ((SP)+2)
7) POP rp Lệnh khôi phục
(lấy lại trạng thái) rp
(rpL) < - (SP)
(rpH) < - ((SP)+1)
(SP) < - ((SP)+2)
8) C<Đ/k> addr16 Lệnh gọi
CALL có điều kiện
<Đ/k> là: Z, C, P, S
Ngoài ra còn có:
R<Đ/k> addr16 Lệnh quay trở
lại lệnh gọi thực hiện công việc
tiếp ngay sau lệnh gọi với <Đ/k>
là: NZ, NC, NP, NS
IV) Chơng trình LEV85
Mục lục:
Bài 1.85 (Thu số liệu)
Bài 2.85 (Chuyển mảng)
Bài 3.85 (Ghép hai số BCD)
Bài 4.85 (Khoá điện tử)
Bài 5.85 (Cộng 2 số 2 byte)
Bài 6.85 (Trừ 2 số 2 byte)
Bài 7.85 (Chơng trình đổi mã
BIN -> HEX)
Bài 1.85 (Thu số liệu)
thu_so_lieu: ; Tên ch/trình
; -; Khai khai báo
; -port_in = 00 h
error ds 1
data_exit ds 1
; -; Phần chơng trình chính
; -org 0080h ; Ch/tr bắt đầu từ
địa chỉ 0080h loop:
in port_in cpi 00h
jz no mvi a,0ffh sta data_exit cma
sta error jmp loop no:
mvi a,0ffh sta error cma sta data_exit
Chú thích: Chơng trình trên khi
chạy sẽ báo:
PC Overflow, go top Press any key to continue
+ Để chơng trình không báo
dòng lệnh trên thêm dòng sau vào cuối chơng trình chính: jmp loop
Bài 2.85 (Chuyển mảng)
chuyen_mang:
; -; Phần khai báo
; -s_size = 0fh ; Kích thớc
mảng source = 2000h ; destination = 2100h ; co_chuyen_m ds 1 ; Cờ báo
chuyển mảng xong
; -; Phần chơng trình chính
lxi b,source ; BC trỏ mảng
nguồn lxi d,destination ; DE trỏ
mảng đích mvi l,s_size ; l bộ đệm mvi a,00h ;
sta co_chuyen_m ; Bật cờ
chuyển mảng
; -loop: ; lặp lại vòng này
s_size lần ldax b ;
stax d ; dcr l ;
jz xong inx b ; inx d ; jmp loop xong:
mvi a,0ffh ; sta co_chuyen_m ; Bật cờ
chuyển mảng
Chú thích:
Bài 3.85 (Ghép hai số BCD)
ghep_2so_bcd:
; -; Phần khai báo
; -port_0 = 00h ;
port_1 = 01h ; buffer = 2000h ; Kích thớc
buffer b_size = 0fh ;
co_accumulation ds 1 ; mang ds 2 ;
; -; Phần chơng trình chính
org 0000h ;
start:
mvi c,b_size ; lxi h,buffer ; HL trỏ tới
mảng buffer mvi a,00h ;
sta co_accumulation ; Gắn
cờ hiển thị giá trị = 00h loop:
in port_0 ; Nhận chữ số
hàng đơn vị ani 0fh ; Lọc 4 bit cao mov b,a ; Cất vào b
in port_1 ; Nhận chữ số
hàng chục ani 0fh ;
ral ; Dich trái 4 lần ral
ral ral ora b ; mov m,a ; Cất vào buffer sta co_accumulation ; Bật cờ hiển thị giá trị hiện hành inx h ;
dcr c ; jnz loop
Chú thích:
Bài 4.85 (Khoá điện tử)
khoa_dt:
; -; Phần khai báo
; -stack = 3000h ; Đỉnh ngăn
xếp port_status = 01h ; port_ascii = 00h ; bao_dong ds 1 ; Cờ báo động mo_cua ds 1 ; Cờ mở cửa cap_khoa ds 1 ;
Trang 4
; -; Phần chơng trình chính
lxi sp,stack ;
lxi h,key ; Bảng mã khóa
mvi b,03h ;
mov a,b ;
sta cap_khoa ;
mvi a,00h ;
sta bao_dong ;
sta mo_cua ;
nextIn:
call ban_phim ; Đọc trạng
thái bàn phím ani 7fh ; Loại bit Parity cua
ma ASCII cmp m ; So sánh với
mã khoá
jnz pick ; Báo động nếu
Acc<>M inx h ;
lda cap_khoa ;
dcr a ;
sta cap_khoa ;
dcr b ; Giảm số đệm
1 đơn vị
jnz nextIn ;
openIt:
mvi a,01h ;
out 6eh ; Mở cửa
mvi a,0ffh ;
sta mo_cua ; Bật cờ mở cửa
hlt ;
pick:
mvi a,01h ;
out 6fh ; Báo động
mvi a,0ffh ;
sta bao_dong ; Bật cờ
báo động hlt ;
ban_phim:
;in port_status ; Đọc trạng
thái của bàn phím
;ani 01h ;
;jz ban_phim
in port_ASCII ; Đọc mã
bàn phím ret
; -Key:
db 30h ; Bảng mã khoá
db 31h
db 32h
db 33h
db 34h
db 35h
db 36h
db 37h
db 38h
db 39h
Chú thích:
Bài 5.85 (Cộng 2 số 2 bytes)
cong_nbyte:
; -; Phần khai báo
org 0100h ;
n EQU 2 ;
nb db n ; Kích thớc buffer tong dw 0000h ; Buffer
chứa tổng so_hang1 dw 01ffh ; Buffer
chứa số hạng thứ nhất so_hang2 dw 0101h ; Buffer
chứa số hạng thứ hai ket_thuc db 00h ; Cờ báo
kết thúc phép cộng
; -; Phần chơng trình chính
org 0000h ;
start:
lxi d,tong ; DE trỏ tới
buffer chứa tổng lxi b, so_hang1 ; DE trỏ tới
buffer chứa số hạng 1 lxi h, so_hang2 ; DE trỏ tới
buffer chứa số hạng 2 xra a ; Xoá CY
loop:
ldax b ;Lấy 1 byte số hạng 1 adc M ; Cộng với 1 byte
số hạng 2 stax d ; Chuyển kết quả
vào buffer tổng lda nb ;
dcr a ; sta nb
jz xong ; Nếu cộng xong
thì bật cờ kết thúc inx b
inx d inx h jmp loop xong:
mvi a,0ffh sta ket_thuc ;
Chú thích:
Bài 6.85 (Trừ 2 số 2 bytes)
Tru_nbyte:
; -; Phần khai báo
org 0100h ;
n EQU 2 ;
nb db n ; Kích thớc buffer hieu dw 0000h ; Buffer
chứa hiệu so_bi_tru dw 05ffh ; Buffer
chứa số bị trừ so_tru dw 0101h ; Buffer
chứa số trừ ket_thuc db 00h ; Cờ báo
kết thúc phép trừ
; -; Phần chơng trình chính
org 0000h ;
start:
lxi d,hieu ; DE trỏ tới
buffer chứa hiệu lxi b, so_bi_tru ; DE trở tới
buffer chứa số bị trừ lxi h, so_tru ; DE trở tới
buffer chứa số trừ xra a ; Xoá CY
loop:
ldax b ; Lấy 1 byte số bị trừ sbb M ; Trừ đi 1 byte số trừ stax d ;Chuyển kết quả
vào buffer hiệu lda nb ;
dcr a ; sta nb
jz xong ; Nếu cộng xong
thì bật cờ kết thúc inx b
inx d inx h jmp loop xong:
mvi a,0ffh sta ket_thuc ; hlt ; Dừng
Chú thích:
Bài 7.85 (Chơng trình đổi mã
BIN -> HEX) Bin_Hex:
; -; Phần chơng trình: ch.tr này
; đổi ma Bin 8bit thành 2 byte
; ma Hexa đợc mã hoá bằng
; mã Ascii
org 0000h ;
start:
mvi a,n ; n giá trị byte
nhị phân cần chuyển mov c,a ; cất số nhị phân vào c ani 0f0h ; Lọc lấy
4 bit cao trớc rrc ; Dịch 4 bit cao tới
vị trí 4 bit thấp rrc
rrc rrc cpi 0ah ; Xem có phải số
từ 0 đến 9 không?
jc so_thap_phan_cao ; phải ->
xử lý adi 07h ; Không phải thì là
A -> F: cộng 07h nữa
để đổi ra mã Ascii so_thap_phan_cao:
Trang 5adi 30h ; Cộng 30h
để chuyển mã Ascii
sta hex_cao ; Cất vào byte
Hex_cao mov a,c ; Xử lý tiếp
byte Hexa thấp
ani 0fh
cpi 0ah
jc so_thap_phan_thap
adi 07h ;
so_thap_phan_thap:
adi 30h ;
sta hex_thap ; Cất vào byte
Hex_thap hlt ; Dừng chơng trình
; -; Phần khai báo
; -bin db 25h ;
n EQU 25h ;
hex_cao db 00h ;
hex_thap db 00h ;?
; code_seg ends ; Dòng
mang lệnh
; data_seg segment public
; public thong_bao
; thong_bao db 'HeLLo !
',0dh,0ah,00h
db 0dh,0ah,00h
; data_seg ends
; end test_write_decimal
; Kết thúc ch.tr chính Hex -> Bin
V) Thiết kế hệ thu tin đa kênh
1) Nhiệm vụ hệ thống:
- Thiết kế hệ thu tin 6 kênh
- Dạng tín hiệu từng kênh: xung
điện áp
- Tham số tín hiệu:
+ Độ rộng xung: ngẫu nhiên
+ Thời điểm x/h: ngẫu nhiên
- Chức năng:
+ Thu và xử lý dữ liệu
+ Hiển thị đợc nội dung trên
một dàn đèn hiển thị 6 chữ số
thập phân bằng mã 7 đoạn
- Bàn phím: Có chức năng chỉ thị
cho chơng trình về kênh cần đợc
hiển thị
2) Tổ chức phần cứng của hệ
thống:
a) Lựa chọn ph ơng án: Sử dụng
hệ VXL 8bit Intel
b) Sơ đồ chức năng:
- Hệ vi xử lý:
0 CS A8
A9 D7-D0
Bộ AD7-AD0Chốt A7-A0
Intel
D7-D0
R D IO/
M
A7-A0
W R
A7-A0: Địa chỉ hoá cho RAM A9-A0: Địa chỉ hoá cho ROM Chú ý: Phân biệt A1-A0 với D7-D0
- Sử dụng chốt với tín hiệu ALE Phân biệt ROM - RAM
- Sử dụng dãy địa chỉ thừa tiếp theo nó A10 -> CS
Tạo CS ROM Tạo CS
RAM
- A10 = 0 - A10 = 1
- IO/M = 0 - IO/M = 0
- R D = 0 - R D = 0
(hoặc W R ) c) Ngoại vi:
* Hệ thu 6 kênh +Vcc
Ko In5Out5
K5 In5Out5
Reset
Lập trạng thái ban đầu đ/k từ CPU
- FLOPSI cổng vào các kênh
- FLOPSO cổng ra các kênh
* Hệ hiển thị nội dung kênh TT
- Dùng chung
- Có 6 chữ số thập phân
N5 N4 N3 N2 N1 N0
D0 BCD 7Seg
DVAL D
0 Giải
D
3 cấp
D
5 chốt
DPOS D5 D3 D0 Kênh DATA BUS Cổng ra
DPOS DCLK
* Bàn phím: D0 D5
Vcc
R R R R R R K0 In0Out0
0 K2 Chốt Data
K4 K5 In5Out5
SELECT (Cổng vào)
Tích cực ‘0’ Thụ động ‘1’
* Tạo địa chỉ cho ngoại vi:
DEMULTIPLEXER 155 IO/ M
W R
Từ CPU
R D
A8 A9 155/2 A B E1 E2 B A E1 E2
Đ/cVào Đ/c Ra Q0 Q1 Q2 Q3 Q0 Q1 Q2 Q3 FLOPSI DCLR DPOS SELECT FLOPSO
DVALUE
Đ/c(00h) Đ/c(00h)
Đ/c(01h) Đ/c(01h)
DPOS
Đ/c(02h)
DVALUE
Đ/c(03h)
3) Xây dựng phần mềm điều
khiển
a) Thuật toán:
Bàn phím Cấp số N5 Cấp sô N4
Thu và xử lý Cấp số N3 thông tin của các kênh
Cấp số N0 Cấp số N1 Cấp số N2
b) L u đồ thuật toán tổng quát:
START Thu TT 6 đầu thu
Xử lý
No N=6? Yes
Xử lý tiếp Kiểm tra Hiển thị cấp bàn phím
số tơng ứng
Trang 6c) Xây dựng ch ơng trình:
Reset ; Lập trạng thái ban đầu
Loop:
Call Count
Call Displ
Jmp Loop
d) Khai triển:
Thu_tin_6_kenh:
; -; Phần khai báo
; -Ram = 0400h
Cntr0 = Ram
Pointer = Cntr0 + 4*6
Channel = Pointer + 1
Next = Pointer + 2
Select = 00h
Dclr = 00h
Flops = 01h
Dpos = 02h
Dvalue = 03h
; -; Phần chơng trình chính
Org 0000h
Reset:
Lxi SP,Ram + 128 ; Stack
Lxi H,Ram
Mvi C,80h
Xra A ; A = 0
Loop1:
Mov M,A
Inx H ; Sau mỗi lần tăngH lên 1
Dcr C
Jnz Loop1
; -Loop:
Call Count
Call Displ
Jmp Loop
; -Chú thích:
RAM
SP
Next
Vùng tự do
Channel
Pointer
Cờ tràn
Cờ tràn
(0400h)
L
u đồ thuật toán
thu 6 kênh Loop
Loop:
Thu 6 kênh (1)
Dịch
(LSB) > (SY) (2)
Cộng tích luỹ vào vùng RAM
6 kênh ? RET
Count:
; -; Phần tơng ứng với (1)
In Flops ; (Acc) <- 6 kênh Mov B,A ; (B) <- Acc)
{tạm giữ}
Cma ; (Acc) <- (Acc) Out Flops ; Ra reset của Triger Xra A ;
Cma ; (A) <- FFh Out Flops ; Reset <- 1
Mvi C,6 ; Đặt C làm bộ đếm lùi
bắt đầu từ 6 Lxi H,Cntr0 ; Chuẩn bị cho
vòng lặp tiếp theo Loop2:
; -; Phần tơng ứng với (2)
Mov A,B ; (Acc) <- B Rrc ; (LSB) -> CY Mov B,A ; (B) <- (Acc)
Mvi A,00h ; (Acc) <- 0 Adc M ;(Acc)<-(Acc)+HL+CY
Cộng CY với R Daa
Mov M,A ; (HL) <- (Acc) Inx H ; Tăng HL
Byte đánh dấu
xử lý xong một kênh
Mvi A,00h
Adc M Daa Mov M,A Inx H
Mvi A,00h
Adc M Daa Mov M,A Inx H
; -; Xử lý Byte cờ
Mvi A,00h
Ral ; (Acc) <- (Acc) + CY Mov M,A ; Chuyển đến Byte cờ Inx H ; Tăng HL 1 đơn vị Dcr C ; Kiểm tra C có còn > 0 ?
Jnz Loop2 ; Nếu C<>0 thì tiếp
tục vòng lặp RET ; Nếu C = 0 thì
nhẩy đến RET Chú thích:
Chơng trình hiển thị DISPLAY
Tìm nội dung con trỏ Poiter
= 6 ? hiển thị
Tìm byte Poiter = 0 dữ liệu
Nửa thấp Đọc TT đ/khiển
từ bàn phím Dịch trái 4bit
Tính giá trị Hiển thị Channel
Poiter + 1
Table: ; Bảng mã TT dùng
đ.khiển cấp số trực tiếp
db 01h
db 02h
db 03h
db 04h
db 08h
db 10h
db 20h Displ:
Lda Pointer ; (Acc) <- Poiter Cpi 06 ; So sánh với 6
Jnc Switch ; Công tắc đảo mạch
bàn phím Mov B,A ; (B) <- (Acc) Ana A ; Hạ cờ CY Rar ; Chia 2 {dịch phải chia
2 không lấy d Push Psw ; Cất Acc và F
vào Stack Lhld Channel ; (HL) <-Channel Mov E,A; Cộng số gia
của buffer Mov D,0 ;
Pop Psw ; Mov A,M ; Đây là byte dữ liệu Jnc Wait
Rar ; Dịch phải 4 bit Rar
Rar Rar Out: ; Hiển thị Mov C,A ; (C) <- Giá trị
cần hiển thị Xra A ; (A) <- 0 {cho A=0}
Trang 7Out Dclr ; Đặt trạng thái
ban đầu Mov A,C ; (Acc) <- C
{Giá trị cần hiển thị}
Out Dvalue ; Mở cổng BCD
để sang 7 Sement Mov A,B
Lxi D,Table ; Cặp thanh ghi DE
trỏ tới Table Add E ; Lu giá trị Poiter + 1
Mov E,A
Ldax D
Out Dpos ; Mở cổng Dpos
Mov A,B
Sta Pointer ; Cất giá trị
vào ngăn nhớ Ret
Wait:
Nop
Jmp Out
VI) Phụ lục IV Một số điều về
hệ vi xử lý 8 bit Intel
1) Cách bố trí các thanh ghi cờ
trong hệ VXL 8Bit
N0
Chú thích:
+ C: Cờ nhớ (Carry)
+ P: Cờ chẵn lẻ (Parity)
+ AC: Cờ nhớ phụ
+ Z: Cờ rỗng (Zero)
+ S: Cờ dấu (Sign)
2) Acc(Accumalator):
Thanh chứa toán hang 1 (Nơi
chứa các kết quả trung gian và
cuối cùng)
- Thanh ghi mã lệnh IR
(Inetruction Regiveter) dùng để
chứa mã lệnh
- W, Z dùng để chứa các địa chỉ
16bit của các lệnh 3 byte
- B, C, D, E, H, L là các cặp
thanh ghi đa năng:
Khi sử dụng riêng (B hoặc D)
-> 8bit
Khi sử dụng theo cặp (HL
hoặc BC) -> 16 bit
3) Điều khiển:(ký hiệu viết tắt)
IO/ M(Phân biệt việc quy chiếu
tới cổng vào ra hay IO tới bộ nhớ
trung tâm M
S1, S0 (Trạng thái chu kỳ máy)
X1, X2(Phần tử tạo nhịp thời
gian hoạt động (TA))
CLX(Tín hiệu nhịp cho các
thành phần tạo sự đồng bộ)
RESET (IN,OUT) Đặt chế độ ban đầu
HOLD, HODA (Dùng để chạy chế độ truy nhập trực tiếp) 4) Chu kỳ máy:
OF (Gọi lênh) MR(Đọc th.tin) IOR(Đọc th.tin) MW(Ghi th.tin) IOW(Ghi th.tin) INA(Trả lời ngắt) và HAL (Dừng ch.trình)
Kết thúc phần Hệ vi xử lý 8bit Intel (sử dụng chip 8085)
Chúc các bạn đạt đợc kết quả tốt
nhất môn Vi xử lý Tôi hi vọng rằng chúng ta không phải
gặp nhau trong lợt về Lớp B2 - Khoá 2 Khoa Công nghệ thông tin Trờng Đại học dân lập Đông Đô
Hệ vi xử lý 8 bit Intel