ha_be

New Member

Download miễn phí Giáo trình Đo lường và điều khiển bằng máy tính - Lập trình cho máy tính điều khiển





Khi đọc dữ liệu từ cổng ngoại vi thường dùng hai phương pháp. Phương
pháp thứ nhất là thăm dò bằng cách đọc trạng thái của cổng theo chu kỳ để
xem có gì thay đổi không, nếu có sẽ chuyển sang một chương trình phục vụ.
Phương pháp này tốn thời gian và làm chậm các quá trình khác.
Phương pháp thứ hai là dùng ngắt, vi xử lý thực hiện công việc bình
thường, khi ngoại vi có thông tin cần gởi đến sẽ gởi yêu cầu ngắt IRQ
(Interrupt Request)đến vi xử lý, lúc đó VXL chấm dứt lệnh đang thực hiện,
cất một số thông tin vào ngăn xếp và thực hiện thường trình phục vụ ngắt
ISR (Interrupt Service Rovtine)đã định sẵn. Khi đã thực hiện xong ISR,
VXL quay trở lại nơi đã rời khỏi.



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

ệnh INP (port%) và OUT port%, data%
port là số nguyên từ 0 đến 65535 chỉ địa chỉ cổng
data là số nguyên từ 0 ÷ 255,&H ký hiệu số Hex phía sau , % ký hiệu
CHƯƠNG 4: LẬP TRÌNH CHO MÁY TÍNH ĐIỀU KHIỂN Trang 88
biến là số nguyên
Ví dụ: a% = INP (&H3FC) ‘đọc số liệu ở cổng 3FCH, thanh ghi modem
OUT &H3FC, (a% XOR 1) ‘đảo bit cuối, xuất ra cổng 3FCH
OUT 768, 160 ‘ xuất A0H ra cổng 300H
3- Pascal
Dùng lệnh port: xuất nhập một byte, portw: xuất nhập một từ
}{Xuất ra port địa chỉ reg:
port[reg]: = data;
}{đọc số liệu ở port địa chỉ reg vào biến value .
value: = port [reg];
Ví dụ: data: = port [$378];
port [$37A]:= data out;
4- C, C Builder, Visual C
Dùng lệnh inp và outp (hay inportb, outportb, inport, outport)
Control = inp (0X61);
outp (0X43, 0Xb6);
Visual ++C 6.0 có các hàm và thủ tục:
_inp: đọc byte _outp: xuất byte
_inpw: đọc một từ _outpw: xuất từ
_inpd: đọc từ kép _outpd: xuất từ kép
Ví dụ: lập trình C
# include
# define dataport 0x378
# define statusport 0x379
int Dummy:
Dummy = _outp(dataport, 0);
Dummy = _inp(statusport);
...
4.1.2 Lập trình xuất nhập dùng Visual C++6.0
Sau khi mở VC, bạn vào menu File – New – Projects chọn mục
MFCAppWizard (exe), sau đó đặt tên cho project và địa chỉ lưu file rồi bấm
OK.
Tác giả: TS Nguyễn Đức Thành Trang 89
Thành phố Hồ Chí Minh, tháng 4 năm 2006
Khi cửa sổ MFCAppWizard xuất hiện, chọn option Dialog Based sau
đó tiếp tục bấm Next, ở bước 4 bạn bấm Finish rồi OK
Sau đó bạn tạo các đối tượng Static Text, Edit Box, Button và Timer,
các biến liên kết với Edit Box Port In và Port Out lần lượt là m_indata và
m_outdata. Cứ mỗi 1s do Timer chương trình đọc dữ liệu ở Port In 379, xử
lý rồi xuất ra Port Out 378
CHƯƠNG 4: LẬP TRÌNH CHO MÁY TÍNH ĐIỀU KHIỂN Trang 90
Sau đây là một phần của chương trình xuất nhập cổng, các dòng in
Tác giả: TS Nguyễn Đức Thành Trang 91
Thành phố Hồ Chí Minh, tháng 4 năm 2006
đậm là các dòng bổ sung thêm
// ioportDlg.cpp : implementation file
#include "stdafx.h"
#include "ioport.h"
#include "ioportDlg.h"
# include "conio.h" //definition _inp and _outp
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[ ] = __FILE__;
#endif
BOOL CIoportDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
SetTimer(ID_CLOCK_TIMER,1000, NULL);
return TRUE;
}
void CIoportDlg::OnTimer(UINT nIDEvent)
{
UpdateData(TRUE);
m_indata=_inp(0x379);
m_outdata=m_indata ^0x80;
_outp(0x378,m_outdata);
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
void CIoportDlg::OnBtnexit()
{
OnOK();
}
4.1.3 Lập trình dùng Delphi
Không có lệnh xuất nhập mà ta phải dùng hợp ngữ tạo hàm xuất nhập.
Functrion Inport (address: word): byte;
Var data: word;
begin
asm
push dx
mov dx, address
in ax, dx
mov data, ax
pop dx
end;
inport: = data; end;
Procedure Outport (address: word; data: word);
begin
asm
push dx
CHƯƠNG 4: LẬP TRÌNH CHO MÁY TÍNH ĐIỀU KHIỂN Trang 92
mov dx, address
mov ax, data
out dx, ax
pop dx
end;
end;
Ví dụ: Chương trình Delphi xuất nhập Port
unit inoutunit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
btnIN: TButton;
btnOUT: TButton;
function inport (address:word):byte;
procedure outport (address:word; data:byte);
procedure btnINClick (Sender: TObject);
procedure btnOUTClick (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function Tform1.inport (address:word):byte;
Tác giả: TS Nguyễn Đức Thành Trang 93
Thành phố Hồ Chí Minh, tháng 4 năm 2006
var data:byte;
begin
asm
push dx
mov dx,address
in al,dx
mov data, al
pop dx
end;
inport:= data;
end;
procedure TForm1.outport (address:word; data:byte);
begin
asm
push dx
mov dx,address
mov al,data
out dx,al
pop dx
end;
end;
procedure TForm1.btnINClick (Sender: TObject);
begin
edit2.text:= inttostr (inport (strtoint (edit1.text)));
end;
procedure TForm1.btnOUTClick (Sender: TObject);
begin
outport (strtoint (edit1.text), strtoint (edit2.text));
end;
end.
4.1.4 Visual Basic
Ngôn ngữ này không hỗ trợ xuất nhập port, ta phải dùng thư viện liên
kết động (dynamic link library)
4.2 VIẾT TẬP TIN LIÊN KẾT ĐỘNG DLL
File thư viện liên kết động có đuôi .dll chứa các hàm và thường trình
mà các chương trình chạy trong môi trường Windows như Delphi, Visual
Basic, Visual C có thể sử dụng.
Các ngôn ngữ lập trình Visual C, Delphi, Borland ++C Builder đều cho
phép viết tập tin .dll. Hệ điều hành Windows có sẵn một số hàm thư viện
liên kết động gọi chung dưới tên windows API (Applications Programming
Interface) tuy nhiên việc sử dụng chúng đòi hỏi kinh nghiệm lập trình.
Có thể lấy các tập tin dll nhập xuất dữ liệu các port máy tính từ mạng
Internet và cài vào máy tính, hay có thể tự viết.
Sau đây trình bày hai ví dụ dùng Visual C và Delphi để viết tập tin.dll
mà Visual Basic sẽ sử dụng.
CHƯƠNG 4: LẬP TRÌNH CHO MÁY TÍNH ĐIỀU KHIỂN Trang 94
4.2.1 Dùng Visual C++4.0 (Win 16 bit)
Ta viết tập tin thư viện đặt tên là INOUT.dll gồm thường trình xuất ra
cổng đặt tên OUTPORT và thường trình nhập dữ liệu INPORT.
Đầu tiên dùng phần mềm soạn văn bản viết hai tập tin INOUT.DEF
(define) và tâïp tin INOUT.CPP (chương trình C).
// Inout.def listing
-----------------------------
Library inout
Description dll for I/O card
Exports
Outport @ 1
Inport @ 2
-----------------------------
Hàng đầu là tên file INOUT, hàng thứ hai là chú thích, các hàng sau
liệt kê tên các thường trình trong thư viện. Sau tên thường trình là dấu @ và
số thứ tự.
// INOUT.CPP Listing
-----------------------
// file nguồn. CPP cho dll INOUT.dll
# include
# include
// chứa hàm INP và OUTP
Short-stdcall OUTPORT (int PortAddress, int PortData)
{
Short Dummy;
Dummy = (Short) (_outp (PortAddress, PortData));
Return (Dummy);
};
Short_stdcall INPORT (int PortAddress)
{
Short PortData;
PortData = (Short) (_inp (PortAddress));
Return (PortData);
} ;
------------------------
Sau khi đã soạn xong hai tập tin INOUT.def và và INOUT.cpp ta cất
vào một thư mục, ví dụ, C:\port. Vào Visual C chọn File - New -Projects -
Win32DLL đánh tên INOUT và địa chỉ C:\port\INOUT rồi bấm OK. Màn
hình INOUT - Microsoft Developper Studio sẽ xuất hiện và project INOUT
Tác giả: TS Nguyễn Đức Thành Trang 95
Thành phố Hồ Chí Minh, tháng 4 năm 2006
classes được tạo ra, ta sẽ cộng thêm hai file INOUT.def và INOUT.cpp vào
project INOUT rồi bấm FILE - SAVE ALL.
Sau khi đã tạo project INOUT bấm Build và chọn Build INOUT.dll,
nếu không có gì sai sót file INOUT.dll sẽ được tạo ra và cất trong
C:\port\inout\debug. Sau đó cất file vào thư mục hệ thống của Windows, ví
dụ, C:\Windows. Với Visual C 5.0 và 6.0 cách viết sẽ khác đi.
Các chương trình viết trên ngôn ngữ khác như Delphi, Visual Basic có
thể gọi hàm INPORT và OUTPORT khi đã khai báo các hàm này và
INOUT.dll
Ví dụ, trong Visual Basic ta thêm các dòng này trong phần khai báo
chương trình sau phát biểu Option Explicit:
------------------
Option Explicit
Private Declare Function OUTPORT LIB “INOUT.dll” (ByVal PortAddress As Integer, By Val
Port Data as Integer) As Integer.
Private Declare Function INPORT Lib “INOUT.dll” (ByVal PortAddress As Integer) As Integer
---------------------
Private cho biết các hàm và thường trình sau Declare là cục bộ. Sau
Declare ta viết Function nếu có trả về giá trị, còn không ...
 

Các chủ đề có liên quan khác

Top