command instructions

105
1 ชุดคําสั่ง

Upload: grid-g

Post on 10-Apr-2015

203 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Command Instructions

1

ชุดคําสั่ง

Page 2: Command Instructions

2

คําสั่งตาง ๆ ของไมโครคอนโทรลเลอรในตระกูล MCS-51 สามารถแบงออกเปนกลุมตาง ๆ ตามลักษณะการทํางานไดดังนี้

1. กลุมคําสั่งการโอนยายขอมูล (Data transfer instruction)2. กลุมคําสั่งทางคณิตศาสตร (Arithmetic instruction)3. กลุมคําสั่งทางลอจิก (Logical instruction)4. กลุมคําสั่งบูลีน (Boolean instruction) 5. กลุมคําสั่งการกระโดดและเรียกโปรแกรมยอย (Jump instruction)

Page 3: Command Instructions

3

กลุมคําสั่งการโอนยายขอมูล

คําสั่งการโอนยายขอมูลสามารถแบงออกเปน 3 กลุมยอยคือ

• การโอนยายขอมูลของหนวยความจําภายใน (Internal memory)

• การโอนยายขอมูลกับหนวยความจําภายนอก (External data memory)

• การโอนยายขอมูลกับหนวยความจําที่เก็บโปรเเกรม (Program memory)

Page 4: Command Instructions

4

กลุมคําสั่งการโอนยายขอมูล

1.กลุมคาํสัง่การโอนยายขอมูลของหนวยความจาํขอมูลภายใน1.กลุมคาํสัง่การโอนยายขอมูลของหนวยความจาํขอมูลภายใน

คําสั่งนี้ประกอบดวยคําสั่งที่ทําหนาที่กําหนดคาใหกับหนวยความจําแบบ 8 บิตและ 16 บิต การโอนยายขอมูลจากหนวยความจําตําแหนงหนึ่งไปอีกตําแหนงหนึ่ง การแลกเปลี่ยนขอมูล การเก็บและดึงขอมูลจากสแตก คําสั่งตางๆของกลุมนี้ แสดงในตารางที่ 1

Page 5: Command Instructions

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

Page 6: Command Instructions

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

Page 7: Command Instructions

7

คําสั่ง XCH A,<Byte>

MOV A, # 17H ; A = 17HMOV R0, # 25H ; R0 = 25HXCH A,R0 ;สลับคาระหวาง A กับรีจิสเตอร R0

25 17

A R017 25

เปนการสลับคาขอมูลใน A กับ ขอมูลใน <Byte>

Page 8: Command Instructions

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

Page 9: Command Instructions

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)

Page 10: Command Instructions

10

กลุมคําสั่งการโอนยายขอมูล

2. การโอนยายขอมูลกับหนวยความจาํขอมูลภายนอก2. การโอนยายขอมูลกับหนวยความจาํขอมูลภายนอก

ไมโครคอนโทรลเลอร MCS-51 สามารถติดตอกับหนวยความจําขอมูลภายนอกได 64 K ตําแหนงๆละ 8 บิต ซึ่งอาจแบงสวนหนึ่งของหนวยความจําเปนพอรตก็ได คําสั่งการโอนยายขอมูลกับหนวยความจําภายนอก(อาจเปนพอรตอินพุตหรือเอาตพุต) จะตองใชการอางตําแหนงที่อยูของขอมูลเปน 16 บิต คําสั่งตางๆ ในกลุมนี้แสดงในตาราง

Page 11: Command Instructions

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

ตารางแสดง กลุมคําสั่งการติดตอกับหนวยความจําขอมูลภายนอก

Page 12: Command Instructions

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

Page 13: Command Instructions

13

คําสั่ง MOVX A,@DPTR

ORG 1000HMOV P2,#80HMOV R1,#20HMOVX A,@R1MOV B,A

เขียนโปรแกรมทําการยายขอมูลจากหนวยความจําขอมูลภายนอกที่ตําแหนง 8020H มาเก็บที่รีจิสเตอร B

ORG 1000HMOV DPTR,#8020HMOVX A,@DPTRMOV B,A

Page 14: Command Instructions

14

MOV DPTR,#1F00HMOVX A,@DPTRMOV DPTR,#1EF0HMOVX @DPTR,A

1EF0H

1F20H

1F00H

EXTERNAL DATA MEMORY

ตองการยายขอมูลจาก 1F00H ไปที่ตําแหนง 1EF0H

Acc

Page 15: Command Instructions

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……...

Page 16: Command Instructions

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

Page 17: Command Instructions

17

กลุมคําสั่งการโอนยายขอมูล

3.การโอนยายขอมูลจากหนวยความจาํโปรเเกรม(Program Memory)

ไมโครคอนโทรลเลอร MCS-51 สามารถติดตอกับหนวยความจําโปรแกรมภายนอกได 64 Kbytes การติดตอกับหนวยความจําโปรแกรม (ภายในหรือภายนอกตัวไมโครคอนโทรลเลอร) จะอานขอมูลจากหนวยความจําเขามาไดอยางเดยีวไมสามารถสงขอมูลออกไปที่หนวยความจําโปรแกรม ตําแหนงของหนวยความจําโปรแกรมที่อางถึงเปนขนาด 16 บิต

Page 18: Command Instructions

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

Page 19: Command Instructions

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

Page 20: Command Instructions

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

Page 21: Command Instructions

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

Page 22: Command Instructions

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

Page 23: Command Instructions

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’

Page 24: Command Instructions

24

แบบฝกหัด(คําสั่ง MOV,MOVX,MOVC)

3 . เขียนโปรแกรมเพื่อทําการยายขอมูลจากหนวยความจําขอมูลภายนอกที่ตําแหนง 8100H - 8103H เก็บในหนวยความจําภายในทีต่ําแหนง 30H-33H

2. เขียนโปรแกรมยายขอมูลจากหนวยความจําโปรแกรมที่ตําแหนง 1200H ออกไปที่พอรท P1

1. เขียนโปรแกรมยายขอมูลจาก พอรท P2 เก็บในหนวยความจําขอมูลภายนอกที่ตําแหนง 0500H

Page 25: Command Instructions

25

กลุมคําสั่งทางคณิตศาสตร

คําสั่งทางคณิตศาสตรเปนคําสั่งในการ บวก ลบ คณู หาร เพิ่มคา ลดคา การทํางานทั้งหมดจะทําในลักษณะของเลขไบนาร ี8 บิต ยกเวนการบวกสามารถทําในลักษณะของไบนารหีรือ BCD (Binary Code Decimal)ได คําสั่งในกลุมนี้แสดงในตาราง

Page 26: Command Instructions

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

Page 27: Command Instructions

27

คําสั่งคําสั่ง ADD ADD

ADD A,B ;A = A+BADD A,#12H ;A = A+12HADD A,R3 ;RegisterADD A,38H ;ad8ADD A,@R1 ;indirect

Page 28: Command Instructions

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

Page 29: Command Instructions

29

การบวกเลข 16 บิท

20H 21H

22H 23Hตัวตั้ง

ตัวบวก

ผลลัพธ24H 26H25H

Page 30: Command Instructions

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

Page 31: Command Instructions

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

Page 32: Command Instructions

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 ลงหนึ่ง

Page 33: Command Instructions

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

Page 34: Command Instructions

34

กลุมคําสั่งทางคณิตศาสตร

MOV A,10H ; นําคาในตําแหนง 10 เก็บใน AMOV B,11H ; นําคาในตําแหนง 11 เก็บใน BMUL A,B ; BA = A*BMOV 12H,B ; เก็บผลลัพธหลักสูงMOV 13H,A ; เก็บผลลัพธหลักต่ํา

Page 35: Command Instructions

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

Page 36: Command Instructions

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

Page 37: Command Instructions

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

Page 38: Command Instructions

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

Page 39: Command Instructions

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

Page 40: Command Instructions

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

Page 41: Command Instructions

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

Page 42: Command Instructions

42

คําสั่งคําสั่ง RL A RL A

RL A0 0 1 1 0 1 0 1

0 1 1 0 1 0 1 0

A

Page 43: Command Instructions

43

คําสั่ง SWAP A

4 7

7 4

MOV A,#47H

SWAP A

Page 44: Command Instructions

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

Page 45: Command Instructions

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’

Page 46: Command Instructions

46

47

04 07

R7

MOV A,R7ANL A,#00001111B

MOV A,R7SWAP AANL A,#00001111B

Page 47: Command Instructions

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

Page 48: Command Instructions

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

Page 49: Command Instructions

49

Page 50: Command Instructions

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

Page 51: Command Instructions

51

การทํางานกับบิตการทํางานกับบิต

SETB Acc.3

1 0 1 1 0 1 0 1 Acc

1 0

CLR Acc.0D2 E3C2 E0

Page 52: Command Instructions

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

Page 53: Command Instructions

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

Page 54: Command Instructions

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

Page 55: Command Instructions

55

Ladder diagramV3FS1FS3

V3

L1: MOV C,V3ORL C,/FS3ANL C,/FS1MOV V3,C

V3 = (V3 OR FS3) AND FS1

Page 56: Command Instructions

56

Ladder diagramV2FS3 V3FS2

MOV C,FS2CPL CANL C,FS3ANL C,/V3MOV V2,C

V2 = (FS2 AND FS3) AND V3

Page 57: Command Instructions

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

Page 58: Command Instructions

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

Page 59: Command Instructions

59

เครื่องตัดอัตโนมัติ

MOTOR2

S1

S3

S4

S2

MOTOR1

START

STOP

RESET

กําหนดให Sensor ทกุตัว ใหคาลอจิก 1 เมื่อมีการตรวจจับS1 ตรวจสอบชิน้งานหมด S2 กําหนดความยาว S3 ใบเลื่อยลงสดุ S4 ใบเลื่อยขึ้นสดุ

Motor1 สําหรับปอนชิ้นงานMotor2 ควบคมุขึ้นลงของใบตัด (M2UP,M2DN)

Page 60: Command Instructions

60

เครื่องตัดอัตโนมัติ

การทํางาน- เมื่อ S1 และ S4 ทํางานให Motor M1 ทํางานจนชิน้งานเลือ่นไปถึง S2 จึงหยุด- เมื่อ S2 ทํางาน ให Motor M2 ทํางานควบคมุใหใบเลือ่ยเลือ่นลงมาตัดถึง S3- เมื่อใบเลื่อยเลื่อนลงมาถึง S3 แลว Motor M2 จึงเลื่อนขึ้นไปและหยุดเมื่อถึง S4OPTION- หากมอเตอร M1 ทํางานไปนาน 10 วินาทแีลวยังไมม ีS2 ใหสงสัญญาณ ALARM และเครือ่งหยุดทํางาน สัญญาณ ALARM จะหายไปเมื่อกด RESET และเริ่มทํางานใหมไดอีกเมื่อกด START

Page 61: Command Instructions

61

กลุมคําสั่ง JUMP and CALL

1 การกระโดดแบบไมมีเงื่อนไข (Unconditional jump) 2 การกระโดดแบบมีเงื่อนไข (Conditional jump) 3 การเรียกใชโปรแกรมยอย (Program branching)

Page 62: Command Instructions

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

Page 63: Command Instructions

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

Page 64: Command Instructions

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 จะเปลี่ยนหรือไม

Page 65: Command Instructions

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

Page 66: Command Instructions

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 จะเปลีย่นหรือไม

Page 67: Command Instructions

67

การกระโดดแบบมีเงื่อนไข (Conditional jump)

• เงื่อนไขตางๆ– มากกวา > มากกวาหรือเทากับ >=– นอยกวา < น้อยกว่าหรือเท่ากับ <=– เทากับ =– ไมเทากับ – ถาบิตเปน 1– ถาบิตเปน 0

If A >= 5

If A > 4

If A <= 5

If A < 6

Page 68: Command Instructions

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

Page 69: Command Instructions

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

Page 70: Command Instructions

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;

Page 71: Command Instructions

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

Page 72: Command Instructions

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

Page 73: Command Instructions

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

Page 74: Command Instructions

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

Page 75: Command Instructions

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

จริง

เท็จ

Page 76: Command Instructions

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

Page 77: Command Instructions

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)

จริง

เท็จ

จริง

เท็จ

Page 78: Command Instructions

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

Page 79: Command Instructions

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

Page 80: Command Instructions

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

Page 81: Command Instructions

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

Page 82: Command Instructions

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

Page 83: Command Instructions

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

Page 84: Command Instructions

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

Page 85: Command Instructions

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

Page 86: Command Instructions

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

Page 87: Command Instructions

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

Page 88: Command Instructions

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

Page 89: Command Instructions

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

เขียนโปรแกรมยอย การอานตําแหนงสวิตช

Page 90: Command Instructions

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

Page 91: Command Instructions

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

Page 92: Command Instructions

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 ?

Page 93: Command Instructions

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:

Page 94: Command Instructions

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

Page 95: Command Instructions

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…..

Page 96: Command Instructions

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

Page 97: Command Instructions

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

Page 98: Command Instructions

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

Page 99: Command Instructions

99

การควบคุมความกวางสัญญาณพัลส

MCS-51

P1.0

PULSE100: SETB P1.0LCALL DELAYCLR P1.0RET

DELAY: MOV R7,#XLOOP: NOP

DJNZ R7,LOOPRET

100uS

Page 100: Command Instructions

100

การควบคุมการผลิตความถี่

P1.0

SETB P1.0LOOP: LCALL DELAY

CPL P1.0SJMP LOOP

DELAY: MOV R7,#20HLOOP: NOP

DJNZ R7,LOOPRET

100uS

;เปลื่ยนบิทเปนตรงขาม

100uSFrequency = ?

Page 101: Command Instructions

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

Page 102: Command Instructions

102

ถังผสมของเหลวแบบที่ถังผสมของเหลวแบบที่ 22

การทํางาน- เมื่อระดับต่ํากวา FS1 ให V3 ปดและ V1 เปดถึงระดับ

FS2 แลวปดและให V2 ทํางานตอจนระดบัสูงถงึ FS3 แลวปด

- เมื่อระดับน้ําถึง FS3 ใหวาวล V3 เปดจนระดับน้ําต่ํากวา FS1 แลวจึงปดและกลับไปเปด V1 อีก

V1 V2

V3

FS1

FS2

FS3

ใหนักศึกษาเขียนวงจรเชื่อมตอและโปรแกรมควบคุมการทํางานกําหนดให: น้ําต่ํากวาระดับ FS จะใหลอจิก 1

Page 103: Command Instructions

103

ผังโปรแกรม start

ระดับต่าํกวา FS1?

on V1,off V3

FS3=0?

ระดับสงูกวา FS2 ?

Y

y

กําหนดให: น้ําต่ํากวาระดับ FS จะใหลอจิก 1

Page 104: Command Instructions

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

Page 105: Command Instructions

105

Program START: JNB FS1,L1

L1: SETB V3 ;OnCLR V2 ;Off