1. Trang chủ
  2. » Thể loại khác

Lập trình hệ thống phkkhanh bai1

10 88 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 302,26 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống BÀI 1: GIAO TIẾP THIẾT BỊ CHUẨN ™ MỤC ĐÍCH THÍ NGHIỆM Giúp sinh viên bằng thực nghiệm khảo sát các vấn đề chính

Trang 1

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

BÀI 1: GIAO TIẾP THIẾT BỊ CHUẨN

™ MỤC ĐÍCH THÍ NGHIỆM

Giúp sinh viên bằng thực nghiệm khảo sát các vấn đề chính sau đây :

- Giao tiếp bàn phím

- Giao tiếp màn hình

™ THIẾT BỊ SỬ DỤNG

1 Máy vi tính

PHẦN I : CƠ SỞ LÝ THUYẾT

I BÀN PHÍM

BIOS ghi các ký tự do việc nhấn các phím vào bộ đệm tạm thời được gọi là bộ đệm bàn phím (keyboard buffer), có địa chỉ 40h:1Eh, gồm 32 byte và kết thúc ở địa chỉ 40h:3Dh Mỗi ký tự được lưu trữ bằng 2 byte, byte cao là mã quét, và byte thấp là mã ASCII Chương trình xử lý ngắt sẽ xác định mã ASCII từ mã quét bằng bảng biến đổi và ghi cả 2 mã vào bộ đệm bàn phím Bộ đệm bàn phím được tổ chức như bộ đệm vòng (ring buffer) và được quản lý bởi 2 con trỏ Các giá trị con trỏ được lưu trữ trong vùng dữ liệu của BIOS ở địa chỉ 40h:1Ah và 40h:1Ch Con trỏ ghi (40h:1Ch) cho biết vị trí còn trống kế tiếp để ghi ký tự nhập, con trỏ đọc (40h:1Ah) cho biết vị trí ký tự đầu tiên sẽ đọc Từ đó, bộ đệm bàn phím rỗng khi con trỏ ghi và con trỏ đọc trùng nhau Æ bộ đệm chỉ chứa được 15 ký tự

Các hàm của ngắt 16h dùng xử lý phím nhấn:

Hàm 0h - đọc ký tự từ bàn phím, nếu không nhấn thì sẽ chờ

Ra: AH = scancode, AL = mã ASCII Nếu phím nhấn là các phím đặc biệt thì AL

= 0

Hàm 1h - ZF = 1 nếu không có ký tự trong bộ đệm Giá trị trả về giống như hàm

00h nhưng không xoá ký tự ra khỏi bộ đệm

Hàm 2h - Trả về trạng thái của các phím, kết quả chứa trong AL

Hàm 10h - Giống hàm 00h nhưng trả về mã mở rộng

Hàm 11h - Giống hàm 01h nhưng trả về mã mở rộng

Hàm 12h - Giống hàm 02h nhưng AH chứa thêm các thông tin

RIGHT ALT RIGHT CTRL LEFT ALT LEFT CTRL

Trang 2

*All values are in hexadecimal

101-, 102-, and 104-key keyboards:

KEY MAKE BREAK - KEY MAKE BREAK - KEY MAKE BREAK

Trang 3

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

Keyboard Scan Codes: Set 2

*All values are in hexadecimal

101-, 102-, and 104-key keyboards:

KEY MAKE BREAK - KEY MAKE BREAK - KEY MAKE BREAK

6 36 F0,36 PRNTSCRN E0,12,E0,7C

E0,F0, 7C,E0, F0,12

Trang 4

8 3E F0,3E PAUSE

E1,14,77, E1,F0,14, F0,77

AT Keyboard Scan Codes (Set 3)

KEY MAKE BREAK - KEY MAKE BREAK - KEY MAKE BREAK

Trang 5

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

II MÀN HÌNH

Trong chế độ văn bản (text mode), các ký tự được xác định bởi mã ASCII, trong

đó có cả các thông tin về thuộc tính của ký tự, thí dụ ký tự được hiện theo cách nhấp nháy hay đảo màu đen trắng ….ROM ký tự (character rom) lưu trữ các hình mẫu điểm ảnh của các ký tự tương ứng để máy phát ký tự biến đổi các mã ký tự đó thành 1 chuỗi các bit điểm ảnh (pixel bit) và chuyển chúng tới thanh ghi dịch (shift register) Máy phát tín hiệu

sẽ sử dụng các bit điểm ảnh này cùng với các thông tin thuộc tính từ RAM video và các tín hiệu đồng bộ từ CRTC để phát ra các tín hiệu cần thiết cho monitor Mỗi ký tự được biểu diễn bởi 2 byte trong RAM video Byte thấp chứa mã ký tự, byte cao chứa thuộc tính Cấu trúc của một từ nhớ video như sau:

15 14 13 12 11 10 9 8

BLNK BAK2 BAK1 BAK0 FOR3 FOR2 FOR1 FOR0

CHR7 CHR6 CHR5 CHR4 CHR3 CHR2 CHR1 CHR0

BLNK: Nhấp nháy; 1 = bật, 0 = tắt

Bảng màu quy định như sau:

Mã hex Màu Mã hex Màu Mã hex Màu Mã hex Màu

0 Black 4 Red 8 Dark Gray C Light Red

1 Blue 5 Magenta 9 Light Blue D Light Magenta

2 Green 6 Brown A Light Green E Yellow

3 Cyan 7 Light Gray B Light Cyan F White

Để hiển thị ký tự trên màn hình, có thể truy xuất trực tiếp vào RAM video hay

dùng ngắt 10h của BIOS

- Hàm 00h: định chế độ màn hình:

Vào: AL = chế độ

Mode Type Max Colors Size Resolution Max Pages Base Addr - - - - - -

00 Text 16 40x25 - - 8 B8000h

01 Text 16 40x25 - - 8 B8000h

02 Text 16 80x25 - - 4,8 B8000h

03 Text 16 80x25 - - 4,8 B8000h

07 Text Mono 80x25 - - 1,8 B0000h

Trang 6

Vào:

CH = dòng đầu con trỏ

CL = dòng cuối con trỏ

- Hàm 02h: xác định vị trí con trỏ

Vào:

DH = hàng, DL = cột (bắt đầu từ toạ độ 0,0)

BH = trang (= 0 trong chế độ đồ hoạ)

- Hàm 09h: ghi ký tự và thuộc tính ký tự tại vị trí con trỏ

Vào:

BH = trang

BL = thuộc tính (theo bảng trang 61)

AL = mã ASCII

CX = số ký tự cần xuất

PHẦN II : TIẾN TRÌNH THÍ NGHIỆM

I BÀN PHÍM

Quá trình đọc mã phím nhấn từ bàn phím có thể thực hiện bằng 2 cách: dùng ngắt 10h hay truy nhập trực tiếp vào bộ đệm bàn phím

1 Dùng phương pháp truy nhập trực tiếp

- Khởi động Norton Commander

- Vào thư mục C:\TASM

- Tạo một thư mục riêng theo MSSV

- Copy các file TASM.EXE, TLINK.EXE, TD.EXE vào thư mục vừa tạo

- Dùng NCEdit soạn thảo chương trình sau, lưu lại với một tên nào đó với phần

mở rộng là ASM (VD: bai1.asm)

.MODEL SMALL

.STACK 100h

.DATA

Hexcode DB ‘0123456789ABCDEF’

0

7

1 2

Đầu = 0 Cuối = 1

Đầu = 6 Cuối = 7 Đầu = 0

Cuối = 7

Trang 7

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

.CODE

main PROC

MOV AX,@DATA

MOV DS,AX

MOV AX,02h

INT 10h

MOV AX,40h

MOV ES,AX

Start:

MOV BX,ES:[1Ah] ; So sánh n•i dung con tr• ••c

MOV AX,ES:[1Ch] ; và con tr• ghi

CMP AX,BX

JE start

CALL print_hex

Exit:

MOV AH,4Ch

INT 21H

main ENDP

; -

Print_hex PROC

; -Xu•t s• Hex trong thanh ghi AX ra màn hình PUSH AX

; Xu•t 4 bit cao

MOV BX,AX

AND BX,0F000h

MOV CL,12

SHR BX,CL

MOV DL,Hexcode[BX]

MOV AH,02h ; Xu•t ra màn hình

INT 21h

POP AX

; Xu•t 4 bit k•

PUSH AX

MOV BX,AX

AND BX,0F00h

MOV CL,8

SHR BX,CL

MOV DL,Hexcode[BX]

MOV AH,02h

INT 21h

POP AX

; Xu•t 4 bit k•

PUSH AX

MOV BX,AX

AND BX,00F0h

MOV CL,4

SHR BX,CL

MOV DL,Hexcode[BX]

MOV AH,02h

Trang 8

; Xu•t 4 bit th•p

PUSH AX

MOV BX,AX

AND BX,000Fh

MOV DL,Hexcode[BX]

MOV AH,02h

INT 21h

POP AX

RET Print_hex ENDP END main

- Biên dịch chương trình bằng lệnh: TASM bai1.ASM

- Tạo file thực thi bằng lệnh: TLINK bai1.OBJ

- Thực thi file bai1.EXE và ghi nhận mã ASCII và mã quét (scancode) của 4

phím So sánh với tập mã và xác định bàn phím đang sử dụng tập mã nào

2 Truy nhập bằng ngắt 16h

™ Thay đoạn in đậm bằng đoạn chương trình sau:

MOV AH,0

INT 16h

CALL print_hex

- Ghi nhận mã ASCII và mã quét (scancode) của 4 phím So sánh với tập mã và xác định bàn phím đang sử dụng tập mã nào

™ Đọc trạng thái của các phím Caps Lock, Num Lock, …

.MODEL SMALL

.STACK 100h

.DATA

Msg DB ‘Trang thai cua phim Caps Lock: $’

On DB ‘On$’

Off DB ‘Off$’

.CODE

Main PROC

MOV AX,@DATA

MOV DS,AX

MOV AX,02h

INT 10h

MOV AH,09h

LEA DX,Msg

INT 21h

MOV AH,02h

Trang 9

Phòng thí nghiệm Mô phỏng & Truyền số liệu Thực hành Lập trình hệ thống

INT 10h

AND AL,40h

JZ NoCaps

MOV AH,09h

LEA DX,On

INT 21h

JMP exit

NoCaps:

MOV AH,09h

LEA DX,Off

INT 21h

exit:

MOV AH,4Ch

INT 21h

Main ENDP

END Main

- Viết chương trình kiểm tra trạng thái các phím Num Lock và Scroll Lock

II MÀN HÌNH

- Xuất chuỗi ‘Khoa Cong Nghe Thong Tin’ ra màn hình tại dòng 10, cột 10 với màu nền Dark Gray, màu chữ Red:

.MODEL SMALL

.STACK 100h

.DATA

Msg DB ‘Khoa Cong Nghe Thong Tin’,0 .CODE

main PROC

MOV AX,@DATA MOV DS,AX

MOV AX,02h

INT 10h

MOV AX,0B800h

MOV ES,AX

MOV BX,160*10+10*2 ; Dòng 10, c•t 10

MOV SI,0

lap:

MOV AL,msg[SI]

CMP AL,0

JE exit

MOV AH,84h ; Màu n•n và màu ch•

MOV ES:[BX],AX

ADD BX,2 ; Chuy•n sang ký t• k•

INC SI

JMP lap

exit:

MOV AH,4Ch

Trang 10

END main

- Sửa chương trình trên bằng cách dùng hàm 09h của ngắt 10h thay thế cho cách truy nhập trực tiếp vào RAM video

- Viết chương trình thay đổi hình dạng con trỏ (dòng đầu = 2, dòng cuối = 5)

Ngày đăng: 21/01/2018, 11:39

w