1. Trang chủ
  2. » Công Nghệ Thông Tin

Vấn đề xử lý ngắt trong lập trình C - Đề tài môn Lập trình hệ thống và ghép nối thiết bị

5 276 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 5
Dung lượng 293,5 KB

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

Nội dung

Vấn đề xử lý ngắt trong lập trình C - Đề tài môn Lập trình hệ thống và ghép nối thiết bị

Trang 1

Bài tập lớn môn: Lập trình hệ thống

và ghép nối thiết bị

Đề tài: Xử Lý Ngắt Trong Lập Trình C

Nhóm 14:

I) CÁC KHÁI NIỆM:

1, Mỗi khi một thiết bị phần cứng hay một chương trình cần đến sự giúp đỡ của CPU nó gửi đi một tín hiệu hoặc lệnh gọi là ngắt đến bộ vi xử lý chỉ định một công việc cụ thể nào đó mà nó cần CPU thực hiện Khi bộ vi xử lý nhận được tín hiệu ngắt nó thường tạm ngưng tất cả các hoạt động khác và kích hoạt một chương trình con đang có trong bộ nhớ gọi là chương trình xử lý ngắt tương ứng với từng số liệu ngắt cụ thể Sau khi chương trình xử lý ngắt làm xong nhiệm vụ, các hoạt động của máy tính sẽ tiếp tục lại từ nơi đã

bị tạm dừng lúc xảy ra ngắt

- Ngắt (interrupt) là quá trình dừng chương trình chính đang chạy để ưu tiên thực hiện một chương trình khác, chương trình này được gọi là chương trình phục vụ ngắt (ISR – Interrupt Service Routine)

-Ngắt trong trương trình có mức độ ưu tiên cao nhất

2, Trong các quá trình ngắt, ta phân biệt thành 2 loại: ngắt cứng và ngắt mềm

Ngắt mềm là ngắt được gọi bằng một lệnh trong chương trình ngôn ngữ máy

Khác với ngắt mềm, ngắt cứng không được khởi động bên trong máy tính mà do các linh kiện điện tử tác đông lên hệ thống

3, hoạt động: Khi thực hiện lệnh gọi ngắt, CPU sẽ tìm kiếm trong bảng vector ngắt địa chỉ của chương trình phục vụ ngắt Người sử dụng cũng có thể xây dựng môt chương trình cơ sở như các chương trình xử lý ngắt Sau đó, các chương trình khác có thể gọi ngắt ra để sử dụng Một chương trình có thể gọi chương trình con loại này mà không cần biết địa chỉ của

Trang 2

II) CƠ CHẾ SỦ LÝ NGẮT TRONG C:

Trong C hỗ trợ thư viện khá hoàn hảo, để sử dụng ngắt trong chương trình C cấu trúc ngắt trong C cần include file “interrupt.h” nằm trong thư mục con “avr” File header interrupt.h chứa định nghĩa các hàm và các phương thức phục vụ cho viết chương trình

Trang 3

phục vụ ngắt , các vector ngắt không được định nghĩa trong file này mà là trong file iom8.h

 Trong đoạn code trên sử dụng 1 biến tạm 8bit, có dấu để lưu giá trị đếm, tên biến val, mỗi khi có ngắt tăng val 1 đơn vị và ngược lại khi có ngắt trên INT1 giảm val đi 1 đó là nội dung của 2 trình phục vụ ngắt Trong đoạn chương trình trên trước hết chúng ta thực hiện việc xác lập hoạt động cho 2 ngắt sau đó chương trình vào 1 vòng lặp vô tận while, PORTC được đùng để kiểm tra rằng chương trình trong vòng lặp vô tận vẫn đang hoạt động

 Câu lệnh MCUCR│=(1<<ISC11) │(1<<ISC01) nghĩa là dịch số 1 sang trái ISC11 vị trí, và (1<<ISC01) là dịch số 1 sang trái ISC01 vị trí ISC11 và ISC01 Trong include file “io.h” thì file “iom8.h” được chèn vào, và trong file này chứa địa chỉ các thanh ghi của chip atmega8, các tên bit được khai báo sẵn trong file này :

 Đây là định nghĩa các bit trong thanh ghi MCUCR

Trang 4

Ngắt 21h :

+ Đối với ngắt thì thường có đầu ra và đầu vào

+ Đối với ngắt này vào AH và ra ở AL > các hàm của ngắt 21h ở AH

+ AH , AL thuộc AX : là thanh ghi : gồm 16bits = 2byte -> AH , AL mỗi thứ 1 byte = 8bits và AL là 8 bits thấp AH là 8 bits cao

+ Ngoài AX còn có BX , CX , DX nó cũng như AX

-Gán giá trị AH=1 tức là gán hàm thứ nhất của ngắt 12h, sau đó gọi ngắt

Ví dụ:

#include<stdio.h>

#include<conio.h>

#include<dos.h>

int input()

{

int x;

union REGS regs;

// Gán AH = 1 tức là báo với nó là ta sử dụng hàm 1 trong ngắt 21h

regs.h ah = 1 ;

// Sau đó gọi hàm ngắt

int86( 0x21 ,&regs,&regs) ;

//Hàm trên thực thi thì xuất hiện dấu nhắc cho ta nhập 1 ký tự

// -> Tống giá trị nhập AL -> Lấy ra

x = regs.h al ;//Tống giá trị mình nhập vào AL

x = x – 0x30 ;//Lấy ra

return x

III) ĐỀ MÔ TRƯƠNG TRÌNH

Nhập vào từ bàn phím một chuỗi cái số, dùng ngắt để in ra màn hình

#include<stdio.h>

#include<conio.h>

#include<dos.h>

int nhap ();

void xuat ( int x );

void main ()

{

int x ;

printf ("\n Moi ban nhap mot so tu 0->9:");

x nhap ();

xuat ( );

getch ();

}

int nhap ()

{

union REGS regs ;

int x = ;

int temp ;

do

{

regs ah = ; // Gán hàm 1 của ngắt 21

Trang 5

int86 ( 0x21 ,& regs ,& regs ); //Gọi ngắt

temp = regs al ; // dùng biến tạm để lưu các biến được nhập

if( temp == 0x0D ) // nếu nhập enter thì thoát

goto EXIT;

temp -= 0x30 ; /* nếu không nhập enter thì tiếp tục thực hiện vòng lặp, temp -0x30 để ra số nhập vào */

x x 10 + temp ; // chuyển nó thành giá trị cần nhập

EXIT:

}while( temp != 13 ); // mã hex của phím enter=0x0D: 13

return x ;

}

void xuat ( int x )

{

union REGS regs ;

regs ah = ;

x += 0x30 ;

regs dl = ;

int86 ( 0x21 ,& regs ,& regs );

}

Ngày đăng: 27/06/2016, 13:17

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w