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