Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
1,3 MB
Nội dung
BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP HCM - BÀI TẬP LỚN MÔN: KỸ THUẬT VI XỬ LÝ GIẢNG VIÊN: NGUYỄN THANH HIẾU Đề tài: ỨNG DỤNG 8051 ĐIỀU KHIỂN ĐÈN GIAO THƠNG Nhóm SV thực hiện: Nhóm 1: Nguyễn Văn Ca Nguyễn Bá Cường Lê Văn Hậu Sa Huỳnh Lộc Đào Văn Linh Dương Quốc Uy Tp Hồ Chí Minh, Tháng 12 năm 2013 Nhóm Khoa Điện-Điện tử viễn thông PHỤ LỤC Trang PHẦN I - TỔNG QUAN VỀ ĐÈN GIAO THÔNG 1.1 Giới thiệu đề tài 1.2 Các thành phần hệ thống đèn giao thơng dùng vi điều khiển AT89C51 1.3 Nguyên lý hoạt động 1.4 Ngôn ngữ sử dụng phần mềm mô 1.4.1 Ngôn ngữ 1.4.2 Phần mềm mô Phần - KHẢO SÁT VI ĐIỀU KHIỂN AT89C51 1.5 Tổng quát 1.6 Các chân 1.6.1 Vcc 1.6.2 GND 1.6.3 Các Port 1.6.4 PSEN 1.6.5 ALE/PROG 1.6.6 EA/Vpp 1.6.7 RESET (RST) 1.6.8 XTAL1 & XTAL2 1.7 Tổ chức nhớ 1.7.1 Vùng RAM đa mục đích 1.7.2 Vùng RAM định địa bit 1.7.3 Các dãy ghi 1.8 Bộ nhớ 1.8.1 Truy xuất nhớ chương trình ngồi 1.8.2 Truy xuất nhớ liệu 1.8.3 Giải mã địa 1.9 Giao tiếp ngoại vi 1.9.1 LED đoạn (7 Segment LED) Phần III - ỨNG DỤNG 8051 ĐIỀU KHIỂN ĐÈN GIAO THÔNG 12 Chương I - Xây Dựng Phần Cứng…………………………………… ……………………………… …13 Nhóm Khoa Điện-Điện tử viễn thơng 1.1 Mạch dao động mạch Reset 13 a Mạch dao động 13 b Mạch Reset 13 1.2 Mạch hiển thị đếm ngược LED đoạn 14 1.3 Mạch hiển thị LED đơn 15 Địa mức điều khiển 16 1.4 Sơ đồ nguyên lý mạch phần cứng 17 Chương II – Xây dựng lưu đồ thuật toán 19 Chương III – Viết chương trình (Dùng ngơn ngữ C, Assembly , lập trình phần mêm Keil C51 23 Nhóm Khoa Điện-Điện tử viễn thơng LỜI NĨI ĐẦU Trong năm gần giới với phát triển mạnh mẽ ngành công nghiệp chế tạo linh kiện bán dẫn vi mạch tổng hợp, hướng phát triển vi xử lý hình thành vi điều khiển Với nhiều ưu điểm, vi điều khiển sử dụng rộng rãi nhiều lĩnh vực khác Bằng cách áp dụng vi khiển trình sản xuất xử lý, vi điều khiển thực thể ưu so với thiết bị điều khiển thơng thường.Vì lý trên, nhiều trường Đại Học, Cao Đẳng, vi xử lý thực trở thành môn học quan trọng, vi xử lý 8051 gần môn học sử dụng để trang bị cho kiến thức vi xử lý, từ mở rộng loại vi xử lý khác có cấu trúc phức tạp AVR, PIC, …Qua Bài tập này, giúp chúng em có hình dung thực tế vi xử lý áp dụng sống đại, cụ thể hệ thống đèn giao thông dùng vi điều khiển AT89C51 Đồ án gồm chương: Phần I: Tổng quan đèn giao thông, giới thiệu khái quát đề tài, thành phần hệ thống đèn giao thơng, ngun lý hoạt đông, ngôn ngữ sử dụng phần mềm mô Phần II: Khảo sát vi khiển 8051 (AT89C51) Phần III: Ứng dụng 8051 điều khiển đèn giao thông Chương I Xây dựng phần cứng Chương II Xây dựng lưu đồ thuật tốn Chương III Viết chương trình (dùng C, Assembly) Chúng em xin chân thành cảm ơn! Tp Hồ Chí Minh , Tháng 12 năm 2013 Nhóm sinh viên thực (Nhóm 1) Nhóm Khoa Điện-Điện tử viễn thông PHẦN I - TỔNG QUAN VỀ ĐÈN GIAO THÔNG 1.1 Giới thiệu đề tài Ngày với phát triển khoa học kỹ thuật, xã hội ngày văn minh đại, đô thị ngày lên Nhu cầu giao thông ngày trở nên cấp thiết, khu vực thành thị Do nhu cầu đời sống người, đặc biệt nhu cầu lại, loại phương tiện giao thơng tăng cách chóng mặt Riêng Việt Nam số lượng xe máy năm qua tăng cách đột biến, mật độ xe lưu thông đường ngày nhiều, hệ thống đường xá Việt Nam q nhiều hạn chế nên thường gây tượng kẹt xe, ách tắc giao thông, đặc biệt tai nạn giao thông ngày phổ biến trở thành mối hiểm họa cho nhiều người Vì lý luật giao thông đời đưa vào sử dụng cách lặng lẽ dần trở nên phổ biến Trong hệ thống đèn giao thông công cụ điều khiển giao thơng cơng cộng thực tế hiệu có vai trò lớn việc đảm bảo an tồn giảm thiểu tai nạn giao thơng Từ thực tế nhóm chúng em thực đề tài “Thiết kế mạch đèn giao thông dùng vi điều khiển 8051” nhằm giúp cho người tầng lớp sinh viên có ý thức việc chấp hành luật lệ an tồn giao thơng Với u cầu hệ thống chạy, đèn xanh, vàng đỏ sáng thời gian mặc định tương ứng 30s, 5s 25s Ngoài có chế độ tay điều chỉnh thời gian cho đèn 1.2 Các thành phần hệ thống đèn giao thông dùng vi điều khiển AT89C51 Hệ thống đèn giao thông gồm phần chủ yếu sau: Mạch điều khiển trung tâm dùng vi điều khiển AT89C51 Mạch dao động, reset Mạch hiển thị thời gian, trạng thái đèn Phím nhấn điều khiển trạng thái đèn, chỉnh thời gian 1.3 Nguyên lý hoạt động Mạch đèn giao thông hoạt động dựa nội dung lập trình cho AT89C51, có tác động từ nút điều khiển mạch hoạt động theo thời gian yêu cầu AT89C51 đưa liệu đến LED xanh, đỏ, vàng để điều khiển LED đóng, mở Ngồi ra, xuất liệu đến BJT để điều khiển LED đoạn LED đoạn nhận liệu từ vi điều khiển trung tâm để thực việc đếm lùi thời gian Chúng ta sử dụng ngắt ngắt ngồi để điều khiển đèn tín hiệu giao thông tay cài đặt thời gian cho đèn (Xanh, đỏ, vàng) Như mạch bắt đầu thực đếm lùi, trục lộ bên đèn xanh vàng sáng trục lộ bên đèn đỏ sáng ngược lại Bộ phận điều khiển AT89C51 nút nhấn Tùy theo thời gian yêu cầu mà ta điều khiển trục giao thông sáng AT89C51 Nhóm Khoa Điện-Điện tử viễn thơng xuất cổng I/O xung mức cao mức thấp để điều khiển BJT từ điều khiển đèn hiển thị Khi AT89C51 nhận tín hiệu điều khiển từ phím nhấn, qt tìm chương trình mã hóa phù hợp với tín hiệu điều khiển để hoạt động 1.4 Ngơn ngữ sử dụng phần mềm mô 1.4.1 Ngôn ngữ Ngơn ngữ Assembly Ngơn ngữ lập trình C Phần mềm Keil C 1.4.2 Phần mềm mô Phần mềm PROTEUS Phần - KHẢO SÁT VI ĐIỀU KHIỂN AT89C51 1.5 Tổng quát Hình 2.1 Hình dạng AT89C51 AT89C51 hệ vi tính bit đơn chip CMOS có hiệu suất cao, công suất nguồn tiêu thụ thấp có 4KB nhớ ROM Flash xóa được/lập trình Chip sản xuất dựa vào công nghệ nhớ khơng nội dung có độ tích hợp cao Atmel Chip AT89C51 tương thích với tập lệnh chân chuẩn công nghiệp MCS-51 Flash chip cho phép nhớ chương trình lập trình lại hệ thống Kết hợp CPU linh hoạt bit với Flash chip đơn thể, Atmel 89C51 hệ vi tính bit đơn chip mạnh cho ta giải pháp có hiệu chi phí linh hoạt ứng dụng điều khiển AT89C51 có đặc trưng chuẩn sau: 4KN Flash, 128 byte RAM, 32 đường xuất nhập, định thời/đếm 16 bit, cấu trúc ngắt hai mức ưu tiên nguyên nhân ngắt, port nối tiếp song công, mạch dao động tạo xung clock chip Ngoài AT89C51 thiết kế với logic tĩnh cho hoạt động có tần số giảm xuống hỗ trợ hai chế độ tiết kiệm lượng lựa chọn phần mềm Chế độ nghỉ dừng CPU cho phép RAM, định thời/đếm, port nối tiếp hệ thống ngắt tiếp tục hoạt động Nhóm Khoa Điện-Điện tử viễn thơng Cấu hình chân AT89C51 sau: Hình 2.2 Sơ đồ chân AT89C51 AT89C51 có tất 40 chân Mỗi chân có chức đường I/O (xuất/nhập), 24 chân có cơng dụng kép: đường hoạt động đường I/O đường điều khiển thành phần bus địa bus liệu 1.6 Các chân Hình 2.2 cho ta sơ đồ chân chip 89C51 Mơ tả tóm tắt chức chân sau Như ta thấy hình 2.1, 32 số 40 chân 89C51 có cơng dụng xuất/nhập, nhiên 24 32 đường có mục đích (cơng dụng) Mỗi đường hoạt động xuất/nhập hoạt động đường điều khiển hoạt động đường địa chỉ/dữ liệu bus địa chỉ/dữ liệu đa hợp 32 chân nêu hình thành port bit Với thiết kế yêu cầu mức tối thiểu nhớ thành phần bên ngồi khác, ta sử dụng port làm nhiệm vụ xuất/nhập đường cho port xử lý đơn vị giao tiếp với thiết bị song song máy in, biến đổi D-A, v.v… đường hoạt động độc lập giao tiếp với thiết bị đơn bit chuyển mạch, LED, BJT, động cơ, loa, v.v… 1.6.1 Vcc Chân cung cấp điện (5V) 1.6.2 GND Chân nối đất (0V) Nhóm Khoa Điện-Điện tử viễn thông 1.6.3 Các Port 1.6.3.1Port Port (các chân từ 32 đến 39 89C51) có hai cơng dụng Trong thiết kế có tối thiểu thành phần, port sử dụng làm nhiệm vụ xuất/nhập Trong thiết kế lớn có nhớ ngoài, port trở thành bus địa bus liệu đa hợp 1.6.3.2Port Port có công dụng xuất/nhập (các chân từ đến 89C51) Các chân port ký hiệu P1.0, P1.1, … , P1.7 dùng để giao tiếp với thiết bị bên ngồi có u cầu Khơng có chức khác gán cho chân port 1, nghĩa chúng sử dụng để giao tiếp với thiết bị ngoại vi 1.6.3.3Port Port (các chân từ 21 đến 28 89C51) có hai cơng dụng, làm nhiệm vụ xuất/nhập byte địa 16 bit cho thiết kế có nhớ chương trình ngồi thiết kế có nhiều 256 byte nhớ liệu 1.6.3.4Port Port (các chân từ 10 đến 17 89C51) có hai cơng dụng Khi khơng hoạt động xuất/nhập, chân port có nhiều chức riêng (mỗi chân có chức riêng liên quan đến đặc trưng cụ thể 89C51) Bảng 2.1 cho ta chức chân port 1.6.4 PSEN Chân cho phép nhớ chương trình PSEN (program store enable) điều khiển truy xuất nhớ chương trình ngồi Khi AT89C51 thực thi chương trình nhớ chương trình ngồi, PSEN tích cực hai lần cho chu kỳ máy, ngoại trừ trường hợp tác động PSEN bị bỏ qua cho lần truy xuất nhớ liệu ngồi Nhóm Khoa Điện-Điện tử viễn thơng 1.6.5 ALE/PROG Xung ngõ cho phép chốt địa ALE (address latch enable) cho phép chốt byte thấp địa thời gian truy suất nhớ Chân dùng làm ngõ vào xung lập trình (PROG) thời gian lập trình cho Flash Khi hoạt động bình thường, xung ngõ ALE ln ln có tần số 1/6 tần số mạch dao động chip, sử dụng cho mục đích định thời từ bên ngồi tạo xung clock Tuy nhiên cần lưu ý xung ALE bị bỏ qua chu kỳ truy xuất nhớ liệu 1.6.6 EA/Vpp Chân cho phép truy xuất nhớ EA (external access enable) phải nối với GND phép chip vi điều khiển tìm nạp lệnh từ vị trí nhớ nhớ chương trình ngồi, địa 0000H FFFFH Tuy nhiên cần lưu ý bit khóa (lock bit 1) lập trình, EA chốt bên reset EA nên nối với Vcc để thực thi chương trình bên chip Chân EA/Vpp nhận điện áp cho phép lập trình Vpp thời gian lập trình cho Flash, điện áp cấp cho phận có yêu cầu điện áp 12V 1.6.7 RESET (RST) Ngõ vào RST (chân 9) Mức cao chân chu kỳ máy dao động hoạt động reset AT89C51 1.6.8 XTAL1 & XTAL2 XTAL1 ngõ vào đến mạch khuếch đại đảo mạch dao động ngõ vào đến mạch tạo xung clock bên chip XTAL2 ngõ từ mạch khuếch đại đảo mạch dao động 1.7 Tổ chức nhớ AT89C51 có khơng gian nhớ riêng cho chương trình liệu Cả hai nhớ chương trình liệu đặt bên chip, nhiên ta mở rộng nhớ chương trình nhớ liệu cách sử dụng chip nhớ bên với dung lượng tối đa 64KB cho nhớ chương trình (hay nhớ mã) 64KB cho nhớ liệu Bộ nhớ nội chip bao gồm ROM RAM RAM chip bao gồm vùng RAM đa chức (nhiều công dụng), vùng RAM với bit định địa (gọi tắt vùng RAM định địa bit), dãy (bank) ghi ghi chức đạc biệt SFR (special funtion register) Hình 2.2 cho ta chi tiết nhớ liệu chip Ta thấy không gian nhớ nội chia thành: dãy ghi (00H÷1FH), vùng RAM định địa bit (20H÷2FH), vùng RAM đa mục đích (30H÷7FH) ghi chức đặc biệt (80H÷FFH) Nhóm Khoa Điện-Điện tử viễn thơng 1.7.1 Vùng RAM đa mục đích Mặc dù hình 2.2 trình bày vùng RAM đa mục đích có 80 byte đặt địa từ 30H đến 7FH, bên vùng từ địa 00H đến 2FH vùng nhớ sử dụng tương tự (mặc dù vị trí nhớ có mục đích khác) Hình 2.3 Bộ nhớ liệu chip 89C51 1.7.2 Vùng RAM định địa bit AT89C51 chứa 210 vị trí bit định địa 128 bit chứa byte địa từ 20H đến 2FH phần lại chứa ghi chức đặc biệt 1.7.3 Các dãy ghi 32 vị trí thấp nhớ nội chứa dãy ghi 1.8 Bộ nhớ Các vi điều khiển cần có khả mở rộng tài nguyên chip (bộ nhớ, I/O, v.v…) để tránh tượng cổ chai thiết kế Cấu trúc MCS-51 cho ta khả mở rộng không gian nhớ chương trình đến 64K khơng gian nhớ liệu đến 64K ROM RAM thêm vào cần Nhóm DIV AB MOV 31H,B MOV 32H,A MOV A,R7 MOV B,#10 DIV Khoa Điện-Điện tử viễn thông AB MOV 33H,B MOV 34H,A RET ;///// QUET MÃ LED DOAN ////// HIENTHI: MOV MOVC A,31H A,@A+DPTR MOV P2,A SETB P1.0 LCALL DELAY_2MS CLR MOV MOVC P1.0 A,32H A,@A+DPTR MOV P2,A SETB P1.1 LCALL DELAY_2MS CLR MOV MOVC P1.1 A,33H A,@A+DPTR MOV P2,A SETB P1.2 29 Nhóm Khoa Điện-Điện tử viễn thông LCALL DELAY_2MS CLR P1.2 MOV A,34H MOVC A,@A+DPTR MOV P2,A SETB P1.3 LCALL DELAY_2MS CLR P1.3 RET DELAY_2MS: MOV R2,#4 CONT: MOV R3,#250 DJNZ R3,$ DJNZ R2,CONT RET DELAY_125MS: MOV R4,#250 AGAIN: MOV R5,#250 DJNZ R5,$ DJNZ R4,AGAIN RET DELAY_750MS: ACALL DELAY_125MS ACALL DELAY_125MS ACALL DELAY_125MS ACALL DELAY_125MS 30 Nhóm Khoa Điện-Điện tử viễn thơng ACALL DELAY_125MS ACALL DELAY_125MS RET LED7DOAN: DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h DK_BANGTAY: ;/// CT NGAT PHUC VU CHE DO DK BANG TAY /// MOV P0,#0H MOV P1,#11100000B D1_X2: SETB P0.0 SETB P0.5 JNB P3.5,THOAT JB P3.4,D1_X2 LCALL DELAY_750MS CLR P0.5 D1_V2: SETB JNB P0.4 P3.5,THOAT JB P3.4,D1_V2 LCALL DELAY_750MS CLR P0.0 CLR P0.4 X1_D2: SETB P0.2 SETB P0.3 JNB P3.5,THOAT JB P3.4,X1_D2 LCALL DELAY_750MS 31 Nhóm CLR Khoa Điện-Điện tử viễn thơng P0.2 V1_D2: SETB P0.1 JNB JB P3.5,THOAT P3.4,V1_D2 LCALL LJMP DELAY_750MS DK_BANGTAY THOAT: RETI CAIDAT: ; /// CT NGAT CAI DAT THOI GIAN DEN XANH,DO,VANG ///// SETUP_XANH: MOV CLR 41H,#0 p1.5 LAPX1: MOV R6,41H MOV R7,41H LCALL CHIA LCALL HIENTHI KT_TANG_X: JB P3.6,KT_GIAM_X LCALL DELAY_125MS INC 41H KT_GIAM_X: JB P3.7,OK_X LCALL DELAY_125MS DEC 41H OK_X: JB P3.5,LAPX1 32 Nhóm Khoa Điện-Điện tử viễn thông LCALL DELAY_750MS SETB P1.5 SETUP_VANG: MOV 42H,#0 CLR P1.6 LAPV1: MOV R6,42H MOV R7,42H LCALL CHIA LCALL HIENTHI KT_TANG_V: JB P3.6,KT_GIAM_V LCALL DELAY_125MS INC 42H KT_GIAM_V: JB P3.7,OK_V LCALL DELAY_125MS DEC 42H OK_V: JB P3.5,LAPV1 LCALL DELAY_750MS SETB P1.6 SETUP_DO: MOV CLR 40H,#0 P1.7 LAPD1: MOV R6,40H MOV R7,40H 33 Nhóm Khoa Điện-Điện tử viễn thông LCALL CHIA LCALL HIENTHI KT_TANG_D: JB P3.6,KT_GIAM_D LCALL DELAY_125MS INC 40H KT_GIAM_D: JB P3.7,OK_D LCALL DELAY_125MS DEC 40H OK_D: JB P3.5,LAPD1 LCALL DELAY_750MS SETB P1.7 RETI END NGÔN NGỮ C #include #include #define bat #define tat sbit d1 = P0^0 ; sbit v1 = P0^1 ; sbit x1 = P0^2 ; sbit d2 = P0^3 ; sbit v2 = P0^4 ; sbit x2 = P0^5 ; sbit dk_dv1 = P1^0 ; 34 Nhóm Khoa Điện-Điện tử viễn thông sbit dk_ch1 = P1^1 ; sbit dk_dv2 = P1^2 ; sbit dk_ch2 = P1^3 ; sbit a = P2^0 ; sbit b = P2^1 ; sbit c = P2^2 ; sbit d = P2^3 ; sbit e = P2^4 ; sbit f = P2^5 ; sbit g = P2^6 ; sbit chinhledxanh = P1^5 ; sbit chinhledvang = P1^6 ; sbit chinhleddo = P1^7 ; sbit ok = P3^5 ; sbit len = P3^6 ; sbit xuong = P3^7 ; sbit chinhtay = P3^4 ; unsigned char thoigian1,thoigian2,timerxanh=25,timerdo=30,timervang=5,solanquet=25; unsigned char maled7[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int ms); void hienthi(thoigian1,thoigian2); void main() { EA=1; EX0=1; EX1=1; IT0=1; IT1=1; P0=0x00; while (1) 35 Nhóm Khoa Điện-Điện tử viễn thông { thoigian1=timerxanh; thoigian2=timerdo; x1=1; d2=1; { hienthi(thoigian1,thoigian2); thoigian1 ; thoigian2 ; } while(thoigian1!=0); x1=0; thoigian1=timervang; thoigian2=timervang; v1=1; { hienthi(thoigian1,thoigian2); thoigian1 ; thoigian2 ; } while(thoigian1!=0); d2=0; v1=0; thoigian1=timerdo; thoigian2=timerxanh; d1=1; x2=1; 36 Nhóm Khoa Điện-Điện tử viễn thông { hienthi(thoigian1,thoigian2); thoigian1 ; thoigian2 ; } while(thoigian2!=0); x2=0; thoigian1=timervang; thoigian2=timervang; v2=1; { hienthi(thoigian1,thoigian2); thoigian1 ; thoigian2 ; } while(thoigian1!=0); d1=0; v2=0; } } void delay( unsigned int ms) { unsigned i,j; for(i=0;i