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 Câu 7: #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 Câu 8: #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 Câ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 Câu 16: #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: SJMP $ 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: Mov 2Fh,A Mov 2Eh,R3 SJMP $/END Câu 17 : #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 Inc R0 DJNZ R1,Lap SJMP $/END Câ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) Sjmp $ 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 TL0,#LOW(64536) Setb TR0 Lap: JNB TF0,Lap/ Clr TR0 Clr TF0/ RET END Câu 24 : #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 Mov TMOD,#01h Mov TH0,HIGH(65136) Mov TL0,LOW(65136) Setb TR0 Lap2: Jnb TF0,Lap2 Clr TR0/ Clr TF0 RET/ END Câu 26 : #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 Clr TF0 DJNZ R1,Delay2 DJNZ R0,Delay1 RET END Câ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: Clr P2.2 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 = Mov R1,#24 ;1 chu kì máy Lap: Djnz R1,Lap ; 2 chu kì máy Nop ;1 chu kì máy Clr P2.2 Mov R1,#21 ;1 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ì 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 Câu 27 : #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 máy Lap3: Djnz R1,Lap3 ; 2 chu kì máy Sjmp Xung_2 ;2 chu kì máy End Câu 28 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 ;===================== END Câ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) 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: CLR TI Setb TR0 Setb TR1 Mov IE,#8Ah Lap: Sjmp Lap END Câu 31 : #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 RETI Mang: DB ‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’ END Câu 32 : #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 . 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. => Độ 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>