Professional Documents
Culture Documents
Chỉ có 4 bit kết nối với bên ngoài (4bit thấp), có 3 bít bị
đảo trước khi I/0
Địa chỉ 0x37A
Vào:
GT=inportb(0x37A)&0x0F;
Điều khiển: outportb(0x37a, số):
Bài toán điều khiển số (in số, ra số, logic -> lập trình
trên máy tính C/C++; bạn cần đọc lại các lệnh logic;
AND/OR,NOR,NOT, khâu phải câu chữ, các ký hiệu ,
and bit/ and byte,….; & &&, ||,…
Quy chuẩn 4 conngr LPT/ thi 1 cổng sử dụng mặc định
là LPT2 (378, 379, 37A)
Tổng kết lại
8 bit data thực tế chỉ đi ra
5 bit trạng thái chỉ đi vào
4 bit điều khiển (đi vào/đi ra)
Tổng = 17 tín hiệu:
Ví dụ bài toán logic bạn cần 8 đầu vào số; 9 dầu ra số:
+ 8 bít data – sử dụng là đầu ra + 1 bit điều khiển (làm
đầu ra)
+ 5 bit trạng thái làm đầu vào + 3 bit còn lại của điều
khiển làm đầu vào.
+ Lập trình: lệnh làm với cổng
Lấy số liệu: DL= inportb(địa chỉ cổng)
Xuất tín hiệu điều khiển: outportb(Địa chỉ cổng, số điều
khiển)
+ Nội dung thuật toán – chính là xử lý các lệnh logic
Cần xem lại các lênh logic của C/C++
And bit, and byte, or,… &, &&, ||
(ngôn ngữ C) – Giải lao 15’
#include <conio.h>
#include <iostrem.h>
int kt;
void main() {
do {
kt=inportb(0x379) & 0x80; // đọc nội dung thanh ghi trạng thái và and với
0x80 (s7=1)
if (kt==128)
{
outportb(0x37A, 0x01); // điều khiển bật quạt C0=1
cout<<”\n Nhiet do dang lon hon 30 do C”;
}
else {
outportb(0x37A, 0x00); // điều khiển ngắt quạt C0=0
cout<<”\n Nhiet do dang nho hon 30 do C”;
}
cout<<”\n Muon thoat chuong trinh thi go mot phim bat ky”;
} while(!kbhit());
} // end of main
Làm bài tập; các ví dụ trong sách; cải tiến theo ý của bạn
11/10/2021 – 12/10/2021
+ LPT ghép I/O số, bài toán logic (phần cứng + chương
trình phần mềm)
+ LPT ghép ADC,
+ LPT ghép với ADC, HC257 (vào 8 ra 4, đem lại khả
năng dư cổng (ControlRegts) để làm việc khác)
+ Tăng khả năng mở rộng I/O, chúng ta sẽ dùng thêm
đệm số liệu;
Đặt bài toán: Thiết kế mạch phần cứng ghép với LPT
với mục đích đo lường: ADC0809, đệm số liệu 1 chiều
74LS273, HC257. Viết chương trình phần mềm để đọc
số liệu đo lường từ kênh 3 vào máy tính và hiển thị:
Viết chương trình đọc lần lượt 8 kênh vào máy tính và
hiển thị kết quả đo.
+ Thiết kế phần cứng để ghep nối LPT mục đích điều
khiển, có 2 kênh ra tương tự; viết chương trình điều
khiển theo biểu đồ xung. (DAC0808, 74LS273)
Gải lao
Sơ đồ tổng quát
Chương trình:
#include <….>
int k, GT;
void main()
{ k=3;
do{ outportb(0x309,k); // tạo mức 0 để mở 273, ,.chốt và
start ADC chọn kênh k và khởi động ADC
delay(10); // chờ ADC biến đổi xong
GT=inportb(0x308); // kích OE của ADC lên 1 cho phép
số liệu của ADC gửi lên bus.
cout<<”\n Giá trị đo tại kênh: “<<k<<”là=”<<GT;
} while(!kbhit());
}
Phát triển: Viết chương trình đọc lần lượt 8 kênh/
Giải lao 15 phút
Ví dụ: Thiết kế mạch phần cứng ghép qua ISA với mục
địch điều khiển, yêu cầu có 2 kênh ra để điều khiển
tương tự; sử dụng DAC0808, 74LS273, 74LS138,
74LS85; vùng địa chỉ cho phép (0x308-0x30F).
Viết chương trình đưa số liệu ra điều khiển 2 kênh theo
biểu đồ xung
+ Tiến hành ghép nối với ADC
(bên cạnh 74LS273, còn có 74LS373 và 74LS245 (2
chiều)
///02/11/2021
Đệm số liệu 2 chiều 74LS245
Ví dụ: Ghép nối điều khiển qua ISA – 8bit
Thiết kế 1 card ghép qua ISA để điều điều khiển, yêu
cầu có hai kênh ra tương tựm sử dụng 74LS273,
DAC0808, HC688, 74LS138, các linh kiện cần thiết
khác. Vùng địa chỉ cho phép 0x310-0x317. Viết chương
trình đưa số liệu ra điều khiển theo biểu đồ xung/
Như vậy nếu địa chỉ khác, cải tiến giải mã?
Nếu thay HC688 bằng 74LS85?
Nếu sử dụng hoàn toàn các cổng logic ?
(16/10/2021-N03)
Giải mã địc chỉ:
Từ vùng địa chỉ yêu cầu, trải bus địa chỉ
A9A8….A2A1A0
Kết hợp với ALE, /RD; /WR , tổ hợp logic sao cho thì
đầu ra logic đó đạt được 0/1 để đưa vào điều khiển kích
hoạt 138 hoạt động.
Ví dụ: Sử dụng ADC0809, đệm số liệu 1 chiều
74LS273, giải mã đại chỉ 74LS138, So sánh 74LS85, và
các linh kiện cần thiết khác để thiết kế một giao diện
phần cứng (card) ghép với ISA. Vùng địa chỉ cho phép
(0x318-0x31F)
Viết chương trình đọc số liệu đo lường từ kênh 3 vào
máy tính và hiển thị.
#include<conio.h>
#include<dos.h>
#include<iostream.h>
#include<stdio.h>
int k, GT;
void main()
{ k=3; // kênh 3
do{
outport(0x319,k); // chọn kênh k, kích Start&ALE
delay(10); // chờ ADC biến đổi xong
GT=inportb(0x318); // kích OE =1, đọc số liệu
cout<<”\n GTĐL tai kenh “<<k<<”la=”<<GT;
} while(!kbhit());
}
// Viết chương trình đọc số liệu đo lần lượt 8 kênh/
// Vùng địa chỉ 0x300-0x307
// Tổ hợp logic thay đổi HC688/ hoàn toàn các cổng logic
Khi ghép với DAC, điều khiển 2 kênh theo biểu đồ xung/