Có 3 mode hoạt động:
+ mode 0: vào ra thông thường, số liệu từ CPU ra sẽ được chốt , tức là số liệu từ CPU ra sẽ được giữ lại trong 8255 cho đến khi nó chuyển mode số liệu vào không chốt (thay đổi theo giá trị tức thời của I/O )
+ mode 1 : dữ liệu chỉ được giữ lại ở 8255 một khoảng thời gian ngắn (cả vào và ra ); sau đó phải được Strobe (chốt )vào 1 chốt ngoài nếu cần lưu lại .
Cổng A, B : thường dùng để trao đổi số liệu
Cổng C thường dùng để điều khiển cho cổng A và B
13 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1317 | Lượt tải: 0
Nội dung tài liệu Các chip bổ trợ cho hệ thống mạch, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương VII : CÁC CHIP BỔ TRỢ
§1. chip PPI 8255
( programmable periphenal interface )
( giao diện ngoại vi lập trình được )
Lựa chọn các cổng được chọn bởi A0, A1 như sau :
Địa chỉ
A1
A0
Cổng
$300
$cơ sở
0
0
A
$301
$cơ sở + 1
0
1
B
$302
$cơ sở + 2
1
0
C
$303
$cơ sở + 3
1
1
Kiểm soát thanh ghi điều khiển
8255 có mạch đệm số liệu 2 chiều : D0 -D7 ;
các tín hiệu điều khiển : ghi , đọc, reset ; CS ; -> điều khiển bằng phần mềm
Thanh ghi điều khiển của 8255 :
mức 1 : cổng sẽ làm lối vào
mức 0 : cổng sẽ làm lối ra
D0 : Cổng C (nửa thấp ) - 0: ra ; 1 : vào
D1 : Cổng B - 0 : ra 1 : vào
D2 : chọn chế độ 1: mode 1
0: mode 0 (mode của nhóm B)
D3 : cổng C (nửa cao) 1: vào
0: ra
D4 : Cổng A : 1 vào
0 ra
D5 , D6 : Chọn chế độ 0 0 : mode 0
0 1 : mode 1 --> mode của nhóm A
1 1 : mode 2
1 0 : mode 2
D7: Xác lập cổng 1: xác lập cổng port[A] := data out
0: xóa các bit data in := port[B]
Có 3 mode hoạt động:
+ mode 0: vào ra thông thường, số liệu từ CPU ra sẽ được chốt , tức là số liệu từ CPU ra sẽ được giữ lại trong 8255 cho đến khi nó chuyển mode số liệu vào không chốt (thay đổi theo giá trị tức thời của I/O )
+ mode 1 : dữ liệu chỉ được giữ lại ở 8255 một khoảng thời gian ngắn (cả vào và ra ); sau đó phải được Strobe (chốt )vào 1 chốt ngoài nếu cần lưu lại .
Cổng A, B : thường dùng để trao đổi số liệu
Cổng C thường dùng để điều khiển cho cổng A và B .
+ Mode 2 họat động 2 chiều (vào ra) chỉ được dùng cho cổng A. Còn cổng B mode 0 (vào) ; mode 1 (ra ). Cổng C làm tín hiệu điều khiển cho A và B
Ví dụ
1
0
0
1
0
0
0
0
picture
D7: mức 1 : chỉ ra rằng thanh ghi điều khiển đang được sử dụng ( được phép ghi lại )
D2 ,D5, D6, mức 0 : cho biết tất cả các cổng được sử dụng mode 0
D4 : mức 1 cổng A là cổng vào
D3D1 D0 mức 0 cổng B và C (cao và thấp ) đựơc dùng làm cổng ra -> biểu diễn trong hệ nhị phân (hexa) 90(h)
Câu lệnh : port[$303]:=90h ;
Sơ đồ chân của PPI 8255 : 40 chân
chân chức năng
34 – 27 D0 -D7: databus
4 – 1 PA0 – PA3 port A
40 -37 PA4 – PA7 port A
18 – 25 PB0 – PB7 port B
14 – 27 PC0 -PC3 port C lower
13 – 10 PC4 – PC7 port C upper
35 reset ser all port to input
6 CS Chip select
5 RD Read input
36 WR Write input
9,8 A0, A1 Port address select
26 Vcc + 5volt power in
7 GND 0 volt power in
2. Giao diện vào ra 24 bit trên slot PC sử dụng 8255
Đặc điểm : ghép nối 8255 vào slot PC rất đơn giản, không cần các khối logic phụ ; các tín hiệu được nối trực tiếp từ I/O -> 8255 -> slot
sơ đồ như hình bên
3. Ví dụ đoạn chương trình nguồn Assembly để sử dụng 8255
DATA SEGMENT
ORG 100H
CTRLR EQU 0FFFFH ; Control register address
INIT EQU 80H ; Control word
PA EQU 0FFF8H ; Port A Address
DATA 1 EQU AAH ; 1/ pattern
DATA END 3
CODE SEGMENT
ASSUME CS :CODE, DE : DATA
MOV AL,INIT ; LOAD CONTROL WORD
MOV DX,CTRLR ; LOAD CONTROL REGISTER ADDRESS
OUT DX,AL ; OUTPUT CONTROL WORD
MOV AL,DATA 1 ; LOAD 1/0 PATTERN
MOV DX,PA ; LOAD PORT A ADDRESS
OUT DX,AL ; OUTPUT DATA
CODE END S
END
giải thích : data segment : đoạn số liệu xác định các giá trị sẽ được dùng để khởi phát và điều khiển mạch 8255 A
0FFFH là địa chỉ bản đồ của thanh ghi điều khiển
0FFF8H là địa chỉ cổng A.
80H là dùng để khởi đầu cả các cổng với vai trò là cổng ra và họat động ở mode 0
(80H bằng 10000000)
dữ liệu được đưa ra là trị số AAH (10101010)
Đoạn mã bắt đầu bằng động tác chuyển trị số khởi đầu 80H vào thanh ghi DX; lệnh OUT đưa trị số khởi đầu vào DX là địa chỉ của thanh ghi điều khiển 8255; sau đó chuyển số liệu vào AL; địa chỉ cổng A vào DX -> các bit số liệu gửi cho cổng A; 8255 được khởi phát vào cổng A là cổng ra công tác ở mode 0.
§2. Chip PIT 8253 / 54
(đếm lập trình được)
(programable interval timer / counter) PIT8254
Vi mạch 8253 có ứng dụng rất nhiều như là bộ đếm xung, đếm tần số phát tín hiệu đồng hồ lập trình được, điều khiển ánh sáng, điều khiển môtơ .....
cấu tạo : có 3 bộ đếm lùi 16bit độc lập với nhau, có khả năng lập trình, nó có thể hoạt động trong chế độ đếm nhị phân hoặc đến BCD
Sơ đồ khối và sơ đồ chân
chân ký hiệu chức năng
24 Vcc +5Volt
12 Gnd
8-1 D0 D7 tín hiệu 2 chiều 3 trạng thái
22 RD đọc từ CPU vào 8253
23 WR đưa số liệu từ 8253 -> CPU
19 – 20 A0 , A1 chọn chế độ
21 CS chip select
9, 15,18 CLK0, CLK1, CLK2 : tín hiệu đồng hồ lối vào
10,13,17 OUT0, OUT1, OUT2 : các tín hiệu ra riêng biệt của 3 bộ đếm
11,14,16 gate 0, gate 1, gate 2 : cổng lối vào để mở các mạch đếm
A1
A0
chức năng
0
0
chọn bộ đếm 0
0
1
chọn bộ đếm 1
1
0
chọn bộ đếm 2
1
1
chọn thanh ghi từ điều khiển
Bảng chức năng theo các cửa vào điều khiển như sau :
A1 A0 RD WR CS
0 0 0 1 0 đọc ra từ bộ đếm 0
0 1 0 1 0 đọc ra từ bộ đếm 1
1 0 0 1 0 đọc ra từ bộ đếm 2
0 0 1 0 0 nạp vào bộ đếm 0 bằng từ xuất phát
0 1 1 0 0 nạp vào bộ đếm 1 bằng từ xuất phát
1 0 1 0 0 nạp vào bộ đếm 2 bằng từ xuất phát
1 1 1 0 0 ghi vào từ điều khiển
x x x x 1 bus data ở trạng thái ngắt (điện trở cao )
x x 1 1 0 bus data ở trạng thái điện trở cao
Từ điều khiển
D7
D6
D5
D4
D3
D2
D1
D0
chọn bộ đếm đọc / viết Mode loại mã
D0 0 : đếm nhị phân
1 : đếm BCD
D7
D6
D5
D4
0
0
chọn count 0
0
0
Khóa - chốt bộ đếm
0
1
chọn count 1
0
1
chỉ đọc , ghi byte thấp
1
0
chọn count 2
1
0
chỉ đọc, ghi byte cao
1
1
lệnh đọc lại
1
1
đọc ghi 16bit
D3 D2 D1 Chức năng đếm (mode counter)
D3 D2 D1
0 0 0 mode 0 Ngừng ở số đếm cuối cùng; lối ra ở mức cao khi kết thúc đếm
0 0 1 mode 1 đếm từng bộ đếm theo chương trình
x 1 0 mode 2 bộ chia 1/n (giá trị n đặt trước và có thể thay đổi được
x 1 1 mode 3 bộ phát tín hiệu vuông góc
1 0 0 mode 4 Strobe triger được bằng phần mềm
1 0 1 mode 5 Strobe triger bằng phần cứng
Ví dụ : port[$307]:= $B6 có nghĩa là chọn count 2 đọc viết cả byte thấp byte cao, mode 3, đếm nhị phân . ( B6=1011 0110 )
2. Một số ứng dụng của 8253
a. Bộ đếm xung 16 bit
Có thể chọn giá trị xuất phát là số xung lớn nhất (16bit -> 65535)
số xung = gía trị xuất phát – giá trị hiện có ở bộ đếm
(start x) - (stand x)
Lập trình để đếm 16 bit được tiến hành theo các bước:
Trước hết từ điều khiển phải được thiết lập ; giá trị xuất phát được ghi vào bộ đếm -> số liệu hiện có của bộ đếm sau đó tự đọc ra theo 16 bit
b. Bộ đếm xung 32 bit
có thể đếm đến 4.29 tỷ xung
c. Đồng hồ rơle lập trình được
start0.start1.(start2 – 1)
T = --------------------------------
fref
Start x : ghi giá trị xuất phát của bộ đếm x
d. bộ phát xung lập trình được
với 3 bộ đếm trong 8253 có thể tạo ra xung rất chính xác có độ rộng cỡ µs đến vài giờ .
sơ đồ như hình vẽ
bộ đếm 0 và bộ đếm 1 hoạt động như phát xung vuông góc với hệ số chia được đặt trước còn bộ đếm 2 như là mạch phát xung 1 trạng thái cân bằng (monoflop) lập trình được
Nguyên tắc hoạt động : sau khi khởi động start đến bộ đếm 2, tạo ở lối ra 2 tín hiệu âm và kéo dài n chu kỳ giữ nhịp. (n là giá trị xuất phát của bộ đếm 2)
Độ rộng xung
start0.start1.start2
T = -------------------------
fref
thí dụ : fref = 4MHz
start 0 start 1 start 2 T
2 2 10 10 µs
4 100 10000 1 s
4 600 60000 1 phút
( Tham khảo thêm )
§3. Chip ghép nối 8243
Đặc điểm
- Tăng nhiều lần các đường dẫn vào / ra
- Bus số liệu và bus điều khiển cùng chung chân ra và độ rộng chỉ là 4 bit và cộng thêm 1 đường điều khiển đặc biêt -> 8243 tổng cộng có 5 lối vào điều khiển
- Chỉ với 2 con chip 8243 có thể trao đổi 32 bit vào ra
Sơ đồ chân
- P20 đến P23 (cổng 2: 4 bit );
bus điều khiển và bus số liệu 2 chiều
tất cả các số liệu xuất hiện khi truy nhập lên 4 cổng vào ra (port 4, 5, 6 ,7 đều được dẫn trên các đường này )
P23 P22 lệnh P21 P20 port
0 0 đọc 0 0 port 4
0 1 ghi 0 1 port 5
1 0 ORLD 1 0 port 6
1 1 ANLD 1 1 port 7
( còn nữa )
Đoạn chương trình viết cho 8255A
1/ PORT[$303]:=$80;{Cổng B,lối ra,mode 0}
PORT[$301]:=$F4;{xxxx|x110}1Mhz nối với CLR0, out nối với CLR2
2/ C0, mode 3, 2byte nhị phân
PORT[$307]:=$36;{0011|X110}
PORT[$304]:=lo(1000);
PORT[$304]:=hi(1000);
3/ C2, mode 2, 2byt, nhị phân
PORT[$307]:=$B4;{1011|X100}
PORT[$306]:=lo(1000);
PORT[$306]:=hi(1000);
REPEAT GIAY:=0;PHUT:=0;GIO:=0;
4/ Kiểm tra xung 1Hz
* xuống 0:
repeat
begin
- lệnh đọc lại: port[$307]:=$E8; {1110|1000}
(đọc lại trạng thái)
until – (port[$306]and$80 )=0 thì không tiếp lên 1
* lệnh 1:
repeat
port[$307]:=$E8;
until (port[$306]and$80 )0 (hoặc = $80)
thì giay:=inc(giay);
if giay=60 then begin phut:=phut+1; giay:=0;
if phut=60 then begin gio:=gio+1; phut:=0;
if gio=24 then begin gio:=0;
end; end; end; writeln(gio,phut,giay);
until keypressed;
end.
N-(nội dung Cy) = N-(N-n)= n
Khóa port[$303]:=$80; {cổng B, mode 0, ra}
Port[$301]:=$FF; {C1 nối CLK1 với bên ngoài}
Port[$307]:=$70; {C1 mode 0} đọc viết 2 byte
C1 Port[$305]:=$FF; gán giá trị N cho C1
Port[$305]:=$FF; là FFFF
Repeat
Port[$307]:=$D4;{lếnh chốt chọn c1}
Đọc lại
Port[$307]:=$D4{Lệnh đọc lại,chon c1,chốt điểm}
Đọc số liệu lobyte:=Port[$305];
Hibyte:=Port[$305];
Writeln(‘số đếm= ’;$FFFF-(lobyte+hibyte*$100):5),
Until keypressed.
Vào-Ra
Use crt;
Const
a=$300;
b=$301:
c=$302;
crippi=$303;
var i:integer;
begin
clrscr;
port[a]:=7:
port[c]:=224;
repeat
port[a]:=port[a] shl 1;delay(400);write(‘port[a]=’,port[a];until port[a]=224;)
repeat until port[a]=224;{kiểm tra khi nào port[a]=224 mới bat đầu}
repeat
port[c]:=port[c] shr 1 delay(400);
writeln(port[c]);
until port[c]=3;
port[a]:=0;
port[c]:=0;
until key pressed;
end.
ĐẾM SỰ KIỆN
Uses crt;
Const
Crppi=$303;
b=$301;
crpit=$307;
c0=$304;
c1=$305;
c2=$306;
var x1,x2,x3,x,sx:word;
{-----------------------------}
function loade 1:Boolean;{chot tt bo dem 1}
begin
port[$307]:=$e4;
loade1:=port[c1] and $40=0);
end;
Begin
Clrscr;
Port[$307]=$70;{bo dem 1, doc/viet 2 byte,dem nhi phan}
Write(‘nhap so x= ’);readln(x);
Port[c1]:=lo(x);
Port[c1]:=hi(x);
Repeat
If not loade1 then
Begin
Gotoxy(1,10);writeln(‘’);
End
Else port[crpit]:=$64;
X1:=port [c];x2:=port[c1];
X3:=x1+x2*256;
Sx:=x-x3;
Gotoxy(1,10);writeln(sx:8);delay(10);
Until sx=x;
END.
Các file đính kèm theo tài liệu này:
- cac_chip_bo_tro.doc
- cac_chip_bo_tro.pdf