Các chip bổ trợ cho hệ thống mạch

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

 

doc13 trang | Chia sẻ: luyenbuizn | Lượt xem: 1317 | Lượt tải: 0download
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:

  • doccac_chip_bo_tro.doc
  • pdfcac_chip_bo_tro.pdf