Báo cáo Thí nghiệm Vi xử lý - Nguyễn Trọng Tuấn (Bản đẹp)
Bài 1: QUANG BÁO
Các phím chức năng của chương trình:
P1.0: Thay đổi chiều dịch của dữ liệu
P1.1: Thay đổi tốc độ dịch
P1.2: Start chương trình và restart chương trình sau khi stop
P1.3: Stop chương trình
P1.4: Reset chương trình
CALL INIT_LCD MOV A, #0CH CALL INIT_LCD MOV A, #06H CALL INIT_LCD MOV A, #01H CALL INIT_LCD MOV A, #80H CALL INIT_LCD RET WAIT_LCD: MOV R7, #4 BB: MOV R6, #250 DJNZ R6, $ DJNZ R7, BB RET INIT_LCD: MOV DPTR,#8000H LCALL WAIT_LCD CLR RS MOVX @DPTR,A SETB EN CLR EN RET WRITE_TEXT: MOV DPTR,#8000H LCALL WAIT_LCD SETB RS MOVX @DPTR,A SETB EN CLR EN RET TRA_BANG: MOV DPTR,#TABLE MOVC A,@A+DPTR RET TRA_BANG2: MOV DPTR,#TABLE2 MOVC A,@A+DPTR RET DELAY_100US: MOV R6,#200 DJNZ R6,$ RET SEND: JNB TI,SEND MOV SBUF,A CLR TI RET TABLE: DB 'KLUONG: GIA: 000 SET' TABLE2: DB 'KL: GIA:000TIEN: RUN' END Bài 3: MÁY GIẶT Các phím chức năng của chương trình MÁY GIẶT : P1.0: Lựa chọn chế độ giặt P1.1: Máy bắt đầu vào chương trình giặt P1.2: Báo hiệu máy giặt đổ nước xong P1.3: Báo hiệu máy giặt xả nước xong P1.5: Reset , chương trình quay về ban đầu ORG 0000H LJMP MAIN Địa chỉ bắt đầu chương trình , điạ chỉ vector ngắt Timer 0 , Timer 1 ORG 000BH LJMP ISR_T0 ORG 001BH LJMP ISR_T1 MAIN: MOV P1, #0FFH MOV R2, #2 MOV R1, #0 Khởi tạo các giá trị trong thanh ghi R2 =2 nhằm để lặp vòng 2 lần giặt , R1=0 để bắt đầu chọn chế độ giặt Khởi tạo Timer1, SCON để phát một chuỗi kí tự lên màn hình , và đặt tên cho bit P3.4 , P3.5 nhằm xuất lên LCD RS BIT P3.5 EN BIT P3.4 MOV TMOD, #20H MOV TL1, #-3 MOV TH1, #-3 MOV SCON, #52H SETB TR1 MOV A, #0CH ACALL SEND Xuất dòng chữ ‘ CHON CHE DO ‘ lên màn hình máy tính cũng như LCD Quá trình có sự thay đổi dữ liệu trong thanh ghi DPTR về việc lấy dữ liệu từ ROM và việc lấy địa chỉ giải mã của LCD . Do đó , chương trình dùng 2 thanh ghi R0,R4 để làm biến trung gian lưu thanh ghi DPTR trước mỗi lần thay đổi MOV DPTR, #8000H ACALL START1 MOV DPTR, #TABLE MOV R0, DPH MOV R4, DPL QUAY: MOV DPH, R0 MOV DPL, R4 CLR A MOVC A,@A+DPTR INC DPTR MOV R0, DPH MOV R4, DPL CJNE A, #'0', NHAYL SJMP LOOP NHAYL: ACALL SEND ACALL WRITE_TEXT SJMP QUAY LOOP: Việc lựa chọn chế độ giặt dựa vào việc nhấn nút P1.0 Mỗi lần nhấn nút P1.0 , thanh ghi R1 sẽ được tăng lên 1 Sẽ có 3 chế độ giặt ứng với các giá trị 1 2 3 của thanh ghi R1 . Nếu R1 tăng đến 4 thì R1=0 JB P1.0, TTUC JNB P1.0, $ MOV A, #0CH ACALL SEND INC R1 CJNE R1, #4, NHAYK MOV R1, #1 NHAYK: MOV DPTR, #8000H ACALL START1 MOV DPTR, #TABLE1 MOV R0, DPH MOV R4, DPL LAPLAI: MOV DPH, R0 MOV DPL, R4 CLR A Khi nhấn nút P1.0 , chương trình sẽ thực hiện chế độ cài đặt tốc độ quay Sau đó chương trình sẽ xuất dòng chữ ‘ CHE DO GIAT?’ lên màn hình máy tính cũng như LCD Mỗi khi nhấn P1.0 , chương trình sẽ hiển thị lại chế độ cài đặt mới MOVC A,@A+DPTR CJNE A, #'0', CUOI SJMP TTTT CUOI: ACALL SEND INC DPTR MOV R0, DPH MOV R4, DPL ACALL WRITE_TEXT SJMP LAPLAI TTTT: MOV A, R1 ADD A, #30H ACALL SEND ACALL WRITE_TEXT MOV A, #10 ACALL SEND MOV A, #13 ACALL SEND MOV A, #0C0H ACALL INIT_LCD MOV DPTR, #TABLE2 MOV R0, DPH MOV R4, DPL LAPLAI5: MOV DPH, R0 MOV DPL, R4 CLR A MOVC A,@A+DPTR CJNE A, #'0', CUOI1 SJMP TTUC CUOI1: ACALL SEND INC DPTR MOV R0, DPH MOV R4, DPL ACALL WRITE_TEXT SJMP LAPLAI5 TTUC: JNB P1.1, START SJMP LOOP START: JNB P1.1, $ MOV A, #0CH ACALL SEND MOV DPTR, #8000H ACALL START1 Khi nhấn nút P1.1 , máy giặt sẽ bắt đầu đổ nước , nhấn nút P1.2 để báo hiệu máy giặt đã đổ nước xong Đồng thời chương trình cũng phát dòng chữ ‘ ĐANG ĐỔ NƯỚC ‘ lên màn hình máy tính cũng như LCD MOV DPTR, #TABLE3 MOV R0, DPH MOV R4, DPL LAPLAI3: MOV DPH, R0 MOV DPL, R4 CLR A MOVC A,@A+DPTR CJNE A, #'0', NHAYF JB P1.2, $ JNB P1.2, $ SJMP TTTT3 NHAYF: ACALL SEND INC DPTR MOV R0, DPH MOV R4, DPL ACALL WRITE_TEXT SJMP LAPLAI3 TTTT3: MOV A, #0CH ACALL SEND SETB P1.0 MOV TMOD, #21H CLR TR0 MOV R3, #20 Khi nhấn nút P1.2, máy giặt đổ nước xong . đèn LED trên chấn P1.0 sẽ sáng trong một khoảng thời gian để báo hiệu Sau đó chương trình sẽ vào chương trình giặt LAP: MOV TH0, #HIGH (-50000) MOV TL0, #LOW (-50000) SETB TR0 JNB TF0, $ CLR TF0 CLR TR0 CPL P1.0 DJNZ R3, LAP MOV DPTR, #8000H ACALL START1 MOV DPTR, #TABLE4 MOV R0, DPH MOV R4, DPL TT3: MOV DPH, R0 MOV DPL, R4 Xuất dòng chữ ‘ DANG GIAT ‘ lên màn hình máy tính và LCD như những hiển thị trước CLR A MOVC A,@A+DPTR CJNE A,#'0',NHAYP SJMP TT5 NHAYP: ACALL SEND INC DPTR MOV R0, DPH MOV R4, DPL ACALL WRITE_TEXT Chương trình sẽ truy xuất địa chỉ ngoại vi của motor , sau đó quá trình điều khiển motor quay dựa vào việc tràn Timer 0 và Timer 1 Ta sẽ cho motor quay với tốc độ cài đặt trước trong thanh ghi R1 nhờ việc điều chế xung PWM ở những duty cycles khác nhau Qúa trình quay sẽ diến ra theo trình tự : quay thuận 3s , nghỉ 1s , ngược 3s, nghỉ 1s , lặp lại 5 lần SJMP TT3 TT5: CLR TR0 CLR TR1 MOV DPTR, #0E000H CLR A MOV TMOD, #11H MOV IE, #82H SETB PT0 MOV R5, #5 LAPF: SETB 67H MOV R6, #150 SETB TF0 CLR ACC.1 LL1: JNB 66H, NHAYD SETB ACC.0 MOVX @DPTR, A JB 67H, LL1 SJMP LL2A NHAYD: CLR ACC.0 MOVX @DPTR, A JB 67H, LL1 CLR TR0 CLR TR1 LL2A: SETB 67H MOV R6,#50 SETB TF0 LL2: CLR ACC.0 CLR ACC.1 MOVX @DPTR, A JB 67H, LL2 CLR TR0 CLR TR1 SETB 67H MOV R6, #150 SETB TF0 CLR ACC.0 LL3: JNB 66H, NHAYR SETB ACC.1 MOVX @DPTR, A JB 67H, LL3 SJMP LL4A NHAYR: CLR ACC.1 MOVX @DPTR, A JB 67H, LL3 CLR TR0 CLR TR1 LL4A: SETB 67H MOV R6, #50 SETB TF0 LL4: CLR ACC.0 CLR ACC.1 MOVX @DPTR, A JB 67H, LL4 CLR TR0 CLR TR1 DJNZ R5, LAPF MOV IE,#0 MOV TMOD,#20H MOV TL1,#-3 MOV TH1,#-3 MOV SCON,#52H SETB TR1 MOV A,#0CH ACALL SEND MOV DPTR,#8000H ACALL START1 MOV DPTR ,#TABLE5 MOV R0,DPH MOV R4,DPL LLG: MOV DPH,R0 MOV DPL,R4 CLR A MOVC A,@A+DPTR CJNE A,#'0',LLK JB P1.3 , $ ; nhan nut P1.3 de bao hieu xa nuoc xong SETB P1.1 MOV TMOD ,#21H CLR TR0 MOV R3,#20 LAP5: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 CPL P1.1 DJNZ R3,LAP5 ;---------------------------------------------------------------- ; cho nhap nhay LED o P1.1 mot khoan thoi gian bao hieu xa nuoc xong ;------------------------------------------------------------------- DJNZ R2,KK1 ;------------------------------------------------------------------- ;chuong trinh giat se lap vong 2 lan sau do chuyen sang che do VAT ;------------------------------------------------------------------- SJMP TTUC9 LLK: ACALL SEND INC DPTR MOV R0,DPH MOV R4,DPL ACALL WRITE_TEXT SJMP LLG ;------------------------------------------ ;xuat dong chu ' DANG XA NUOC' ;---------------------------------------- KK1: LJMP START TTUC9: MOV A,#0CH ACALL SEND MOV DPTR,#8000H ACALL START1 MOV DPTR ,#TABLE6 MOV R0,DPH MOV R4,DPL LLT: MOV DPH,R0 MOV DPL,R4 CLR A MOVC A,@A+DPTR CJNE A,#'0',LLY SJMP LLE LLY: ACALL SEND INC DPTR MOV R0,DPH MOV R4,DPL ACALL WRITE_TEXT SJMP LLT ;----------------------------------- ; hien thi chu ' DANG VAT' ;----------------------------------- LLE: MOV DPTR,#0E000H CLR A MOV TMOD,#11H MOV IE,#82H SETB PT0 SETB TF0 MOV R1,#1 MOV R5,#6 LOOP1: SETB 67H MOV R6,#150 SETB TF0 CLR ACC.1 LLW: JNB 66H, NHAYD1 SETB ACC.0 MOVX @DPTR, A JB 67H, LLW NHAYD1: CLR ACC.0 MOVX @DPTR,A JB 67H, LLW DJNZ R5, LOOP1 ;-------------------------------------------- ;cho quay theo chieu thuan toc do cuc dai khoang 30s ;-------------------------------------------------- SETB 67H MOV R6, #200 SETB TF0 LLP: CLR ACC.0 CLR ACC.1 MOVX @DPTR, A JB 67H, LLP MOV IE, #0 MOV TMOD, #20H MOV TL1, #-3 MOV TH1, #-3 MOV SCON,#52H SETB TR1 MOV A,#0CH ACALL SEND MOV DPTR, #8000H ACALL START1 MOV DPTR, #TABLE7 MOV R0, DPH MOV R4, DPL LLT1: MOV DPH,R0 MOV DPL, R4 CLR A MOVC A,@A+DPTR CJNE A,#'0',LLY1 SJMP TTUCS LLY1: ACALL SEND INC DPTR MOV R0, DPH MOV R4, DPL ACALL WRITE_TEXT SJMP LLT1 TTUCS: MOV IE, #0 MOV TMOD, #21H MOV R3, #200 SETB P1.3 QUAY_LAI: MOV TH0, #HIGH (-50000) MOV TL0, #LOW (-50000) SETB TR0 JNB TF0, $ CLR TF0 CLR TR0 CPL P1.3 DJNZ R3, QUAY_LAI MOV A,#0CH ACALL SEND MOV DPTR, #8000H ACALL START1 MOV DPTR, #TABLE8 MOV R0, DPH MOV R4, DPL LLQ1: MOV DPH, R0 MOV DPL, R4 CLR A MOVC A,@A+DPTR CJNE A, #'0', LLK1 SJMP LLF1 LLK1: ACALL SEND INC DPTR MOV R0, DPH MOV R4, DPL ACALL WRITE_TEXT SJMP LLQ1 LLF1: JB P1.5, $ LJMP MAIN ISR_T0: SETB 66H CLR TR0 MOV TL0, #LOW (-20000) MOV TH0, #HIGH (-20000) SETB TR0 DJNZ R6, TT CLR 67H RETI TT: CJNE R1, #1,KHAC20 CLR TR1 MOV TL1, #LOW (-18000) MOV TH1, #HIGH (-18000) SETB TR1 SJMP EXIT KHAC20: CJNE R1, #2,KHAC50 CLR TR1 MOV TL1, #LOW (-10000) MOV TH1, #HIGH (-10000) SETB TR1 SJMP EXIT KHAC50: CJNE R1,#3,EXIT CLR TR1 MOV TL1, #LOW (-4000) MOV TH1, #HIGH (-4000) SETB TR1 SJMP EXIT EXIT: SETB ET1 RETI ISR_T1: CLR 66H CLR TR1 CLR ET1 RETI SEND: JNB TI, SEND MOV SBUF, A CLR TI RET START1: MOV A, #38H CALL INIT_LCD MOV A, #0CH CALL INIT_LCD MOV A, #06H CALL INIT_LCD MOV A, #01H CALL INIT_LCD MOV A, #80H CALL INIT_LCD RET WAIT_LCD: MOV R7, #4 BB: MOV R6, #250 DJNZ R6, $ DJNZ R7, BB RET INIT_LCD: MOV DPTR, #8000H LCALL WAIT_LCD CLR RS MOVX @DPTR, A SETB EN CLR EN RET WRITE_TEXT: MOV DPTR, #8000H LCALL WAIT_LCD SETB RS MOVX @DPTR, A SETB EN CLR EN RET TABLE: DB 'CHON CHE DO 0' TABLE1: DB 'CHE DO 0 ' TABLE2: DB 'GIAT ? 0' TABLE3: DB 'DANG DO NUOC 0' TABLE4: DB 'DANG GIAT 0' TABLE5: DB 'DANG XA NUOC 0' TABLE6: DB 'DANG VAT 0' TABLE7: DB 'GIAT XONG 0' TABLE8: DB 'QUAY LAI 0' END
File đính kèm:
- bao_cao_thi_nghiem_vi_xu_ly_nguyen_trong_tuan_ban_dep.docx
- TNVXL_TND1_T9.pdf