Vào/ra bằng ngắt

Một phần của tài liệu Giáo trình ghép nối với máy vi tính (Trang 31 - 35)

1 5 6 Ο Ο Ο Ο Ο

1.4.3Vào/ra bằng ngắt

Ngắt là việc CPU dừng chương trình chính đang thực hiện để thực hiện một chương trình con khác là chương trình con phục vụ ngắt (ISR Interrupt Service routine). Có hai loại ngắt cứng và ngắt mềm. Vào ra dữ liệu bằng ngắt cứng là phương pháp vào/ra dữ liệu trong đó thiết bị vào/ra chủ động quá trình vào/ra dữ liệu nhờ hệ thống ngắt cứng.

Chương trình con phục vụ ngắt

Tín hiệu yêu cầu ngắt IRQ

Khôi phục thông tin trạng thái của CPU Bảo vệ thông tin trạng thái của CPU

Hình 1.18 Sơđồ quá trình ngắt

Thông thường quá trình vào/ra bằng ngắt cứng được trợ giúp bởi thiết bị điều khiển ngắt PIC (Programmable Interrupt Controller). PIC có chức năng ghi nhận các yêu cầu ngắt IRQ và cung cấp cho CPU số hiệu ngắt đại diện cho địa chỉ của chương trình con phục vụ ngắt và tương ứng yêu cầu ngắt IRQ.

Cấu trúc của hệ thống ngắt cứng: CPU PIC Thiết bị vào/ra Thiết bị giao diện Thiết bị ngoại vi INTA INTR IRQi

Quá trình vào/ra dữ liệu bằng ngắt cứng:

− CPU đang thực hiện chương trình chính.

− Thiết bị vào/ra có yêu cầu phục vụ phát ra tín hiệu IRQ cho PIC. − Thiết bị PIC phát ra tín hiệu INT cho CPU, yêu cầu CPU phục vụ. − CPU hoàn thành nốt lệnh đang thực hiện.

− CPU phát tín hiệu INTA (Interrupt Acknowledge) trả lời PIC, báo sẵn sàng phục vụ quá trình ngắt.

− PIC phát ra số hiệu ngắt (là con số đại diện cho địa chỉ của chương trình con phục vụ ngắt, và tương ứng với tín hiệu IRQ) cho CPU.

− Dựa trên số hiệu ngắt này CPU kích hoạt và thực hiện chương trình con phục vụ ngắt ISR để thực hiện vào/ra dữ liệu.

− Khi ISR kết thúc thì CPU quay lại tiếp tục thực hiện chương trình chính đang thực hiện.

Ưu điểm của phương pháp này:

− CPU thực hiện vào/ra dữ liệu ngay khi có yêu cầu từ thiết bị vào/ra . Điều này làm cho quá trình vào/ra dữ liệu có độ tin cậy rất cao.

− CPU chỉ phục vụ thiết bị vào/ra khi có yêu cầu (khi thiết bị vào/ra đã sẵn sàng cho việc truyền dữ liệu), do vậy làm tăng hiệu quả làm việc của CPU. Do những ưu điểm này mà phương pháp vào/ra dùng ngắt cứng được dùng để vào/ra dữ liệu với phần lớn các thiết bị ngoại vi chuẩn của máy tính như: bàn phím, máy in, thiết bị vào ra nối tiếp...

Tuy nhiên với phương pháp này quá trình chuyển dữ liệu giữa bộ nhớ và thiết bị vào/ra vẫn phải qua CPU và quá trình vào/ra dữ liệu vẫn do CPU thực hiện, nên đây chưa phải là phương pháp vào/ra nhanh nhất.

MỘT SỐ VÍ DỤ THAY VECTƠ NGẮT

• Lập trình bằng Pascal uses dos,crt;

var oldvec: pointer;{chứa địa chỉ của chương trình xử lý ngắt cũ} R: Registers;

procedure thayngat; interrupt;

begin writeln(" Hello "); end; asm mov ah,4Ch int 21h end; end; BEGIN getintvec($13,oldvec); setintvec($13,Add(thayngat)); intr($13,r); readln; setintvec($13,oldvec); END. • Lập trìnhbằng C #include <stdio.h> #include <dos.h> #include <conio.h>

#define INTR 0X1C /* The clock tick interrupt */ #ifdef __cplusplus

#define __CPPARGS ... #else

#define __CPPARGS #endif

void interrupt ( *oldhandler)(__CPPARGS); int count=0;

void interrupt handler(__CPPARGS)

{ /* increase the global counter */ count++; (adsbygoogle = window.adsbygoogle || []).push({});

/* call the old routine */ oldhandler();

}

int main(void)

{ /* save the old interrupt vector */ oldhandler = getvect(INTR);

/* install the new interrupt handler */ setvect(INTR, handler);

/* loop until the counter exceeds 20 */ while (count < 20)

printf("count is %d\n",count);

/* reset the old interrupt handler */ setvect(INTR, oldhandler); return 0; } • Lập trình bằng hợp ngữ Giới thiệu các hàm 35h, 25h của ngắt 21h: Hàm 25h: Thiết lập vectơ ngắt

Vào: AH=25h, AL: Số hiệu ngắt DS:DX= vectơ ngắt Ra: không

Hàm 35h: Lấy vectơ ngắt Vào: AH=35h

AL: số hiệu ngắt Ra: ES:BX = vectơ ngắt

; Thủ tục cất vectơ ngắt cũ và thiết lập vectơ ngắt mới ; vào: AL: số hiệu ngắt

DI = địa chỉ bộđệm vectơ ngắt cũ

; cất cũ: ; cất cũ: mov ah,35h mov al, số hiệu ngắt cần lấy mov [di],bx mov [DI+2], ES ;thiết lập mới MOV DX,[SI] PUSH DS MOV DS,[SI+2] MOV AH,25h

mov al, số hiệu ngắt cần thiết lập INT 21h

POP DS RET

Một phần của tài liệu Giáo trình ghép nối với máy vi tính (Trang 31 - 35)