ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÁO CÁO MÔ PHỎNG GHÉP NỐI ARDUINO VỚI PPI8255, PIT8253/54 Nhóm: Thành viên: Tạ Minh Đức - 19021435 Bùi Ngọc Minh - 19021488 Giảng viên: Phạm Duy Hưng Lớp tín chỉ: ELT3104_20 I Mơ ghép nối arduino với PPI8255 Tổng quan PPI8255 PPI 8255 vi mạch ghép nối ngoại vi lập trình được, thường gọi mạch ghép nối vào song song Trong thực tế, mạch ghép nối sử dụng phổ biến hệ vi xử lý bit, 16 bit 32 bit Hình 1.1 Sơ đồ chân PPI8255 Hình 1.1 miêu tả sơ đồ chân PPI8255 Vi mạch gồm 40 chân Trong đó, có 24 lối xếp thành cổng song song (Port A, Port B, Port C) Một nửa Port C (PC4 → PC7) thuộc nhóm A, gọi PC H, nửa thược nhóm B, gọi PC L Chân CS "Chip Select", cho phép giao tiếp 8255A CPU đặt mức thấp Chân RD đặt mức thấp cho phép 8255A gửi liệu thông tin trạng thái tới CPU đường bus liệu (Các chân D0→D7) Thực chất, chân cho phép CPU đọc thông tin từ 8255A Chân WR đặt mức thấp cho phép CPU viết liệu tới 8255A Chân A0, A1 chọn ghi bên 8255: để ghi từ điều khiển (CWR - Control Word Register) cho hoạt động 8255 ghi khác ứng với Port PA, PB, PC để đọc ghi liệu với chế độ hình 1.2 Hình 1.2 Các thao tác với PP8255 Mô ghép nối arduino với PPI8255 Proteus 2.1 Mơ Proteus Hình 1.3 Mơ Proteus Ta sử dụng Arduino UNO R3 để điều khiển PPI8255 hình 1.3 Chân RESET CS để vi mạch hoạt động giao tiếp với CPU Các đường bus liệu D0 →D7 nối với chân 0→7 Arduino Chân WR RD vi mạch nối với chân 11 12 Arduino Chân tín hiệu điều khiển A0, A1 nối với chân 9,10 Arduino Ta sử dụng Port A làm lối khảo sát, tín hiệu lối nối với đèn LED 2.2 Code Arduino Đầu tiên, ta định nghĩa chân điều khiển trình bày phần 2.1 Sau đó, ta thực chọn chế độ vào/ra (OUTPUT/INPUT) cho chân hàm setup() void setup() { pinMode(0,OUTPUT);pinMode(1,OUTPUT); pinMode(2,OUTPUT);pinMode(3,OUTPUT); pinMode(4,OUTPUT);pinMode(5,OUTPUT); pinMode(6,OUTPUT);pinMode(7,OUTPUT); pinMode(a0,OUTPUT);pinMode(a1,OUTPUT); pinMode(WR,OUTPUT);pinMode(RD,OUTPUT); } Sau chọn ghi điều khiển 8255A đặt Port vi mạch trạng thái OUTPUT, ta chọn Port để ghi liệu Đầu tiên, ta cần vơ hiệu hố chân WR , sau đặt chân A0 A1 mức tín hiệu (LOW) để lựa chọn Port A làm lối theo bảng hình 1.2 Sau đó, ta đặt tất lối mức tín hiệu (HIGH) kích hoạt chân WR để ghi liệu tới lối digitalWrite(a0,1); //Selecting Control Register of 8255 digitalWrite(a1,1); //Selecting Control Register of 8255 digitalWrite(7,1); // digitalWrite(6,0); // digitalWrite(5,0); // digitalWrite(4,0); // 8255 All Ports as OUTPUT digitalWrite(3,0); // digitalWrite(2,0); // digitalWrite(1,0); // digitalWrite(0,0); // digitalWrite(WR,0); //Enabling WRITE Sau LED sáng 500ms, ta lại đặt lối mức tín hiệu (LOW) Điều khiến cho LED sáng lên lúc 500ms tắt delay(500); digitalWrite(WR,1); //Disabling WRITE digitalWrite(a0,0); //Port A is selected digitalWrite(a1,0); //Port A is selected digitalWrite(0,1); // digitalWrite(1,1); // digitalWrite(2,1); // digitalWrite(3,1); // digitalWrite(4,1); //Port-A all pins high digitalWrite(5,1); // digitalWrite(6,1); // digitalWrite(7,1); // digitalWrite(WR,0); //WRITE ENABLED Sau 1s, ta cho đèn từ LED đến LED sáng cách sử dụng vòng for, LED sáng 200ms delay(1000); digitalWrite(WR,1); //Deselecting WRITE for(int i=7;i>=0;i ){ digitalWrite(WR,1); digitalWrite(i,1); digitalWrite(WR,0); delay(200); } II Mô ghép nối arduino với PIT8253 Tổng quan PIT8523 PIT8253/54 vi mạch định thời lập trình để thực chức định thời đếm, sử dụng ghi 16-bit Vi mạch bao gồm đếm lùi 16-bit, đặt trước giá trị đếm ban đầu Dải tần hoạt động vi mạch từ 10MHz (đối với 8254) 2,6MHz (đối với 8253) Có thể đếm nhị phân đếm BCD Có chế độ hoạt động khác Vi mạch 8254 cịn có lệnh READ BACK cho phép người dùng kiểm tra giá trị đếm, chế độ lập trình, trạng thái đếm Hình 2.1 Sơ đồ chân PIT8523 Hình 2.1 miêu tả chân vi mạch PIT8253/54 Về bản, chân lối vào vi mạch có chức gần giống vi mạch PPI8255 Ta dùng chân A0, A1 để điều khiển chức đọc/ghi cổng logic hình 2.2 Hình 2.2 Cổng logic đọc/ghi Mơ ghép nối arduino với PIT8253 Proteus Hình 2.3 Mơ Proteus Ta thực mô ghép nối Proteus hình 2.3 Ta lập trình Counter đếm 101 xung, 100 xuống Đầu tiên, ta khởi tạo giá trị ban đầu cho Counter 100, chọn chế độ đếm BCD chế độ hoạt động Ta cho đầu vào CLK xung clock có tần số 10Hz, Gate = Bộ Counter đếm 101 xung cho đầu OUT điện HIGH sau đếm xong Để thực vậy, ta ngắt hoạt động cách cho chân Read Write có giá trị Sau đó, thực viết câu lệnh thiết lập ghi ghi hoạt động chế độ 0, viết byte thấp, định dạng đếm nhị phân cách thiết lập cho bus đệm liệu 10010000 Sau đó, ta nạp lệnh vào cách cho A0 = 1, A1 = WRITE = Tiếp đó, ta ngắt lệnh cách cho WRITE = Sau thiết lập giá trị ban đầu vào bus đệm liệu 100 (100 = 01100100 hệ nhị phân) Cuối cùng, thực nạp lệnh vào cách cho A0 = 0, A1 = WRITE = Kết sau chạy mô khoảng 10 giây, đèn LED sáng không tắt, ý định ban đầu PHỤ LỤC Code ghép nối arduino với PPI8255 const int a0=9; const int a1=10; const int WR=11; const int RD=12; void setup() { pinMode(0,OUTPUT);pinMode(1,OUTPUT); pinMode(2,OUTPUT);pinMode(3,OUTPUT); pinMode(4,OUTPUT);pinMode(5,OUTPUT); pinMode(6,OUTPUT);pinMode(7,OUTPUT); pinMode(a0,OUTPUT);pinMode(a1,OUTPUT); pinMode(WR,OUTPUT);pinMode(RD,OUTPUT); } void loop(){ digitalWrite(RD,1); //Disabling READ digitalWrite(WR,1); //Disabling WRITE digitalWrite(a0,1); //Selecting Control Register of 8255 digitalWrite(a1,1); //Selecting Control Register of 8255 digitalWrite(7,1); // digitalWrite(6,0); // digitalWrite(5,0); // digitalWrite(4,0); // 8255 All Ports as OUTPUT digitalWrite(3,0); // digitalWrite(2,0); // digitalWrite(1,0); // digitalWrite(0,0); // digitalWrite(WR,0); //Enabling WRITE delay(500); digitalWrite(WR,1); //Disabling WRITE digitalWrite(a0,0); //Port A is selected digitalWrite(a1,0); //Port A is selected digitalWrite(0,1); // digitalWrite(1,1); // digitalWrite(2,1); // digitalWrite(3,1); // digitalWrite(4,1); //Port-A all pins high digitalWrite(5,1); // digitalWrite(6,1); // digitalWrite(7,1); // digitalWrite(WR,0); //WRITE ENABLED delay(500); digitalWrite(WR,1); //WRITE Disabled digitalWrite(0,0); // digitalWrite(1,0); // digitalWrite(2,0); // digitalWrite(3,0); // digitalWrite(4,0); //Port-A all pins LOW digitalWrite(5,0); // digitalWrite(6,0); // digitalWrite(7,0); // digitalWrite(WR,0); //WRITE Enabled delay(1000); digitalWrite(WR,1); //Deselecting WRITE for(int i=7;i>=0;i ){ digitalWrite(WR,1); digitalWrite(i,1); digitalWrite(WR,0); delay(200); } } Code ghép nối arduino với PIT5234/54 const int a0 = 8; const int a1 = 9; const int WR = 11; const int RD = 10; void setup() { pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(a0, OUTPUT); pinMode(a1, OUTPUT); pinMode(WR, OUTPUT); pinMode(RD, OUTPUT); digitalWrite(RD, 1); digitalWrite(WR, 1); //INSTRUCTION = MODE 0, Counter 2, Decrement digitalWrite(7, 1); // INSTRUCTTION digitalWrite(6, 0); // digitalWrite(5, 0); // digitalWrite(4, 1); // digitalWrite(3, 0); // digitalWrite(2, 0); // digitalWrite(1, 0); // digitalWrite(0, 0); // delay(10); digitalWrite(a0, 1); //Select Control Register digitalWrite(a1, 1); digitalWrite(WR, 0); //Disabling WRITE delay(100); //INSTRUCTION = Initialize 100 (in decimal); digitalWrite(WR, 1); digitalWrite(7, 0); // INSTRUCTION digitalWrite(6, 1); // digitalWrite(5, 1); // digitalWrite(4, 0); // digitalWrite(3, 0); // digitalWrite(2, 1); // digitalWrite(1, 0); // digitalWrite(0, 0); delay(10); digitalWrite(a0, 0); //Select Counter digitalWrite(a1, 1); digitalWrite(WR, 0); //Disabling WRITE delay(100); digitalWrite(WR, 1); //Deselecting WRITE } void loop() { } ...I Mô ghép nối arduino với PPI8255 Tổng quan PPI8255 PPI 8255 vi mạch ghép nối ngoại vi lập trình được, thường gọi mạch ghép nối vào song song Trong thực tế, mạch ghép nối sử dụng phổ... khác ứng với Port PA, PB, PC để đọc ghi liệu với chế độ hình 1.2 Hình 1.2 Các thao tác với PP8255 Mô ghép nối arduino với PPI8255 Proteus 2.1 Mô Proteus Hình 1.3 Mơ Proteus Ta sử dụng Arduino. .. hoạt động giao tiếp với CPU Các đường bus liệu D0 →D7 nối với chân 0→7 Arduino Chân WR RD vi mạch nối với chân 11 12 Arduino Chân tín hiệu điều khiển A0, A1 nối với chân 9,10 Arduino Ta sử dụng