BÀI TẬP DÀI MÔN KỸ THUẬT VI XỬ LÝCâu 1: Viết CT đếm số dương trong miền nhớ 50 byte từ ô nhớ 38H tại RAM trong.. Tham khảo tại khoa-ha-noi/ky-thuat-vi-xu-ly/bai-tap-dai-vi-xu-ly-btl/7615
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG ĐIỆN – ĐIỆN TỬ
- -BÁO CÁO BÀI TẬP LỚN
VI XỬ LÝ
Giảng viên hướng dẫn: Nguyễn Tuấn Ninh
Họ và tên: Nguyễn Trung Dũng
MSSV: 20191779
Mã lớp học : 145343
Học kỳ : 20231
Hà Nội 2023
Trang 2BÀI TẬP DÀI MÔN KỸ THUẬT VI XỬ LÝ
Câu 1: Viết CT đếm số dương trong miền nhớ 50 byte từ ô nhớ 38H tại RAM trong
( Tham khảo tại https://www.studocu.com/vn/document/truong-dai-hoc-bach-khoa-ha-noi/ky-thuat-vi-xu-ly/bai-tap-dai-vi-xu-ly-btl/76150205 )
Cách nhận biết số dương: Trong sơ đồ mã hóa, bit ngoài cùng bên trái hay MSB bit là bit dấu Nó cho bộ xử lý biết về dấu của số - bit MSB bằng 1 thì là số âm, ngược lại bit MSB bằng 0 thì là số dương
Chọn R0 làm biến điếm số dương, R1 làm biến đếm số vòng lặp
Lưu đồ thuật toán:
Trang 3CODE 1:
ORG 00H MAIN : MOV R0 , #00 D MOV R1 , #50 D MOV DPTR , #0038 H LOOP 1:
MOV A , @DPTR
JB ACC.7 , LOOP 2 INC R0
LOOP 2 : INC DPTR DJNZ R1 , LOOP 1 END
Câu 2: Viết CT chuyển 2 mảng dữ liệu Biết mảng 1 có địa chỉ từ 1000H đến
1009H trong RAM ngoài và mảng 2 có địa chỉ từ 50H -59H trong RAM trong ( Tham khảo tại https://www.studocu.com/vn/document/truong-dai-hoc-bach-khoa-ha-noi/ky-thuat-vi-xu-ly/bai-tap-dai-vi-xu-ly-btl/76150205 )
Ta sử dụng:
1 R0 - con trỏ cho mảng RAM trong
2 R1 - biến đếm vòng lặp
3 DPTR - con trỏ mảng RAM ngoài
Lưu đồ thuật toán: Code 2:
Trang 4ORG 00H MAIN : MOV R0 , #50 H MOV R1 , #10 D MOV DPTR , #1000 H LOOP :
MOVX A , @DPTR XCH A , @R0 MOVX @DPTR , A INC R0
INC DPTR DJNZ R1 , LOOP END
Câu 3: Viết CT xóa 10byte trong vùng nhớ RAM trong có địa đầu là 6CH ( Tham khảo tại https://www.studocu.com/vn/document/truong-dai-hoc-bach-khoa-ha-noi/ky-thuat-vi-xu-ly/bai-tap-dai-vi-xu-ly-btl/76150205 )
Ta chọn R0 làm biến con trỏ địa chỉ bắt đầu (6CH), R1 là biến đếm vòng lặp Lưu đồ thuật toán: Code 3 :
ORG 00H MAIN :
Trang 5MOV R0 , #6 CH MOV R1 , #10 D LOOP :
MOV @R0 , #00 H INC R0
DJNZ R1 , LOOP END
Câu 4: Viết CT tính checksum 1byte (theo cách của lệnh ADD) của 1 frame dữ liệu 6byte trong vùng nhớ trong có địa chỉ đầu từ 20H Kết quả cất vào thanh ghi R7 Bank thanh ghi số 3
Lưu đồ thuật toán: Code 4:
ORG 00H MAIN:
Trang 6SETB PSW.3 SETB PSW.4 MOV R0, #20H MOV R1, #06H MOV R7, #00H LOOP:
ADD R7,@R0 INC R0 DJNZ R1,LOOP MOV R1, #lFH MOV @R1,R7 END
Trang 7Câu 5: Viết CT sử dụng Timer tạo xung tần số 10Hz tại chân P3.0 Biết xung nhịp thạch anh 12MHz (Ton =50%, Toff = 50%)
( Tham khảo tại https://tailieu.tv/tai-lieu/bai-tap-dai-vi-xu-ly-20018/ ) Tần số 10Hz => T=0,1s Ton=Toff=50.000us
Sử dụng Timer0 chế độ 16 bit , 15535D = 3CAFH
Code 5:
ORG 00H MAIN:
MOV TMOD, #01H LOOP:
MOV TH0, #3CH MOV TL0, #AFH SETB TR0 WAIT:
JNB TF0, WAIT CLR TR0 CPL P3.0 LJMP LOOP END
Trang 8Câu 7: Viết CT con truyền 10byte dữ liệu từ bộ nhớ ngoài có địa chỉ đầu là 100H qua cổng nối tiếp Biết cổng nối tiếp đã được khởi tạo sẵn, cổng truyền xong 1byte sẽ báo
cờ TI =1, và cờ TI sẽ tự xóa khi bắt đầu truyền 1 byte
(Tham khảo bài bạn Trịnh Cao Cường 20212714)
ORG 00H MAIN:
MOV R0, #10H MOV DPTR, #100H LCALL UART_TRANS_START HERE:
SJMP HERE UART_TRANS_START:
MOVX A,@DPTR MOV SBUF, A WAIT_TO_TRAINS:
JNB TI, WAIT_TO_TRAINS CLR TI
INC DPTR DJNZ R0, UART_TRANS_START RET
END
Trang 9Câu 8: Viết CT hiển thị giá trị trong thanh ghi Acc lên Led 7 thanh AC theo sơ đồ mạch hình sau Biết giá trị trong thanh ghi Acc < 9
Lưu đồ thuật toán: Code 8:
MALEG:
DB 0C0H,0F9H,0A4H,0B0H, 99H,92H,82H,8FH,80H,90H ORG 00H
MAIN:
MOV DPTR, #MALED MOV R0, #00H LOOP:
MOV A, R0 MOVX A, @A+DPTR MOV P1, A
END
Trang 10Lưu đồ thuật toán: Code 9:
MALEG:
DB 0C0H,0F9H,0A4H,0B0H, 99H,92H,82H,8FH,80H,90H ORG 00H
MAIN:
MOV DPTR, #MALEG MOV R0,#00H MOV A,#00H LOOP1:
MOVX @A+DPTR MOV P1,A LOOP2:
JNB INTO, LOOP2 INC R0
MOV A,R0 CJNE RO,#10H,LOOP1 END
Câu 9: Viết CT hiển thị số lần bấm phím PB1 lên Led 7 thanh AC theo sơ đồ mạch hình sau Biết số lần bấm phím từ 0-9
Trang 11Câu 10: Viết CT con đổi n ký tự thành chữ thường (nếu đang là chữ hoa) Biết chuỗi
ký tự trong bộ nhớ có địa chỉ đầu trong R0, độ dài trong R7
(Tài liệu tham khảo Hoàng Bá Luân 20181572)
Lưu đồ thuật toán: Code 10:
ORG 00H MAIN:
LOOP1:
CJNE @R0, #41H, LOOP4 LOOP2:
MOV A, @R0 ADD A, #32D MOV @R0, A LOOP3:
INC R0 DJNZ R7, LOOP1 RET
LOOP4:
JC LOOP3 CJNE @R0, #5AH, LOOP5 LJMP LOOP2
LOOP5:
JNC LOOP3 LJMP LOOP2