Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
768 KB
Nội dung
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 ) PPI-8225 D0-D7 RD WR A1 A0 RESET group A Control Group B Control CS I/O PC7-PC4 Port C lower (4) read/write control logic I/O PA7-PA0 Port C upper (4) data bus buffer Port A (8) I/O PC3-PC0 Port B (8) I/O PB7-PB0 8bit Internal bus Lựa chọn cổng chọn A0, A1 sau : $300 $301 $302 Địa $cơ sở $cơ sở + $cơ sở + A1 0 A0 $303 $cơ sở + 1 Cổng A B C Kiểm soát ghi điều khiển 8255 có mạch đệm số liệu chiều : D0 -D7 ; tín hiệu điều khiển : ghi , đọc, reset ; CS ; -> điều khiển phần mềm Thanh ghi điều khiển 8255 : mức : cổng làm lối vào mức : cổng làm lối D7 D6 D5 D4 D3 D2 D1 D0 PORT C LOWER PORT B MODE SELECT OF GROUP B PORT C UPPER PORT A MODE SELECT OF GROUP A FLAG D0 : Cổng C (nửa thấp ) - 0: ; : vào D1 : Cổng B - : : vào D2 : chọn chế độ 1: mode 0: mode (mode nhóm B) D3 : cổng C (nửa cao) 1: vào 0: D4 : Cổng A : vào D5 , D6 : Chọn chế độ 0 : mode 0 : mode > mode nhóm A 1 : mode : mode D7: Xác lập cổng 1: xác lập cổng 0: xóa bit port[A] := data out data in := port[B] Có mode hoạt động: + mode 0: vào thông thường, số liệu từ CPU chốt , tức số liệu từ CPU giữ lại 8255 chuyển mode số liệu vào không chốt (thay đổi theo giá trị tức thời I/O ) + mode : liệu giữ lại 8255 khoảng thời gian ngắn (cả vào ); sau phải Strobe (chốt )vào chốt 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 B + Mode họat động chiều (vào ra) dùng cho cổng A Còn cổng B mode (vào) ; mode (ra ) Cổng C làm tín hiệu điều khiển cho A B Ví dụ 0 0 0 picture D7: mức : ghi điều khiển sử dụng ( phép ghi lại ) D2 ,D5, D6, mức : cho biết tất cổng sử dụng mode D4 : mức cổng A cổng vào D3D1 D0 mức cổng B C (cao thấp ) đựơc dùng làm cổng -> biểu diễn hệ nhị phân (hexa) 90(h) Câu lệnh : port[$303]:=90h ; Sơ đồ chân PPI 8255 : chân 34 – 27 4–1 40 -37 18 – 25 14 – 27 13 – 10 35 36 9,8 26 chức D0 -D7: PA0 – PA3 PA4 – PA7 PB0 – PB7 PC0 -PC3 PC4 – PC7 reset CS RD WR A0, A1 Vcc GND 40 chân databus port A port A port B port C lower port C upper ser all port to input Chip select Read input Write input Port address select + 5volt power in volt power in 40 20 21 Giao diện vào 24 bit slot PC sử dụng 8255 Đặc điểm : ghép nối 8255 vào slot PC đơn giản, khơng cần khối logic phụ ; tín hiệu nối trực tiếp từ I/O -> 8255 -> slot sơ đồ hình bên 74HC425 D0 D1 D2 D3 D4 D5 D6 D7 8255 A1 A2 A3 A4 A5 A6 A7 A8 B1 B2 B3 B4 B5 B6 B7 B8 18 17 16 15 14 13 12 11 DIR G 19 D0 D1 D2 D3 D4 D5 D6 D7 PORT A PORT B A0 A1 FOR FOW RESET A0 A1 RD WR RESET CS PORT C 74HC688 AEN A2 A3 A4 A5 A6 A7 A8 A9 11 13 15 17 G P0 P1 P2 P3 P4 P5 P6 P7 19 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 P=R 12 14 16 18 10K + 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 EQU AAH ; 1/ pattern DATA END 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 ; MOV DX,PA ; OUT DX,AL CODE END S END LOAD 1/0 PATTERN LOAD PORT A ADDRESS ; OUTPUT DATA giải thích : data segment : đoạn số liệu xác định giá trị dùng để khởi phát điều khiển mạch 8255 A 0FFFH địa đồ ghi điều khiển 0FFF8H địa cổng A 80H dùng để khởi đầu cổng với vai trò cổng họat động mode (80H 10000000) liệu đưa trị số AAH (10101010) Đoạn mã bắt đầu động tác chuyển trị số khởi đầu 80H vào ghi DX; lệnh OUT đưa trị số khởi đầu vào DX địa ghi điều khiển 8255; sau chuyển số liệu vào AL; địa cổng A vào DX -> bit số liệu gửi cho cổng A; 8255 khởi phát vào cổng A cổng cơng tác mode §2 Chip PIT 8253 / 54 (đếm lập trình được) (programable interval timer / counter) PIT8254 Vi mạch 8253 có ứng dụng nhiều đế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ó đếm lùi 16bit độc lập với nhau, có khả lập trình, hoạt động chế độ đếm nhị phân đến BCD Sơ đồ khối sơ đồ chân DATA BUS BUFFER D0 - D7 READ/ WRITE LOGIC CONTROL WORD REGISTER DATA RD WR A0 A1 I N T E R N A L B U S CS COUNTER CLK GATE OUT COUNTER CLK GATE OUT COUNTER chân ký hiệu chức 24 Vcc +5Volt 12 Gnd 8-1 D0 D7 tín hiệu chiều 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 : tín hiệu riêng biệt đếm 11,14,16 gate 0, gate 1, gate : cổng lối vào để mở mạch đếm A1 0 1 A0 1 chức chọn đếm chọn đếm chọn đếm chọn ghi từ điều khiển Bảng chức theo cửa vào điều khiển sau : CLK GATE OUT 24 12 13 A1 0 0 1 x x A0 0 1 x x RD 0 1 1 x Từ điều khiển D7 D6 WR 1 0 0 x CS 0 0 0 D5 đọc từ đếm đọc từ đếm đọc từ đếm nạp vào đếm từ xuất phát nạp vào đếm từ xuất phát nạp vào đếm từ xuất phát ghi vào từ điều khiển bus data trạng thái ngắt (điện trở cao ) bus data trạng thái điện trở cao D4 chọn đếm D0 D7 0 1 D6 1 D3 D2 đọc / viết D1 Mode D0 loại mã : đếm nhị phân : đếm BCD chọn count chọn count chọn count lệnh đọc lại D5 0 1 D4 1 Khóa - chốt đếm đọc , ghi byte thấp đọc, ghi byte cao đọc ghi 16bit D3 D2 D1 Chức đếm (mode counter) D3 D2 D1 mode 0 x 1 mode mode x 1 0 1 mode mode mode Ngừng số đếm cuối cùng; lối mức cao kết thúc đếm đếm đếm theo chương trình chia 1/n (giá trị n đặt trước thay đổi phát tín hiệu vng góc Strobe triger phần mềm Strobe triger phần cứng Ví dụ : port[$307]:= $B6 có nghĩa chọn count đọc viết byte thấp byte cao, mode 3, đếm nhị phân ( B6=1011 0110 ) Một số ứng dụng 8253 a Bộ đếm xung 16 bit BỘ ĐẾM MODE CLOCK GATE OUT Có thể chọn giá trị xuất phát số xung lớn (16bit -> 65535) số xung = gía trị xuất phát – giá trị có đếm (start x) (stand x) Lập trình để đếm 16 bit tiến hành theo bước: Trước hết từ điều khiển phải thiết lập ; giá trị xuất phát ghi vào đếm -> số liệu có đếm sau tự đọc theo 16 bit b Bộ đếm xung 32 bit MODE CLOCK out GATE đếm đến 4.29 tỷ xung & MODE CLOCK GATE out start c Đồng hồ rơle lập trình fREF 4MHz MODE CLOCK out GATE MODE CLOCK out1 GATE & MODE CLOCK GATE 100PF start T = start0.start1.(start2 – 1) 10K out & & & T fref Start x : ghi giá trị xuất phát đếm x d phát xung lập trình với đếm 8253 tạo xung xác có độ rộng cỡ µs đến vài sơ đồ hình vẽ fREF COUNTER MODE CLOCK0 out GATE COUNTER MODE CLOCK out GATE COUNTER MODE CLOCK out GATE T start đếm đếm hoạt động phát xung vng góc với hệ số chia đặt trước đếm mạch phát xung trạng thái cân (monoflop) lập trình Nguyên tắc hoạt động : sau khởi động start đến đếm 2, tạo lối tín hiệu âm kéo dài n chu kỳ giữ nhịp (n giá trị xuất phát đếm 2) Độ rộng xung start0.start1.start2 T = fref thí dụ : fref = 4MHz start 4 start 100 600 start T 10 10 µs 10000 1s 60000 phút ( Tham khảo thêm ) §3 Chip ghép nối 8243 Đặc điểm - Tăng nhiều lần đường dẫn vào / - Bus số liệu bus điều khiển chung chân độ rộng bit cộng thêm đường điều khiển đặc biêt -> 8243 tổng cộng có lối vào điều khiển - Chỉ với chip 8243 trao đổi 32 bit vào Sơ đồ chân - P20 đến P23 (cổng 2: bit ); bus điều khiển bus số liệu chiều tất số liệu xuất truy nhập lên cổng vào (port 4, 5, ,7 dẫn đường ) P23 0 1 P22 1 lệnh đọc ghi ORLD ANLD P21 0 1 P20 1 port port port port port P50 P40 P41 P42 P43 /CS PROG P23 P22 P21 P20 GND 10 11 12 24 23 22 21 20 19 18 17 16 15 14 13 ( ) Đ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); +5V P51 P52 P53 P60 P61 P62 P63 P73 P72 P71 P70 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 * 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} C1 Port[$307]:=$70; {C1 mode 0} đọc viết byte 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 nào port[a]=224 mới bat đầu} repeat port[c]:=port[c] shr 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 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 ... A1 Vcc GND 40 chân databus port A port A port B port C lower port C upper ser all port to input Chip select Read input Write input Port address select + 5volt power in volt power in 40 20 21 Giao... địa cổng A vào DX -> bit số liệu gửi cho cổng A; 8255 khởi phát vào cổng A cổng công tác mode §2 Chip PIT 8253 / 54 (đếm lập trình được) (programable interval timer / counter) PIT8254 Vi mạch 8253... 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 : tín