Tải bản đầy đủ (.docx) (25 trang)

Giải bài tập vi xử lý chương 6 Lưu Phú full

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (129.96 KB, 25 trang )

ĐẠ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Ử
---------***---------

VI XỬ LÝ
BÀI TẬP CHƯƠNG 6

GIÁO VIÊN HƯỚNG DẪN: LƯU PHÚ

TP HCM, ngày 01 tháng 04 năm 2020


MỤC LỤC


Câu 1: Các bài tập sau cho Fck=11.059Mhz,trừ trường hợp có ghi chú cụ thể. Mơ
phỏng trên Proteus từ bài 3 đến 7. Viết một đoạn chương trình khởi động cổng nối
tiếp làm việc như sau.
a. UART 8 bit baurate = 9600,cho phép thu
b. UART 9 bit baurate=19200,chỉ phát
c. UART 9 bit baurate=2400 sử dụng Timer2 MCU8052,cho phép thu
Bài làm
a)

b)



c)GIA TRI CAN NAP LAI LA -12



Câu 2:
a. Viết một chương trình con tên OUT_CHR9 phát một ký tự 9 bit gồm 8 bit chứa trong
(A) và bit thứ 9 là bit parity chẵn.
b. Viết một chương trình con tên IN_CHR9 thu một ký tự 9 bit gồm 8 bit cất vào (A)và
kiểm tra bit thứ 9 là bit parity chẵn,nếu sai parity set cờ C.
Bài làm
a)

b)


Câu 3: Viết một chương trình phát chuỗi ký tự cất trong RAM nội địa chỉ đầu 30H ra
cổng nối tiếp,sử dụng chương trình con OUT_CHR9 ở câu 2a,chuỗi ký tự kết thúc
bằng mã NULL(00H),phát luôn mã NULL.Cho baurate=9600.
ORG 00H
TAOCHUOI:MOV R1,#30H
MOV A,#41H
LOOP:

MOV @R1,A
INC R1
INC A
CJNE A,#4AH,LOOP
MOV A,#0
MOV @R1,A

INIT:



MOV SCON,#0C2H
MOV TMOD,#20H
MOV TH1,#-3
MOV TL1,#-3
SETB TR1
MOV R0,#30H
LAP:
MOV A,@R0
LCALL OUT_CHR9
INC R0
JNZ LAP
XUAT:
MOV R0,#30H
LP:

MOV A,@R0
MOV P1,A
CALL DELAY
INC R0
JNZ LP
JMP KT

OUT_CHR9:
MOV C,P
JNB TI,$
CLR TI


MOV TB8,C
MOV SBUF,A

RET
DELAY:
MOV R7,#4
LAP1:MOV R6,#250
LAP2:MOV R5,#250
DJNZ R5,$
DJNZ R6,LAP2
DJNZ R7,LAP1
RET
KT:
END
Câu 4: Viết một chương trình thu chuỗi ký tự từ cổng nối tiếp kết thúc bằng mã
NULL(thu luôn mã NULL),cất vào RAM nội địa chỉ đầu 50H,sử dụng chương trình
con IN_CHR9 ở câu 2b.Chuỗi ký tự được phát từ MCU như bài 3.Sau khi thu xong
chuỗi ký tự,xuất từng ký tự từ đầu đến cuối ra Port1 hiển thị barled 8 LED,thời gian
xuất 2 ký tự cách nhau 1s


Mô phỏng bài 3 và 4 kết hợp: viết chương trình phát khoảng 10 ký tự tạo sẵn trong
RAM nội địa chỉ đầu 30H nạp vào MCU phát,viết chương trình thu chuỗi ký tự nạp
vào MCU thu.
Bài làm
ORG 00H


INIT:
MOV SCON,#0D2H
MOV TMOD,#20H
MOV TH1,#-3
MOV TL1,#-3

SETB TR1
MOV R1,#50H
LAP:
CALL IN_CHR9
MOV @R1,A
INC R1
JNZ LAP
MOV @R1,A
XUAT:
MOV R0,#50H
LP:

MOV A,@R0
MOV P1,A
CALL DELAY_1S
INC R0
JNZ LP
JMP KT

IN_CHR9:
JNB RI,$


CLR RI
MOV A,SBUF
MOV C,P
ANL C,/RB8
MOV F0,C
MOV C,RB8
ANL C,/P

ORL C,F0
RET
DELAY_1S:
MOV R7,#4
LAP1:MOV R6,#250
LAP2:MOV R5,#250
DJNZ R5,$
DJNZ R6,LAP2
DJNZ R7,LAP1
RET
KT:
END


Câu 5: Vẽ sơ đồ MCU8051 kết nối trực tiếp với đèn LCD 16 ký tự và hai SW nhấn ký
hiệu là RE(thu) và SE(phát).Viết một chương trình thực hiện các cơng việc sau:
+ Nếu nhấn SW SE(tích cực mức 0),MCU xuất ký tự SO(0EH) ra cổng nối tiếp và tiếp tục
xuất
10 ký tự ASCII của số 0,1…,9 kết thúc bằng mã NULL ra cổng nối tiếp.Chuỗi ký tự phát
này
được cất trong bộ nhớ code.Sau đó quay lại kiểm tra phím tiếp
+ Nếu nhấn SW SI(tích cực mức 0),MCU xuất ký tự SI(0FH) ra cổng nối tiếp và chờ thu
chuỗi
ký tự ASCII kết thúc bằng mã NULL về cất trong RAM nội địa chỉ đầu 30H.
+ Xuất chuỗi ký tự thu được ra LCD,sau đó quay lại kiểm tra phím tiếp
+ Chống rung phím nhấn
+ Cho baudrate=9600
Bài làm

RS


BIT P2.0
RW

BIT P2.1

E

BIT P2.2

RE

BIT P0.0

SE

BIT P0.1

DBUS

EQU P1

;-------------------------------------------


ORG 00H
MOV SCON,#52H;CHE DO UART 8BIT CHO PHEP THU BAUDRATE
DO TIMER1
MOV TMOD,#20H


;TIMER1 MODE 2 AUTO RELOAD

MOV TH1,#-3
MOV TL1,#-3
SETB TR1

;KHOI DONG TIMER1 BAUDRATE 9600

CALL

CLEAR

CALL

INIT ;KHOI DONG LCD

MAIN:

CLR A

KT_SE:

JB

SE,KT_RE

CALL DELAY100MS
JNB SE,NHAN_SE
SJMP KT_SE
KT_RE:


JB

RE,KT_SE

CALL DELAY100MS
JNB RE,NHAN_RE
SJMP KT_RE
NHAN_SE:CALL MODE1
JMP MAIN
NHAN_RE:CALL CLEAR
CALL MODE2
JMP MAIN


;------------------------------------------MODE1:

CPL P2.7
MOV A,#0EH
CALL SEND
MOV DPTR,#TAB ;DPTR TRO TOI MESSAGE

L1:

CLR A
MOVC A,@A+DPTR
CALL SEND

;TRUYEN KI TU


INC DPTR;TRO TOI KI TU TIEP THEO
JZ

KT_PHAT ;KET THUC KHI GAP NULL (DA TRUYEN KI TU

NULL)
JMP L1

;LAP LAI

KT_PHAT:RET
;------------------------------------------MODE2:

CPL P2.6
MOV A,#0FH
CALL SEND

;TRUYEN KI TU #0FH

MOV R0,#30H
L2:

NULL)

CALL RECV

;NHAN KI TU

MOV @R0,A


;LUU VAO 30H++

JZ

;NEU KI TU LA NULL THI KT THU (DA THU KI TU

KT_THU


INC R0
JMP L2

;LAP LAI

KT_THU: MOV R0,#30H
L3:

MOV A,@R0
JZ

KT

CALL WRITETEXT
INC R0
JMP L3
KT:
RET
;------------------------------------------SEND:

JNB TI,$

CLR TI
MOV SBUF,A
RET

;------------------------------------------RECV:

JNB RI,$
CLR RI
MOV A,SBUF
RET

;------------------------------------------DELAY100MS:
MOV R7,#200


LAP1:

MOV R6,#250
DJNZ R6,$
DJNZ R7,LAP1
RET

;------------------------------------------DELAY:

MOV R7,#4

LAP: MOV R6,#250
DJNZ R6,$
DJNZ R7,LAP
RET

;------------------------------------------INIT: MOV A,#38H
CALL

WRITECOM

MOV A,#01H
CALL

WRITECOM

MOV A,#0EH
CALL

WRITECOM

MOV A,#06H
CALL

WRITECOM

RET
;------------------------------------------WRITECOM:
CLR RS


MOV DBUS,A
CLR RW
SETB E
CLR E
LCALL


DELAY

RET
;------------------------------------------WRITETEXT:
SETB RS
MOV DBUS,A
CLR RW
SETB E
CLR E
CALL

DELAY

RET
;------------------------------------------CLEAR:
MOV A, #01H
CALL

WRITECOM

RET
;------------------------------------------TAB:
DB

30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,0


;------------------------------------------END



Câu 6: Vẽ sơ đồ kết nối MCU8051 trực tiếp với đèn LCD 16 ký tự.Viết một chương
trình thực hiện các công việc sau:
+ MCU chờ thu mã lệnh(từ MCU phát mã lệnh như bài 5)từ cổng nối tiếp
+ Nếu nhận mã lệnh là SO(0EH),MCU sẽ chờ nhận tiếp chuỗi ký tự từ cổng nối
tiếp(chuỗi mã
ASCII ký tự từ 0 đến 9 và mã NULL)cất vào RAM nội địa chỉ đầu 30H,sau đó xuất chuỗi
ký tự
vừa thu được ra LCD.Sau đó quay lại chờ nhận mã lệnh tiếp
+ Nếu nhận mã lệnh là SI(0FH),MCU sẽ phát chuỗi 10 ký tự mã ASCII của chữ A,B,C,
…,I,J và
mã NULL ra cổng nối tiếp.Sau đó quay lại chờ nhận mã lệnh tiếp.
+ Cho baurate=9600
Bài làm
RS

BIT P2.0

RW

BIT P2.1

E

BIT P2.2

DBUS

EQU P1


;------------------------------------------ORG 00H
MOV SCON,#52H;CHE DO UART 8BIT CHO PHEP THU BAUDRATE
DO TIMER1
MOV TMOD,#20H

;TIMER1 MODE 2 AUTO RELOAD


MOV TH1,#-3
MOV TL1,#-3
SETB TR1

MAIN:

;KHOI DONG TIMER1 BAUDRATE 9600

CALL

CLEAR

CALL

INIT ;KHOI DONG LCD

CALL RECV
CJNE A,#0EH,SKIP
CALL CLEAR
CALL MODE1
JMP MAIN


SKIP: CJNE A,#0FH,MAIN
CALL MODE2
JMP MAIN
;------------------------------------------MODE1:

CPL P2.7
MOV R0,#30H

L2:

CALL RECV

;NHAN KI TU

MOV @R0,A

;LUU VAO 30H++

JZ

;NEU KI TU LA NULL THI KT THU (DA THU KI TU

KT_THU

NULL)
INC R0
JMP L2
KT_THU: MOV R0,#30H

;LAP LAI



L3:

MOV A,@R0
JZ

KT

CALL WRITETEXT
INC R0
JMP L3
KT:
RET
;------------------------------------------MODE2:

CPL P2.6
MOV DPTR,#TAB ;DPTR TRO TOI MESSAGE

L1:

CLR A
MOVC A,@A+DPTR
CALL SEND

;TRUYEN KI TU

INC DPTR;TRO TOI KI TU TIEP THEO
JZ


KT_PHAT ;KET THUC KHI GAP NULL (DA TRUYEN KI TU

NULL)
JMP L1

;LAP LAI

KT_PHAT:RET
;------------------------------------------SEND:

JNB TI,$
CLR TI
MOV SBUF,A
RET


;------------------------------------------RECV:

JNB RI,$
CLR RI
MOV A,SBUF
RET

;------------------------------------------DELAY:

MOV R7,#4

LAP: MOV R6,#250
DJNZ R6,$
DJNZ R7,LAP

RET
;------------------------------------------INIT: MOV A,#38H
CALL

WRITECOM

MOV A,#01H
CALL

WRITECOM

MOV A,#0EH
CALL

WRITECOM

MOV A,#06H
CALL

WRITECOM

RET
;------------------------------------------WRITECOM:


CLR RS
MOV DBUS,A
CLR RW
SETB E
CLR E

LCALL

DELAY

RET
;------------------------------------------WRITETEXT:
SETB RS
MOV DBUS,A
CLR RW
SETB E
CLR E
CALL

DELAY

RET
;------------------------------------------CLEAR:
MOV A, #01H
CALL

WRITECOM

RET
;------------------------------------------TAB:


DB
;--

41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,0


----------------------------------------END

Câu 7:
a.Vẽ sơ đồ giao tiếp MCU8051 với DIP-SW8 ở Port1,SW nhấn với P2.0 và cổng nối tiếp
với IC shift register 74LS164.Viết chương trình đọc data từ DIP-SW khi có phím nhấn(tích
cực mức 0-chống rung phím),xuất data đọc được ra cổng nối tiếp để shift ra shift reg.
b. Vẽ sơ đồ giao tiếp MCU8051 với barled 8 led ở Port1,SW nhấn với P2.0,cổng nối tiếp
với IC
shift reg. 74LS165.Viết một chương trình khi có SW nhấn(tích cực mức 0-chống rung
phím)
nạp data từ 8 input của shift reg. và shift data vào cổng nối tiếp,sau đó xuất data thu được
ra
Port1.
Bài làm
a)

ORG 00H
SW EQU P2.0
STA EQU P2.1
MOV SCON,#00000010B

CHECK: MOV R7,#50
LAP: JB SW,CHECK
DJNZ R7,LAP


CLR STA
SETB STA
JNB TI,$

CLR TI
MOV A,P1
MOV SBUF,A
JMP CHECK
END
b) SW BIT

START

P2.0

BIT P2.1

BAR_LED EQU P1
ORG 00H
MOV SCON,#00010010B ;MODE 0 BAUDRAT=DAO DONG NOI /12;
CHO PHEP THU
CHECK:

MOV R7,#50

LAP: JB

SW,CHECK
DJNZ R7,LAP
CLR START
SETB START
JNB RI,$
CLR RI
MOV A,SBUF

MOV BAR_LED,A


JMP CHECK
END


×