Tải bản đầy đủ (.doc) (23 trang)

Kỹ thuật lập trình chuyên dụng cho ĐTVT chủ đề "Lập trình ghép nối & điều khiển qua cổng LPT" pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 23 trang )

KHOA CÔNG NGHỆ THÔNG TIN
ĐẠI HỌC THÁI NGUYÊN

BÀI TẬP NHÓM
Thái nguyên 2-2011
KỸ THUẬT LẬP TRÌNH CHUYÊN DỤNG
CHO ĐTVT
Chủ đề:Lập trình ghép nối & điều khiển
qua cổng LPT
Thành viên:
1. Ngô Văn Thóc
2. Phạm Văn Tuyên
3. Tống Xuân Tuyền
4. Nguyễn Tiến Thương
5. Nguyễn Văn Tường
2
Mục lục:
Tiêu đề Trang
Lời mở đầu …………………………………………………… 4
Giới thiệu chung về LPT ……………………………………………… 4
Phân tích thiết kế ……………………………………………………… 14
1. Sơ đồ khối …………………………………………………… 14
2. Các linh kiện sử dụng trong mạch ………………………… 14
3. Mạch nguyên lý 16
4. Lưu đồ 17
5. Lập trình cài đặt 19
6. Kết quả 24
Kết luận và hướng phát triển 24
Tài liệu tham khảo 25
3
LỜI MỞ ĐẦU:


Ngày nay với sự phát triển của khoa học kỹ thuật và công nghệ
trên thế giới ở nhiều lĩnh vực khác nhau đang diễn ra. Đặc biệt sự phát
triển như vũ bảo của khoa học máy tính là một công cụ hỗ trợ đắc lực
và quan trọng trong các ngành Công nghệ thông tin và tự động hoá. Nó
giúp con người lưu trữ, xử lý thông tin, tính toán, điều khiển. Hơn thế
nữa nó có thể nối kết với nhau tạo thành một mạng máy tính toàn cầu
để chia sẻ thông tin giữa các vùng trên thế giới.
Và đúng như vậy, việc lập trình cho phần cứng và chip điều khiển
là điều không thể phủ nhận được, và tầm quan trọng của nó là rất
lớn.Và việc ghép nối với máy tính là điều bắt buộc,vì người ta dùng
ghép nối để mở rộng cấu hình và khả năng ứng dụng của máy tính vào
thực tế.VD:Có thể xây dựng các hệ đo lường hoàn toàn tự động có thể
thực hiện việc giao tiếp từ 2 máy tính từ Châu lục này sang Châu lục
khác.
Việc ghép nối máy tính với các thiết bị ngoại vi có nhiều cách lựa
chọn:
-Ghép nối máy in hay ghép nối cổng song song.
-Ghép nối qua cổng RS 232 hay là cổng nối tiếp.
-Ghép nối qua khe mở rộng trên bo mạch chủ.
-Ghép nối qua cổng USB.
Mỗi khả năng trên đều có ưu và nhược điểm, vì vậy tùy thuộc vào
khả mục đích mà ta dùng cách nào. Tuy nhiên ở đây chúng ta sẽ
nghiên cứu bày về cách ghép nối song song. Ứng dụng việc lập trình C
trên dos để thực hiện giao tiếp.Vì C là ngôn ngữ lập trình mạnh,gần gũi
với phần cứng và khả năng ứng dụng cao.
Giới thiệu chung về cổng LPT:
4
A. Mục đích sử dụng:
Trong quá trình lao động sản xuất, máy tính đã được sử dụng với
rất nhiều những mục đích khác nhau (soạn thảo văn bản, tính toán, thiết

kết, giả lập hoạt động của một số vấn đề thực tế, đo đạc, điều khiển các
thiết bị…). Máy tính có ứng dụng nhiều như vậy do nó có thể ghép nối
với các thiết bị ngoại vi (máy in, modem, một số mạch điều khiển…). Các
thiết bị ngoại có thể kết nối với máy tính thông qua cổng nối tiếp (Serial
port), cổng song song (Paralell port), cổng RS-232, cổng COM, cổng
USB.ta sẽ nghiên cứu quá trình xuất nhập qua cổng song song (cổng
LPT).
B. Cấu trúc cổng song song:
Cổng song song có 2 loại:
- Ổ cắm 36 chân
- Ổ cắm 25 chân
Ngày nay, loại ổ cắm 36 chân không còn được sử dụng, hầu hết các
máy tính PC đều trang bị cổng song song 25 chân nên ta chỉ cần quan
tâm đến loại 25 chân.
Đây là hình ảnh về cổng LPT
5
Cổng LPT 25 chân là loại cổng song song gồm có 4 đường điều
khiển, 5 đường trạng thái và 8 đường dữ liệu. Các chân trong cổng như
sau:
Hình trên giới thiệu loại ổ cắm 25 chân và cách bố trí các chân
6
Tín hiệu ở các chân trên ổ cắm 25 và 36 chân để trong trường hợp cần
thiết có thể so sánh
Chức năng của các đường dẫn tín hiệu:
Strobe (1): Với một mức logic thấp ở chân này, máy tính thông
báo cho máy in biết có một byte đang sẵn sàng trên các đường dẫn tín
hiệu để được truyền.
D0 đến D7: Các đường dẫn dữ liệu
Acknowledge: với một mức logic thấp ở chân này, máy in thông
báo cho máy tính biết là đã nhận được kí tự vừa gửi và có thể tiếp tục

nhận.
Busy (bận – 11): máy in gửi đến chân này mức logic cao trong khi
đang đón nhận hoặc in ra dữ liệu để thông báo cho máy tính biết là các
bộ đệm trong máy tính biết là các bộ đệm trong máy tính đã bị đầy hoặc
máy in trong trạn thái Off-line.
Paper empty (hết giấy – 12): Mức cao ở chân này có nghĩa là
giấy đã dùng hết.
Select (13): Một mức cao ở chân này, có nghĩa là máy in đang
trong trạng thái kích hoạt (On-line)
7
Auto Linefeed (tự nạp dòng): Có khi còn gọi là Auto Feed. Bằng
một mức thấp ở chân này máy tính PC nhắc máy in tự động nạp một
dòng mới mỗi khi kết thúc một dòng.
Error (có lỗi): Bằng một mức thấp ở chân này, máy in thông báo
cho máy tính là đã xuất hiện một lỗi, chẳng hạn kẹt giấy hoặc máy in
đang trong trạng thái Off-Line.
Reset (đặt lại): Bằng một mức thấp ở chân này, máy in được đặt
lại trạng thái được xác định lúc ban đầu.
Select Input: bằng một mức thấp ở chân này, máy in được lựa
chọn bởi máy tính.
Với số lượng đường dẫn nhiều, một số phép thử trở nên đặc biệt
đơn giản. Điểm đáng chú ý là khi tiến hành ghép nối cổng song song cần
hết sức thận trọng. Do các đường dẫn tương thích TTL không được bảo
vệ chống quá tải, nên khi tiến hành ghép nối ta cần chứ ý tới những quy
tắc an toàn sau đây:
- Thiết bị chỉ được phép đấu nối với cổng song song khi máy tính
ở trạng thái ngắt điện.
- Các lối vào chỉ được phép tiếp nhận điện áp giữa 0V và 5V.
- Các lối ra không được phép ngắn mạch hoặc đấu nối với các lối
ra khác và các lối ra không được phép nối với các nguồn tín hiệu điện áp

không biết rõ thông số.
Qua cách mô tả chức năng của từng tín hiệu riêng lẽ ta có thể
nhận thấy các đương dẫn dữ liệu có thể chia thành 3 nhóm:
- Các đường dẫn tín hiệu, xuất ra từ máy tính PC và điều khiển máy
tính, được gọi là các đường dẫn điều khiển.
- Các đường dẫn tín hiệu, đưa các thông tin thông báo ngược lại từ
máy in về máy tính, được gọi là các đường dẫn trạng thái.
- Đường dẫn dữ liệu, truyền các bit riêng lẽ của các ký tự cần in.
Từ cách mô tả các tín hiệu và mức tín hiệu ta có thể nhận thấy là:
các tín hiệu Acknowledge, Auto Linefeed, Error, Reset và Select Input
kích hoạt ở mức thấp. Thông qua chức năng của các chân này ta cũng
hình dung được điều khiển cổng máy in.
Đáng chú ý là 8 đường dẫn song song đều được dùng để chuyển
dữ liệu từ máy tính sang máy in. Trong những trường hợp này, khi
chuyển sang các ứng dụng để thực hiện nhiệm vụ đo lường ta phải
chuyển dữ liệu từ mạch ngọa vi vào máy tính để thu thập và xử lý.
Vì vậy ta phải tận dụng một trong năm đường dẫn theo hướng
ngược lại, nghĩa là từ bên ngoài về máy tính để truyền số liệu đo lường.
Dưới đây đề cập chi tiết hơn đến các đặc tính một hướng và hai hướng
của các đường dẫn này.
Để có thể ghép nối các thiết bị ngoại vi, các mạch điện ứng dụng
trong đo lường và điều khiển với cổng song song ta phải tìm hiểu cách
8
trao đổi với các thanh ghi thông qua cách sắp xếp và địa chỉ các thanh
ghi cũng như phần mềm.
Các đường dẫn của cổng song song được nối với ba thanh ghi 8bit khác
nhau:
- Thanh ghi dữ liệu
- Thanh ghi trạng thái
- Thanh ghi điều khiển

*. Địa chỉ các thanh ghi.
Cổng LPT có ba thanh ghi có thể truyền dữ liệu và điều khiển máy
in. Địa chỉ cơ sở của các thanh ghi cho tất cả cổng LPT (line printer) từ
LPT1 đến LPT4 được lưu trữ trong vùng dữ liệu của BIOS.
- Thanh ghi dữ liệu được định vị ở offset 00h.
- Thanh ghi trạng thái ở 01h.
- Thanh ghi điều khiển ở 02h.
Thông thường, địa chỉ cơ sở của LPT1 là 378h. Do đó, địa chỉ của
các thanh nghi lần lượt như sau:
Thanh ghi dữ liệu 378h
Thanh ghi trạng thái 379h
Thanh ghi điều khiển 37Ah
Địa chỉ của cổng LPT2 là 278h, do đó địa chỉ của thanh ghi như
sau:
Thanh ghi dữ liệu 278h
Thanh ghi trạng thái 279h
Thanh ghi điều khiển 27Ah
Với các địa chỉ LPT3, LPT4 đều tương tự. Tuy nhiên trong một số
trường hợp, địa chỉ của cổng LPT có thể khác do quá trình khởi động
của BIOS. BIOS sẽ lưu trữ các địa chỉ này như sau:
9
Địa chỉ Chức năng
0000h:0408h Địa chỉ cơ sở của
LPT1
0000h:040Ah Địa chỉ cơ sở của
LPT2
0000h:040Ch Địa chỉ cơ sở của
LPT3
Định dạng các thanh ghi như sau:
Thanh ghi dữ liệu (hai chiều):

Thứ tự bít 7 6 5 4 3 2 1 0
Tín hiệu máy in D7 D6 D5 D4 D3 D2 D1 D0
Chân số
9 8 7 6 5 4 3 2
Thanh ghi trạng thái máy in (chỉ đọc):
Thứ tự bít
7 6 5 4 3 2 1 0
Tín hiệu máy in
BUSY
ACK
PAPER EMPTY SELECT
ERROR
IRQ
X X
Chân số
11 10 12 13 15 - - -
Thanh ghi điều khiển máy in:
Thứ tự bít 7 6 5 4 3 2 1 0
Tín hiệu máy in X X DIR
IRQ
Enabl
e
SELECTIN
INIT
AUTOFEED
STROBE
Chân số
- - - - 17 16 14 1
x: không sử dụng
IRQ Enable: yêu cầu ngắt cứng; 1 = cho phép; 0 = không cho phép

Chú ý rằng chân BUSY được nối với cổng đảo trước khi đưa vào thanh
ghi trạng thái, các bit
SELECTIN
,
AUTOFEED

STROBE
được đưa qua
cổng đảo trước khi đưa ra các chân của cổng máy in.
Thông thường tốc độ xử lý dữ liệu của các thiết bị ngoại vi như
máy in chậm hơn PC nhiều nên các đường
ACK
, BUSY và
STR
được sử
dụng cho kỹ thuật bắt tay. Khởi đầu, PC đặt dữ liệu lên bus sau đó kích
hoạt đường
STR
xuống mức thấp để thông tin cho máy in biết rằng dữ
liệu đã ổn định trên bus. Khi máy in xử lý xong dữ liệu, nó sẽ trả lại tín
hiệu
ACK
xuống mức thấp để ghi nhận. PC đợi cho đến khi đường
BUSY từ máy in xuống thấp (máy in không bận) thì sẽ đưa tiếp dữ liệu
lên bus.
* . thiết lập địa chỉ trong bios
Có thể thiết lập được địa chỉ trong bios thông qua hai cách :
Cách 1 : thiết lập thủ công trong mainboad
Khi bật máy tính, BIOS kiểm tra kế tiếp nhau các địa chỉ được ghi
trong bảng và khẳng định xem trên máy có trang bị một vài cổng song

10
song. Các cổng song song được BIOS tìm thấy sẽ được sắp xếp theo
các tên mà DOS đã chỉ định là: LPT1, LPT2…
Cách 2 : thiết lập bằng ngôn ngữ lập trình
Ví dụ: đọc địa chỉ của printer port qua BIOS
#include
#include
void main(void)
{
unsigned int far *ptraddr; /* Pointer to location of Port Addresses */
unsigned int address; /* Address of Port */
int a;
ptraddr=(unsigned int far *)0x00000408;
for (a = 0; a < 3; a++)
{
address = *ptraddr;
if (address == 0)
printf("No port found for LPT%d ",a+1);
else
printf("Address assigned to LPT%d is %Xh ",a+1,address);
*ptraddr++;
}
}
*.Kỹ thuật lập trình ghép nối.
Ngôn ngữ lập trình C là một ngôn ngữ mệnh lệnh được phát triển
từ đầu thập niên 1970 bởi Ken Thompson và Dennis Ritchie.Từ đó,ngôn
ngữ này đã lan rộng ra nhiều hệ điều hành khác và trở thành một những
ngôn ngữ phổ dụng nhất. C là ngôn ngữ rất có hiệu quả và được ưa
chuộng nhất để viết các phần mềm hệ thống,mặc dù nó cũng được dung
cho việc viết cac ứng dụng. Ngoài ra, C cũng thường được dung làm

phương tiện giảng dạy trong khoa học máy tính mặc dù ngôn ngữ này
không được thiết kế dành cho người nhập môn.
- C là một ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần
giống phần cứng và nó giống ngôn ngữ Assembler hơn hầu hết các
ngôn ngữ bậc cao.C đôi khi được đánh giá như là “có khả năng di
động”,cho thấy sự khác nhau quan trọng giữa nó và ngôn ngữ bậc thấp
11
như la Assembler, đó là việc mã C có thể được dich và thi hành trong
hầu hết các máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó
Assembler chỉ có thể chạy trong một số máy tính đặc biệt. Vì vậy C được
xem là ngôn ngữ bậc trung.
- C đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để
viết các chương trình lớn với số lỗi ít hơn trong mẫu hình lập trình thủ
tục mà lại không đặt gánh nặng lên vai người viết ra trình dịch C, là
những người bề bộn với các đặc tả phức tạp của ngôn ngữ.
- C có thêm những chức năng sau:
+ Một ngôn ngữ cốt lõi đơn giản, với các chức năng quan trọng: xử
lý hàm hay việc xử lý tập tin sẽ được cung cấp bởi các bộ thư viện các
thủ tục.
+ Tập trung trên mẫu hình lập trình thủ tục, với các phương tiện lập
trình theo kiểu cấu trúc.
+ Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép toán không
có ý nghĩa thực dụng.
+ Dùng ngôn ngữ tiền xử lý, tức là các câu lệnh tiền xử lý C, cho
các nhiệm vụ như là định nghĩa các macro và hàm chứa nhiều tập tin mã
nguồn (bằng cách dùng câu lệnh tiền xử lý dạng #include chẳng hạn).
+ Mức thấp của ngôn ngữ cho phép dùng tới bộ nhớ máy tính qua
việc xử dụng kiểu dữ liệu pointer.
+ Số lượng từ khóa rất nhỏ gọn.
+ Các tham số đưa vào các hàm bằng giá trị, không bằng địa chỉ.

+ Hàm các con trỏ cho phép hình thành một nền tảng ban đầu cho
tính đóng và tính đa hình.
+ Hổ trợ các bản ghi hay các kiểu dữ liệu kết hợp do người dùng
từ khóa định nghĩa struct cho phép các dữ liệu liên hệ nhau có thể được
tập hợp lại và được điều chỉnh như là toàn bộ.
- Một số chức năng khác mà C không có (hay còn thiếu) nhưng có
thể tìm thấy ở các ngôn ngữ khác bao gồm:
+ An toàn kiểu,
+ Tự động Thu dọn rác,
+ Các lớp hay các đối tượng cùng với các ứng xử của chúng (xem
thêm OOP),
12
+ Các hàm lồng nhau,
+ Lập trình tiêu bản hay Lập trình phổ dụng,
+ Quá tải và Quá tải toán tử,
+ Các hỗ trợ cho đa luồng, đa nhiệm và mạng.
- Mặc dù C còn thiếu nhiều chức năng hữu ích nhưng lý do quan
trọng để C được chấp nhận vì nó cho phép các trình dịch mới được tạo
ra một cách nhanh chóng trên các nền tảng mới và vì nó cho phép người
lập trình dễ kiểm soát được những gì mà chưong trình (do họ viết) thực
thi. Đây là điểm thường làm cho mã C chạy hiệu quả hơn các ngôn ngữ
khác. Thường thì chỉ có ngôn ngữ ASM chỉnh bằng tay chạy nhanh hơn
(ngôn ngữ C), bởi vì ASM kiểm soát đưọc toàn bộ máy. Mặc dù vậy, với
sự phát triển các trình dịch C, và với sự phức tạp của các CPU hiện đại,
C đã dần thu nhỏ khoảng cách khác biệt về vận tốc này.
Một lý do nữa cho việc C được xử dụng rộng rãi và hiệu quả là do
các trình dịch, các thư viện và các phần mềm thông dịch của các ngôn
ngữ bậc cao khác lại thường được tạo nên từ C
*. Xuất nhập bằng ngôn ngữ C.
Ngôn ngữ lập trình C hỗ trợ một số hàm làm nhiệm vụ xuất, nhập

dữ liệu với các thiết bị ngoại vi.
Turbo C cung cấp hàm xuất dữ liệu qua cổng LPT là:
Outport(0x378,dữ liệu)
Và hàm nhập dữ liệu là:
Inport(0x378,dữ liệu)
Các hàm import và outport nằm trong thư viện <dos.h>
- int inport (int portid)
- unsigned char inportb (int portid)
- void outport (int portid, int value)
- void outportb (int portid, unsigned char value)
Như vậy, để xuất nhập dữ liệu qua cổng LPT1 thì ta cần định địa
chỉ của portid là 378h ứng với thanh ghi dữ liệu, 379h ứng với thanh ghi
trạng thái (chỉ dọc), 37Ah ứng với thanh ghi điều khiển.
Các giá trị nhập vào được chuyển thành các giá trị nhị phân và
được truyền ra các chân ứng với bít nhị phân tương ứng
Sau đây là ví dụ : Hẹn giờ bật tắt bóng đèn 220V – 40W
13

Phân Tích Thiết Kế
1. Sơ đồ khối
2. Các linh kiện sử dụng trong mạch:
- 1 Transistor C1815
- 1 Relay 5V DC
- 1 điện trở 470Ω
- Bóng đèn 220V - 40W
a) Transistor C1815
Hình dạng và kí hiệu:

C1815 là loại Transistor NPN công suất thấp. Các thông số cơ bản:
• V

CBO
= 60V (MAX)
• V
CEO
= 50V (MAX)
• V
EBO
= 5V (MAX)
• I
C
= 150mA (MAX)
• I
B
= 50 mA
14
• P
C
= 40 mW
• h
FE
= 70 - 140 ( Min 25, Max 700 tùy thuộc vào V
CE
và I
C
)
• f
T
= 80MHz (Tần số hoạt động. MIN)
Cực B của transistor C1815 được nối với cổng dữ liệu của LPT
qua điện trở 470Ω. Cực C được nối vào một chân điều khiển của Relay

(Chân số 1). Cực E nối Mass (Mass và nguồn 5V DC được lấy trực tiếp
từ máy tính qua cổng USB).
b) Relay 5V DC

Hình dạng Kí hiệu Sơ đồ chân
thực tế
Với 1 và 2 là hai chân điều khiển, chân 1 nối với cực C của C1815,
chân 2 nối lên nguồn 5V DC. Chân 3 và 4 thường trực nối nhau qua
khóa K. Chân 3 và 5 được nối vào mạch bóng đèn 220V 40W.
Điện thế điều khiển Relay vào chân 1 và 2 là 5V DC. Relay đóng
ngắt tối đa dòng 25A - 250V AC (28V DC) qua chân 3 và 5.
c) Trở 470Ω
15
Tác dụng: phân cực cho transistor C1815 và hạn chế dòng điện đi
vào LPT
3. Mạch nguyên lý:
 Giải thích hoạt động của mạch:
Như sơ đồ nguyên lý trên ta thấy: Khi dữ liệu được đưa ra chân D0 – D7
(Lập trình xuất dữ liệu ra tất cả các chân cùng một lúc), dòng điện từ
LPT sẽ kích thích vào cực B của Transistor C1815 khiến transistor thông
CE, khi đó điện sẽ đi qua cuộn cảm trong Relay (hai chân 1 và 2), tạo từ
trường khiến khóa K chuyển trạng thái tử chân 4 nhảy về chân 5, mạch
ngoài 220V sẽ đóng, đèn sáng. Khi không có dữ liệu xuất ra LPT,
transistor sẽ ngăn dòng đi từ C xuống E dẫn đến không có điện đi qua
cuộn cảm, từ trường không được sinh ra dẫn đến khóa K nhảy lại vị trí 4
ban đầu, mạch ngoài 220V mở, không có điện qua bóng đèn.
4. Lưu đồ
16
17
5. Lập Trình Cài đặt

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#define a 0x80
#define b 0x40
#define c 0x20
void main()
{
clrscr();
char
time[10],ngay[10],d1b[6],d2b[6],d3b[6],d1t[6],d2t[6],d3t[6],dt[6],ds[6];
int n; long b1,t1,b2,t2,b3,t3;
_strdate(ngay);
printf("\n\tChuong trinh dieu khien bat tat bong den 22V 40W\t
%s",ngay);
printf("\n\t ");
printf("\n\t1.Duong Vu Kien\t\t4.Nguyen Van Hien");
printf("\n\t2.Vu Thuy Hang\t\t5.Phung Thi Bich Lien");
printf("\n\t3.nong Le Thuy\t\t6.Pham Thanh Thong");
printf("\n\t ");
printf("\n\t\tBan hay lua chon phuong thuc hen gio:\n");
printf("\n\t1.Hen gio theo dong ho he thong");
printf("\n\t2.Hen gio theo thoi gian dinh san");
printf("\n\t ");
printf("\n");
scanf("%d",&n);
if(n==1)
{goto gioht;}
if(n==2)

{goto giobt;}
else goto exit;
gioht:
{
printf("Ban hay nhap vao thoi gian:");
printf("\nBat den 1:");
fflush(stdin);
gets(d1b);
printf("\tTat den 1:");
gets(d1t);
printf("Bat den 2:");
gets(d2b);
18
printf("\tTat den 2:");
gets(d2t);
printf("Bat den 3:");
gets(d3b);
// printf("Bat ca 3 den:");
// gets(ds);
printf("Tat den 3:");
gets(d3t);
do
{
gotoxy(50,23);
_strtime(time);
printf("Gio hien tai:%s",time);
if((time[3]==d1b[0])&(time[4]==d1b[1])&(time[6]==d1b[3])&(time[7]==d1b[4
]))
{
outportb(0x378,(inportb(0x378))|(0x80));

}
if((time[3]==d1t[0])&(time[4]==d1t[1])&(time[6]==d1t[3])&(time[7]==d1t[4]))
{
outportb(0x378,(inportb(0x378))&(0x7f));
}
if((time[3]==d2b[0])&(time[4]==d2b[1])&(time[6]==d2b[3])&(time[7]==d2b[4
]))
{
outportb(0x378,(inportb(0x378))|(0x40));
}
if((time[3]==d2t[0])&(time[4]==d2t[1])&(time[6]==d2t[3])&(time[7]==d2t[4]))
{
outportb(0x378,(inportb(0x378))&(0xbf));
}
if((time[3]==d3b[0])&(time[4]==d3b[1])&(time[6]==d3b[3])&(time[7]==d3b[4
]))
19
{
outportb(0x378,(inportb(0x378))|(0x20));
}
if((time[3]==d3t[0])&(time[4]==d3t[1])&(time[6]==d3t[3])&(time[7]==d3t[4]))
{
outportb(0x378,(inportb(0x378))&(0xdf));
}
if((time[3]==dt[0])&(time[4]==dt[1])&(time[6]==dt[3])&(time[7]==dt[4]))
{
outportb(0x378,0);
}
if((time[3]==ds[0])&(time[4]==ds[1])&(time[6]==ds[3])&(time[7]==ds[4]))
{

outportb(0x378,0xff);
}
}
while(!kbhit());
goto exit2;
}
giobt:
{
printf("\nBan hay nhap vao thoi gian den 1 sang:");
scanf("%ld",&b1);
// printf("\nBan hay nhap vao thoi gian den 1 tat:");
// scanf("%ld",&t1);
printf("\nBan hay nhap vao thoi gian den 2 sang:");
scanf("%ld",&b2);
// printf("\nBan hay nhap vao thoi gian den 2 tat:");
// scanf("%ld",&t2);
printf("\nBan hay nhap vao thoi gian den 3 sang:");
scanf("%ld",&b3);
printf("\nBan hay nhap vao thoi gian den tat:");
scanf("%ld",&t3);
printf("\nBat dau chuong trinh hen gio.Bam phim bat ki de ket thuc
chuong trinh");
do
{
outportb(0x378,a);
delay(b1);
20
// outportb(0x378,!a);
// delay(t1);
outportb(0x378,b);

delay(b2);
// outportb(0x378,!b);
// delay(t2);
outportb(0x378,c);
delay(b3);
outportb(0x378,0);
delay(t3);
}
while(!kbhit());
goto exit2;
}
exit:
clrscr();
printf("\nKhong co lua chon thu %d. Bam phim bat ki de ket thuc
chuong trinh !!",n);
outportb(0x378,0);
getch();
exit2:
clrscr();
printf("\nChuong trinh hen gio ket thuc !!!");
outportb(0x378,0);
getch();
getch();
}
6. Kết Quả Dạt Được
21
Kết Luận Và Hướng Phát Triển
Cổng LPT (line printer port) là cổng song song dễ sử dụng. Trong
25 chân tín hiệu, cổng có 8 chân dữ liệu, 4 chân điều khiển, 4 chân trạng
thái. Nên việc xuất nhập dữ liệu qua cổng trở nên dễ dàng. Chính vì vậy,

nó có thể sử dụng cả cho những người dùng không chuyên nghiệp.
Tuy nhiên, tốc độ truyền của cổng không cao và khoảng cách
truyền không lớn. Nên cổng chỉ có thể giao tiếp với các thiết bị ngoại vi ở
gần.
Hướng phát triển bài tập: Lập trình hẹn giờ cho 8 bóng đèn 220V
40W riêng lẻ. Do thời gian chuẩn bị không nhiều và khả năng có hạn nên
nhóm xin được nghiên cứu phát triển sau.
Tài Liệu Tham Khảo
1.
2.
3. Giáo trình Lập trình C - Khoa CNTT – Thái Nguyên
4. Mạng Internet.
22
23

×