Báo Cáo Bài Tập Lớn Môn Vxl Thiết Kế Mạch Điện Tử Sử Dụng Vi Xử Lý 8051 Và Một Vi Mạch 74’138.Pdf

23 0 0
Báo Cáo Bài Tập Lớn Môn Vxl Thiết Kế Mạch Điện Tử Sử Dụng Vi Xử Lý 8051 Và Một Vi Mạch 74’138.Pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

lOMoARcPSD|38590726 BÁO CÁO BÀI TẬP LỚN MÔN VXL LỚP L16 – NHÓM 10 – ĐỀ TÀI 7 Họ tên – MSSV:  Hoàng Văn Huy 2013288  Lê Trung Hiếu 2013143  Phạm Đăng Bảo 2012674 BẢNG PHÂN CHIA CÔNG VIỆC CỦA CÁC THÀNH VIÊN TRONG NHÓM STT MSSV Họ và Tên Công việc thực hiện Ghi chú 1 2013288 Hoàng Văn Huy 2 2013143 Lê Trung Hiếu Viết thuật toán cho chương trình+Code 100% 3 2012674 Phạm Đăng Bảo chính 100% Giãi mã địa chỉ,Thiết kế phần cứng, dò và 100% điều chỉnh lại code để hoàn thành BTL Giãi mã địa chỉ, Thiết kế phần cứng Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 1 ĐỀ TÀI [SỐ THỨ TỰ CỦA ĐỀ TÀI] Thiết kế mạch điện tử sử dụng vi xử lý 8051 và một vi mạch 74’138 cùng các cổng logic, vi mạch cần thiết khác để điều khiển 10 đèn LED và giao tiếp với 10 nút nhấn được cho tại địa chỉ sau Địa chỉ truy suất Ngoại vi giao tiếp 0000H – 23FFH Giao tiếp với 5 LED đầu tiên, được đặt tên là LED0 đến LED4 2400H – 45FFH Giao tiếp với 5 nút nhấn đầu tiên, được đặt tên là SW0 đến SW4 4600H – 77FFH Giao tiếp với 5 LED còn lại, được đặt tên là LED5 đến LED9 7800H – AFFFH Giao tiếp với 5 nút nhấn còn lại, được đặt tên là SW5 đến SW9 1.1 Yêu cầu khi làm trên Proteus: Vẽ mô phỏng trên Proteus, lập trình cho 8051 thực hiện chương trình đọc trạng thái của các nút nhấn và bật tắt các đèn LED tương ứng (tương ứng là nút nhấn với LED có số giống nhau) Nút nhấn khi nhấn vào sẽ bật đèn, nhấn vào lần nữa sẽ tắt đèn Nếu không có lệnh tắt đèn trong vòng 10 giây thì sau 10 giây đèn sẽ tự động tắt Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 2 THIẾT KẾ MÔ PHỎNG TRÊN PROTEUS 2.1 Sơ đồ khối tổng quan 2.1.1 Sơ đồ khối tổng quan Giải thích các khối: - 8051: Vi xử lý trung tâm - 74HC573: để chốt tín hiệu ra các led hoặc chốt dữ liệu nhận từ nút nhấn khi đúng địa chỉ của nó - 74HC138: để giải mã địa chỉ 2.2 Sơ đồ khối chi tiết của từng phần 2.2.1 Phần 8051 Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 Chân (Pin) Kiểu chân Chức năng Port 0 Inout (Theo sơ đồ mũi tên đi 2 đầu) Đưa data về Port 0 khi có tín hiệu chọn chip Port 2 /CS1, /CS3 Output (theo sơ đồ mũi Xuất data ra Led khi có tín hiệu chọn tên chỉ đi qua EPROM) chip /CS0, /CS2 OUTPUT Xuất ra tín hiệu giải mã địa chỉ để chọn vùng địa chỉ cần truy xuất Xuất tín hiệu cho phép ra các Led OUTPUT Xuất tín hiệu cho phép khi nhận dữ liệu từ các Switch 2.2.2 Chống rung nút nhấn - Vì nút nhấn thường có hiện tượng rung phím Do phần cứng phản xạ cực nhanh với các tiếp xúc,nên khi trong quá trình nhấn nút như trên thì phần cứng nó Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 hiểu rằng bạn nhấn công tắc nhiều lần nên ta dùng tụ 1nF để khắc phục hiện tượng trên 2.2.3 74HC573 2.2.2.1: 74HC573(1) Chân (Pin) Kiểu chân Chức năng D0 – D7 Input Q0 – Q4 Output Nhận dữ liệu từ 8051 LE Input Xuất tín hiệu 2.2.2.2: 74HC573(2) ra Led Ngõ vào cho phép khi vùng nhớ được chọn tương ứng và có tín hiệu ghi về Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 Chân (Pin) Kiểu chân Chức năng D0 – D4 Input Q0 – Q7 Output Nhận dữ liệu từ SW LE Input Xuất dữ liệu từ các Switch về 8051 Ngõ vào cho phép khi vùng nhớ được chọn tương ứng và có tín hiệu ghi về 2.2.4 Trình bày các bước thiết kế mạch giải mã địa chỉ Bảng phân vùng địa chỉ : CBA 0000H A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 23FFH 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 /CS0 2400H 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 (9KB) 45FFH 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 /CS1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1 (8,5KB) 4600H 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 /CS2 77FFH 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 (12KB) 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 /CS3 7800H 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 (14KB) AFFFH Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 Từ bảng phân vùng trên, ta thấy CS0, CS1,CS2 thì A15 đều = 0 , chỉ có CS3 có phân vùng chứa A15=1 nên ta chọn A15 làm ngõ vào chân E2 và E3 cho thuận tiện, chân E1 cho tích cực cao , 3 ngõ vào C B A của IC 74LS138 là A14,A13,A12 Để thuận tiện cho việc thiết kế mạch giải mã địa chỉ một cách đơn giản, ta lập bảng phân chia nhỏ phân vùng của các /CS phụ thuộc vào các ngõ ra của IC 74LS138 như sau: Dựa vào bảng trên , ta tiến hành thiết kế các /CS như sau: -Để có thể tách vùng địa chỉ ta dùng cổng OR cho tín hiệu tích cực thấp -Để có thể gộp vùng địa chỉ ta dùng cổng AND cho tín hiệu tích cực thấp  Thiết kế /CS0: Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 Vùng địa chỉ /CS0 bao gồm 2 phân vùng gộp lại gồm:  Từ 0000H - 1FFFH : phân vùng này bao gồm 2 vùng /Y0 và /Y1 gộp lại =>  Từ 2000H – 23FFH : phân vùng này được tách ra từ vùng /Y2 với điều kiện A10 và A11 đều tích cực thấp => => /CS0 = (  Thiết kế /CS1 Vùng địa chỉ /CS1 bao gồm 3 phân vùng gộp lại gồm:  Từ 2400H-2FFFH : phân vùng này tách ra từ vùng /Y2 với điều kiện 1 trong 2 địa chỉ A10 và A11 bằng 1 =>  Từ 3000H-3FFFH: đây là vùng /Y3  Từ 4000H-45FFH: phân vùng này tách ra từ vùng /Y4 với điều kiện A11=0 và A9.A10 = 0 => => /CS1 = ( ) ( )  Thiết kế /CS2 Vùng địa chỉ này bao gồm 4 phân vùng gộp lại gồm:  Từ 4600H – 4FFFFH :đây là phân vùng còn lại của /Y4 sau khi dùng cho vùng CS1 => Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726  Từ 5000H – 5FFFH : đây là phân vùng của toàn bộ /Y5  Từ 6000H -6FFFFH :đây là phân vùng của toàn bộ /Y6  Từ 7000H – 77FFH : đây là phần vùng của /Y7 với điều kiện A11 tích cực thấp => => /CS2 = ( ) .(  Thiết kế /CS3 Vùng địa chỉ này bao gồm 4 phân vùng gộp lại gồm:  Từ 7800H – 7FFFH:đây là phân vùng của /Y7 với điều kiện A11 tích cực cao =>  Với 3 phân vùng còn lại, ta để ý A15 tích cực cao và A12,A13 chỉ có 3 trạng thái 00,01,10 => + A13.A12 Hoặc nếu xét riêng 3 phân vùng này, ta sẽ thấy ở mỗi phân vùng sẽ là phân vùng của /Y0,/Y1,/Y2 với A15 tích cực cao => /CS3 = ().( + A13.A12) Hoặc /CS3 = () Mạch giải mã địa tổng hợp chỉ trên proteus: Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 3 ASSEMBLY CODE FOR 8051 3.1 Sơ đồ giải thuật chương trình chính Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 Sau khi Reset (là mới nạp lại code, chạy từ đầu), chương trình chạy qua phần Setup - là bước cấu hình cho các đèn tắt , khai báo ngắt Timer 1 , chọn ô nhớ có địa chỉ 41H và 42H để lưu trạng thái hoạt động của các LED 0- 9 Với 5 bit thấp của ô nhớ 41H dùng để lưu trạng thái hoạt động của các LED 0-4, 5 bit thấp của ô nhớ 42H dùng để lưu trạng thái hoạt động của các LED 5-9 + Quy tắc : bit 0 là trạng thái LED tắt , bit 1 là trạng thái LED bật - Sau đó chương trình vào vòng lập vô tận, trong vòng lập này làm nhiệm vụ: + Thực hiện đọc tín hiệu từ các SW về vi xử lí bằng 2 dòng lệnh : MOV DPTR, #S1ADR ( S1ADR là địa chỉ giao tiếp ngoại vi với SW) MOVX A,@DPTR Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 + Dùng Port P1 để lưu tín hiệu từ các SW , sau đó kiểm tra lần lượt các SW nào được nhấn Dùng ô nhớ 40H ( biến mặt nạ ) để đánh dấu SW nào được tác động, bit tương ứng của ô nhớ 40H với SW sẽ được SETB lên 1 + Khi nhận thấy có SW được tác động, ta sẽ chuyển đến phần xử lí tín hiệu bằng các dòng lệnh MOV A,40H ; cho A = MASK XRL A,41H ; tiến hành XOR với MASK MOV 41H,A ; cập nhật lại trạng thái mới của các LED Bit mask BIT trạng thái Bit trạng thái mới 0 0 0 0 1 1 1 0 1 1 1 0 + Khi cho A XOR với MASK , những LED có SW tương ứng không bị tác động sẽ giữ nguyên, những LED có SW tương ứng bị tác động sẽ bị đảo trạng thái + Sau đó, chương trình sẽ cập nhật trạng thái mới cho các đèn LED Vì các đèn LED là loại Anot chung nên trước khi gửi tín hiệu ta sẽ đảo Bit để đèn sáng chính xác bằng câu lệnh : CPL A MOV DPTR,#L1ADR ; ( #L1ADR là địa chỉ giao tiếp ngoại vi với LED 0-4 ) MOVX @DPTR,A + Khi cập nhật tín hiệu xong chương trình lại thực hiện vòng tuần hoàn của mình Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 3.2 Sơ đồ giải thuật các chương trình ngắt (nếu có) - Sau khi nhận được tín hiệu cờ báo tràn TF1 = 1, chương trình sẽ chuyển đến phần ngắt, ta tiến hành cấu hình lại cho Timer 1 với thời gian delay là 50ms - Tiến hành kiểm tra trạng thái của các đèn LED Dùng các ô nhớ từ 21H đến 2AH làm biến để đếm số lần sáng của LED ( 1 lần tương ứng khoảng 50ms ) - Đèn có bit tương ứng có giá trị bằng 1 ( tức đang được bật ) sẽ được tăng biến đếm lên 1 Đèn có bit tương ứng có giá trị bằng 0 ( tức đã tắt ) sẽ bị xóa về 0 Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 - Sau đó chương trình kiểm tra các biến đếm nào đạt giá trị khoảng 200 lần ( tức khoảng thời gian đèn sáng 10s, vì lí do sai số nên ta chỉ chọn giá trị gần bằng 200 lần ) thì chương trình sẽ nhảy đến phần xử lí dữ liệu để tiến hành tắt LED tương ứng - Sau khi kết thúc chương trình phục vụ ngắt sẽ quay về chương trình chính đang thực hiện trước đó để tiếp tục thực hiện công việc của mình Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 4 Phụ lục 4.1 Bản thiết kế mạch điện trên Proteus BTL_VXL_L17_NHOM1 0_CD7.pdsprj 4.2 Code chương trình theo yêu cầu L1ADR EQU 0050H S1ADR EQU 2402H L2ADR EQU 4600H S2ADR EQU 7800H ORG 0000H JMP INIT ORG 001BH JMP ISR_T1 Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 ORG 2000H INIT: ; khởi tạo các giá trị ban đầu MOV 41H,#0 ; ô nhớ 41H để đánh dấu trạng thái bật tắt của led 0-4 MOV 42H,#0 ; ô nhớ 42H để đánh dấu trạng thái bật tắt của led 5-9 MOV A,#0FFH MOV DPTR,#L1ADR ; điều chỉnh ban đầu tất cả các đèn 0-4 đều tắt MOVX @DPTR,A MOV DPTR,#L2ADR MOVX @DPTR,A ; điều chỉnh ban đầu tất cả các đèn 5-9 đều tắt MOV TMOD,#10H ; khai báo ngắt timer1 SETB EA SETB ET1 SETB TF1 START: ; chương trình chính MOV 40H,#0 ; biến MASK MOV DPTR, #S1ADR MOVX A,@DPTR ; cập nhật trạng thái các nút nhấn lưu vào thanh ghi A MOV P1,A ; cho P1= A MOV A,#0 JB P1.0,NEXT1 ; xét Sw0 có được nhấn hay không , nếu = 1 tức không được nhấn, nhảy đến xét Sw kế tiếp MOV 40H,#01H ; nếu được nhấn thì cho MASH = 01H LOOP0: ; Vòng lặp kiểm tra liên tục xem SW0 được nhả hay chưa MOVX A,@DPTR MOV P1,A JNB P1.0,LOOP0 JMP ON1 ; khi được nhả rồi thì nhảy đến bước truyền tín hiệu để bật LED0 NEXT1: ; tương tự như SW0 JB P1.1,NEXT2 MOV 40H,#02H LOOP1: MOVX A,@DPTR MOV P1,A JNB P1.1,LOOP1 JMP ON1 NEXT2: JB P1.2,NEXT3 MOV 40H,#04H LOOP2: MOVX A,@DPTR Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 MOV P1,A JNB P1.2,LOOP2 JMP ON1 NEXT3: JB P1.3,NEXT4 MOV 40H,#08H LOOP3: MOVX A,@DPTR MOV P1,A JNB P1.3,LOOP3 JMP ON1 NEXT4: JB P1.4,NEXT5 MOV 40H,#00010000B LOOP4: MOVX A,@DPTR MOV P1,A JNB P1.4,LOOP4 JMP ON1 ON1: ; Bước truyền tín hiệu cho các LED 0-4 MOV A,40H ; Cho A = MASK XRL A,41H ; Cho ( MASK) XOR ( TRẠNG THÁI CÁC LED) Khi XOR với MASK thì các bit trạng thái của LED XOR với 0 thì sẽ giữ nguyên trạng thái, XOR với 1 thì bị đảo bit Nên đèn đang bật bị tác động sẽ tắt và ngược lại Các đèn không tác động thì giữ nguyên trạng thái MOV 41H,A ; lưu lại giá trị trạng thái vừa cập nhật vào ô nhớ 41H CPL A ; Vì các led là anot chung nên phải đảo bit các trạng thái MOV DPTR,#L1ADR ; cập nhật tín hiệu cho các LED 0 -4 MOVX @DPTR,A NEXT5: MOV DPTR, #S2ADR ; Tương tự như các LED 0-4 MOVX A,@DPTR MOV P1,A MOV A,#0 JB P1.0,NEXT6 MOV 40H,#01H LOOP5: MOVX A,@DPTR Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 MOV P1,A JNB P1.0,LOOP5 JMP ON2 NEXT6: JB P1.1,NEXT7 MOV 40H,#02H LOOP6: MOVX A,@DPTR MOV P1,A JNB P1.1,LOOP6 JMP ON2 NEXT7: JB P1.2,NEXT8 MOV 40H,#04H LOOP7: MOVX A,@DPTR MOV P1,A JNB P1.2,LOOP7 JMP ON2 NEXT8: JB P1.3,NEXT9 MOV 40H,#08H LOOP8: MOVX A,@DPTR MOV P1,A JNB P1.3,LOOP8 JMP ON2 NEXT9: JB P1.4,NEXT10 MOV 40H,#00010000B LOOP9: MOVX A,@DPTR MOV P1,A JNB P1.4,LOOP9 JMP ON2 ON2: MOV A,40H XRL A,42H MOV 42H,A CPL A MOV DPTR,#L2ADR Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 MOVX @DPTR,A NEXT10: JMP START ISR_T1: ; phần ngắt ứng dụng đếm thời gian 10s PUSH ACC ; cất giá trị A trong CTR chính vào ngăn xếp CLR TR1 MOV TH1,#HIGH(-50000) MOV TL1,#LOW(-50000) SETB TR1 MOV A,41H ; xét trạng thái của LED 0 hiện tại JNB ACC.0,SW1 ; nếu LED đang tắt thì nhảy đến nhãn SW1 để xóa bộ đếm số lần về 0 MOV R0,#21H ; nếu LED vẫn bật thì tăng giá trị lên 1 INC @R0 JMP SW11 ; nhảy đến xét đèn đã bật 10s hay chưa SW1: MOV R0,#21H MOV @R0,#0 JMP LED2 SW11: xét đèn đã đủ 10s chưa CJNE @R0,#0C4H,LED2 ; nếu chưa đủ thì xét đèn kế tiếp MOV A,41H ; nếu đủ rồi thì tiến hành tắt LED ANL A,#0FEH ; MOV 41H,A CPL A MOV DPTR,#L1ADR MOVX @DPTR,A JMP EXIT ; thoát khỏi ngắt LED2: ; tương tự LED 0 JNB ACC.1,SW2 MOV R0,#22H INC @R0 JMP SW21 SW2: MOV R0,#22H MOV @R0,#0 JMP LED3 SW21: CJNE @R0,#0C4H,LED3 MOV A,41H ANL A,#0FDH MOV 41H,A Downloaded by BINH NGUYEN (tailieuso.15@gmail.com) lOMoARcPSD|38590726 CPL A MOV DPTR,#L1ADR MOVX @DPTR,A JMP EXIT LED3: JNB ACC.2,SW3 MOV R0,#23H INC @R0 JMP SW31 SW3: MOV R0,#23H MOV @R0,#0 JMP LED4 SW31: CJNE @R0,#0C4H,LED4 MOV A,41H ANL A,#11111011B MOV 41H,A CPL A MOV DPTR,#L1ADR MOVX @DPTR,A JMP EXIT LED4: JNB ACC.3,SW4 MOV R0,#24H INC @R0 JMP SW41 SW4: MOV R0,#24H MOV @R0,#0 JMP LED5 SW41: CJNE @R0,#0C4H,LED5 MOV A,41H ANL A,#0F7H MOV 41H,A CPL A MOV DPTR,#L1ADR MOVX @DPTR,A JMP EXIT LED5: JNB ACC.4,SW5 MOV R0,#25H Downloaded by BINH NGUYEN (tailieuso.15@gmail.com)

Ngày đăng: 08/03/2024, 16:33

Tài liệu cùng người dùng

Tài liệu liên quan