Câu 1:
+ Định chỉ trực tiếp
Mov 30h,#40h +Định chỉ gián tiếp
Mov 31h,#40h Mov R0,#31h Mov 30h,@R0 Câu 3 :
+ Định chỉ trực tiếp
Mov 35h,34h +Định chỉ gián tiếp
Mov R1,#34h Mov 35h,@R1
Câu 5 :
#include <sfr51.inc>
Org 00h
Main:
Mov A,#00h
Mov R0,#30h
Mov R1,#20
Lap:
Mov @R0,A
Inc R0
Djnz R1,Lap
Sjmp $
END
Câu 2 :
+ Định chỉ trực tiếp
Mov A,33h +Định chỉ gián tiếp
Mov R1,#33h Mov A,@R1 Câu 4 :
+Định chỉ trực tiếp
Mov A,40h Mov DPTR,#2000h Movx @DPTR,A +Định chỉ gián tiếp
Mov R0,#40h Mov A,@R0 Mov DPTR,#2000h Movx @DPTR,A Câu 6 :
#include <sfr51.inc> Org 00h
Main:
Mov A,#00h Mov DPTR,#4000h Lap1:
Mov R0,#50 Lap2:
Mov R1,#50 Lap3:
Movx @DPTR,A Inc DPTR
DJNZ R1,Lap3 DJNZ R0,Lap2 SJMP $
END
Trang 2#include <sfr51.inc>
Org 00h
Main:
Mov R0,#30h
Mov R1,#40h
Mov R2,#10
Lap:
Mov A,@R0
Mov @R1,A
Inc R0
Inc R1
DJNZ R2,Lap
SJMP $
END
Câu 9:
#include <sfr51.inc>
Org 00h
Main:
Setb P1.0
Lcall delay1ms
Clr P1.0
Lcall delay1ms
SJMP Main
;##############################
3
Delay1ms:
Mov R0,#250
Delay1:
Nop
Nop
DJNZ R0,Delay1
Ret
END
#include <sfr51.inc>
Org 00h Main:
Mov P1,#0FFh Mov R1,#50h Mov R2,#10 Nhan:
Mov R3,P1 Mov A,R3 Mov @R1,A Inc R1
DJNZ R2,Nhan SJMP $
END Câu 11:
f = 100KHz => 1 s có 100000 xung Vây độ rộng của xung cao = xung thấp
= 1/200000 = 5.10−6¿s) =5 chu kì máy
#include <sfr51.inc>
Org 00h Main:
Set P1.1 Mov 30h,#0FFh Mov 30h,#00h Nop
Clr P1.1 Mov 30h,#0FFh Mov 30h,#00h Nop
SJMP Main END
Trang 3Câu 12:
f = 100kHz => 1 s có 100000
xung ,mà chu kì làm việc D =40%
Độ rộng xung cao là 4.10 −6
(s) = 4 Chu kì máy
Độ rộng xung thấp là 6.10−6
(s) = 6 Chu kì máy
#include <sfr51.inc>
Org 00h
Main:
Setb P1.2
Mov 40h,#0FFh
Mov 40h,#00h
Clr P1.2
Mov 40h,#0FFh
Mov 40h,#00h
Nop
Nop
SJMP Main
END
Câu 14 :
#include <sfr51.inc>
Org 00h
Main:
Mov R0,#30h
Mov R1,#10
Mov A,#00h
Lap:
Add A,@R0
Inc R0
DJNZ R1,lap
Mov 2Fh,A
SJMP $
END
Câu 13:
f = 10 Hz => 1 s có 10 xung
Độ rộng xung cao =xung thấp = 1/20 = 0,05 s = 50 ms
#include <sfr51.inc>
Org 00h Main:
Setb P1.4 Lcall delay50ms Clr P1.4
Lcall delay50ms SJMP Main
;#################################
###
Delay50ms:
Mov R0,#50 Delay1:
Mov R1,#250 Delay2:
Nop Nop DJNZ R1,Delay2 DJNZ R0,Delay1 RET
END Câu 15
#include <sfr51.inc>
Org 00h Main:
Mov R1,#30h/Mov R2,#10 Mov A,#00h/Mov R3,#00h Lap:
Add A,@R1/Jnc Next/Inc R3 Next:
Inc R1 DJNZ R2,Lap Mov 2Fh,A Mov 2Eh,R3 SJMP $/END
Trang 4#include <sfr51.inc>
Org 00h
Main:
Mov A,30h
CJNE A,31h,KT_C
Setb F0
Sjmp HET
KT_C:
JC Next
Setb F0
Sjmp HET
Next:
Clr F0
HET:
END
Câu 18:In thường = In hoa+ 32 thập
phân
#include <sfr51.inc>
Org 00h
Main:
Mov R0,#50h/Mov R1,#20
Lap:
Mov A,@R0
Cjne A,#65,CHECK_C1
Add A,#32/ Mov @R0,A
Sjmp TIEP
CHECK_C1:
JC TIEP
Cjne A,#90,CHECK_C2
Add A,#32/ Mov @R0,A
Sjmp TIEP
CHECK_C2:
JNC TIEP/ Add A,#32
Mov @R0,A
TIEP:
Inc R0
DJNZ R1,Lap
SJMP $/END
#include <sfr51.inc>
Org 00h Main:
Mov R0,#50h Mov R1,#20 Lap:
Mov A,@R0 Cjne A,#65,KT_C Mov P1,A
Sjmp TIEP KT_C:
JC TIEP Cjne A,#90,KT_C2 Mov P1,A
Sjmp TIEP KT_C2:
JNC TIEP Mov P1,A TIEP:
Inc R0 DJNZ R1,Lap SJMP $
END Câu 19: Từ Mã ASCII sang BCD – 30h
#include <sfr51.inc>
Org 00h Clr C Main:
Mov R0,#50h Mov R1,#20 Lap:
Mov A,@R0 Subb A,#30h Mov @R0,A Inc R0
Djnz R1,Lap Sjmp $
END
Trang 5Câu 20 :
#include <sfr51.inc>
Org 00h
Main:
Mov R0,#0
Mov DPTR,#00FFh
Movx A,@DPTR
Mov R1,A
Mov DPTR,#0100h
Lap:
Movx A,@DPTR
Mov B,#2/DIV AB/Mov R2,B
Cjne R2,#0,BO_QUA/INC R0
BO_QUA:
INC DPTR/ Djnz R1,Lap
Mov DPTR,#00FEh
Mov A,R0/ Movx @DPTR,A
SJMP $
END
Câu 22 :
f = 500Hz => 1 s có 500 xung
Độ rộng xung cao =xung thấp
= 1/(2.500) =0.001 s = 1000.
10−6 = 1000 chu kì máy
#include <sfr51.inc>
Org 00h/ Mov TMOD,#01h
Main:
Setb P1.4/ Lcall delay
Clr P1.4/ Lcall delay
Sjmp Main
;##############################
#####
Delay:
Mov TH0,#HIGH(64536)
Mov TL0,#LOW(64536)
Setb TR0
Lap:
JNB TF0,Lap/ Clr TR0
Clr TF0/ RET
END
Câu 21 : 10ms = 0.01s =10000.10−6
=10000 chu kì máy Delay10ms:
Mov TMOD,#01H Mov TH0,#HIGH(55536) Mov TL0,#LOW(55536) Setb TR0
Lap:
JNB TF0,Lap/ Clr TR0 CLR TF0/ RET/ END Câu 23:
f = 1kHz => 1 s có 1000 xung
Động rộng xung cao = xung thấp
= 1/(2.1000)=5.10−4 = 500.10−6=
500 chu kì máy
#include <sfr51.inc>/Org 00h Main:
Setb p1.6/ Lcall delay_100CKM Setb p1.7/ Lcall delay_400CKM Clr p1.6/ Lcall delay_100CKM Clr p1.7/ Lcall delay_400CKM Sjmp Main
;#################################
#####
Delay_100CKM:
Mov TMOD,#02h/Mov TH0,#156 Mov TL0,#156/ Setb TR0
Lap1:
Jnb TF0,Lap1/ Clr TR0 Clr TF0/ RET
;####################
Delay_400CKM:
Mov TMOD,#01h Mov TH0,HIGH(65136) Mov TL0,LOW(65136) Setb TR0
Lap2:
Jnb TF0,Lap2 Clr TR0/ Clr TF0 RET/ END
Trang 6#include <sfr51.inc>
Org 00h
Mov TMOD,#01h
Main:
Setb P1.0/ Mov A,#25
Lcall delayAs/ Clr p1.0
Setb p1.1/ Mov A,#3
Lcall delayAs/ Clr P1.1
Setb P1.2/ Mov A,#28
Lcall delayAs/ Clr p1.2
Setb p1.3/ Mov A,#33
Lcall delayAs
Clr P1.3
Setb p1.4
Mov A,#3
Lcall delayAs
CLr p1.4
Setb P1.5
Mov A,#36
Lcall delayAs
Clr p1.5
Sjmp Main
;###########################
DelayAs:
Mov R0,A
Delay1:
Mov R1,#20
Delay2:
Mov TH0,#HIGH(15536)
Mov TL0,#LOW(15536)
Setb TR0
Lap: Jnb TF0,Lap
Clr TR0
Clr TF0
DJNZ R1,Delay2
DJNZ R0,Delay1
RET
END
#include <sfr51.inc> Org 00h
Main:
Mov Scon,#51h Mov TMOD,#20h Mov TH1,#-3 Setb TR1 Lap:
Jnb RI,Lap Clr RI Mov A,SBUF CJNE A,#02h,Lap START:
Jnb RI,STRAT Clr RI
Mov A,SBUF CJNE A,#03h,NHAN Sjmp $
NHAN:
Mov P0,A Sjmp STRAT END
Trang 7Câu 25 : Giả thiết với tốc độ động cơ
1000 (v/p) với tần số xung là 10k Hz
và chu kì làm việc là 50% Vậy tốc
độ động cơ là 500(v/p) với tần số
xung là 10kHz và chu kì làm việc là
25%.Các nút ấn khi chưa ấn ( 0
lojic) ,ấn (1lojic)
f = 10kHz => Độ rộng xung
ứng với thời gian làm việc 50% là =
50 chu kì máy
=> Độ rộng xung ứng với thời gian làm việc 25% là = 25 chu kì máy
#include <sfr51.inc>
Org 00h
Main:
Setb P1.0
Setb P1.1
Setb P1.2
Dung bit P1.0
Toc_do1 bit P1.1
Toc_do2 bit P1.2
Start:
Jnb
Toc_do1,CHECK_Tocdo2
Sjmp Xung_1
CHECK_Tocdo2:
Jnb Toc_do2,CHECK_Stop
Sjmp Xung_2
CHECK_Stop:
Jnb Dung,Strat
Sjmp Strat
Xung_1: ;độ rộng xung cao =
xung thấp = 50Chu kì máy
Jb Toc_do2,Xung2 ;2 chu
kì máy
Jb Dung,Start ;2 chu
kì máy
Setb p2.2
máy Lap:
Djnz R1,Lap ; 2 chu kì máy
máy
Clr P2.2
chu kì máy Lap1:
Djnz R1,Lap1 ; 2 chu kì máy
Nop Sjmp Xung_1 ; 2 chu kì máy
Xung_2: ;Độ dài xung cao là 25 chu
kì máy
;độ dài xung thấp là 75 chu
kì máy
Jb Toc_do1,Xung1 ;2 chu kì máy
Jb Dung,Start ; 2 chu kì máy
Setb p2.2 Mov R1,#12 ;1 chu kì máy
Lap2:
Djnz R1,Lap2 ; 2 chu kì máy
Clr P2.2 Mov R1,#34 ;1 chu kì máy
Lap3:
Djnz R1,Lap3 ; 2 chu kì máy
Sjmp Xung_2 ;2 chu kì máy
End
Trang 8#include <sfr51.inc>
Org 0h
SJMP MAIN
;====================
ORG 23H
CLR TI
RETI
;======================
Main:
MOV P2,#0FFH
MOV TMOD,#20H
MOV SCON,#42H
MOV TH1,#-3
MOV TL1,#-3
SETB EA
SETB ES
SETB TR1
LAP:
MOV SBUF,P2
LCALL DELAY_500MS
SJMP LAP
;====================
DELAY_500MS:
MOV R0,#250
BACK1:
MOV R1,#250
BACK2:
MOV R2,#4
BACK3:
DJNZ R2,BACK3
DJNZ R2,BACK2
DJNZ R0,BACK1
RET
;=====================
END
f = 2kHz => 1 s có 2000 xung
Độ rộng xung mức cao = mức thấp = 1/(2.2000) = 250.10 −6 = 250 Chu kì
Máy
#include <sfr51.inc>
Org 00h Ljmp Main
;######################
Org 0Bh CPL P1.7 RETI
;#######################
Org 30h Main:
Mov TMOD,#02h Mov TH0,#6 Mov TL0,#6 Mov IE,#82h Setb TR0 Lap: Sjmp Lap
END
Trang 9Câu 29 : Chu kì máy = 2.10−6
+Chân P1.0 Xung có f = 1kHz => Độ
rộng xung cao =xung thấp = 250 chu
kì máy
+Chân P1.1 Xung có f = 50Hz => Độ
rộng xung cao =xung thấp = 5000
chu kì máy
#include <sfr51.inc>
Org 00h
Sjmp Main
;#####################
Org 0Bh Mov TH0,#6 Mov TL0,#6 CpL p1.0 RETI
;#####################
Org 1BH Mov TH1,#HIGH(60536)
Mov TL1,#LOW(60536) CpL p1.1
RETI
;##################
Org 30h Main:
Mov TMOD,#12h Mov TH0,#6 Mov TL0,#6 Mov
TH1,#HIGH(60536)
Mov TL1,#LOW(60536) Setb TR0
Setb TR1 Mov IE,#8Ah Lap: Sjmp Lap END
Câu 30 :
#iclude <sfr51.inc>
Org 00h Sjmp Main
;########################
Org 0023h Ljmp Ngat
;#####################
Org 30h Main:
Mov DPTR,#mang Mov R0,#0
Mov TMOD,#20h Mov TH1,#-12 Mov Scon,#42h Mov IE,#90h Setb TR1 Lap:
Sjmp Lap
;############################ Ngat:
Mov A,R0 Movc A,@A+DPTR Mov SBUF,A
INC R0 CJNE R0,#10,TIEP Mov R0,#0
TIEP:
RETI Mang: DB
‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’ END
Trang 10#include <sfr51.inc>
Org 00h
Ljmp Main
;##############################
##
Org 1Bh
Ljmp Ngat
;#########################
Org 30h
Main:
Mov DPTR,#6200h
Mov TMOD,#10h
Mov TH1,#HIGH(15536)
Mov TL1,#LOW(15536)
Mov IE,#88h
Setb TR1
Lap: Sjmp Lap
;##############################
##
Ngat:
Mov TH1,#HIGH(15536)
Mov TL1,#LOW(15536)
Movx A,@DPTR
Mov P1,A
INC DPTR
Mov R0,DPH
Mov R1,DPL
CJNE R0,#63h,TIEP
CJNE R1,#0h,TIEP
TIEP:
RETI
END
#include <sfr51.inc>
Org 00h Ljmp Main
;##########################
Org 1Bh Ljmp Ngat
;############################
Org 30h Main:
Mov P1,#0FFh Mov R2,#100 Mov R0,#50h Mov TMOD,#10h Mov TH1,#HIGH(15536) Mov TL1,#LOW(15536) Mov IE,#88h
Setb TR1 Lap: Sjmp lap
;################################ Ngat:
Mov TH1,#HIGH(15536) Mov TL1,#LOW(15536) DJNZ R2,KET_THUC Mov A,P1
Mov @R0,A Mov R2,#100 INC R0 CJNE R0,#60h,KET_THUC Mov R0,#50h
KET_THUC: RETI
END
Trang 11Câu 34 :
#include <sfr51.inc>
Org 00h
Ljmp Main
;#######################
Org 023H
Ljmp Ngat
;###################
Org 30h
Main:
Mov TMOD,#20h
Mov PCON,#80h
Mov TH1,#-3
Mov SCON,#51h
Mov IE,#90h
Setb TR1
Lap: Sjmp Lap
;##############################
Ngat:
JB TI,BO_QUA
CLR RI
MOV A,SBUF
CJNE A,#02h,CHECK
Setb P1.3
Sjmp KET_THUC
CHECK:
CJNE A,#03h,KET_THUC
Clr p1.3
KET_THUC:
RETI
BO_QUA:
CLR TI
RET I
END
Câu 35:
#include <sfr51.inc>
Org 00h/ Ljmp Main
;######################
Org 003h/ Ljmp Ngat
;########################
Org 30h Main:
Mov P1,#0FFh Mov TMOD,#20h MOV SCON,#0C2h Mov TH1,#-6/ Setb IT0 Mov IE,#81h
Lap: Sjmp Lap
;############################### Ngat:
Setb TR1 Lap1:
Jnb TI,Lap1/ Clr TI Mov A,P1/ Mov SBUF,A
Câu 36 :
#include <sfr51.inc>
Org 00h/ Sjmp Main
;####################
Org 0013h/ Sjmp Ngat
;######################
Org 30h Main:
Mov A,#0/ Setb p3.0 Setb IT1 ;Chuyển về kiểu kích phát theo sườn
Mov IE,#84h Lap: Sjmp Lap
;##################
Ngat:
Add A,#1 /Cjne A,#100,Next Clr P3.0
Next:
RET I/ END