command instructions
TRANSCRIPT
1
ชุดคําสั่ง
2
คําสั่งตาง ๆ ของไมโครคอนโทรลเลอรในตระกูล MCS-51 สามารถแบงออกเปนกลุมตาง ๆ ตามลักษณะการทํางานไดดังนี้
1. กลุมคําสั่งการโอนยายขอมูล (Data transfer instruction)2. กลุมคําสั่งทางคณิตศาสตร (Arithmetic instruction)3. กลุมคําสั่งทางลอจิก (Logical instruction)4. กลุมคําสั่งบูลีน (Boolean instruction) 5. กลุมคําสั่งการกระโดดและเรียกโปรแกรมยอย (Jump instruction)
3
กลุมคําสั่งการโอนยายขอมูล
คําสั่งการโอนยายขอมูลสามารถแบงออกเปน 3 กลุมยอยคือ
• การโอนยายขอมูลของหนวยความจําภายใน (Internal memory)
• การโอนยายขอมูลกับหนวยความจําภายนอก (External data memory)
• การโอนยายขอมูลกับหนวยความจําที่เก็บโปรเเกรม (Program memory)
4
กลุมคําสั่งการโอนยายขอมูล
1.กลุมคาํสัง่การโอนยายขอมูลของหนวยความจาํขอมูลภายใน1.กลุมคาํสัง่การโอนยายขอมูลของหนวยความจาํขอมูลภายใน
คําสั่งนี้ประกอบดวยคําสั่งที่ทําหนาที่กําหนดคาใหกับหนวยความจําแบบ 8 บิตและ 16 บิต การโอนยายขอมูลจากหนวยความจําตําแหนงหนึ่งไปอีกตําแหนงหนึ่ง การแลกเปลี่ยนขอมูล การเก็บและดึงขอมูลจากสแตก คําสั่งตางๆของกลุมนี้ แสดงในตารางที่ 1
5
กลุมคําสั่งการโอนยายขอมูล
Mnemonic Operation Addressing Modes ExecutionDir Ind Reg Imm Time
MOV A,<src> A = <src> * * * * 1MOV <dest>,A <dest> = A * * * 1MOV <dest>,<src> <dest> = <src> * * * * 2MOV DPTR,#data16 DPTR = 16 bit immediate constant * 2PUSH <src> INC SP : MOV @SP, <src> * 2POP <dest> MOV <dest>,@SP : DEC SP * 2XCH A,<byte> ACC and <byte> exchange data * * * 1XCHD A,@Ri ACC and @Ri exchange low nibble * 1
ตารางที่ตารางที่ 1 1 กลุมคําสั่งการโอนยายขอมูลของกลุมคําสั่งการโอนยายขอมูลของ Internal Memory & SFRInternal Memory & SFR
6
คําสั่ง MOV A,<source>
MOV A,34H ;DirectMOV R1,#21H ;R1=21HMOV A,@R1 ;IndirectMOV A,R1 ;RegisterMOV A,#12H ;ImmediateMOV B,P1
E5 3479 21E7E974 12H85 90 F0
7
คําสั่ง XCH A,<Byte>
MOV A, # 17H ; A = 17HMOV R0, # 25H ; R0 = 25HXCH A,R0 ;สลับคาระหวาง A กับรีจิสเตอร R0
25 17
A R017 25
เปนการสลับคาขอมูลใน A กับ ขอมูลใน <Byte>
8
คําสั่ง XCH A,<Byte>
ORG 1000HXCH A,R1ADD A,R0MOV R2,AXCH A,R1
1000 C91001 281002 FA1003 C9
เขียนโปรแกรมทํางานดงันี้ R2 = R1 + R0
ORG 1000HPUSH AMOV A,R1ADD A,R0MOV R2,APOP A
1000 C0 E01002 E91003 281004 FA1005 D0 E0
9
คําสั่ง XCHD A,@Ri
MOV A, # 34H ; A = 34HMOV R0,#20HMOV @R0, #56H ; @R0 = 56HXCHD A,@R0 ;สลับคา4 บิตต่ําระหวาง A กบัคาในตําแหนง 20H
A
@R0
3
5
4
6
3 6
5 4
สลับคา 4 บติต่ําระหวาง A กบัคาในหนวยความจําที่ตําแหนง @R0
(ตําแหนง 20H)
10
กลุมคําสั่งการโอนยายขอมูล
2. การโอนยายขอมูลกับหนวยความจาํขอมูลภายนอก2. การโอนยายขอมูลกับหนวยความจาํขอมูลภายนอก
ไมโครคอนโทรลเลอร MCS-51 สามารถติดตอกับหนวยความจําขอมูลภายนอกได 64 K ตําแหนงๆละ 8 บิต ซึ่งอาจแบงสวนหนึ่งของหนวยความจําเปนพอรตก็ได คําสั่งการโอนยายขอมูลกับหนวยความจําภายนอก(อาจเปนพอรตอินพุตหรือเอาตพุต) จะตองใชการอางตําแหนงที่อยูของขอมูลเปน 16 บิต คําสั่งตางๆ ในกลุมนี้แสดงในตาราง
11
กลุมคําสั่งการโอนยายขอมูล
Address Width Mnemonic Operation Execution Time8 bits MOVX A , @Ri Read External RAM @Ri 28 bits MOVX @Ri , A Write External RAM @Ri 216 bits MOVX A , @DPTR Read External RAM @DPTR 216 bits MOVX @DPTR , A Write External RAM @DPTR 2
ตารางแสดง กลุมคําสั่งการติดตอกับหนวยความจําขอมูลภายนอก
12
คําสั่ง MOVX A,@Ri
การอางตําแหนงของหนวยความจําภายนอกจะเปนแบบ Indirect โดยใชรีจิสเตอร R0 หรือ R1 รวมกับพอรตP2 เพือ่รวมเปน 16 บิต สําหรับกําหนดตาํแหนงของหนวยความจําขอมูลภายนอกตัวอยาง หากตองการนําขอมูลจากหนวยความจําขอมูลภายนอกทีต่ําแหนง 8010H มาเก็บไวในรีจิสเตอร A สามารถทําไดโดยใชคําสั่งตอไปนี้
MOV P2, #80H ; กําหนดตําแหนง 2 หลักสูงใหกับพอรต P2MOV R0, #10H ; กําหนดตําแหนง 2 หลักต่ําใหกับ R0 MOVX A, @R0 ; นําขอมูลในตําแหนง 8010H มากําหนดใหรีจิสเตอร A
8010H@P2:R0 7AH
External RAM
13
คําสั่ง MOVX A,@DPTR
ORG 1000HMOV P2,#80HMOV R1,#20HMOVX A,@R1MOV B,A
เขียนโปรแกรมทําการยายขอมูลจากหนวยความจําขอมูลภายนอกที่ตําแหนง 8020H มาเก็บที่รีจิสเตอร B
ORG 1000HMOV DPTR,#8020HMOVX A,@DPTRMOV B,A
14
MOV DPTR,#1F00HMOVX A,@DPTRMOV DPTR,#1EF0HMOVX @DPTR,A
1EF0H
1F20H
1F00H
EXTERNAL DATA MEMORY
ตองการยายขอมูลจาก 1F00H ไปที่ตําแหนง 1EF0H
Acc
15
ยายขอมูลจาก 1F00H-1F20H ไปที่ 1EF0H-1F10H1EF0H
1F10H
1F20H
1F00H
EXTERNAL DATA MEMORY
ยายขอมูลจาก 1F00H-1F20H ไปที่ตําแหนง 1EF0H-1F10H
MOV DPTR,#1F00HMOVX A,@DPTRMOV DPTR,#1EF0HMOVX @DPTR,AMOV DPTR,#1F01HMOVX A,@DPTRMOV DPTR,#1EF1HMOVX @DPTR,A……...
16
โปรแกรมการยายขอมูลจาก 1F00H-1F20H ไปที่ 1EF0H-1F10H
MOV DPTR,#1F00HMOVX A,@DPTRMOV DPTR,#1EF0HMOVX @DPTR,AMOV DPTR,#1F01HMOVX A,@DPTRMOV DPTR,#1EF1HMOVX @DPTR,A……...
MOV R7,#33 ;CounterMOV DPTR,#1EF0HMOV P2,#1FHMOV R0,#00H
LOOP: MOVX A,@R0MOVX @DPTR,AINC DPTR ;DPTR=DPTR+1INC R0 ;R0=R0+1DJNZ R7,LOOP ; DEC R7 ถา R7 ไมเปน 0 กระโดด
1EF0H1EF1H
1F10H
1F20H
1F00H1F01H@P2:R0
@DPTR
17
กลุมคําสั่งการโอนยายขอมูล
3.การโอนยายขอมูลจากหนวยความจาํโปรเเกรม(Program Memory)
ไมโครคอนโทรลเลอร MCS-51 สามารถติดตอกับหนวยความจําโปรแกรมภายนอกได 64 Kbytes การติดตอกับหนวยความจําโปรแกรม (ภายในหรือภายนอกตัวไมโครคอนโทรลเลอร) จะอานขอมูลจากหนวยความจําเขามาไดอยางเดยีวไมสามารถสงขอมูลออกไปที่หนวยความจําโปรแกรม ตําแหนงของหนวยความจําโปรแกรมที่อางถึงเปนขนาด 16 บิต
18
กลุมคําสั่งการโอนยายขอมูล
คําสั่งในกลุมนี้จะเปนคําสั่ง MOVC (MOVE CONSTANT) ซึ่งการทํางานของคําสั่งนี้จะทําให สัญญาณที่ขา PSEN (Program Store Enable) เเอกทีฟ ซึ่งการทํางานจะทําในลกัษณะของการเปดตาราง
Mnemonic Operation Execution TimeMOVC A,@A + DPTR Read Program Memory at (A+DPTR) 2MOVC A,@A + PC Read Program Memory at (A+PC) 2
19
คําสั่ง MOVC A,@A+DPTRORG 1000HMOV A,#02HMOV DPTR,#2000HMOVC A,@A+DPTRRET
1000 74 021002 90 20 001005 E0
ORG 2000H2000 30 TABLE: DB 30H2001 31 DB 31H2002 32 DB 32H2003 3A DB 3AH
1006 22
คาของ A จะเปนเทาใดหลังจากทําคําสั่ง MOVC A,@A+DPTR
20
การใชคําสั่ง Lookup table
0v0v0v0v0v0v0v0v
P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0
00HP1
8503H
0000H
FFFFH
01000000
Program memory
10000000
0000100000010000001000008502H
8501H8500H
8504H
MOV DPTR,#8500HMOV A,#00HMOVC A,@A+DPTRMOV P1,AMOV A,#01HMOVC A,@A+DPTRMOV P1,AMOV A,#02HMOVC A,@A+DPTRMOV P1,A
8051
DELAY
DELAY
21
การใชคําสั่ง Look up table
Buffer74LS244
Buffer74LS244
8051
a
f g b บสัขอมลู bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
e c • pt เซก็เมนต pt g f e d c b a
d
P1 P2
หากตองการให LED1 แสดงคา 4 และ LED2 แสดงคา 7 จะตองสงคาออกที่ P1 และP2มีคาเทาใด
LED1 LED2 P1.7 P1.0
“4” = 0 1 1 0 0 1 1 0
“7” = 0 0 0 0 0 1 1 1MOV A,#66HMOV P1,AMOV A,#07HMOV P2,A
22
การใชคําสั่ง Look up table ORG 0000DISPLAY: MOV A,#04H
MOV DPTR,#0100HMOVC A,@A+DPTRMOV P1,AMOV A,#07HMOV DPTR,#0100HMOVC A,@A+DPTRMOV P2,A
065B4F666D7D077F6F
3F 0100010101020103010401050106010701080109010A010B010C010D010E010F
777C395E7971
‘0’‘1’‘2’‘3’‘4’‘5’‘6’‘7’‘8’‘9’‘A’‘B’‘C’‘D’‘E’‘F’
ORG 0100H0100 3F065B4F DB 3FH,06H,5BH,4FH0104 666D7D07 DB 66H,6DH,7DH,07H 0108 7F6F777C DB 7FH,6FH,77H,7CH010C 395E7971 DB 39H,5EH,79H,71H
23
การใชคําสั่ง Lookup table
ORG 0000DISPLAY: MOV A,#04H
LCALL HEX_LEDMOV P1,AMOV A,#07HLCALL HEX_LEDMOV P2,ARET
HEX_LED: MOV DPTR,#0100HMOVC A,@A+DPTRRET
ถาตองการนําคาใน R7 ออกไปแสดงที่ 7 segment 2 ตัว ?
065B4F666D7D077F6F
3F 0100010101020103010401050106010701080109010A010B010C010D010E010F
777C395E7971
‘0’‘1’‘2’‘3’‘4’‘5’‘6’‘7’‘8’‘9’‘A’‘B’‘C’‘D’‘E’‘F’
24
แบบฝกหัด(คําสั่ง MOV,MOVX,MOVC)
3 . เขียนโปรแกรมเพื่อทําการยายขอมูลจากหนวยความจําขอมูลภายนอกที่ตําแหนง 8100H - 8103H เก็บในหนวยความจําภายในทีต่ําแหนง 30H-33H
2. เขียนโปรแกรมยายขอมูลจากหนวยความจําโปรแกรมที่ตําแหนง 1200H ออกไปที่พอรท P1
1. เขียนโปรแกรมยายขอมูลจาก พอรท P2 เก็บในหนวยความจําขอมูลภายนอกที่ตําแหนง 0500H
25
กลุมคําสั่งทางคณิตศาสตร
คําสั่งทางคณิตศาสตรเปนคําสั่งในการ บวก ลบ คณู หาร เพิ่มคา ลดคา การทํางานทั้งหมดจะทําในลักษณะของเลขไบนาร ี8 บิต ยกเวนการบวกสามารถทําในลักษณะของไบนารหีรือ BCD (Binary Code Decimal)ได คําสั่งในกลุมนี้แสดงในตาราง
26
กลุมคําสั่งทางคณิตศาสตร
M n e m o n ic O p e r a t io n A d d r e s s in g m o d e E x e c u t io n
D ir In d R e g Im m T im eA D D A ,< b y te > A = A + < b y te > * * * * 1A D D C A ,< b y t e > A = A + < b y te > + C * * * * 1S U B B A ,< b y te > A = A - < b y te > - C * * * * 1IN C A A = A + 1 A c c u m u la t o r o n ly 1IN C < b y te > < b y te > = < b y t e > + 1 * * * 1IN C D P T R D P T R = D P T R + 1 D a ta p o in t e r o n ly 2D E C A A = A - 1 A c c u m u la t o r o n ly 1D E C < b y te > < b y te > = < b y t e > - 1 * * * 1M U L A B B : A = B * A A C C a n d B o n ly 4D IV A B A = In t [A /B ]
B = M o d [A /B ]A C C a n d B o n ly 4
D A A D e c im a l A d ju s t A c c u m u la t o r o n ly 1
27
คําสั่งคําสั่ง ADD ADD
ADD A,B ;A = A+BADD A,#12H ;A = A+12HADD A,R3 ;RegisterADD A,38H ;ad8ADD A,@R1 ;indirect
28
กลุมคําสั่งทางคณิตศาสตร
• คําสั่ง DA A (Decimal Adjust Accumulator)เปนคําสั่งที่ใชสําหรับควบคุมการทํางานในลักษณะของเลขฐานสิบแบบ BCD (B i na r y
Code Decimal) โดยคําสั่ง DA A จะตองวางอยูตอจากคําสั่งการบวก ADD หรือ ADDC
การทํางานของคําสั่ง DA A จะตรวจสอบผลลัพธของการบวกที่อยูในแอคคิวมูเลเตอร 4 บิตลาง วามีคามากกวา 9 หรือ แฟลก AC เปน 1 หรือไม หาก 4 บิตลางมีคามากกวา 9 หรือแฟลก AC เปน 1 จะบวกคาใน A ดวย 06 เพื่อปรับเปนเลข BCD แลวตรวจสอบคาใน 4 บิตสูง วามีคาเกินกวา 9 หรือ แฟลก C เปน 1 หรือไม หากแฟลก C เปน 1 หรือคา 4 บติสูงมีคาเกินกวา 9 จะบวก 60H เขากับคาใน A อีกเพื่อปรับใหเปนเลข BCD คาของแฟลก C จะถูกเซตใหเปน 1 หากผลลัพธที่ไดจากการบวกเลข BCD 2 จํานวน มีคาเกินกวา 99
29
การบวกเลข 16 บิท
20H 21H
22H 23Hตัวตั้ง
ตัวบวก
ผลลัพธ24H 26H25H
30
MOV A,21H ;ADD A,23H ;MOV 26H,A ; เก็บผลลัพธ 2 หลักต่ําMOV A,20HADDC A,22H ; นํา A บวกกับคาในตําแหนง 22H บวกกับตัวทดที่มาจาก 2 หลักต่ําMOV 25H,A ; เก็บผลลัพธMOV A,#OO ; ADDC A,#OO ; นํา A บวกกับตัวทดเพื่อเปนหลักสูงสุดMOV 24H,A ; เก็บหลักสูงสุดจากการบวก
DA A
DA A
การใชคําสั่ง ADD , ADDC20H
22H 23Hตัวตั้ง
ตัวบวก
ผลลัพธ24H 26H25H
21H
31
คําสั่ง SUBB A,<byte> (A= A-<byte>-Cy)
;R2=R1-R7MOV A,R1 CLR C ;ทําใหc=0SUBB A,R7MOV R2,A
10H 11H
12H 13Hตัวตั้ง
ตัวลบ
ผลลัพธ14H 15H
* การลบทําไดเฉพาะเลข Binary เทานั้น ไมสามารถใชรวมกับ DA A เหมือนคําสั่งบวก
MOV A,11H CLR C ;ทาํใหc=0SUBB A,13HMOV 15H,AMOV A,10HSUBB A,12H ;A =A-@12-CMOV 14H,A
32
DECREMENT DPTRDECREMENT DPTR
00 01
DPH DPLตัวตั้ง
ตัวลบ
ผลลัพธDPH DPL
DECDPTR: MOV A,DPLCLR C ;ทําใหc=0SUBB A,#01HMOV DPL,AMOV A,DPHSUBB A,#00HMOV DPH,ARET
การลดคาของ DPTR ลงหนึ่ง
33
กลุมคําสั่งทางคณิตศาสตร
ตํ า แ ห น ง 1 0Hตั ว ตั้ ง
ตํ า แ ห น ง 1 1Hตั ว คู ณ
ตํ า แ ห น ง 1 2 H ตํ า แ ห น ง 1 3Hผ ล ลั พ ธ
ตัวอยาง 4.3 ตองการคูณขอมูลในตําแหนง 10H ดวยขอมูลในตําแหนง 11H แลวนําผลลัพธเก็บในตําแหนง 12H ( ไ บ ต สู ง ) แ ล ะ 1 3 H (ไบตต่ํา)
เปนการคูณคาในรีจิสเตอร A ดวย คาในรีจิสเตอร B แบบไบนารี แลวนําผลลัพธที่ไดเก็บใน B และ A ( B เ ป น ห ลั ก สู ง )
• คําสั่ง MUL AB
34
กลุมคําสั่งทางคณิตศาสตร
MOV A,10H ; นําคาในตําแหนง 10 เก็บใน AMOV B,11H ; นําคาในตําแหนง 11 เก็บใน BMUL A,B ; BA = A*BMOV 12H,B ; เก็บผลลัพธหลักสูงMOV 13H,A ; เก็บผลลัพธหลักต่ํา
35
คําสั่งคําสั่ง DIV ABDIV AB
A=07H ,B=03H
DIV ABผลลพัธ
A=02 จํานวนเตม็ [INT(07/03)]B=01 เศษ [MOD(07/03)]
A= 02H B= 60HDIV ABได A=00,B=02
02H60H
36
โปรแกรมเพิ่มเวลา 1 วินาที
SSMMHH
1BH1AH19H18H วินาที(SS) : 00-59
นาที(MM) : 00-59ชั่วโมง (HH): 00-23
Internal RAMSS=SS+1
SS=60?
SS= 00
N
Y
MM=MM+1MM=MM+0
SS -> AB= 60DIV ABB -> SSMM = MM + A
37
โปรแกรมเพิ่มเวลา 1 วินาที
INCTIME: MOV A,SSADD A,#1DA AMOV B,#60HDIV ABMOV SS,BADD A,MMDA AMOV B,#60HDIV ABMOV MM,B…...
SSMMHH
1BH1AH19H18H วินาที(SS) : 00-59
นาที(MM) : 00-59ชั่วโมง (HH): 00-23
Internal RAM
SS=SS+1
SS= B
N
MM=MM+A
A= 60H B= 60HDIV ABได A=01(จํานวนเต็ม),B=00
A= 02H B= 60HDIV ABได A=00,B=0260)SS ได A เศษ B
38
โปรแกรมเพิ่มเวลา 1 วินาทีINCTIME: MOV A,SS
ADD A,#1DA AMOV B,#60HDIV ABMOV SS,BADD A,MMDA AMOV B,#60HDIV ABMOV MM,BADD A,HHDA AMOV B,#24HDIV ABMOV HH,BRET
SSMMHH
1BH1AH19H18H
Internal RAM
39
คําสั่งคําสั่ง ANL ANL
ANL A,BANL B,A
1 0 1 1 0 1 0 1
0 0 0 0 1 1 1 1
0 0 0 0 0 1 0 1
AB
ผลลัพธ
ผลลัพธเก็บใน A
ผลลัพธเก็บใน Register B
40
คําสั่งคําสั่ง ANL ANL
MOV A,#B5HANL A,#0FH
1 0 1 1 0 1 0 1
0 0 0 0 1 1 1 1
0 0 0 0 0 1 0 1
A
ผลลัพธ A=05H
41
คําสั่งคําสั่ง ANL ANL
MOV A,#B5HANL A,#F0H
1 0 1 1 0 1 0 1
1 1 1 1 0 0 0 0
1 0 1 1 0 0 0 0
A
ผลลัพธ A=B0H
42
คําสั่งคําสั่ง RL A RL A
RL A0 0 1 1 0 1 0 1
0 1 1 0 1 0 1 0
A
43
คําสั่ง SWAP A
4 7
7 4
MOV A,#47H
SWAP A
44
การใชคําสัง่ ANL ,SWAP
Buffer74LS244
Buffer74LS244
8051
a
f g b บสัขอมลู bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
e c • pt เซก็เมนต pt g f e d c b a
d
P1 P2
หากตองการให LED1 แสดงคา 4 และ LED2 แสดงคา 7 จะตองสงคาออกที่ P1 และP2มีคาเทาใด
LED1 LED2
P1.7 P1.0
“4” = 0 1 1 0 0 1 1 0
“7” = 0 0 0 0 0 1 1 1MOV P1,#66HMOV P2,#07H
45
การใชคําสัง่ ANL ,SWAP(ตอ)
ORG 0000DISPLAY: MOV A,#04H
LCALL HEX_LEDMOV P1,A ;LED1MOV A,#07HLCALL HEX_LEDMOV P2,A ;LED2
HEX_LED: MOV DPTR,#0100HMOVC A,@A+DPTRRET
ถาตองการนําคาใน R7 ออกไปแสดงที่ 7 segment 2ตัว ?
065B4F666D7D077F6F
3F 0100010101020103010401050106010701080109010A010B010C010D010E010F
777C395E7971
‘0’‘1’‘2’‘3’‘4’‘5’‘6’‘7’‘8’‘9’‘A’‘B’‘C’‘D’‘E’‘F’
46
47
04 07
R7
MOV A,R7ANL A,#00001111B
MOV A,R7SWAP AANL A,#00001111B
47
การใชคําสัง่ ANL ,SWAP(ตอ)เขียนโปรแกรมยอยเพื่อนําคาในรีจิสเตอร R7 ออกไปแสดงที่ 7 Segment ใหมีคาตรงกับคาที่อยูในรีจิสเตอร R7
;เปลีย่นเลข HEX เปนรหัส 7 Segment;Input A = HEX (0-F);Output A = 7segment codeHEX_LED: MOV DPTR,#TABLE
MOVC A,@A+DPTRRET
TABLE: DB 3FH,06H,5BH,4FHDB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CHDB 39H,5EH,79H,71H
;นําคาใน R7 ออกไปแสดงที่ 7SegmentDSP: MOV A,R7
ANL A,#0FHLCALL HEX_LEDMOV P2,A ;LED2MOV A,R7SWAP A ANL A,#0FHLCALL HEX_LEDMOV P1,A ;LED1RET
48
MOTOR
HEATER
MICRO A to D8bit
AmplifierP0
SensorP3.0P3.1P1 P2
Buffer74LS244
Buffer74LS244
LED1 LED2
P3.7 P3.6 P3.5 P3.4
STARTSTOP INC DEC1 2 3 4
เขียนโปรแกรมอานคาจาก A to D ที่ตออยูที่ P0 แลวนําไปแสดงผลที่ 7 Segment
START
STOP
49
50
คําสั่งคําสั่ง BOOLEANBOOLEANANL C,Bit ;C = C and BitANL C,/Bit ;C = C and Bit
MOV C,P1.0ANL C,P1.1ANL C,P1.2MOV P2.1,C
MOV C,P1.0CPL CANL C,P1.1MOV P2.1,C
MOV C,P1.1ANL C,/P1.0MOV P2.1,C
51
การทํางานกับบิตการทํางานกับบิต
SETB Acc.3
1 0 1 1 0 1 0 1 Acc
1 0
CLR Acc.0D2 E3C2 E0
52
คําสั่ง BOOLEAN
การทํา Exclusive OR
เขียนคําสั่งเพื่อใหทํางานตอไปนี้P2.0 = P1.0 XOR P1.1
จาก a XOR b = a.b + a.b
MOV C,P1.0 ; c = aANL C,/P1.1 ; c = c and /bMOV Acc.0,C ;เกบ็ผลลัพธMOV C,P1.1ANL C,/P1.0ORL C,Acc.0MOV P2.0,C ;Output
MOV C,P1.1 ; c = bCPL C ;ANL C.P1.0 ; aMOV Acc.0,C ;เกบ็ผลลัพธMOV C,P1.0CPL CANL C,P1.1ORL C,Acc.0MOV P2.0,C ;Output
53
เขียนโปรแกรมทํางานตามวงจรลอจิกเขียนโปรแกรมทํางานตามวงจรลอจิก
MOV C,P1.1 ; ANL C./P1.0 ; CPL CMOV B.0,CMOV C,P1.2ORL C,P2.1ANL C,B.0MOV P2.1,C ;Output
54
ถังผสมของเหลวแบบที่ 2
การทํางาน- เมื่อระดับต่ํากวา FS1 ให V3 ปดและ V1 เปดถึงระดับ
FS2 แลวปดและให V2 ทํางานตอจนระดบัสูงถงึ FS3 แลวปด
- เมื่อระดับน้ําถึง FS3 ใหวาวล V3 เปดจนระดับน้ําต่ํากวา FS1 แลวจึงปดและกลับไปเปด V1 อีก
V1 V2
V3
FS1
FS2
FS3
ใหเขียนวงจรลอจิกและโปรแกรมควบคุมการทํางานกําหนดให: น้ําต่ํากวาระดับ FS จะใหลอจิก 1
V1=/V3.FS2.(FS1+V1)V2=/V3./FS2.FS3V3=/V2./FS1.(/FS3+V3)
V1=P1.1,V2=P1.2,V3=P1.3FS1=P2.1,FS2=P2.2, FS3=P2.3
55
Ladder diagramV3FS1FS3
V3
L1: MOV C,V3ORL C,/FS3ANL C,/FS1MOV V3,C
V3 = (V3 OR FS3) AND FS1
56
Ladder diagramV2FS3 V3FS2
MOV C,FS2CPL CANL C,FS3ANL C,/V3MOV V2,C
V2 = (FS2 AND FS3) AND V3
57
Ladder diagramV1FS1 FS2 V3
V1
V1 EQU P1.1V2 EQU P1.2V3 EQU P1.3
MOV C,V1ORL C,FS1ANL C,FS2ANL C,/V3MOV V1,C
V1 = (FS1 OR V1) AND FS2 AND V3
58
Ladder diagramV3
V1FS1 FS2 V3
V1
V2FS2 FS3 V3
FS1FS3
V3
L1: MOV C,V3ORL C,/FS3ANL C,/FS1MOV V3,CMOV C,V1ORL C,FS1ANL C,FS2ANL C,/V3MOV V1,CMOV C,FS2CPL CANL C,FS3ANL C,/V3MOV V2,CSJMP L1
59
เครื่องตัดอัตโนมัติ
MOTOR2
S1
S3
S4
S2
MOTOR1
START
STOP
RESET
กําหนดให Sensor ทกุตัว ใหคาลอจิก 1 เมื่อมีการตรวจจับS1 ตรวจสอบชิน้งานหมด S2 กําหนดความยาว S3 ใบเลื่อยลงสดุ S4 ใบเลื่อยขึ้นสดุ
Motor1 สําหรับปอนชิ้นงานMotor2 ควบคมุขึ้นลงของใบตัด (M2UP,M2DN)
60
เครื่องตัดอัตโนมัติ
การทํางาน- เมื่อ S1 และ S4 ทํางานให Motor M1 ทํางานจนชิน้งานเลือ่นไปถึง S2 จึงหยุด- เมื่อ S2 ทํางาน ให Motor M2 ทํางานควบคมุใหใบเลือ่ยเลือ่นลงมาตัดถึง S3- เมื่อใบเลื่อยเลื่อนลงมาถึง S3 แลว Motor M2 จึงเลื่อนขึ้นไปและหยุดเมื่อถึง S4OPTION- หากมอเตอร M1 ทํางานไปนาน 10 วินาทแีลวยังไมม ีS2 ใหสงสัญญาณ ALARM และเครือ่งหยุดทํางาน สัญญาณ ALARM จะหายไปเมื่อกด RESET และเริ่มทํางานใหมไดอีกเมื่อกด START
61
กลุมคําสั่ง JUMP and CALL
1 การกระโดดแบบไมมีเงื่อนไข (Unconditional jump) 2 การกระโดดแบบมีเงื่อนไข (Conditional jump) 3 การเรียกใชโปรแกรมยอย (Program branching)
62
การกระโดดแบบไมมีเงื่อนไข (Unconditional jump)
Mnemonic Operation Execution timeSJMP rel Short jump to relative address 2LJMP addr16 Long jump to address16 2AJMP addr11 Absolute jump to address11 2JMP @A+DPTR Jump to A+DPTR 2NOP No operation 1
63
คําสั่งคําสั่ง SJMP SJMP relrel ((unconditionuncondition jump)jump)
ORG 8000H SJMP L1MOV A,#12H
L1: MOV R1,#10H
ตัวอยางการใชคําสั่ง SJMP rel
ถาเปลี่ยนตําแหนงเริ่มตนเปน 1000H คา rel จะเปลี่ยนหรือไม
8000 80 rel8002 74 128004 79 10
64
คําสั่งคําสั่ง SJMP SJMP relrel ((unconditionuncondition jump)jump)STARTLOOP
ORG 0000HLOOP: MOV C,P1.0
ANL C,P1.1MOV P2.1,CSJMP LOOPEND
ตัวอยางการใชคําสั่ง SJMP rel
0000 A2 900002 82 910004 92 A10006 80 rel0008
ถาเปลี่ยนตําแหนงเริ่มตนเปน 1000H คา rel จะเปลี่ยนหรือไม
65
การคํานวณคา rel
PCใหม = PCเดมิ + 2 + rel
PCใหม คือตําแหนงปลายทางPCเดิม คือตําแหนงที่คําสั่ง SJMP อยู2 จํานวน ไบทของรหัสคําสั่ง( 80 rel)
0000H = 0006H + 2 + relrel = - 08H
= F8Hเลขฐานสิบหกของ - 08H = 100H-08H = F8H
8 = 00001000
คา 2’complement ของ 8 8 = 00001000
11110111 + 1
11111000F8H
66
การใชคําสั่ง LJMP ad16 (Long Jump)
ORG 1000HLOOP:MOV C,P1.0
ANL C,P1.1MOV P2.1,CLJMP LOOPEND
ตัวอยางการใชคําสั่ง LJMP ad16 (รหัสคําสั่ง 02 m n)
1000 A2 901002 82 911004 92 A11006 02 10 00
ถาเปลีย่นตําแหนงเริ่มตนเปน 2000H คา m n จะเปลีย่นหรือไม
67
การกระโดดแบบมีเงื่อนไข (Conditional jump)
• เงื่อนไขตางๆ– มากกวา > มากกวาหรือเทากับ >=– นอยกวา < น้อยกว่าหรือเท่ากับ <=– เทากับ =– ไมเทากับ – ถาบิตเปน 1– ถาบิตเปน 0
If A >= 5
If A > 4
If A <= 5
If A < 6
68
การกระโดดแบบมีเงื่อนไข (Conditional jump)
Mnemonic Operation Addressing Modes ExecutionDir Ind Reg Imm Time
JZ rel Jump if A = 0 Accumulator only 2JNZ rel Jump if A ≠ 0 Accumulator only 2JC rel Jump if carry = 1 Carry only 2JNC rel Jump if carry = 0 Carry only 2JB bit,rel Jump if bit = 1 Bit address only 2JNB bit,rel Jump if bit = 0 Bit address only 2JBC bit,rel Jump if bit = 1 ; CLR bit Bit address only 2DJNZ <byte>,rel Decrement and jump if not zero * * 2CJNE A,<byte>,rel Jump if A ≠ <byte> * * 2CJNE <byte>,#data,rel Jump if <byte> ≠ #data * * 2
69
การกระโดดแบบมีเงื่อนไข JZ rel และ JNZ rel
ORG 1000HMOV A,P0JNZ NEXTINC P2
NEXT: MOV P1,P2END
A=0 ?
A=P0
P2=P2+1
P1=P2
NY
NEXT
ใชในการเปรียบเทียบ เทากับหรือไมเทากับ
1000 E5 801002 70 rel1004 05 A01006 85 A0 90
หาคา rel1006H = 1002H + 2 + relrel = 02
A=P0 ;IF A=0 Then P2= P2+1;P1= P2 ;
A<>0 ?
A=P0
P2=P2+1
P1=P2
YN
NEXT
70
การกระโดดแบบมีเงื่อนไข JZ rel และ JNZ rel
ORG 1000HMOV A,P0JZ NEXTINC B
NEXT: MOV P1,BENDA=0 ?
A=P0
B=B+1
P1=B
YN
NEXT
ใชในการเปรียบเทียบ เทากับหรือไมเทากับ
1000 E5 801002 60 --1004 05 F01006 85 F0 90
หาคา rel1006H = 1002H + 2 + relrel = 02
A=P0 ;IF A<>0 Then B= B+1;P1= B;
71
การกระโดดแบบมีเงื่อนไข JZ rel, JNZ rel
ORG 1000HMOV A,P0CLR CSUBB A,#35HJZ NEXTINC B
NEXT: MOV P1,BEND
A= 35H ?
A=P0
B=B+1
P1=B
YN
NEXT
ใชในการเปรียบเทียบ เทากับหรือไมเทากับ
A=P0IF A<>35H Then B= B+1P1= B
72
คําสั่ง CJNE A,#data,rel
ORG 1000HMOV A,P0CJNE A,#55H,NEXTINC B
NEXT: MOV P1,BEND
A= 55H ?
A=P0
B=B+1
P1=B
NY
NEXT
A=P0 ;IF A=55H Then B= B+1;P1= B;A<>55H ?
A=P0
B=B+1
P1=B
yn
NEXT
1000 E5 801002 B4 55 --1005 05 F01007 85 F0 90
(Jump ถา A ไมเทากับ Data)
ORG 1000HMOV A,P0CLR CSUBB A,#55HJNZ NEXTINC B
NEXT: MOV P1,BEND
73
การกระโดดแบบมีเงื่อนไข JC rel และ JNC rel
ORG 1000HMOV A,P0CLR CSUBB A,#06HJNC NEXTINC B
NEXT: MOV P1,BEND
A> 5 ?
A=P0
B=B+1
P1=B
(Cy = 0)N
NEXT
ใชสําหรับการเปรียบเทียบ มากกวา หรือนอยกวา
1000 E5 801002 C31003 94 061005 50 --1007 05 F01009 85 F0 90
A=P0IF A<6 Then B= B+1P1= B
A04H - X -> CY = 105H - X -> CY = 106H - X -> CY = 007H - X -> CY = 0
Y
74
การกระโดดแบบมีเงื่อนไข JC rel และ JNC rel
ORG 1000HMOV A,P0CLR CSUBB A,#06HJNC NEXTINC B
NEXT: MOV P1,BEND
A< 6 ?
A=P0
B=B+1
P1=B
(Cy = 0)Y
NEXT
ใชสําหรับการเปรียบเทียบ มากกวา หรือนอยกวา
1000 E5 801002 C31003 94 061005 50 --1007 05 F01009 85 F0 90
A=P0IF A<6 Then B= B+1P1= B
A04H - X -> CY = 105H - X -> CY = 106H - X -> CY = 007H - X -> CY = 0
N
75
การกระโดดแบบมีเงื่อนไข JC rel และ JNC rel (ตอ)
ORG 1000HMOV A,P0CLR CSUBB A,#52HJC NEXTINC B
NEXT: MOV P1,BEND
A< 52H ?
A=P0
B=B+1
P1=B
YN
NEXT
(CY = 1)
A50H - 52H -> CY = 151H - 52H -> CY = 152H - 52H -> CY = 053H - 52H -> CY = 0
A=P0IF A>51H Then B= B+1P1= B
จริง
เท็จ
76
MOTOR
HEATER
MICRO A to D8bit
AmplifierP0
SensorP3.0P3.1P1 P2
Buffer74LS244
Buffer74LS244
LED1 LED2
P3.7 P3.6 P3.5 P3.4
STARTSTOP INC DEC1 2 3 4
ตองการควบคุมใหอุณหภูมิอยูระหวาง 34-36 องศา (เมื่อกําหนดคาเปน 35) จงเขียนผังโปรแกรมควบคุม การทํางานของมอเตอร และฮีทเตอร
START
STOP
77
START: A=P0IF A<34H Then Set Bit P3.1IF A>35H Then Clear Bit P3.1JUMP START
A< 34H ?
A=P0
Set Bit P3.1Y
N
NEXT
A> 35H ?
Clear Bit P3.1
START
YN
เขียนโฟลวชารทจากคําสั่งตอไปนี้เมื่อตองการใหอุณหภูมิอยูที่ 35 บวก/ลบ1(34-36)
A32H - 34H -> CY = 133H - 34H -> CY = 134H - 34H -> CY = 035H - 34H -> CY = 0
(C=0)
A34H - 36H -> CY = 135H - 36H -> CY = 136H - 36H -> CY = 037H - 36H -> CY = 0
(C=1)
จริง
เท็จ
จริง
เท็จ
78
MOTOR
HEATER
MICRO A to D8bit
AmplifierP0
SensorP3.0P3.1P1 P2
Buffer74LS244
Buffer74LS244
LED1 LED2
P3.7 P3.6 P3.5 P3.4
STARTSTOP INC DEC1 2 3 4
ตองการควบคุมใหอุณหภูมิอยูที่ Register B องศา จงเขียนผังโปรแกรมควบคมุการทํางานของมอเตอร และฮีทเตอรใหอุณหภูมิที่อานจาก P0 อยูระหวาง B-1 และ B+1
START
STOP
79
ORG 1000HCONTROL: MOV A,P0
CLR CSUBB A,#34HJNC NEXTSETB P3.1
NEXT: MOV A,P0CLR CSUBB A,#36HJC STARTCLR P3.1 SJMP STARTEND
PUSH A
POP A
80
START: A=P0IF A< B-1 Then Set Bit P3.1IF A> B+1 Then Clear Bit P3.1JUMP START A< B-1 ?
A=P0
Set Bit P3.1Y
N
NEXTA> B+1 ?
Clear Bit P3.1
START
YN
เขียนโฟลวชารทจากคําสั่งตอไปนี้เมื่อตองการใหอุณหภูมิอยูที่ B บวก/ลบ1
A < (B-1) -> CY = 1A >= (B-1) -> CY = 0
จริงเท็จ
จริงเท็จ A < = (B+1) -> CY = 1
A > (B+1) -> CY = 0
81
ORG 1000HSTART: MOV A,P0
INC ACLR CSUBB A,BJNC NEXTSETB P3.1
NEXT: MOV A,P0DEC ACLR CSUBB A,BJC STARTCLR P3.1 SJMP STARTEND
82
IF …. THEN …..ELSE …..
คําสัง่ที่มีผลตอเงื่อนไข
Start
โปรเซส 1 โปรเซส 2
End
YesNo
เงื่อนไขเปนจริง
A< 52H ?
A=P0
P1.0=0P1.1=1
P1=B
YN
P1.0=1P1.1=0
NEXT
83
EXAMPLE การกระโดดแบบมเีงื่อนไข
A< 52H ?
A=P0
P1.0=0P1.1=1
P1=B
YN
A< 50H ?
P1.0=1P1.1=0
YN
P1.0=0P1.1=0
84
EXAMPLE การกระโดดแบบมเีงื่อนไข
A> 51 ?
A=P0
P1.0=0P1.1=1
P1=B
NY
A>49 ?
P1.0=1P1.1=0
NY
P1.0=0P1.1=0
A< 52 ?
A=P0
P1.0=0P1.1=1
P1=B
YN
A< 50 ?
P1.0=1P1.1=0
YN
P1.0=0P1.1=0
NEXT NEXT
85
START: A=P0IF A> 51 Then (P1.0= 0 ; P1.1=1; JUMP NEXT)
L1: IF A< 50 Then (P1.0= 1; P1.1= 0; JUMP NEXT)P1.0= 0 ; P1.1= 0
NEXT: P1=BJUMP START START: MOV A,P0
CLR CSUBB A,#52JC L1: ;Jump if A < 52 CLR P1.0SETB P1.1SJMP NEXT
L1: MOV A,P0CLR CSUBB A,#50
…...…
NEXT: MOV P1,BSJMP STARTEND
86
START: MOV A,P0CLR CSUBB A,#52JC L1: ;Jump if A < 52 CLR P1.0SETB P1.1SJMP NEXT
L1: MOV A,P0CLR CSUBB A,#50JNC L2SETB P1.0CLR P1.1SJMP NEXT
L2: CLR P1.0CLR P1.1
NEXT: MOV P1,BSJMP STARTEND
87
การอานตําแหนงสวิตช (คําสั่ง JNB และJB)
P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
8051 SW0
SW7
10K
หาตาํแหนงของสวติช หากสวติชตัวใดกดใหมีคาสงออกไปที่ R7 มีตัง้แต 1-8 หากไมมีการกด ให R7 =0 ; โปรแกรมยอย การอานตําแหนงสวติช
; OUTPUT R7 = ตําแหนงสวิตชทีก่ด หากไมมีการกด R7 = 0READKEY: MOV A,P1
MOV R7,#01HJNB Acc.0,ENDKEYMOV R7,#02HJNB Acc.1,ENDKEYMOV R7,#03HJNB Acc.2,ENDKEYMOV R7,#04H JNB Acc.3,ENDKEYMOV R7,#05H JNB Acc.4,ENDKEYMOV R7,#06H JNB Acc.5,ENDKEYMOV R7,#07H JNB Acc.6,ENDKEYMOV R7,#08HJNB Acc.7,ENDKEYMOV R7,#00
ENDKEY: RET
LCALL READKEYMOV A,R7
88
; โปรแกรมยอย การอานตําแหนงสวิตช; OUTPUT R7 = ตําแหนงสวิตชที่กด หากไมมีการกด R7 = 0READKEY: MOV R2,#8 ;Counter
MOV A,P1MOV R7,#01H
L1: JNB Acc.0,ENDKEYINC R7RR A ;Rotate right ADJNZ R2,L1MOV R7,#00H
ENDKEY: RET
P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
8051 SW0
SW7
10K
89
P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
8051
1A11A21A31A42A12A22A32A4
1Y11Y21Y31Y42Y12Y22Y32Y4
1G 2G
74LS244
1A11A21A31A42A12A22A32A4
1Y11Y21Y31Y42Y12Y22Y32Y4
1G 2G
74LS244R1610K
P3.1
SW8
SW1
SW9
SW16
R910K
R110K
R810K
+5V
+5V
เขียนโปรแกรมยอย การอานตําแหนงสวิตช
90
; โปรแกรมยอย การอานตําแหนงสวิตช; OUTPUT R7 = ตําแหนงสวิตชที่กด(1-16) หากไมมีการกด R7 = 0SCANKEY: SETB P3.1 ;select 1-8
MOV R2,#8 ;CounterMOV A,P1MOV R7,#01
L1: JNB Acc.0,ENDKEYINC R7RR A ;Rotate right ADJNZ R2,L1
;ทดสอบ SW ชุดลางCLR P3.1 :select 9-16MOV R2,#8 ;CounterMOV A,P1MOV R7,#09
L2: JNB Acc.0,ENDKEYINC R7RR A ;Rotate right ADJNZ R2,L2
MOV R7,#00HENDKEY: RET
91
คําสั่ง CJNE A,<byte>, rel
START: MOV A,R7CJNE A,#01,NEXT1INC BSJMP FINISH
NEXT1: CJNE A,#02,NEXT2DEC BSJMP FINISH
NEXT2: CJNE A,#03,FINISHMOV B,#0
FINISH: RET
ใชในการควบคมุการกระโดดในกรณีที่มีการเปรียบเทียบคาแลวไมเทาจะกระโดดตัวอยาง
A=1 Y
N
B=B+1
RETURN
A=2 ?
A=3 ?B= 0
B = B-1Y
Y
N
N
A =R7
NEXT1
FINISH
NEXT2
92
คําสั่ง CJNE A,<byte>, rel
START: MOV A,R7CJNE A,#01,NEXT1INC BSJMP FINISH
NEXT1: CJNE A,#02,NEXT2DEC BSJMP FINISH
NEXT2: CJNE A,#03,FINISHMOV B,#0
FINISH: RET
ใชในการควบคมุการกระโดดในกรณีที่มีการเปรียบเทียบคาแลวไมเทาจะกระโดดตัวอยาง
A=1 ? Y
N
STOP
RETURN
A=2 ?
A=3 ?B= B-1
B = B+1
Y
Y
N
N
A =R7
FINISHA=4 ?
93
;MAIN PROGRAM FOR TEMPERATURE CONTROL;SUBPROGRAM
;DISPLAY FOR DISPLAY DATA IN R7 ON 7 SEGMENT;CONTROL FOR CONTROL TEMPERATURE AT REGISTER B +/- 1;READKEY FOR SCAN SW (R7 ,1=stop 2=inc 3 =dec 4=start)
INITIAL:
MAIN: LCALL READKEYMOV A,R7MOV CJNE,A,#1,L1 ;INCINC BMOV R7,BLCALL DIPLAY
L1:
94
MAIN: LCALL READKEYMOV A,R7CJNE A,#1,NEXT2CLR 00 ;status bit0 at 20hCLR HEATERSJMP FINISH
NEXT2: CJNE A,#2,NEXT3INC BSJMP FINISH
NEXT3: CJNE A,#3,NEXT4DEC BSJMP FINISH
NEXT4: CJNE A,#4,NEXT5SETB 00 ;ON CONTROLSJMP FINISH
NEXT5: NOPFINISH: JNB 00,L1 ;if stop jump
LCALL CONTROLMOV R7,P0LCALL DSP
L1: SJMP MAIN
MOV R7,BLCALL DSP
MOV R7,BLCALL DSP
;MAIN PROGRAM FOR TEMPERATURE CONTROL
95
INITIAL:MAIN: LCALL READKEY
MOV A,R7CJNE A,7FH,NEWKEY ;7FH = keep Last key pressedLJMP L4
NEWKEY: MOV 7FH,A ;Save last keyJZ L4 ;ถาไมกดไปที่ ControlCJNE A,#2,L1INC B ;INC KEYMOV R7,BLCALL DIPLAYLJMP L4
L1: CJNE A,#3,L2DEC B ;DEC KEYMOV R7,BLCALL DIPLAYLJMP L4
L2: CJNE A,#1,L3 ;STARTSETB FLAGSTART ;bit o of address 20HLJMP L4
L3: CLR FLAGSTART :STOPLJMP L4….
;Test start/stop machineL4: JNB FLAGSTART,L5
LCALL CONTROL ;START CONTROLMOV R7,P0LCALL DISPLAYLJMP MAIN...
L5: CLR HEATERCLR MOTOR ;STOPMOV R7,BLCALL DISPLAYLJMP MAIN…..
96
คําสั่ง CJNE <byte>,#data, rel
DELAY: MOV R7,#20HLOOP: NOP
DEC R7CJNE R7,#00,LOOPRET
ในกรณีที่มีการเปรียบเทียบคาแลวไมเทาจะกระโดดตัวอยาง การใชงาน
R7=0 ?
R7 = R7-1
R7 = 20H
Y
N
LOOP
START
NOP
RETURN
DJNZ R7,LOOP
97
คําสั่ง DJNZ <byte>, rel
DELAY: MOV R7,#20HLOOP: NOP
DJNZ R7,LOOPRET
ใชในการควบคมุการทํางานแบบวนรอบที่มีจํานวนรอบคงที่ตัวอยาง โปรแกรมการหนวงเวลา(Delay Time)
R7=0 ?
R7 = R7-1
R7 = 20H
Y
N
LOOP
START
NOP
RETURN
หาก CPU ใชสัญญาณนาฬิกา 12 MHz โปรแกรมนี้ใชเวลาเทาใด(1 execution time = 1uS)
(2 + 32(1 + 2) + 2 ) * 1 uS = 100 uS(หากเปลี่ยนสญัญาณนาฬกิาเปน 24 MHz จะใชเวลาเทาใด)
2122
98
คําสั่ง DJNZ <byte>, rel
DELAY: MOV R7,#xLOOP: NOP
DJNZ R7,LOOPRET
ใชในการควบคมุการทํางานแบบวนรอบที่มีจํานวนรอบคงที่ตัวอยาง โปรแกรมการหนวงเวลา(Delay Time)
R7=0 ?
R7 = R7-1
R7 = x
Y
N
LOOP
START
NOP
RETURN
(2 + 65(1 + 2) + 2 ) * 1 uS = 199 uS
ตองการ 200 uSX =65
ขาด 1uS เพิ่มคําสั่ง NOP ใหทํางาน 1 ครั้ง
NOP
99
การควบคุมความกวางสัญญาณพัลส
MCS-51
P1.0
PULSE100: SETB P1.0LCALL DELAYCLR P1.0RET
DELAY: MOV R7,#XLOOP: NOP
DJNZ R7,LOOPRET
100uS
100
การควบคุมการผลิตความถี่
P1.0
SETB P1.0LOOP: LCALL DELAY
CPL P1.0SJMP LOOP
DELAY: MOV R7,#20HLOOP: NOP
DJNZ R7,LOOPRET
100uS
;เปลื่ยนบิทเปนตรงขาม
100uSFrequency = ?
101
การควบคุมความถี่
P1.0
SETB P1.0LOOP: LCALL DELAY
CLR P1.0LCALL DELAYLCALL DELAYSETB P1.0SJMP LOOP
DELAY: MOV R7,#20HLOOP: NOP
DJNZ R7,LOOPRET
100uS
;เปลื่ยนบิทเปน 0
200uS
102
ถังผสมของเหลวแบบที่ถังผสมของเหลวแบบที่ 22
การทํางาน- เมื่อระดับต่ํากวา FS1 ให V3 ปดและ V1 เปดถึงระดับ
FS2 แลวปดและให V2 ทํางานตอจนระดบัสูงถงึ FS3 แลวปด
- เมื่อระดับน้ําถึง FS3 ใหวาวล V3 เปดจนระดับน้ําต่ํากวา FS1 แลวจึงปดและกลับไปเปด V1 อีก
V1 V2
V3
FS1
FS2
FS3
ใหนักศึกษาเขียนวงจรเชื่อมตอและโปรแกรมควบคุมการทํางานกําหนดให: น้ําต่ํากวาระดับ FS จะใหลอจิก 1
103
ผังโปรแกรม start
ระดับต่าํกวา FS1?
on V1,off V3
FS3=0?
ระดับสงูกวา FS2 ?
Y
y
กําหนดให: น้ําต่ํากวาระดับ FS จะใหลอจิก 1
104
ผังโปรแกรมผังโปรแกรม start
ระดับต่าํกวา FS1?
on V1,off V3
ระดับถึง FS3?
ระดับถึง FS2 ?
on V3, off V2
off V1,on V2
Y
y
กําหนดให: น้ําต่ํากวาระดับ FS จะใหลอจิก 1
Y
FS1 = 1?
FS2 = 0?
FS3 = 0?
N
N
N
START: JNB FS1,L1SETB V1CLR V3
L2: JB FS2,L2SETB V2CLR V1
L3: JB FS3,L3L1: SETB V3 ;On
CLR V2 ;OffSJMP START
105
Program START: JNB FS1,L1
L1: SETB V3 ;OnCLR V2 ;Off