Báo cáo thí nghiệm Vi xử lý BKHCM

Nội dung Text: Báo cáo thí nghiệm vi xử lý

  1. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA ----------- KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ BÁO CÁO THÍ NGHIỆM VI XỬ LÍ Lớp : DD07TD Nhóm : 01 Tổ : 07 Họ và tên SV: MSSV: Nguyễn Thành Nam 40701531 Vũ Xuân Tầm 40702162 Dương Lâm Phương Nguyễn Thanh Nam 40701876 Phương Lê Bá Tấn
  2. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07
  3. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 Phần 1:  Làm việc với Vi điều khiển 89C51 Bài 1:  Thí Nghiệm với nút nhấn và LED đơn Thí nghiệm 1:  Viết chương trình thực hiện việc đọc liên tục trạng trạng thái của nút nhấn P1.0 và hiển thị ra LED được nối tại  chân P1.1 Code: ORG 2000H ;Doc trang thai cua chan P1.0 va xuat ra P1.1 LOOP: MOV C, P1.0 MOV P1.1, C SJMP LOOP END
  4. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 Thí nghiệm 2: Viết chương trình tạo xung vuông 1Hz ra chân P1.0,biết tần số dao động được dùng trong KIT là 11.059MHz Code: ORG 2000H ;Tao xung vuong 1Hz tren P1.0 dung vong lap LAP: CPL P1.0 ACALL DL500 SJMP LAP DL500: PUSH 05 PUSH 06 PUSH 07 MOV R5, #10 L2: MOV R6, #100 L1: MOV R7, #250 DJNZ R7, $ DJNZ R6, L1 DJNZ R5, L2 POP 07 POP 06 POP 05 RET END Thí nghiệm 2: [Mở rộng] Thay đổi tần số xung vuông thành 0.5Hz, với chu kì nhiệm vụ là 30% Code: ORG 2000H ;Tao xung tan so 0.5Hz tren P1.0 voi chu ki nhiem vu 30% LAP: SETB P1.0 ; LCALL DL150 ; CLR P1.0 ; LCALL DL350 ; SJMP LAP ; DL150: PUSH 07 PUSH 06 PUSH 05 MOV R5, #2 ; L1_2: MOV R6, #150 ; L1_1: MOV R7, #250 ; DJNZ R7, $ ; DJNZ R6, L1_1; DJNZ R5, L1_2; POP 05 POP 06 POP 07 RET DL350: PUSH 07 PUSH 06 PUSH 05 MOV R5, #7 ; L2_2: MOV R6, #100 ; L2_1: MOV R7, #250 ; DJNZ R7, $ ; DJNZ R6, L2_1; DJNZ R5, L2_2;
  5. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 POP 05 POP 06 POP 07 RET END Thí nghiệm 3: Viết chương trình tạo xung vuông 1 Hz dùng Timer0 Code: ORG 2000H ;Tao xung vuong 1Hz tren P1.0 su dung Timer0 LAP: CPL P1.0 CALL DL500 SJPM LAP DL500: MOV TMOD, #01H ;Goi Timer0, Mode1 PUSH 05 MOV R5, #10 LOOP: MOV TH0, #HIGH[-50000] MOV TL0, #LOW[-50000] SETB TR0 JNB TF0, $ CLR TF0 CLR TR0 DJNZ R5, LOOP POP R5 RET END Thí nghiệm 3: [Mở rộng] Tận dụng ngắt Timer để tạo xung Code: ORG 2000H ;Tao xung 1Hz tren P1.0 dung ngat Timer0 LJMP MAIN ORG 200BH INC R5 CJNE R5, #10, ISRT0 MOV R5, #1 CPL P1.0 ISRT0: CLR TR0 CLR TF0 MOV TH0, #HIGH[-50000] MOV TL0, #LOW[-50000] SETB TR0 RETI ORG 2030H MAIN: MOV TMOD ,#01H SETB TF0 MOV IE, #82H SJMP $ END Thí nghiệm 4:
  6. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 Viết chương trình làm cho LED nối đến chân P1.0 chớp tắt với tần số có thể thay đổi được bằng cách nhấn P1.1 [tăng] hoặc  P1.2 [giảm] Code: ORG 2000H ;Tao xung tren P1.0 va thay doi theo P1.1 [tang], P1.2 [giam] MOV TMOD, #01H MOV A,#10 LOOP: JNB P1.1,TANG JNB P1.2,GIAM ;Tan so 1Hz lam trung binh,neu ko nhan nut nao thi van giu nguyen tan so cu CALL XUNG SJMP LOOP TANG: ;Xet xem A co la 255 hay chua CJNE A, #255, TANG1 SJMP LOOP ; A khac 255 TANG1: INC A CALL XUNG SJMP LOOP GIAM: CJNE A, #1, GIAM1 SJMP LOOP GIAM1: DEC A CALL XUNG SJMP LOOP XUNG: MOV R5, A DL50: MOV TH0, #HIGH[-50000] MOV TL0, #LOW[-50000] SETB TR0 JNB TF0, $ CLR TR0 CLR TF0 DJNZ R5, DL50 CPL P1.0 RET END Bài 2: Thí nghiệm hiển thị dùng LED 7 đoạn Thí nghiệm 1:
  7. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 Viết chương trình thực hiện bộ đếm từ 0 đến 9 và hiển thị ra LED 7 đoạn,mỗi lần cách nhau 2s Code: ORG 2000H ;bo dem tu 0 toi 9, hien thi tren LED 7 doan, moi lan cach nhau 2s CLR A MAIN: MOV R1, #10 MOV A,#0E0H LOOP: MOV DPTR, #0000H MOVX @DPTR, A INC A CALL DL2000 DJNZ R1,LOOP SJMP MAIN DL2000: PUSH 05 ;Delay 2s PUSH 06 PUSH 07 MOV R5, #20 DL2: MOV R6, #200 DL1: MOV R7, #250 DJNZ R7, $ DJNZ R6, DL1 DJNZ R5, DL2 POP 07 POP 06 POP 05 RET END Thí nghiệm 2: Viết chương trình hiển thị giá trị 1234 ra LED 7 đoạn. Code: ORG 2000H ;Bai 2, Thi nghiem 2 ;Hien thi 1234 len 4 LED 7 doan AGAIN: CLR A MOV R1, #4 LOOP: MOV DPTR, #TABLE MOVC A,@A+DPTR DJNZ R1,NEXT SJMP AGAIN ;lien tuc de tao hinh anh tren mat NEXT: CALL XUAT CALL DL3 INC DPTR SJMP LOOP XUAT: PUSH DPH PUSH DPL MOV DPTR, #0000H MOVX @DPTR, A POP DPL POP DPH RET DL3: PUSH 05 PUSH 06 MOV R5, #12 L1: MOV R6, #250
  8. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 DJNZ R6, $ DJNZ R5, L1 POP 06 POP 05 RET TABLE: DB 71H,0B2H,0D3H,0E4H END Thí nghiêm 2: Mở rộng Code: ORG 2000H ;Bai 2 Thi nghiem 2 mo rong ;Hien thi gia tri la ma BCD nen trong R7_R6 ra 4 LED ;R7=1_2, R6=3_4 MOV R7, #00010010B MOV R6, #00110100B CALL BP_2_B LOOP: ;Copy R5=>A,roi OR voi 70H MOV A,R5 ORL A, #70H CALL XUAT ;Copy R4=>A,OR voi 0B0H MOV A, R4 ORL A, #0B0H CALL XUAT ;Copy R3=>A,OR voi 0D0H MOV A, R3 ORL A, #0D0H CALL XUAT ;Copy R2=>A,OR voi 0E0H MOV A,R2 ORL A, #0E0H CALL XUAT SJMP LOOP BP_2_B: ;R7=>R5_R4,R6=>R3_R2 MOV A,R7 PUSH ACC ANL A, #0FH MOV R4, A POP ACC ANL A, #0F0H SWAP A MOV R5,A MOV A,R6 PUSH ACC ANL A, #0FH MOV R2, A POP ACC ANL A, #0F0H SWAP A MOV R3,A RET XUAT: ;Xuat + Delay 3ms
  9. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 MOV DPTR, #0000H MOVX @DPTR, A ;Delay 3ms PUSH 00 PUSH 01 MOV R0, #6 L1: MOV R1, #250 DJNZ R1, $ DJNZ R0, L1 POP 01 POP 00 RET END Thí nghiệm 3: Viết chương trình thể hiện giá trị nhị phân trong thanh ghi R7 ra LED 7 đoạn. Code: ORG 2000H ;Bai 2 Thi nghiem 3 ;Hien thi gia tri nhi phan trong R7 len LED 7 doan MOV R7, #0A0H ;Example R7= 160 MOV A, R7 CALL BIN_2_BCD LOOP: ;R6=>A,OR voi 0B0H roi xuat ra LED_2 MOV A, R6 ORL A, #0B0H CALL XUAT ;R5=>A,OR voi 0D0H xuat ra LED_3 MOV A, R5 ORL A, #0D0H CALL XUAT ;R4=>A,OR voi 0E0H xuat ra LED_4 MOV A, R4 ORL A, #0E0H CALL XUAT SJMP LOOP BIN_2_BCD: ;R7=R6_R5_R4 MOV B, #10 DIV AB MOV R4,B MOV B, #10 DIV AB MOV R6, A MOV R5, B RET XUAT: ;Xuat + Delay 3ms MOV DPTR, #0000H MOVX @DPTR, A ;Delay 3ms PUSH 02 PUSH 03 MOV R2, #6
  10. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 L1: MOV R3, #250 DJNZ R3, $ DJNZ R2, L1 POP 03 POP 02 RET END Bài 3: Thí nghiệm hiển thị dùng LCD Thí nghiệm 1: Code: ORG 2000H ;**************************************************** ;Hien thi chuoi "Hello" tren LCD ;**************************************************** EN BIT P3.4 RS BIT P3.5 CALL INIT_LCD MAIN: MOV DPTR, #TABLE LOOP: CLR A MOVC A, @A+DPTR CJNE A, #0, NEXT SJMP $ NEXT: CALL WRITE_LCD INC DPTR SJMP LOOP ;------------------------------------------------------ INIT_LCD: SETB EN CLR RS MOV A, #38H CALL SEND_COM MOV A, #06H CALL SEND_COM MOV A, #0EH CALL SEND_COM RET SEND_COM: PUSH DPH PUSH DPL SETB EN CLR RS MOV DPTR, #8000H MOVX @DPTR, A CLR EN LCALL WAIT_LCD POP DPH
  11. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 POP DPL RET WRITE_LCD: PUSH DPH PUSH DPL SETB EN SETB RS MOV DPTR, #8000H MOVX @DPTR, A CLR EN LCALL WAIT_LCD POP DPH POP DPL RET WAIT_LCD: MOV R6, #200 DL1: MOV R7, #250 DJNZ R7, $ DJNZ R6, DL1 RET TABLE: DB 'Hello',0 END • Thí nghiệm thêm: viết chương trình hiển thị lên LCD chữ “DHBK TPHCM” dịch trái và dịch phải: ORG 2000H RS BIT P3.5 EN BIT P3.4 CALL LCD_INIT MOV DPTR, #TABLE MAIN: CLR A MOVC A,@A+DPTR CJNE A,#0,NEXT SJMP KT NEXT: CALL WRITE_LCD INC DPTR SJMP MAIN KT: MOV R1, #6 KT1: MOV A,#1CH CALL WRITE_COM
  12. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 CALL WAIT_LCD DJNZ R1,KT1 MOV R1,#6 KT2: MOV A,#18H CALL WRITE_COM CALL WAIT_LCD DJNZ R1,KT2 SJMP KT LCD_INIT: MOV A,#01H CALL WRITE_COM MOV A,#38H CALL WRITE_COM MOV A, #0EH CALL WRITE_COM MOV A,#06H CALL WRITE_COM RET WRITE_COM: PUSH DPH PUSH DPL MOV DPTR, #8000H CLR RS SETB EN MOVX @DPTR, A CLR EN CALL WAIT_LCD POP DPL POP DPH
  13. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 RET WAIT_LCD: MOV R6 ,#250 LOOP: MOV R7,# 250 DJNZ R7,$ DJNZ R6, LOOP RET WRITE_LCD: PUSH DPH PUSH DPL MOV DPTR ,#8000H SETB RS SETB EN MOVX @DPTR,A CLR EN LCALL WAIT_LCD POP DPL POP DPH RET TABLE: DB 'DHBK TPHCM',0 END Bài 4: Thí nghiệm giao tiếp qua cổng nối tiếp Thí nghiệm 1: Viết chương trình phát chuỗi ký tự “Hello, world” lên máy tính thông qua Hyper Terminal với tốc độ 19200pbs. Code: ORG 2000H MAIN: MOV TMOD, #20H MOV SCON, #42H MOV TH1, #-3 SETB TR1
  14. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 MOV DPTR, #TABLE NEXT: CLR A MOVC A, @A+DPTR CJNE A, #0, SEND SJMP $ SEND: JNB TI,$ CLR TI MOV SBUF,A INC DPTR SJMP NEXT TABLE: DB 'HELLO, WORLD',0 END Thí nghiệm 2: Viết chương trình nhận các ký tự từ  máy tính gửi đến EME­MC8 thông qua Hyper Terminal [bằng cách gõ các  ký tự trên  bàn phím khi đang ở trong chương trình Hyper Terminal] và hiển thị lên LCD. Code: ORG 2000H EN BIT P3.4 RS BIT P3.5 MAIN: MOV DPTR,#8000H CALL LCD_INTL CALL CLR_LCD CALL UART_INTL LOOP: CALL IN_CHAR CALL WRT_TXT SJMP LOOP UART_INTL: MOV SCON,#52H MOV TMOD,#20H MOV TH1,#-3 SETB TR1 RET OUT_CHAR: JNB TI,$ CLR TI MOV SBUF,A RET IN_CHAR: JNB RI,$ CLR RI CALL CLR_LCD MOV A,SBUF RET LCD_INTL: MOV A,#38H CALL WRT_COM MOV A,#0EH CALL WRT_COM MOV A,#06H CALL WRT_COM MOV A,#0CH CALL WRT_COM RET
  15. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 WAIT_LCD: MOV R7,#50 DEL: MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL RET WRT_TXT: CALL WAIT_LCD SETB RS MOVX @DPTR,A SETB EN CLR EN RET WRT_COM: CALL WAIT_LCD CLR RS MOVX @DPTR,A SETB EN CLR EN RET CLR_LCD: LCALL WAIT_LCD MOV A,#01H CALL WRT_COM RET END Thí nghiệm 3: Viết chương trình  nhận một ký tự từ cổng nối tiếp hiển thị lên LCD đồng thời phát ra cổng nối tiếp. Tốc độ tuỳ  chọn. Code: ORG 2000H EN BIT P3.4 RS BIT P3.5 MAIN: MOV DPTR,#8000H CALL LCD_INTL CALL CLR_LCD CALL UART_INTL LOOP: CALL IN_CHAR CALL WRT_TXT CALL OUT_UART SJMP LOOP UART_INTL: MOV SCON,#52H MOV TMOD,#20H MOV TH1,#-3 SETB TR1 RET OUT_CHAR: JNB TI,$ CLR TI MOV SBUF,A RET IN_CHAR: JNB RI,$
  16. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 CLR RI MOV A,SBUF RET LCD_INTL: MOV A,#38H CALL WRT_COM MOV A,#0EH CALL WRT_COM MOV A,#06H CALL WRT_COM MOV A,#0CH CALL WRT_COM RET WAIT_LCD: MOV R7,#50 DEL: MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL RET WRT_TXT: CALL WAIT_LCD SETB RS MOVX @DPTR,A SETB EN CLR EN RET WRT_COM: CALL WAIT_LCD CLR RS MOVX @DPTR,A SETB EN CLR EN RET OUT_UART: PUSH ACC MOV SBUF, A JNB TI,$ CLR TI POP ACC RET CLR_LCD: LCALL WAIT_LCD MOV A,#01H CALL WRT_COM RET END BÀI TẬP THÊM : Viết chương trình nhận ký tự từ cổng nối tiếp, đông thới phát ra cổng n ối tiếp, v ới điều ki ện: - Nếu ký tự nhân được là số thì xuất ra Led - Nếu ký tự nhân được là chữ A-Z, a-z thì xuất ra LCD - Nếu ký tự nhận được là Enter thì xuống hàng , là ESC thì xóa trong màn hình LCD. Mã ASCII của Enter là 13, ESC là 27 ORG 2000H EN BIT P3.4 RS BIT P3.5 MOV TMOD,#20H MOV TL1,#-3
  17. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 MOV TH1,#-3 MOV SCON,#52H SETB TR1 MOV R1,#0 MOV DPTR,#8000H ACALL LCD_INIT LAP: ACALL RECEIVE ; kiểm tra phím nhấn Enter CJNE A,#13,TT MOV A,#0C0H ACALL WRITE_CMD SJMP THOAT ; kiểm tra phím nhấn ESC TT: CJNE A,#27,TT1 MOV A,#01H ACALL WRITE_CMD SJMP THOAT TT1: ; bắt đầu kiểm tra phím nhấn là số CJNE A,#30H,SO SO: JC THOAT CJNE A,#3AH,CHU ; kết thúc kiểm tra phím nhấn là số CHU: JC LED CJNE A,#41H,KHAC ; bắt đầu kiểm tra phím nhấn là chữ hoa KHAC: JC THOAT CJNE A,#5BH,HOA ; kết thúc kiểm tra phím nhấn là chữ hoa HOA: JC NHO CJNE A,#61H,KHAC1 ; bắt đầu kiểm tra phím nhấn là chữ thường KHAC1: JC THOAT CJNE A,#7BH,THUONG ; kết thúc kiểm tra phím nhần là chữ thường THUONG: JC NHO SJMP THOAT NHO: MOV DPTR,#8000H INC R1 ; kiểm tra nếu hiển thị hết hàng đầu tiên thì xuông hàng trong màn hình LCD CJNE R1,#17,XUONG XUONG: JC XUATLCD PUSH ACC MOV A,#0C0H ACALL WRITE_CMD POP ACC MOV R1,#0 XUATLCD: ACALL WRITE_cHAR SJMP THOAT LED: MOV DPTR,#0000H ANL A,#0FH ORL A,#0E0H MOVX @DPTR,A THOAT: MOV DPTR,#8000H ACALL SEND SJMP LAP LCD_INIT: MOV A, #38H ACALL WRITE_CMD MOV A, #0EH ACALL WRITE_CMD
  18. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 MOV A, #06H ACALL WRITE_CMD MOV A, #01H ACALL WRITE_CMD RET WAIT_LCD: MOV R7,#100 LOOP: MOV R6, #250 DJNZ R6,$ DJNZ R7, LOOP RET WRITE_CHAR: ACALL WAIT_LCD SETB RS MOVX @DPTR,A SETB EN CLR EN RET WRITE_CMD: ACALL WAIT_LCD CLR RS MOVX @DPTR,A SETB EN CLR EN RET RECEIVE: JNB RI,RECEIVE MOV A, SBUF CLR RI RET SEND: JNB TI,SEND MOV SBUF,A CLR TI RET END Bài 5: Thí nghiệm điều khiển ADC Thí nghiệm 1: Viết chương trình thực hiện đọc điện áp của biến trở trên kênh 0 và hiển thị ra led 7 đoạn. Code: ORG 2000H MAIN: MOV TMOD,#20H LOOP: MOV DPTR,#4000H MOV A,#0 MOVX @DPTR,A CALL DELAY100US MOVX A,@DPTR CALL BINTOBCD MOV DPTR,#0000H MOV A,R2
  19. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 ORL A,#0E0H MOVX @DPTR,A CALL DELAY3MS MOV A,R3 ORL A,#0D0H MOVX @DPTR,A CALL DELAY3MS MOV A,R4 ORL A,#0B0H MOVX @DPTR,A CALL DELAY3MS SJMP LOOP DELAY100US: MOV TH1,#-100 MOV TL1,#-100 SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 RET BINTOBCD: MOV B,#10 DIV AB MOV R2,B MOV B,#10 DIV AB MOV R3,B MOV R4,A RET DELAY3MS: MOV R5,#10 LOOP1: MOV R6,#150 DJNZ R6,$ DJNZ R5,LOOP1 RET END Thí nghiệm 2: Viết chương trình thực hiện đọc điện áp của biến trở trên kênh 0 và hiển thị ra LCD. Code: ORG 2000H MAIN: CALL LCD_INIT MOV TMOD,#21H LOOP: MOV DPTR,#4000H MOV A,#0 MOVX @DPTR,A CALL DELAY100US MOVX A,@DPTR CALL BINTOASCII CALL CLR_LCD MOV A,R4
  20. Thí nghiệm Vi xử lí – Học kì hè 09­10Nhóm 07 CALL WRITE_TEXT MOV A,R3 CALL WRITE_TEXT MOV A,R2 CALL WRITE_TEXT CALL DELAY3MS CALL DELAY3MS SJMP LOOP DELAY100US: MOV TH1,#-100 MOV TL1,#-100 SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 RET BINTOASCII: MOV B,#10 DIV AB MOV R2,B MOV B,#10 DIV AB MOV R3,B MOV R4,A MOV A,#30H ADD A,R2 MOV R2,A MOV A,#30H ADD A,R3 MOV R3,A MOV A,#30H ADD A,R4 MOV R4,A RET DELAY3MS: CLR TF0 MOV TH0,#HIGH[-10000] MOV TL0,#LOW[-10000] SETB TR0 JNB TF0,$ CLR TR0 RET LCD_INIT: MOV DPTR,#8000H SETB P3.4 CLR P3.5 MOV A,#38H MOVX @DPTR,A CLR P3.4 CALL DELAY3MS SETB P3.4 CLR P3.5 MOV A,#0EH MOVX @DPTR,A CLR P3.4 CALL DELAY3MS SETB P3.4

Chủ Đề