Với điều kiện học tập tại trường em đã được tìm hiểu cơ bản về vi điều khiển 8051 và ứng dụng phần mềm PROTEUS để vẽ mạch nguyên lý và phần mềm RCHPSIM để lập trình và chạy mô phỏng. Mặc dù đã cố gắng tìm hiểu nhưng báo cáo của em không tránh khỏi những thiếu sót, em rất mong nhận được ý kiến đóng góp của các thầy cô giáo và các bạn để báo cáo của em hoàn thiện hơn và có thể đưa vào làm tài liệu thí nghiêm thực tế.
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA ĐIỆN BỘ MÔN ĐO LƯỜNG & ĐIỀU KHIỂN Giáo viên hướng dẫn : BÙI THỊ KHÁNH HÒA Sinh viên thực : TRỊNH TRẦN ĐỨC Lớp : LTCĐ-ĐH ĐIỆN – K2 Hà Nội tháng - 2010 LỜI NĨI ĐẦU Trong thập niên gần cơng nghiệp hoá đại hoá ngày phát triển mạnh mẽ Kỹ thuật điện tử có bước phát triển đặc biệt kỹ thuật điều khiển tự động Sự đời phát triển nhanh chóng kỹ thuật thuật vi điều khiển Nước ta nay, kỹ thuật vi điều khiển phát triển song công cụ ứng dụng rộng dãi lĩnh vực tự động hố Nó phát triển nhanh chóng, mang lại thay đổi to lớn công nghệ đời sống hàng ngày Việc máy móc thiết bị trở nên linh hoạt hơn, thông minh làm việc với suất cao nhờ có hoạt động thơng minh vi điều khiển Với điều kiện học tập trường em tìm hiểu vi điều khiển 8051 ứng dụng phần mềm PROTEUS để vẽ mạch nguyên lý phần mềm RCHPSIM để lập trình chạy mơ Mặc dù cố gắng tìm hiểu báo cáo em khơng tránh khỏi thiếu sót, em mong nhận ý kiến đóng góp thầy giáo bạn để báo cáo em hoàn thiện đưa vào làm tài liệu thí nghiêm thực tế Em xin chân thành cảm ơn! NỘI DUNG BÁO CÁO THÍ NGHIỆM NỘI DUNG: Ghép nối vi điều khiển AT 89C52 (8051) với đèn Led hình dưới: Với u cầu thí nghiệm sau: Vẽ sơ đồ nguyên lý sử dụng phần mềm PROTEUS Lập trình chương trình chạy mô sơ đồ vẽ sử dụng phần mềm RCHPSIM với yêu cầu sau: - Ấn nút ấn FCNT → Đèn Led (Nx) tăng - Ấn nút ấn RCNT → Nx giảm - Ấn nút ấn RESET → Nx = Nếu Nx tăng đến giá trị đặt (SV) → Cảnh báo chuông kêu (ALARM) VẼ SƠ ĐỒ NGUYÊN LÝ SỬ DỤNG PHẦN MỀM PROTEUS Để vào phần mềm PROTEUS, từ hình Desktop vào biểu tượng hình hiển thị sau: Tiếp vào giao diện để chuẩn bị vẽ hình dưới: a Xác định số linh kiện cần dùng: Trước vẽ ta nên xem sơ đồ cần vẽ dùng linh kiện Với sơ đồ nguyên lý ta cần lấy linh kiện sau: STT 10 Linh kiện Số lượng AT 89C52 01 Điện trở R = 1K Điện trở R = 10K Đèn Bốn đèn Led Loa cảnh báo Nguồn chiều Nút ân Transistor Rơ le 09 04 01 01 01 01 03 01 01 Bước để vẽ ta vào biểu tượng chữ “P” để vào thư viện lấy linh kiện, ta xem cần phải vẽ linh kiện ta lấy tất linh kiện cần vẽ hình b Cách lấy linh kiện thư viện: Muốn lấy linh kiện AT 89C52 từ thư viện vào Microprocessor ICs → AT 89C52 → OK hình dưới: Lấy linh kiện khác vào tương tự trên, cụ thể sau: Muốn lấy điện trở R = 1K & 10K từ thư viện vào Resistors → Chọn loại 1K & 10K → OK Muốn lấy đèn từ thư viện Keywords nhập Lamp → OK→ chọn Lamp → OK Muốn lấy đèn Led từ thư viện vào Optoelectrnics →chọn đèn xanh đỏ → OK Muốn lấy loa cảnh báo, từ thư viện vào Speakers & Sounders → Buzzer → OK Muốn lấy nguồn chiều, từ thư viện Keywords nhập Battery → chọn Battery → OK Muốn lấy nút ấn, từ thư viện Keyword nhập Button → chọn Button → OK Muốn lấy Transistor thuận NPN, từ thư viện vào Transistors → Keywords nhập NPN → chọn Transistor loại NPN → OK Muốn lấy Rơle, từ thư viện vào Switch & Relays → chọn Rơle loại 12V → OK Sau lấy hết linh kiện ngồi hình ta có giao diện chuẩn bị vẽ gồm có tất linh kiện ta vừa lấy gồm 10 linh kiện hình dưới: Sau ta đưa tất linh kiện xếp hình dưới: Bước sử dụng chuột để nối thành mạch nguyên lý yêu cầu, sau nối xong ta có sơ đồ nguyên lý yêu cầu hình dưới: Sơ đồ nguyên lý LẬP TRÌNH CHƯƠNG TRÌNH SỬ DỤNG PHẦN MỀM RCHPSIM Chương trình Đếm & Cảnh báo: ;======================================================== ;Chuong trinh viet cho mo hinh dem nguoi vao cua ; Update 05/12/2005 ;======================================================== org 0000H ljmp init org ;Vector reset ;Nhay toi chuong trinh khoi tao 0003H ;Vector ngat ngoai INT0 ljmp COUNTER ;Nhay toi ctc dem so nguoi vao/ra org reti org reti org 000BH ;Vector ngat tran T0 ;Khong dung thi ket thuc luon 0013H ;Vector ngat ngoai INT1 ;Khong dung thi ket thuc luon 001BH ;Vector ngat tran T1 reti org ;Khong dung thi ket thuc luon 0023H reti org ;Vector ngat cong truyen thong noi tiep ;Khong dung thi ket thuc luon 002BH ljmp INT_T2 ;Vector ngat tran T2 ;Nhay toi ctcpvn tran T2 ;======================================================== ;Phan khai bao cac bien so, hang so ;======================================================== D0equ 50H D1equ 51H D2equ 52H D3equ 53H D4equ 54H NumL equ 55H ;ben chua so nguoi dem duoc NumH equ 56H ;====================================================== ;cac bien dung cho cac chuong trinh cong, tru, nhan ;chia cac so hai byte ;====================================================== ZOV equ 00H AlarmL equ 68H AlarmH equ 69H FCNT equ 70H RCNT equ 71H X0 equ 72H X1 equ 73H 10 X2 equ 74H X3 equ 75H Y0 equ 76H Y1 equ 77H Y2 equ 78H Y3 equ 79H Z0 equ 7AH Z1 equ 7BH Z2 equ 7CH Z3 equ 7DH Z4 equ 7EH Z5 equ 7FH XL equ X0 XH equ X1 YL equ Y0 YH equ Y1 ZL equ ZH X Z0 equ equ Z1 XL ;======================================================== ;Phan chuong trinh khoi tao ;======================================================== 11 org 100 init: clr ;bat dau chuong trinh khoi tao EA ;cam tat ca cac ngat mov SP,#2FH ;khoi tao ngan xep bat dau tu dia chi 30H mov T2CON,#00H ;T2 lam viec o che Auto_reaload mov RCAP2H,#0DBH ;voi chu ky ngat 10ms mov RCAP2L,#0FFH mov TH2,RCAP2H mov TL2,RCAP2L setb IT0 ;Dat ngat ngoai INT0 theo suon xuong ;================================================== ;khoi tao bien so, hang so ;================================================== mov r7,#4 mov r6,#01h ;xac dinh LED bay can hien thi mov r5,#01H ;D0 sang dau tien mov r0,#D0 ;(r0)=dia chi cua D0 ;================================================== clr P3.0 mov AlarmL,#0AH mov AlarmH,#00H mov NumH,#0H mov NumL,#0H setb TR2 ;cho phep T2 chay setb IE.5 ;cho phep ngat tran T2 setb EX0 ;cho phep ngat ngoai INT0 setb EA ;cho phep tat ca cac ngat here: 12 sjmp here ;doi ngat ;======================================================== ;Interrupt INT_T2 ;co chuc nang dieu khien cac LED va cac LED bay ;Input : None ;Output : None ;Destroys: ;======================================================== INT_T2: clr ;bat dau ctcpvn tran T2 TF2 ;xoa co tran bao ngat mov XH,NumH mov Xl,NumL lcall hextodec lcall xlat lcall display lcall COUNTER lcall Reset1 lcall Alarm reti ;======================================================== COUNTER: clr IE0 mov a,FCNT cjne a,#0,KT1 jb P1.0,KT2 mov FCNT,#1 mov a,NumL add a,#1 13 mov NumL,a mov a,NumH addc a,#0 mov NumH,a sjmp KT2 KT1: jnb P1.0,KT2 mov FCNT,#0 KT2: mov a,RCNT cjne a,#0,KT3 jb P1.1,Thoat mov RCNT,#1 mov a,NumL subb a,#1 mov NumL,a mov a,NumH subb a,#0 mov NumH,a sjmp Thoat KT3: jnb P1.1,Thoat mov RCNT,#0 Thoat: ret ;======================================================== Reset1: jb P1.2,thoat1 14 mov NumL,#0 mov NumH,#0 thoat1: ret ;======================================================== Alarm: mov XL,AlarmL mov XH,AlarmH mov a,NumL add a,#1 mov YL,a mov YH,NumH lcall sub16 jnC th setb P3.0 sjmp kth1 th: clr P3.0 kth1 ret ;======================================================== ;Subroutine display ;co chuc nang hien thi led ;Input : Ma bay (D3,D2,D1,D0) ;Output : none ;Destroys: ;======================================================== display: 15 djnz r7,H_THI mov r0,#D0 mov r6,#01h mov r7,#4 H_THI: mov p2,r6 mov a,@R0 mov p0,a inc r0 mov a,r6 rl a mov r6,a ret ;======================================================= ;Subroutine xlat ;co chuc nang chuyen tu soBCD sang ma ;Input : Ma BCD ;Output : BCD(D3,D2,D1,D0) chu so BCD so can hien thi ;Destroys: ;======================================================== xlat: mov dptr,#SEG_COD ; mov a,D0 ; movc a,@a+dptr ; mov D0,a ; mov dptr,#SEG_COD ; mov a,D1 ; 16 movc a,@a+dptr ; mov D1,a ; mov dptr,#SEG_COD ; mov a,D2 ; movc a,@a+dptr ; mov D2,a ; mov dptr,#SEG_COD ; mov a,D3 ; movc a,@a+dptr ; mov D3,a ; Ret ;======================================================== ;Subroutine hextodec ;co chuc nang chuyen tu so HEX sang so BCD ;Input : X(XH,XL) ;Output : BCD(D4,D3,D2,D1,D0) chu so BCD so can hien thi ;Destroys: ;======================================================== hextodec: mov YH,#00h mov YL,#0ah lcall DIV16 mov D0,Z0 mov XH,Z3 mov XL,Z2 lcall DIV16 17 mov D1,Z0 mov XH,Z3 mov XL,Z2 lcall DIV16 mov D2,Z0 mov XH,Z3 mov XL,Z2 lcall DIV16 mov D3,Z0 mov XH,Z3 mov XL,Z2 lcall DIV16 mov D4,Z0 ret ;======================================================== ;subroutine div16 ; Z=X/Y ; input : X:(XH,XL); Y:(YH,YL) ; output : Z3,Z2 hold high and low bytes of the quotient ; Z1,Z0 hold high and low bytes of the remainder ; ZOV is set if Y=0, i.e., the result is out of range ; calls : ; destroys: sub16 a, r0, r1, r2, r3, r7, flags ;======================================================== div16: push push push 18 push push mov a,YH ; get divisor high byte orl a,YL ; OR with low byte jnz div_OK ; divisor OK if not setb ZOV ; else, overflow pop pop pop pop pop ret div_OK: mov r1,XH mov r0,XL mov XH,#0 mov XL,#0 mov r3,#0 mov r2,#0 mov r7,#16 ; store dividend in r1, r0 ; clear partial remainder ; clear partial quotient ; set loop count div_loop: clr C mov rlc ; clear carry flag a,r0 a ; into mov r0,a mov a,r1 rlc ; shift the highest bit of the dividend a 19 mov r1,a mov a,XL rlc a ; remainder mov XL,a mov a,XH rlc ; the lowest bit of the partial a mov XH,a lcall sub16 ; attempt to subtract to see if the ; partial remainder is as large or ; larger than the divisor.; mov c,ZOV cpl c jnc div_1 ; get subtraction external borrow ; complement external borrow; mov XH,ZH mov XL,ZL div_1: mov rlc a,r2 a mov r2,a mov a,r3 rlc ; add result bit to partial quotient a mov r3,a djnz r7,div_loop mov Z3,r3 mov Z2,r2 mov Z1,XH ; put quotient in Z3, and Z2 ; get remainder, saved before the 20 mov Z0,XL clr ZOV pop pop pop pop pop ; last subtraction ; divisor is not ret ;======================================================== ;subroutine sub16 ; Z(ZH,ZL) = X(XH,XL) - Y(YH,YL) ; if (Y > X) ; ZOV = ;======================================================== sub16: push acc mov a,XL clr c ; load X low byte into accumulator ; clear carry flag subb a,YL ; subract Y low byte mov ZL,a ; put result in Z low byte mov a,XH ; load X high byte into accumulator subb a,YH ; subtract Y high byte with the borrow ; from low byte operation mov ZH,a mov ZOV,c pop ; save result in Z high byte ; set ZOV id an external borrow is produced acc ret ;======================================================== 21 ;Bang ma bay (Segment code) ;======================================================== SEG_COD: db ;0 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H 22 ... sống hàng ngày Vi c máy móc thiết bị trở nên linh hoạt hơn, thông minh làm vi c với suất cao nhờ có hoạt động thơng minh vi điều khiển Với điều kiện học tập trường em tìm hiểu vi điều khiển 8051... điện tử có bước phát triển đặc biệt kỹ thuật điều khiển tự động Sự đời phát triển nhanh chóng kỹ thuật thuật vi điều khiển Nước ta nay, kỹ thuật vi điều khiển phát triển song công cụ ứng dụng rộng... vào làm tài liệu thí nghiêm thực tế Em xin chân thành cảm ơn! NỘI DUNG BÁO CÁO THÍ NGHIỆM NỘI DUNG: Ghép nối vi điều khiển AT 89C52 (8051) với đèn Led hình dưới: Với u cầu thí nghiệm sau: Vẽ sơ