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)
Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - Lớp B2 - Khoá (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý Đề cơng ôn tập môn vi xử lý I) Phụ lục I bảng mã Hex - Ascii Hex 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A Ascii a b c d e f g h i j k l m n o p q r s t u v w x y z Hex 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A Ascii A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Hex 30 31 32 33 34 Ascii Hex 35 36 37 38 39 Ascii (Addr16) II) Phụ lục II mô hình hoạt động chơng trình mô 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 0Bh LDA 4) LDA Addr16 Ngăn nhớ có địa nội dung byte 5) SHLD Addr16 Cất giữ nội dung HL vào hai ngăn nhớ địa addr16 (Addr16) < - (L) (Addr16+1) < - (H) Hệ VXL SHLD H L 05h 0Bh Break Addr16+1 Addr16 III) Phụ lục III tóm tắt lệnh, kiến thức vi xử lý (micro proccessor) bit Intel Nhóm chuyển đổi liệu 1) IN PORT Nhập số liệu vào với: IN mã kênh byte PORT địa bit cổng vào (Acc) < - (Port) Ví dụ: Port_0 = 01h In Port_0 2) OUT PORT Đa thông tin với: OUT mã kênh byte PORT địa bit cổng (Port) < - (Acc) Ví dụ: Port_1 = 0Bh Out Port_1 3) STA Addr16 Nội dung chứa đợc chuyển vào ngăn chứa 16bit (Addr16) < - (Acc) Hệ VXL STA M Acc 0Bh 6) LHLD Addr16 Hai byte liên tục đợc trả trở lại 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 B CDh H 01h MOV M,B L 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 ghi bit bên vi xử lý (A, B, C, D, E, H, L) + M ngăn nhớ có địa nội dung (HL) ((HL)) < - (R) 8) LDAX rp (Acc) < - ((rp)) 9) STAX rp ((rp)) < - (Acc) STAX B Acc FFh B 3Dh C 45h 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 phép tính Logic 1) CMA Lấy bù chứa Acc (Acc) < - ( Acc ) 2) CMC Lấy bù với cở keri (CY) (CY) < - ( CY ) 3) STC =1 Đặt giá trị cho cờ keri (CY) < - 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)) Chú ý: (4,5&6) Dùng để lọc thông tin bit > dùng lệnh ANI 01h > Trong chứa Acc có giá trị bit không (Acc) < - (Acc)+r (Acc) < - (Acc)+r 9) ORA M Cộng logic với HL (Acc) < - (Acc)+((HL)) 10) XRI data8 Cộng modun với data8 (Acc) < - (Acc) data8 11) XRA r Cộng modun với r (Acc) < - (Acc) r 12) XRA M Cộng modun với HL (Acc) < - (Acc) ((HL)) 13) RLC A(n) < - A(n-1) A0 < - A7 CY < - A7 CY A7 A6 A1 A7 A6 A1 A0 A7 A6 A1 A0 A7 A6 A1 A0 A0 Chú ý: R=Rotube (quay dịch) 7) ORI data8 Cộng logic với data8 (Acc) < - (Acc)+data8 8) ORA r 2) ADD r Cộng số học với r 8) SUB r Trừ số học với r (Acc) < - (Acc)-r 10) SBI data8 Trừ số học với data8 có sử dụng nhớ (Acc)< - (Acc)-data8+(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 đơn vị (r) < - (r)+1 Nhóm lệnh thực phép tính số học 1) ADI data8 Cộng số học với data8 (Acc) < - (Acc)+data8 Cộng logic với r 6) ADC M Cộng số học với HL có sử dụng nhớ (Acc)< - (Acc)+(HL)+(CY) 11) SBB r Trừ số học với r có sử dụng nhớ (Acc) < - (Acc)-r+(CY) 16) RAR A(n-1) < - A(n) A7 < - CY CY < - A0 CY 5) ADC r Cộng số học với r có sử dụng nhớ (Acc) < - (Acc)+r+(CY) 9) SUB M Trừ số học với HL (Acc) < - (Acc)-((HL)) 15) RRC A(n-1) < - A(n) CY < - A0 A7 < - A0 CY 4) ADC data8 Cộng số học với data8 có sử dụng nhớ (Acc)< - (Acc)+data8+(CY) 7) SUI data8 Trừ số học với data8 (Acc) < - (Acc)-data8 14) RAL A(n) < - A(n-1) CY < - A7 A0 < - CY CY 3) ADD M Cộng số học với HL (Acc) < - (Acc)+((HL)) 14) INX rp Tăng rp lên đơn vị (rp) < - (rp)+1 15) INT M Tăng HL lên đơn vị (HL) < - (HL)+1 Chú ý: (13,14&15) Các lệnh dùng để tạo dếm 16) DCR r Giảm r đơn vị (r) < - (r)-1 Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - Lớp B2 - Khoá (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý 17) DCX rp Giảm rp đơn vị (rp) < - (rp)-1 18) DCR M Giảm HL đơn vị (HL) < - (HL)-1 Nhóm lệnh thực 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 addr16 Lệnh nhẩy có điều kiện (sử dụng cờ trạng thái) là: Z: (Sử dụng cờ Zero) Z = rẽ nhánh Z = bỏ qua lệnh NZ: (Không có cờ Zero) C: (Sử dụng cờ Carry) C = rẽ nhánh C = bỏ qua lệnh NC: (Không có cờ Carry) P: (Sử dụng cờ Parity) P = rẽ nhánh P = bỏ qua lệnh NP: (Không có cờ Parity) S: (Sử dụng cờ dấu Sign) S = rẽ nhánh S = bỏ qua lệnh NS: (Không có cờ dấu Sign) Chú ý: Đối với hệ vi xử lý 8bit Intel sử dụng 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 công việc tiếp sau lệnh gọi RET thực 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 phần nhớ RAM Thông tin Stack cất giữ LIFO -> để quản lý -> có trỏ SP Đối với hệ 8bit (SP) trỏ vào đỉnh Stack Đỉnh Stack: Phát triển phía địa thấp lu giữ thông tin trạng thái Phát triển phía địa cao 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 addr16 Lệnh gọi CALL có điều kiện là: Z, C, P, S Ngoài có: R addr16 Lệnh quay trở lại lệnh gọi thực công việc tiếp sau lệnh gọi với 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 số byte) Bài 6.85 (Trừ số 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 data_exit ds ; ; Phần chơng trình ; org 0080h ; Ch/tr địa 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 chạy báo: PC Overflow, go top Press any key to continue + Để chơng trình không báo dòng lệnh 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 ; Cờ báo chuyển mảng xong ; ; Phần chơng trình ; lxi b,source ; BC trỏ mảng nguồn lxi d,destination ; DE trỏ mảng đích mvi l,s_size ; l đệm mvi a,00h ; sta co_chuyen_m ; Bật cờ chuyển mảng ; loop: ; lặp lại vòng 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 ; mang ds ; ; ; Phần chơng trì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 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 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ị 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 ; Cờ báo động mo_cua ds ; Cờ mở cửa cap_khoa ds ; ; ; Phần chơng trì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 AccM inx h ; lda cap_khoa ; dcr a ; sta cap_khoa ; dcr b ; Giảm số đệm đơ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 bàn phím ;ani 01h ; ;jz ban_phim in port_ASCII ; Đọc mã bàn phím ret Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - Lớp B2 - Khoá (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý ; 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 sta nb jz xong ; Nếu cộng xong bật cờ kết thúc inx b inx d inx h jmp loop xong: mvi a,0ffh sta ket_thuc ; inx b inx d inx h jmp loop xong: mvi a,0ffh sta ket_thuc ; hlt ; Dừng Chú thích: Chú thích: Bài 6.85 (Trừ số bytes) Tru_nbyte: ; ; Phần khai báo ; org 0100h ; n EQU ; 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 ; 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 byte số bị trừ sbb M ; Trừ byte số trừ stax d ;Chuyển kết vào buffer hiệu lda nb ; dcr a ; sta nb jz xong ; Nếu cộng xong bật cờ kết thúc Bài 7.85 (Chơng trình đổi mã BIN -> HEX) Bin_Hex: ; ; Phần chơng trình: ch.tr ; đổi ma Bin 8bit thành byte ; ma Hexa đợc mã hoá ; 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 bit cao trớc rrc ; Dịch bit cao tới vị trí bit thấp rrc rrc rrc cpi 0ah ; Xem có phải số từ đến không? jc so_thap_phan_cao ; phải -> xử lý adi 07h ; Không phải A -> F: cộng 07h để đổi mã Ascii so_thap_phan_cao: adi 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: Bài 5.85 (Cộng số bytes) cong_nbyte: ; ; Phần khai báo ; org 0100h ; n EQU ; 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ứ 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 ; 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 lxi h, so_hang2 ; DE trỏ tới buffer chứa số hạng xra a ; Xoá CY loop: ldax b ;Lấy byte số hạng adc M ; Cộng với byte số hạng stax d ; Chuyển kết vào buffer tổng lda nb ; dcr a ; Chú thích: 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 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 kênh - Dạng tín hiệu 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 xử lý liệu + Hiển thị đợc nội dung dàn đèn hiển thị chữ số thập phân mã đoạn - Bàn phím: Có chức thị cho chơng trình kênh cần đợc hiển thị 2) Tổ chức phần cứng 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ý: Bộ VXL 8bit AD7-AD0 Chốt Đ/c ALE D7-D0 A7-A0 chốt DPOS D5 D3 D0 A10 RD IO/ A7-A0 M CS A7-A0: Địa hoá cho RAM A9-A0: Địa 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 thừa A10 -> C S Tạo C S ROM Tạo C S RAM - A10 = - A10 = - IO/ M = - IO/ M = - RD = - RD = (hoặc WR ) In5Out5 Reset FLOPSI Bộ đệm 6bit Kênh DL InoOuto J5 Q5 K*5 CLK K5 In5Out5 Reset Lập trạng thái ban đầu đ/k từ CPU - FLOPSI cổng vào kênh - FLOPSO cổng kênh * Hệ hiển thị nội dung kênh TT - Dùng chung - Có chữ số thập phân N5 N4 N3 N2 N1 Vcc R D0 D5 R R R R R In0Out0 K0 K1 K2 K3 K4 Kênh Data Bus Chốt In5Out5 K5 Tích cực SELECT (Cổng vào) Thụ động IO/ M WR A8 A9 155/2 A B E1 E2 Đ/cVào Q0 Q1 Q2 Q3 FLOPSI SELECT B A E1 E2 Đ/c Ra Q0 Q1 Q2 Q3 DCLR DPOS FLOPSO DVALUE Cổng vào SELECT Cổng DCLR Đ/c(00h) Đ/c(00h) FLOPSI FLOPSO Đ/c(01h) Đ/c(01h) DPOS Đ/c(02h) DVALUE Đ/c(03h) N0 3) Xây dựng phần mềm điều khiển a) Thuật toán: D0 BCD 7Seg D5 DVAL D * Bàn phím: RD InoOuto Jo Qo K*o CLK Ko Cổng FLOPSO DVALUE DPOS DCLK DEMULTIPLEXER 155 Từ CPU +Vcc D Cổng * Tạo địa cho ngoại vi: c) Ngoại vi: * Hệ thu kênh +Vcc Kênh DATA BUS Cổng vào FLOPSI SELECT WR C S A8 A9 D7-D0 D Intel Bàn phím Cấp số N5 Cấp sô N4 Giải mã cấp sô TT Thu xử lý thông tin kênh Cấp số N3 Cấp số N0 Cấp số N2 Cấp số N1 Trờng Đại học dân lập Đông Đô - Khoa Công nghệ thông tin - Lớp B2 - Khoá (12/1998) Đề cơng ôn tập môn kỹ thuật vi xử lý b) Lu đồ thuật toán tổng quát: START Thu TT đầu thu No Xử lý N=6? Xử lý tiếp Hiển thị cấp số tơng ứng Yes Jnz Loop1 ; Loop: Call Count Call Displ Jmp Loop ; Chú thích: RAM SP Next Vùng tự Kiểm tra bàn phím c) 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 + Next = Pointer + Select = 00h Dclr = 00h Flops = 01h Dpos = 02h Dvalue = 03h ; ; Phần chơng trình ; Org 0000h Reset: Lxi SP,Ram + 128 ; Stack Lxi H,Ram Mvi C,80h Xra A ; A = Loop1: Mov M,A Inx H ; Sau lần tăngH lên Dcr C Channel Pointer HL RAM CNTR0 (0400h) Cờ tràn N5 N4 N3 N2 N1 N0 K5 (4Byte) Cờ tràn N5 N4 N3 N2 N1 N0 K0 (4Byte) ROM Lu đồ thuật toán thu kênh Loop Loop: Thu kênh (1) Dịch (LSB) > (SY) (2) Cộng tích luỹ vào vùng RAM kênh ? RET Count: ; ; Phần tơng ứng với (1) ; In Flops ; (Acc)