Báo cáo thí nghiệm Vi xử lý - Nguyễn Phước Lộc
PHẦN A: THÍ NGHIỆM VI ĐIỀU KHIỂN 89S52 5
Bài 1: Thí nghiệm với nút nhấn và Led đơn. 5
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 . 5
Thí nghiệm 2.1: 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. . 5
Thí nghiệm 2.2: . 5
Thay đổi tần số xung vuông thành 0.5Hz, với chu kì nhiệm vụ là 30%. 5
Thí nghiệm 3.1: . 6
Viết chương trình tạo xung vuông 1 Hz dùng Timer0 . 6
Thí nghiệm 3.2: . 6
Sử dụng ngắt Timer để tạo xung . 6
Thí nghiệm 4: . 7
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) . 7
Bài 2: Thí nghiệm hiển thị dùng LED 7 đoạn. 8
Thí nghiệm 1: . 8
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. 8
Thí nghiệm 2: . 8
Viết chương trình hiển thị giá trị 1234 ra LED 7 đoạn. . 8
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. . 9
Bài 3: Thí nghiệm hiển thị dùng LCD. 10
Thí nghiệm : Hiển thị dịch trái chuỗi “DHBK Tp.HCM” . 10
Bài 4: Thí nghiệm giao tiếp qua cổng nối tiếp. 12
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. . 12
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. . 13
Bài 5: Thí nghiệm điều khiển ADC. 15
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. 15
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. . 16
Bài 6: Thí nghiệm với LED ma trận. 18
Thí nghiệm 1: Viết chương trình hiển thị chữ A ra LED ma trận . 18Thí nghiệm Vi Xử Lý | 3
3 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2
Thí nghiệm 2: Viết lại chương trình hiển thị chữ A ra LED ma trận có sử dụng
chương trình con. 19
Bài 7: Thí nghiệm với động cơ DC. 20
Thí nghiệm1: Viết chương trình cho phép động cơ chạy theo chiều thuận trong
vòng 2s, nghỉ 2s, chạy theo chiều ngược 2s, nghỉ 2s và lặp lại. . 20
Thí nghiệm2: Viết chương trình điều khiển động cơ với phương pháp PWM, trong
đó thời gian bật của xung là 50% chu kỳ. 21
MOV DPTR, #8000H LCALL WAIT_LCD CLR RS MOVX @DPTR, A SETB EN CLR EN RET ; =============================================================== ; =============================================================== ; CT CON 16BIT / 16BIT ; [R3 R2 R1 R0] = [ R1 R0 ] / [ R3 R2] ; =============================================================== ; =============================================================== CHIA_16: MOV A, R2 ADD A, R3 CJNE A,#0,NNNN LJMP ERROR NNNN: Thí nghiệm Vi Xử Lý | 32 32 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 MOV R7, #0 ; CLEAR PARTIAL REMAINDER MOV R6, #0 MOV B, #16 ; SET LOOP COUNT DIV_LOOP: CLR C ; CLEAR CARRY FLAG MOV A, R0 ; SHIFT THE HIGHEST BIT OF RLC A ; THE DIVIDEND INTO... MOV R0, A MOV A, R1 RLC A MOV R1, A MOV A, R6 ; ... THE LOWEST BIT OF THE RLC A ; PARTIAL REMAINDER MOV R6, A MOV A, R7 RLC A MOV R7, A MOV A, R6 ; TRIAL SUBTRACT DIVISOR CLR C ; FROM PARTIAL REMAINDER SUBB A, R2 MOV DPL, A MOV A, R7 SUBB A, R3 MOV DPH, A CPL C ; COMPLEMENT EXTERNAL BORROW JNC DIV_1 ; UPDATE PARTIAL REMAINDER IF ; BORROW MOV R7, DPH ; UPDATE PARTIAL REMAINDER MOV R6, DPL DIV_1: MOV A, R4 ; SHIFT RESULT BIT INTO PARTIAL RLC A ; QUOTIENT MOV R4, A MOV A, R5 RLC A MOV R5, A DJNZ B, DIV_LOOP MOV A, R5 ; PUT QUOTIENT IN R0, AND R1 MOV R1, A MOV A, R4 MOV R0, A MOV A, R7 ; GET REMAINDER, SAVED BEFORE THE MOV R3, A ; LAST SUBTRACTION MOV A, R6 MOV R2, A ;'''''''''''''''''''''''''' MOV A, R0 MOV R2, A MOV A, R1 MOV R3, A LCALL BINTOASC LCALL HIENTHIKQ ;'''''''''''''''''''''''''''' RET ; ============================================================== ; ============================================================== ; CT CON 16BIT * 16BIT ; [R3 R2 R1 R0] = [ R1 R0 ] * [ R3 R2] ; ============================================================== ; ============================================================== Thí nghiệm Vi Xử Lý | 33 33 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 NHAN_16: MOV A, R0 MOV B, R2 MUL AB ; MULTIPLY XL X YL PUSH ACC ; STACK RESULT LOW BYTE PUSH B ; STACK RESULT HIGH BYTE MOV A, R0 MOV B, R3 MUL AB ; MULTIPLY XL X YH POP 00H ; RECALL XL*YL HIGH BYTE ADD A, R0 MOV R0, A CLR A ADDC A, B MOV DPL, A MOV A, R2 MOV B, R1 MUL AB ; MULTIPLY XH X YL ADD A, R0 MOV R0, A MOV A, DPL ADDC A, B MOV DPL, A CLR A ADDC A, #0 PUSH ACC ; SAVE INTERMEDIATE CARRY MOV A, R3 MOV B, R1 MUL AB ; MULTIPLY XH X YH ADD A, DPL MOV R2, A POP ACC ; RETRIEVE CARRY ADDC A, B MOV R3, A MOV R1, 00H POP 00H ; RETRIEVE RESULT LOW BYTE ;'''''''''''''''''''''''''' MOV A, R0 MOV R2, A MOV A, R1 MOV R3, A LCALL BINTOASC LCALL HIENTHIKQ ;'''''''''''''''''''''''''''' RET ; ============================================================== ; ============================================================== ; CHI SU DUNG BCD 3 DIGIT ; CT CON 16BIT + 16BIT ; [R3 R2 R1 R0] = [ R1 R0 ] + [ R3 R2] ; ============================================================== ; ============================================================== CONG_16: MOV A, R0 ; LOAD X LOW BYTE INTO ACC ADD A, R2 ; ADD Y LOW BYTE MOV R0, A ; PUT RESULT IN Z LOW BYTE MOV A, R1 ; LOAD X HIGH BYTE INTO ACC ADDC A, R3 ; ADD Y HIGH BYTE WITH CARRY MOV R1, A ; SAVE RESULT IN Z HIGH BYTE Thí nghiệm Vi Xử Lý | 34 34 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 MOV C, OV MOV R3, #0 MOV R2, #0 ;'''''''''''''''''''''''''' MOV A, R0 MOV R2, A MOV A, R1 MOV R3, A LCALL BINTOASC LCALL HIENTHIKQ ;'''''''''''''''''''''''''''' RET ; ============================================================== ; ============================================================== ; CHI SU DUNG BCD 3 DIGIT KQ = R1 R0 ; CT CON 16BIT - 16BIT ; [R3 R2 R1 R0] = [ R1 R0 ] - [ R3 R2] ; ============================================================== ; ============================================================== TRU_16: MOV A, R0 ; LOAD X LOW BYTE INTO ACC CLR C ; CLEAR CARRY FLAG SUBB A, R2 ; SUBRACT Y LOW BYTE MOV R0, A ; PUT RESULT IN Z LOW BYTE MOV A, R1 ; LOAD X HIGH INTO ACCUMULATOR SUBB A, R3 ; SUBTRACT Y HIGH WITH BORROW MOV R1, A ; SAVE RESULT IN Z HIGH BYTE MOV C, OV MOV R2,#0 MOV R3,#0 ;'''''''''''''''''''''''''' MOV A, R0 MOV R2, A MOV A, R1 MOV R3, A LCALL BINTOASC LCALL HIENTHIKQ ;'''''''''''''''''''''''''''' RET ; ============================================================== ; ============================================================== ; CHUYEN BCD 3 KI SO SANG BINARY ; ============================================================== ; ============================================================== BCD_2_BI: CLR C MOV A,22H SUBB A,#30H MOV 22H, A CLR C MOV A,21H SUBB A,#30H MOV 21H, A CLR C Thí nghiệm Vi Xử Lý | 35 35 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 MOV A,20H SUBB A,#30H MOV 20H, A CLR C MOV A, 50H CJNE A, #02H, GG2 MOV 20H, 22H MOV 22H, #0 MOV 21H, #0 GG2: CLR C CJNE A, #03H, GG4 MOV 20H, 21H MOV 21H, 22H MOV 22H, #0 GG4: CLR C MOV A, 22H MOV B, #100 MUL AB MOV R7,A MOV R6, B MOV A,21H MOV B, #10 MUL AB ADD A, 20H PUSH ACC MOV A,B ADDC A, #0 ADD A,R6 MOV B,A POP ACC ADD A,R7 MOV 23H, A ; BYTE THAP MOV A, B ADDC A, #0 MOV 24H, A ; BYTE CAO MOV 50H, #0 RET ; ============================================================== ; ============================================================== BI2BCD: MOV B, #10 DIV AB MOV 71H, B ; LUU HANG DON VI MOV B, #10 DIV AB MOV 72H, B ; LUU HANG CHUC MOV 73H, A ; LUU HANG TRAM RET ; ============================================================== ; ============================================================== HIENTHIKQ: MOV 55H, #9 MOV 50H, #0 MOV A, #0C9H CALL WRITE_COMMAND CLR C Thí nghiệm Vi Xử Lý | 36 36 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 MOV A, 30H SUBB A,#30H MOV 30H, A CLR C MOV A, 31H SUBB A,#30H MOV 31H, A CLR C MOV A, 32H SUBB A,#30H MOV 32H, A CLR C MOV A, 33H SUBB A,#30H MOV 33H, A CLR C MOV A, 34H SUBB A,#30H MOV 34H, A MOV A, 30H MOV DPTR, #TABLELCD MOVC A, @A+DPTR CALL WRITE_TEXT MOV A, 31H MOV DPTR, #TABLELCD MOVC A, @A+DPTR CALL WRITE_TEXT MOV A, 32H MOV DPTR, #TABLELCD MOVC A, @A+DPTR CALL WRITE_TEXT MOV A, 33H MOV DPTR, #TABLELCD MOVC A, @A+DPTR CALL WRITE_TEXT MOV A, 34H MOV DPTR, #TABLELCD MOVC A, @A+DPTR CALL WRITE_TEXT RET ; ============================================================== ; ============================================================== BINTOASC: MOV R0,#30h ; R0 = POUT MOV DPTR,#TAB ; R=TAB(P) COM1: CLR A ; P <- 0 MOVC A, @A+DPTR ; R <- TAB(P) Thí nghiệm Vi Xử Lý | 37 37 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 MOV R7, A INC DPTR CLR A MOVC A, @A+DPTR MOV R6, A MOV R4, #'0' ; C <- '0' SOMA: ; N <- N-R CLR C MOV A, R2 SUBB A, R6 MOV R2, A MOV A, R3 SUBB A, R7 MOV R3, A JC SAIDA ; If < 0 goto SAIDA INC R4 ; If >0 then C <- C +1 SJMP SOMA ; goto SOMA SAIDA: MOV A, R4 MOV @R0, A ;TABOUT (POUT) <- C MOV A, R2 ADD A, R6 ; N=N+R MOV R2, A MOV A, R3 ADDC A, R7 MOV R3, A INC R0 ; PSAIDA=PSAIDA +1 CLR A MOVC A, @A+DPTR CJNE A, #1, INCREMENTA ; TAB(P) = 1 ? RET ; If yes, END INCREMENTA: ; If No, P <- P+1 INC DPTR LJMP COM1 ; goto COM1 ; ============================================================== ; ============================================================== SO_SANH: CLR C MOV 60H,A SUBB A, #2BH JZ CONG CLR C MOV A,60H SUBB A, #2DH JZ TRU CLR C MOV A,60H SUBB A, #2FH Thí nghiệm Vi Xử Lý | 38 38 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 JZ CHIA CLR C MOV A,60H SUBB A, #2AH JZ NHAN CLR C MOV A,60H SUBB A, #0DH JZ THUCHIEN CLR C MOV A,60H CJNE A,#30H,X1 X1: JC ERROR CJNE A,#3AH,X2 X2: JNC ERROR MOV A,60H RET CONG: MOV 55H, #5 MOV 40H,#10 CALL BCD_2_BI MOV R0, 23H MOV R1, 24H LJMP NNEXT TRU: MOV 55H, #5 MOV 40H,#11 CALL BCD_2_BI MOV R0, 23H MOV R1, 24H LJMP NNEXT NHAN: MOV 55H, #5 MOV 40H,#12 CALL BCD_2_BI MOV R0, 23H MOV R1, 24H LJMP NNEXT CHIA: MOV 55H, #5 MOV 40H,#13 CALL BCD_2_BI MOV R0, 23H MOV R1, 24H LJMP NNEXT ERROR: MOV R0,#0 MOV R1,#0 MOV R2,#0 MOV R3,#0 MOV A, #0C9H CALL WRITE_COMMAND MOV R4, #5 Thí nghiệm Vi Xử Lý | 39 39 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 MOV A, #0 LOOPXC: PUSH ACC MOV DPTR, #TABLE MOVC A, @A+DPTR CALL WRITE_TEXT ; MOV A, #07H ; CALL WRITE_COMMAND POP ACC INC A DJNZ R4, LOOPXC MOV 55H, #9 RET THUCHIEN: CLR C MOV A, 55H SUBB A, # 5 JZ TIEPTUC MOV A, # 01H LCALL WRITE_COMMAND MOV R0,#0 MOV R1,#0 MOV R2,#0 MOV R3,#0 MOV 20H, #0 MOV 21H, #0 MOV 22H, #0 MOV 23H, #0 MOV 24H, #0 MOV 30H,#0 MOV 31H, #0 MOV 32H, #0 MOV 33H, #0 MOV 34H, #0 MOV 50H,#0 LJMP NNEXT TIEPTUC: CALL BCD_2_BI MOV R2, 23H MOV R3, 24H MOV A,40H CJNE A, #0AH, ZZ1 CALL CONG_16 RET ZZ1: CJNE A, #0BH, ZZ2 CALL TRU_16 RET ZZ2: CJNE A, #0CH, ZZ3 CALL NHAN_16 RET ZZ3: CJNE A, #0DH,ERROR Thí nghiệm Vi Xử Lý | 40 40 Báo cáo Thí nghiệm Vi Xử Lý Nhóm 2 CALL CHIA_16 RET TABLELCD: DB '0123456789' TABLE: DB 'ERROR' TAB: DW 10000 DW 1000 DW 100 DW 10 DW 1 END
File đính kèm:
- bao_cao_thi_nghiem_vi_xu_ly_nguyen_phuoc_loc.pdf