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

Giải bài tập vi xử lý chương 7 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 (167.11 KB, 23 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 7
GIẢNG VIÊN HƯỚNG DẪN : LƯU PHÚ


Câu 1: Viết một chương trình xuất 2 chuỗi xung vuông đối xứng tần số 8Khz ra
P1.0, tần số 500Hz ra P1.1 sử dụng ngắt Timer.
;P1.0: XUNG 8KHZ => DEM 62.5US => TIMER0 MODE 2 (AUTORELOAD
8BIT)
;P1.1: XUNG 500HZ => DEM 1000US => TIMER1 MODE 1 16BIT
;-----------------------------------------------------------------

MAIN:

ORG

0000H

;diem vao reset

LJMP

MAIN

ORG



000BH

LJMP

T0ISR

ORG

001BH

LJMP

T1ISR

ORG

0030H

MOV

TMOD,#12H

MOV

TL0,#-63

MOV

TH0,#-63


SETB

TR0

SETB

TF1

;ep timer 1 tao ngat

MOV

IE,#8AH

;cho phep ngat cua hai timer

SJMP

$

;dia chi vector timer 0

;dia chi vector timer 1

;timer 1 mod 1,timer 0

mode 2

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



T0ISR:

CPL

P1.0

RETI
;----------------------------------------------------------------T1ISR:

CLR

TR1

MOV

TH1,#HIGH(-1000)

MOV

TL1,#LOW(-1000)

SETB

TR1

CPL

P1.1


RETI
;----------------------------------------------------------------END


Câu 2: Viết một chương trình sử dụng ngắt tạo chuỗi xung vuông đối xứng tần số
fs=20Hz điều chế sóng mang là chuỗi xung vuông đối xứng tần số fc=38Khz
như hình vẽ.

;XUNG VUONG DOI XUNG 20HZ DIEU CHE SONG MANG XUNG 38KHZ
;----------------------------------------------------------------ORG

0000H

LJMP

MAIN

ORG

000BH

LJMP

T0ISR

ORG

001BH


CPL

P1.0

;dia chi vector cua T0

;dia chi vector cua T1

RETI
;-----------------------------------------------------------------

MAIN:

ORG

0030H

CLR

P1.0

MOV

TMOD,#21H;timer1 mode2 timer0 mod1

MOV

TH1,#-13

;tao xung 38kHz


MOV

TL1,#-13

;tao xung 38kHz

SETB

TR0

SETB

TF0

;ep ngat timer 0

SETB

EA

;cho phep ngat toan cuc


SETB

ET0

;cho phep ngat timer0


SJMP

$

CLR

P1.0

CLR

TR0

MOV

TH0,#HIGH(-25000)

;tao xung 20Hz

MOV

TL0,#LOW(-25000)

;tao xung 20Hz

CPL

TR1

CPL


ET1

SETB

R0

T0ISR:

RETI
END

;tat timer0

;timer1 dang tat => bat; bat=>tat


Câu 3: Viết một chương trình tạo chuỗi xung mã hóa 4 bit data (nhập từ nibble
thấp P2)điều chế sóng mang tần số 38Khz trong thời gian mức1(tương tự như
bài 2) như hình dưới đây, xuất chuỗi xung nối tiếp ra P1.0.
Chu kỳ T=50ms,bit 1 Tp=3/4T,bit 0 Tp=1/4T,bit sync Tp=1/2T kết thúc chuỗi
xung,Tp là thời gian mức 1,MSB truyền trước.Ví dụ trong hình trên mạch mã hóa 4
bit 0101.
ORG

0000H

LJMP

MAIN


ORG

000BH

LJMP

T0_ISR

ORG

001BH

LJMP

T1_ISR

;---------------------------ORG

0030H

MOV

R1,#5

MOV

TMOD,#11H

LCALL


CHECKP2

SETB

TF0

SETB

TF1

SETB

EA

SETB

ET0

MAIN:


SJMP

$

;---------------------------CHECKP2:
MOV

P2,#0FH


MOV

A,P2

ANL

A,#0FH

SWAP

A

RET
;---------------------------COND:
RLC A
JC

ONE

MOV

R6,#HIGH(-12500) ;ZIP

MOV

R7,#LOW(-12500)

SJMP

CHECKSYNC


MOV

R6,#HIGH(-37500)

MOV

R7,#LOW(-37500)

ONE:

CHECKSYNC: DJNZ R1,KT
SYNC:
MOV

R6,#HIGH(-25000)

MOV

R7,#LOW(-25000)

MOV

R1,#5


LCALL
KT:

CHECKP2


RET

;----------------------------T0_ISR:
LCALL

COND

SETB

ET1

CLR

TR0

JC

SKIP

CLR

P1.0

CLR

ET1

MOV


TL0,R6

MOV

TH0,R7

SETB

TR0

SKIP:

RETI
;----------------------------T1_ISR:
CLR

TR1

MOV

TL1,#LOW(-13)

MOV

TH1,#HIGH(-13)

SETB

TR1


CPL

P1.0

RETI


END
Câu 4: Viết một chương trình tạo chuỗi xung mã hóa 4 bit data (nhập từ nibble
thấp P2)điều chế sóng mang tần số 38Khz trong thời gian mức1(tương tự như bài
2) như hình dưới đây, xuất chuỗi xung nối tiếp ra P1.0.
Thiết kế một mạch đo độ rộng xung có Tmax=10000µs.Hiển thị giá trị đo 4 digit
bằng LED 7 đoạn.Hiển thị LED cảnh báo khi T>10000µs.
- Vẽ sơ đồ phần cứng
- Chương trình chính chuyển đổi số nhị phân sang BCD và hiển thị giá trị đo T
- Sử dụng ngắt đọc giá trị đo T.
Bài làm:
Sơ đồ phần cứng:

Bài làm sử dụng các chương trình con HEX16_BCD, DIV16, SCANLED đã được
dựng từ các chương trước.


MAIN:

ORG

0000H

LJMP


MAIN

LJMP

EX0ISR

ORG

0013H

LJMP

EX1ISR

ORG

0030H

SETB

IT1

SETB

IT0

MOV

TMOD,#10H


MOV

IE,#85H

LCALL

SCAN_LED

SJMP

$

;---------------------------BAOTRAN: ;TRAN THI CHI BAO LED DON

ZIP:

MOV

A,TH1

CJNE

A,#27H,$+3

JC

ZIP

MOV


A,TL1

CJNE

A,#10H,$+3

JC

ZIP

CLR

P1.7

RET


;---------------------------EX0ISR:

MOV

TL1,#0

MOV

TH1,#0

SETB


TR1

RETI
EX1ISR:

KT:

CLR

TR1

LCALL

BAOTRAN

JNB

P1.7,KT

MOV

A,TL1

MOV

R2,TH1

LCALL

HEX16_BCD


LCALL

SCAN_LED

MOV

DPTR,#1000H; TATLED

MOV

A,#0FFH

MOVX

@DPTR,A

CLR

ET1

CLR

ET0

RETI


Câu 5: Viết một chương trình sử dụng ngắt Timer và cổng nối tiếp cứ mỗi 1s phát
data nhập từ DIP-SW8 ở Port 2. Cho fosc=11.059Mhz,baurate=9600.


COUNT

EQU

-48400

ORG

0

LJMP

MAIN

ORG

000BH

LJMP

TIMER0_ISR

ORG

0023H

LJMP

SP_ISR


;timer0 vector

;serialport vector

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

MAIN:

ORG

0030H

MOV

TMOD,#21H ;timer1 tao baudrate timer0 dem

MOV

TL1,#-3

MOV

TH1,#-3

SETB

TR1

MOV


SCON,#52H ;cho phep truyen

MOV

R0,#20

;50000x20=1s

SETB

TF0

;ki thuat ep' ngat timer 0

SETB

TR0

SETB

EA

1s
;baudrate 9600

;chay timer1


LOOP:


SETB

ET0

CJNE

R0,#0,LOOP ;lap de tao 1s

MOV

R0,#20

SJMP

LOOP

;-------------------------------------------------TIMER0_ISR:

SKIP:

CLR

TR0

DJNZ

R0,SKIP

MOV


A,P2

SETB

ES

MOV

TH0,#HIGH(COUNT)

MOV

TL0,#LOW(COUNT)

SETB

TR0

;chua duoc 1s thi bo qua
;doc dipswitch
;cho phep ngat serial port

RETI
;-------------------------------------------------SP_ISR:

MOV

SBUF,A


CLR

TI

CLR

ES

RETI
;-------------------------------------------------END

;tat' ngat serial port


Câu 6: Viết một chương trình sử dụng ngắt cổng nối tiếp thu data và hiển thị data
ra barled8 kết nối ở Port1.Cho fosc=11.059Mhz,baurate=9600. Mô phỏng bài 5
và 6 kết hợp.

ORG

0

LJMP

MAIN

ORG

0023H


LJMP

SP_ISR

;serialport vector

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

MAIN:

ORG

0030H

MOV

TMOD,#20H;timer1 tao baudrate

MOV

TL1,#-3

MOV

TH1,#-3

SETB

TR1


MOV

SCON,#52H ;cho phep truyen

SETB

EA

;cho phep ngat toan cuc

SETB

ES

;cho phep ngat serial

SJMP

$

;baudrate 9600

;chay timer1

;-------------------------------------------------SP_ISR:

MOV

A,SBUF


MOV

P1,A

CLR

RI

RETI

;dua kq ra barled8


;-------------------------------------------------END
Câu 7: Vẽ sơ đồ MCU8051 kết nối trực tiếp với ADC0808,nhận dạng kết thúc
chuyển đổi AD bằng ngắt,DIPSW3 chọn kênh chuyển đổi AD,LCD 16x2.Viết
một chương trình đọc data từ ngõ vào analog đã chọn, hiển thị giá trị data và
kênh tương ứng trên LCD.
Chương trình có sử dụng các chương trình con về LCD đã được dựng ở các chương
trước.

OE

BIT

P3.0

ALE

BIT P3.1


START

BIT

P3.4

RS

BIT

P3.5

RW

BIT

P3.6

E

BIT

P3.7

DBUS

EQU

P1


;-------------------------------------------------------ORG

0000H

LJMP

MAIN

ORG

0003H

LJMP

EX0_ISR

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


;CHUONG TRINH CHINH
MAIN:

LCALL

CLEAR

;XOA MAN HINH LCD

LCALL


INIT

;KHOI DONG LCD

MOV

IE,#81H

;CHO PHEP NGAT TOAN CUC

SETB

IT0

;NGAT CANH XUONG

SETB

ALE

SETB

START

CLR

ALE ;XUAT XUNG ALE CHOT DIA CHI

CLR


START

VA NGAT NGOAI0

LOOP:

KENH
;XUAT XUNG START BAT

DAU CHUYEN DOI
L:

MOV

A,#80H

LCALL

WRITECOM

LCALL

XUATCHUOI1

MOV

A,40H

LCALL


XULY

LCALL

XUATCHUOI2

SJMP

LOOP

;XU LY KET QUA

;-------------------------------------------------------;TRINH NGAT NGOAI 0
EX0_ISR:
SETB

OE

;CHO PHEP NGO RA


MOV

A,P2

MOV

40H,A


;LAY KET QUA

RETI
;-------------------------------------------------------;CHUONG TRINH CON XU LY KET QUA VA XUAT KET QUA
XULY:

MOV

B,#195

;NHAN A VOI 19.5mV DE CO

MUL

AB

MOV

R2,B

LCALL

HEX16_BCD

KQ BAN DAU

;KQ LA SO 16BIT (R2_A)
;KQ LA SO BCD LUU

TRONG (R2_B_A)

MOV

A,R2

;XUAT CHU SO PHAN

ADD

A,#30H

LCALL

WRITETEXT

MOV

A,#"."

LCALL

WRITETEXT

MOV

A,B

ANL

A,#11110000B


SWAP

A

ADD

A,#30H

LCALL

WRITETEXT

NGUYEN

PHAN

;XUAT DAU (.) THAP


MOV

A,B

ANL

A,#00001111B

ADD

A,#30H


LCALL

WRITETEXT

MOV

A,#"V"

LCALL

WRITETEXT

RET
;-----------------------------------------------------------------------------------;XUAT CHUOI KI TU "GIA TRI DO DUOC LA:"
XUATCHUOI1:

TTUC:

PUSH

ACC

MOV

DPTR,#TAB1

CLR

A


MOVC

A,@A+DPTR

INC

DPTR

LCALL

WRITETEXT

JNZ

TTUC

POP

ACC

RET
;-------------------------------------------------------;XUAT CHUOI KI TU "GIA TRI DO DUOC LA:"
XUATCHUOI2:
PUSH

ACC


TTUC1:


MOV

A,#0C0H

LCALL

WRITECOM

MOV

DPTR,#TAB2

CLR

A

MOVC

A,@A+DPTR

INC

DPTR

LCALL

WRITETEXT

JNZ


TTUC1

MOV

A,P0

ANL

A,#00000111B

ADD

A,#30H

LCALL

WRITETEXT

POP

ACC

RET
;-------------------------------------------------------TAB1:

DB

"GIA TRI:",0


TAB2:

DB

"KENH:",0

END


Câu 8: Lập lại bài tập 4.6 sử dụng ngắt khi có một trong bốn phím nhấn và thực
hiện hiển thị ra barled8 tương ứng.

MAIN:

ORG

0000H

LJMP

MAIN

LJMP

ISR

ORG

0030H


MOV

IE,#81H

;CHO PHEP NGAT TOAN

CUC, NGAT NGOAI INT0

CONTINUE:

TIEP1:

TIEP2:

TIEP3:

SETB

IT0

;NGAT CANH XUONG

CLR

C

CJNE

A, #00001110B, TIEP1


LJMP

MODE1

CJNE

A, #00001101B, TIEP2

LJMP

MODE2

CJNE

A, #00001011B, TIEP3

LJMP

MODE3

CJNE

A, #00000111B, CONTINUE

LJMP

MODE4

;NHAY VAO CHE DO 1


;NHAY VAO CHE DO 2

;NHAY VAO CHE DO 3

;NHAY VAO CHE DO 4

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

MOV

P2, #0

;SANG TAT CA CAC LED


SJMP

CONTINUE

;---------------------------------------------MODE2:

MOV

P2,#00000000B;CHOP NHAY CAC LED

LCALL

DELAY500MS

MOV


P2,#11111111B

LCALL

DELAY500MS

SJMP

CONTINUE

;--------------------------------------------MODE3:

MOV

R0,A

;CAT GIA TRI A

MOV

A, #01H

XOAY2:

MOV

R0,#8

XOAY1:


MOV

P2,A

LCALL

DELAY500MS

JC

EXIT1

;NEU CO C=1 => CO PHIM

NHAN => KT DE CHUYEN QUA MODE KHAC
RL

A

;NEU KO THAY DOI THI TIEP TUC

DJNZ

R0, XOAY1

SJMP

XOAY2


MOV

A,R0

JMP

CONTINUE ;TRO VE KIEM TRA A

DICH BIT

EXIT1:

;----------------------------------------------MODE4:

MOV

R0,A


MOV

A, #01111111B

XOAY4:

MOV

R0,#8

XOAY3:


MOV

P2,A

LCALL

DELAY500MS

JC

EXIT2

RR

A

DJNZ

R0, XOAY3

SJMP

XOAY4

MOV

A,R0

SJMP


CONTINUE

EXIT2:

;----------------------------------------------DELAY500MS:MOV

R7,#2

LAP1:

MOV

R6,#250

LAP2:

MOV

R5,#250

LAP3:

DJNZ

R5,LAP3

DJNZ

R6,LAP2


DJNZ

R7,LAP1

RET
;------------------------------------------------------------------ISR:

MOV

A,P1

ANL

A,#0FH

SETB

C

CO THAY DOI (KHONG DUNG A)

;DOC SWITCH
;LAY 4 BIT THAP
;DUNG CO C DE NHAN BIET


RETI
END




×