BÀI TẬP DÀI VI XỬ LÝ - Pdf 11

BÀI TẬP DÀI VI XỬ LÝ
Họ tên: Đặng Đức Công. MSSV:20101181 Lớp: KSTN-ĐKTĐ-K55

Câu 1: Viết CT đếm số âm trong miền nhớ 100 byte từ ô nhớ 123H tại RAM ngoài
Bài làm:
Quy ước bit cao nhất(tức là bit 7) là bit dấu, và số
âm có bit cao nhất bằng 1.
Số các số âm đếm được lưu tại R1.
Địa chỉ 123H là địa chỉ thấp nhất trong 100 byte kề
nhau
Chương trình:
MAIN: MOV R0,#100
MOV DPTR,#123H
MOV R1,#00
LOOP: MOVX A,@DPTR
RLC A
JC NHAY
INC R1
NHAY: INC DPTR
DJNZ R0,LOOP
END
START
R0 #100
DPTR #123H
R1 #00
A @DPTR
RLC A
C = 1?

START
R2 #10
DPTR #1000H
R0 #70
A @DPTR
XCH A,@R0
@DPTR A
R0 += 1
DPTR += 1
R2 -= 1
R2 = 0?
END
YES
NO
Câu 3: Viết CT cộng hai số BCD 4 chữ số trong RAM trong, kết quả cất vào sô thứ 2 .
Biết số thứ 1 đặt tại ô nhớ 70H, và số thứ 2 đặt tại ô nhớ 60H.
Bài làm:
Quy ước 2 số BCD có byte thấp ứng với địa chỉ thấp.
Kết quả cất vào số thứ 2, nếu kết quả có tràn sẽ cất vào
byte 62H.
Chương trình:
MAIN: MOV R0,#70H
MOV R1,#60H
MOV R2,#2
CLR C
LOOP: MOV A,@R0
ADDC A,@R1

END
NO
Câu 4: Viết CT tính trung bình 10 byte trong Ram ngoài từ ô nhớ 1234H.
Bài làm:
Quy ước: Phép tính trung bình có thương trong R0, số
dư trong R1. Địa chỉ 1234H là địa chỉ thấp nhất trong 10 byte
kề nhau.
Chương trình:
MAIN: MOV DPTR,#1234H
MOV R0,#00
MOV R1,#00
MOV R2,#10
LOOP: MOVX A,@DPTR
MOV B,#10
DIV AB
ADD A,R0
MOV R0,A
MOV A,B
ADD A,R1
MOV R1,A
INC DPTR
DJNZ R2,LOOP
MOV A,R1
MOV B,#10
DIV AB
ADD A,R0
MOV R0,A
MOV R1,B
END
START

15535D = 3CAFH
Chương trình:

MAIN: MOV TMOD,#00000001B
SETB P1.0
LOOP: MOV R1,#10
LOOP1: MOV TH0,#3CH
MOV TL0,#0AFH
CLR TF0
SETB TR0
JNB TF0,$
CLR TR0
DJNZ R1,LOOP1
CPL P1.0
SJMP LOOP
END

START
TMOD #00000001B
P1.0 = 1
R1 #10
TH0 #3CH
TL0 #0AFH
TF0 = 0
TR0 = 1
TF0 = 0
YES

END START
TMOD #00000001B
P1.2 = 1
R1 #3
TH0 #0D8H
TL0 #0EFH
TF0 = 0
TR0 = 1
TF0 = 0
YES
N O
R1 -= 1
R1 = 0
NO
YES
CPL P1.0
R1 #7
P1.2 = 1
YES
NO
Câu 7: Viết CT con đọc 300 byte dữ liệu từ cổng nối tiếp và cất vào vùng nhớ có địa chỉ
đầu 100H. Biết cổng nối tiếp đã được khởi tạo sẵn, cổng cho phép đọc khi cờ RI =1, và cờ
RI sẽ tự xóa khi đọc xong 1 byte.
Bài làm:
Vùng nhớ là RAM ngoài

COUNT: MOV R0,#100

NO
A SBUF
@DPTR A
RI = 0
DPTR += 1
R0 -= 1
R0 = 0?
NO
YES
R0 #100
R1 -= 1
R1 = 0?
RET
YES
NO
Câu 8: Viết CT điều khiển đèn giao thông tại 1 ngã tư theo yêu cầu sau:
Biết điều khiển 0 là đèn sáng , 1 là đèn tắt.
Bài làm:
Chương trình chính:
MAIN: MOV A,#25
MOV P1,#11011110B
LCALL DELAY_A
MOV A,#3
MOV P1,#11011101B
LCALL DELAY_A
MOV A,#33
MOV P1,#11110011B
LCALL DELAY_A
MOV A,#3
MOV P1,#11101011B

A -= 1
A = 0?
NO
RET
YES
START
XANH1 1
DO2 1
A #25
LCALL DELAY_A
DO2 1
VANG1 1
A #3
LCALL DELAY_A
XANH2 1
DO1 1
A #33
LCALL DELAY_A
DO1 1
VANG2 1
A #3
LCALL DELAY_A
Câu 9: Viết CT hiển thị trên 2 LED 7 thanh đếm lùi từ 20s với sơ đồ phần cứng SV tự đề xuất.

Sử dụng Port2 của VĐK làm port dữ liệu, và 2 chân P3.0 và P3.1 điều khiển quét LED.
TIME EQU 20
ON EQU 4
COUNT EQU 125; lặp để đủ quét trong 1s
ORG 0000H
MAIN: MOV R0,#TIME

36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0

33nF
+5V
+5V
C2
33nF
R1
10k
470
470
470
470
470
470
470
470
R10
3.3k
R11
3.9k
R12
3.3k
R13
3.9k
C3
10uF
MAIN
R0 #TIME
R1 #COUNT
CALL HIEN_THI
R0 -= 1

RET
MA_SO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
GIẢI MÃ
DPTR #MA_SO
A @A+DPTR
RET
DELAY_A_MS
TMOD #01H
TF0 = 0
TH0 #0FCH
TL0 #018H
TR0 = 1
TF0 = 0?
RET
NO
YES
A = 0?
NO
YES
HIEN_THI
A R0
B #10
DIV AB
CALL GIAI_MA
P2 A
P3.0 = 1
A #ON
CALL DELAY_A_MS
P3.0 = 0

CLR C
CJNE A,#97,NOT_EQ2
SETB C
SJMP EXIT
NOT_EQ2: JC NOT_LOWER2 ; a < A < z?
SETB C
SJMP EXIT
NOT_LOWER2: CLR C ;𝐴 ∉ (𝑎, 𝑧)
SJMP EXIT
EXIT: RET
TEST
C = 1
A = #122?
NO
C = 0?
NO
C = 0
A = #97?
NO
C = 1?
NO
C = 1
RET
YES
YES
YES
C = 0
YES
TO_UPPER
A @R0


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status