Professional Documents
Culture Documents
vi xử lý
vi xử lý
1. NOP 1ck
o Opcode: 00
2. RET 2ck
o Opcode: 22
3. RETI 2ck
Opcode: 32
o
4. SETB bit 2ck
o Opcode: D2
o Operand: Bit address
5. CLR A 1ck
o Opcode: E4
6. CLR bit 2ck
o Opcode: C2
o Operand: Bit address
Câu 2 (2 điểm): a) Trình bày về cấu trúc bộ nhớ RAM trong của vi xử lý 8051? (0.5 đ)
b) Cho đoạn chương trình Assembly của 8051 như sau: ….
MOV 20H, #55H
MOV A, #95H
MOV B, #9FH
ADD A, B
MOV R0, A
MOV 07H, C ….
- Dịch đoạn chương trình trên ra mã máy dạng hexa (0.5 đ)
- Đoạn chương trình trên mất bao nhiêu chu kì máy để thực hiện? Chú thích cho từng lệnh. (0.5 đ) - Sau
khi thực hiện đoạn chương trình trên, nội dung ô nhớ trong RAM có địa chỉ 20H nhận giá trị bao nhiêu?
Giải thích? (0.25 đ)
- Sau khi thực hiện đoạn chương trình trên, thanh ghi PSW nhận giá trị bao nhiêu? Giải thích? Biết trước
đó thanh ghi này đang có giá trị 00H. (0.25 đ)
Giải
Chú thích cho từng lệnh:
3. Sau khi thực hiện đoạn chương trình trên, nội dung ô nhớ
trong RAM có địa chỉ 20H nhận giá trị bao nhiêu?
Sau khi thực hiện đoạn chương trình trên, nội dung ô nhớ trong RAM có địa chỉ 20H sẽ nhận giá
trị là 55H. Lý do là vì lệnh MOV 20H, #55H đã gán giá trị 55H vào địa chỉ 20H.
4. Sau khi thực hiện đoạn chương trình trên, thanh ghi PSW
nhận giá trị bao nhiêu?
Trước khi thực hiện đoạn chương trình, thanh ghi PSW có giá trị là 00H. Sau khi thực hiện đoạn
chương trình, các bit của PSW có thể thay đổi dựa trên kết quả của phép tính ADD A, B.
A = 95H
B = 9FH
A + B = 95H + 9FH = 134H (vượt quá 8 bit)
Sau phép tính, A sẽ chứa giá trị 34H (phần thấp của kết quả), bit Carry (C) của PSW sẽ được đặt
thành 1 vì có sự tràn số ra ngoài 8 bit.
Do đó, PSW sẽ nhận giá trị là 82H (bit C=1 và các bit khác giữ nguyên).
Câu 3: Sử dụng Timer 0 chế độ 16-bit tạo 10 xung vuông (Ton = Toff = 50%) tần số 100 Hz tại
cổng P1.3 Biết xung nhịp thạch anh 12MHz - Tính toán giá trị cần nạp vào trong thanh ghi TH0, TL0.
(0.5 đ) - Thiết lập chế độ Timer 0 (0.5 đ) - Viết lưu đồ thuật toán thực hiện công việc. (1 đ) - Viết đoạn
chương trình thực hiện công việc theo lưu đồ thuật toán trên. (1 đ)
1. Tính toán giá trị cần nạp vào trong thanh ghi TH0, TL0
Để tạo ra 10 xung vuông với tần số 100 Hz tại cổng P1.3, cần xác định thời gian cần thiết cho
mỗi chu kỳ (Ton + Toff). Với tần số 100 Hz, mỗi chu kỳ là:
Với xung nhịp thạch anh 12 MHz, tần số máy là 12 MHz / 12 = 1 MHz (1 chu kỳ máy = 1 µs).
Soˆˊ chu kyˋ maˊy=5 ms=5000 µs=5000 chu kyˋ maˊy\text{Số chu kỳ máy} = 5 \text{ ms} =
5000 \text{ µs} = 5000 \text{ chu kỳ máy}Soˆˊ chu kyˋ maˊy=5 ms=5000 µs=5000 chu kyˋ maˊy
Vì Timer 0 ở chế độ 16-bit, nó đếm từ 0 đến 65535. Do đó, giá trị cần nạp vào thanh ghi TH0,
TL0 là:
Giaˊ trị caˆˋn nạp=65536−5000=60536=0xEC78\text{Giá trị cần nạp} = 65536 - 5000 = 60536 =
0xEC78Giaˊ trị caˆˋn nạp=65536−5000=60536=0xEC78
TH0 = 0xEC (giá trị cao) TL0 = 0x78 (giá trị thấp)
Câu 4: Viết chương trình nhận 100 byte từ cổng UART của 8051 theo chế độ 1, tốc độ 9600bps. Dữ
liệu nhận được cất vào bộ nhớ ngoài có địa chỉ từ 1000H. Biết thạch anh sử dụng có tần số là 11,0592
MHz
ORG 0H ; Đặt vùng nhớ bắt đầu từ địa chỉ 0H
MOV DPTR, #1000H ; Khởi tạo con trỏ DPTR đến vùng nhớ bắt đầu từ địa chỉ 1000H
MOV SCON, #50H ; Thiết lập UART: 8 bit dữ liệu, 1 bit stop, chế độ 1
MOV TMOD, #20H ; Thiết lập Timer 1 để tính toán baud rate
MOV TH1, #-6 ; Tốc độ baud rate 9600 bps với thạch anh 11.0592 MHz
MOV TL1, #-6
AGAIN:
JNB RI, AGAIN ; Chờ cho đến khi nhận được ký tự
DJNZ R7, AGAIN ; Lặp lại cho đến khi nhận được 100 byte