You are on page 1of 24

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA


KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ

BÀI TẬP CHƯƠNG 4

VI XỬ LÝ
GVHD: Nguyễn Trung Hiếu

Thành viên:
Phạm Hoàng Đông 1811942
Lâm Vinh Phú 1813541
Nguyễn Mạnh Toàn 1814368

TP.HCM – 10/2021
1a. Viết một chương trình xuất chuỗi xung vuông đối xứng tần số 5KHz ra P1.0 sử dụng Timer1.

f = 5000 Hz T = 200 us 200 MCs T high = T low = 100 MCs

ORG 0000H

MOV TMOD, #10H


LOOP: MOV TH1, #HIGH(-100)
MOV TL1, #LOW(-100)
SETB TR1
JNB TF1, $
CLR TF1
CLR TR1
CPL P1.0
SJMP LOOP
1b. Lặp lại câu a nhưng với tần số xung là 1KHz.

f = 1000 Hz T = 1000 us 1000 MCs T high = T low = 500 MCs

ORG 0000H

MOV TMOD, #10H


LOOP: MOV TH1, #HIGH(-500)
MOV TL1, #LOW(-500)
SETB TR1
JNB TF1, $
CLR TF1
CLR TR1
CPL P1.0
SJMP LOOP
2a. Viết một chương trình xuất chuỗi xung vuông đối xứng tần số 200Hz ra P1.0 sử dụng Timer0.

f = 200 Hz T = 5000 us 5000 MCs T high = T low = 2500 MCs

ORG 0000H

MOV TMOD, #01H


LOOP: MOV TH0, #HIGH(-2500)
MOV TL0, #LOW(-2500)
SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
CPL P1.0
SJMP LOOP
2b. Viết một chương trình xuất chuỗi xung vuông có D = 30% tần số 200Hz ra P1.0 sử dụng Timer0.

f = 200 Hz T = 5000 us 5000 MCs T high = 1500 MCs


T low = 3500 MCs

ORG 0000H

MOV TMOD, #01H


CLR P1.0
LOOP: JB P1.0, CASE2
CASE1: MOV TH0, #HIGH(-3500)
MOV TL0, #LOW(-3500)
SJMP CONTINUE

CASE2: MOV TH0, #HIGH(-1500)


MOV TL0, #LOW(-1500)

CONTINUE: SETB TR0


JNB TF0, $
CLR TF0
CLR TR0
CPL P1.0
SJMP LOOP
3. Thiết kế một mạch thỏa yêu cầu:

- Khi nút nhấn tại chân P1.2 được nhấn thì xuất xung có tần số f = 100Hz với D=50% tại chân P1.0.

- Khi nút nhấn tại chân P1.2 nhả ra thì P1.0 ở mức cao.

Cho phép viết chương trình cho bài toán có độ trễ vừa phải.

f = 100 Hz T = 10 000 us 10 000 MCs T high = T low = 5 000 MCs

ORG 0000H

MOV TMOD, #01H


LOOP: JB P1.2, CASE2
CASE1: SETB P1.0
SJMP LOOP

CASE2: MOV TH0, #HIGH(-5000)


MOV TL0, #LOW(-5000)
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
CPL P1.0
SJMP LOOP
4. Thiết kế một mạch xuất xung PWM (Pulse Width Modulation) với tần số 1KHz, chu kỳ nhiệm vụ thay
đổi từ Dmin = 10%T đến Dmax = 90%T thỏa yêu cầu:

- Xung được xuất ra tại chân P1.0

- Nút nhấn tại chân P1.5 được nhấn thì D tăng 5%, tối đa Dmax.

- Nút nhấn tại chân P1.6 được nhấn thì D giảm 5%, tối đa Dmin.

Cho phép viết chương trình cho bài toán có độ trễ vừa phải.

f = 1000 Hz T = 1 000 us 1 000 MCs T high = 900 MCs T low = 100 MCs

 Giải thuật:
 Chương trình:

ORG 0

MOV TMOD,#01H

MOV R2, #2

MOV R3, #18

AGAIN: MOV 30H,R2

MOV 31H,R3

JNB P1.5, LOC1

JNB P1.6, LOC2

CLR P1.0

LAP1: CALL DL1

DJNZ 30H,LAP1

SETB P1.0

LAP2: CALL DL1

DJNZ 31H,LAP2

JMP AGAIN

DL1: MOV TMOD,#01H

MOV TH0,#HIGH(-50)

MOV TL0,#LOW(-50)

SETB TR0

LOOP: JNB TF0, LOOP

CLR TF0

CLR TR0

RET

LOC1: CJNE R2,#18,AGAIN

INC R2

DEC R3

RET
LOC2: CJNE R2,#2,AGAIN

INC R3

DEC R2

RET

 Mô phỏng trong Protues


5. Viết chương trình thực hiện xuất chuỗi xung theo nguyên tắc sau ra chân P1.0.

Giải sử thạch anh 12 MHz

Thời gian có xung = thời gian mức thấp = 50 000 us = 50 000 MCs

Khi có xung:

T = 2000 us T high = T low = 1000 us = 1000 MCs

ORG 000H
MOV TMOD, #01H

AGAIN: MOV R7, #50


LOOP: MOV TH0, #HIGH(-1000)
MOV TL0, #LOW(-1000)
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
CPL P1.0
DJNZ R7, LOOP

MOV TH0, #HIGH(-50000)


MOV TL0, #LOW(-50000)
CLR P1.0
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
SJMP AGAIN

END
6. Trong 1 loại kỹ thuật điều chế tín hiệu:

- Bit 1 tương đương với 1 xung có chu kỳ 1ms và D = 25%

- Bit 0 tương đương với 1 xung có chu kỳ 1ms và D = 60%

Viết chương trình xuất 8 bit nằm trong thanh ghi R7 thành chuỗi xung ra chân P1.0 theo nguyên tắc đã
cho. (Lưu ý: Bit MSB truyền đi trước)

Ví dụ: Trong thanh ghi R7 chứa 1001 0101 thì chuỗi xung phát có dạng như hình

Giải thuật:

ACC.7=1

ACALL BIT0

ACALL BIT1
R0=0

UOT
DJNZ R0

R≠ 0

RL A
 Chương trình:

MOV R0,#8
BDAU:
JB ACC.7,CTBIT1
ACALL BIT0
SJMP SS
CTBIT1:
ACALL BIT1
SS: DJNZ R0,NHAY
SJMP OUT
NHAY: RL A
SJMP BDAU

SJMP $
BIT1:
SETB P1.0
ACALL DELAY250
CLR B P1.0
ACALL DELAY250
ACALL DELAY250
ACALL DELAY250
RET
DELAY250:
MOV TMOD, #01H
MOV TH0,#HIGH(-250)
MOV TL0,#LOW(-250)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
BIT0:
SETB P1.0
ACALL DELAY200
ACALL DELAY200
ACALL DELAY200
CLR B P1.0
ACALL DELAY200
ACALL DELAY200
RET
DELAY200:
MOV TMOD, #01H
MOV TH0,#HIGH(-200)
MOV TL0,#LOW(-200)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
7. Một hệ thống dùng vi xử lý 8051 được dùng để đếm số sản phẩm trên 1 băng tải. Cho biết số sản
phẩm tối đa mà hệ thống có thể đếm được là 250 sản phẩm. Số sản phẩm đếm được sẽ được hiển thị
dùng LED 7 đoạn. Khi số sản phẩm đạt tối đa thì 1 LED đơn gắn với P0.0 sẽ phát sáng.

a. Thiết kế mạch dùng để hiển thị số sản phẩm đếm được. Yêu cầu có thêm nút reset để khi nhấn thì sẽ
reset số sản phẩm đếm được về 0.
7b. Viết chương trình dùng để thực thi yêu cầu bài toán.

Giải thuật:
Chương trình:

LOOP: MOV TMOD,#50H


MOV TL1,#0
SETB TR1
MOV A,TL1
CJNE A,#250D,NHO
SJMP TRAN
NHO: MOV B,#100D
DIV AB
MOV P2,A
MOV A,B
MOV B,#10D
DIV AB
SWAP A
ORL A,B
MOV P1,A
SJMP LOOP
TRAN SETB P0.0
MOV TL1,#0
SJMP LOOP
8. vi xử lý 8051 được sử dụng để đo thời gian mức cao (độ rộng xung) của xung có tần số 8KHz. Kết quả
hiển thị trên LED 7 đoạn dưới dạng xx%.

a. Thiết kế mạch đo và hiển thị lên LED 7 đoạn.

Cho phép tính xâp xỉ.


8b. Viết chương trình thực thi yêu cầu bài toán.

Cho phép tính xâp xỉ.


9. Lặp lại câu 8 với xung bây giờ có tần số 100Hz. Yêu cầu tính chính xác.

ORG 0

L1: MOV TMOD , #01H

MOV TL0,#00H

MOV TH0,#00H

SETB TR0

JNB P0.0,$

JB P0.0,$

CLR TR0

MOV 25H,TH0

MOV A,25H

MOV B, #10

DIV AB

MOV R0,A

MOV A,B

ANL A,#0FH

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,A

MOV A,R0

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P1,A

SJMP L1

TABLE: DB 3Fh,06h,5Bh,4Fh,66h

DB 6Dh,7Dh,07h,7Fh,6Fh

DONE: NOP

END
 Mô phỏng trên protues
10. Vi xử lý 8051 được sử dụng để đo tần số của xung ngõ vào. Biết xung đó có tần số từ 1KHz tới 99KHz.
Kết quả hiển thị trên LED 7 đoạn.

a. thiết kế mạch đo và hiển thị LED 7 đoạn.


10b. . Viết chương trình thực thi yêu cầu bài toán.

Giải thuật:
ORG 0000H

MAIN: MOV TMOD, #0001 0101B


SETB P3.4
AGAIN: MOV TL0, #0
MOV TL1, #LOW(-1000)
MOV TH1, #HIGH(-1000)
SETB TR0
SETB TR1
JNB TF1, $
CLR TF1
CLR TR1
CLR TR0
MOV A, TL0
MOV B, #10
DIV AB
SWAP A
ORL AB
MOV P2, A
SJMP AGAIN

DONE: NOP
END

You might also like