You are on page 1of 4

ชุดคําสั่งของ PIC16F877

สวัสดีครับ หลังจากที่เราไดเรียนรูเรื่องการใช Assembler, ระบบหนวยความจํา กันไปแลว บทความนี้ผม


จะกลาวถึงชื่อคําสั่งและคําอธิบายการทํางานของคําสั่งแบบคราวๆ กันกอน แลวในคราวหนาเราคอยศึกษา
รายละเอียดของคําสั่งพรอมกับตัวอยางโปรแกรมกันทีหลัง
ตัวไมโครคอนโทรลเลอร PIC16F877 นั้นมีคําสั่งดวยกัน 35 คําสั่ง โดยแตละคําสั่งเปนแบบ 14 บิต (14bit
core) รายการคําสั่งนัน้ แบงเปน 3 กลุม ดังนี้ครับ

1. กลุมคําสัง่ แบบไบต

ในกลุมนี้เปนการประมวลผลขอมูลระดับไบต โดยมีตัวอักษรที่ใชแทน Operator อยู 2 แบบ คือ f กับ d


อันมีความหมายดังนี้
f แทน คาตําแหนงของเรจิสเตอร (มีขนาด 7 บิต)
d แทน การเลือกวา ผลการทํางานนัน้ จะเก็บในเรจิสเตอร W หรือ f โดยมีขอกําหนดวา ถาคานี้
เปน 0 แสดงวา ผลการทํางานของคําสั่งนัน้ ๆ จะเก็บในเรจิสเตอร W แตถาเปน 1 ผลลัพธจะเก็บ
ในเรจิสเตอร f
ชุดคําสั่งในกลุม นี้ไดแก

Mnemonic Operand การทํางาน จํานวนไซเคิล ผลกับแฟล็ก


s
ADDWF f,d บวกคาของ W และ f 1 C,DC,Z
ANDWF f,d ทําการ AND บิตของ W ดวย f 1 Z
CLRF f ทําให f เปน 0 1 Z
CLRW ทําให W เปน 0 1
COMF f,d คํานวณคาคอมพลีเมนตของ f 1 Z
DECF f,d ลดคาของ f ลง 1 คา 1 Z
DECFSZ f,d 1. ลดคาของ f แลวถาผลลัพธเปน 0 จะกระโดด 2
ขามคําสั่งถัดไป
2. ลดคาของ f แลวถาผลลัพธไมใช 0 จะทําคําสั่ง 1
ถัดไป
INCF f,d เพิ่มคาของ f 1 Z
INCFSZ f,d 1. เพิ่มคาของ f แลวถาผลลัพธเปน 0 จะกระโดด 2
ขามคําสั่งถัดไป
2. เพิ่มคาของ f แลวถาผลลัพธไมใช 0 จะทํา 1
คําสั่งถัดไป
IORWF f,d หาผลลัพธของการทํา Inclusive OR ระหวาง W 1 Z
กับ f
MOVF f,d โอนคาจาก f 1 Z
MOVWF f โอนคาจาก W ไปเก็บใน f 1
NOP ไมทําอะไร 1
RLF f,d หมุนบิตไปทางซายโดยใช Carry flag 1 C
RRF f,d หมุนบิตไปทางขวาโดยใช Carry flag 1 C
SUBWF f,d ลบคาใน f ดวย W 1 C,DC,Z
SWAPF f,d สลับบิตแบบ 4 บิตของ f 1
XORWF f,d หาผลลัพธของการทํา Exclusive OR ระหวาง W 1 Z

2. กลุมคําสัง่ แบบบิต

คําสั่งตอไปนี้ จะเปนคําสั่งประมวลผลขอมูลแบบบิต ซึง่ จะมีตวั อักษร 2 ตัว คือ b และ f โดยที่


b เปนคาตําแหนงของบิต (0..7)
f เปนคาตําแหนงของเรจิสเตอร
คําสั่งในกลุมนี้คือ

Mnemonic Operand การทํางาน จํานวนไซเคิล ผลกับแฟล็ก


s
BCF f,b กําหนดใหบิตที่ b ของเรจิสเตอร f เปน 0 1
BSF f,b กําหนดใหบิตที่ b ของเรจิสเตอร f เปน 1 1
BTFSC f,b 1. ทดสอบวาบิต b ของ f เปน 0 หรือไม ถาเปน 1
จะทําคําสั่งถัดไป
2. แตถาไมเปน 0 ก็จะขามคําสั่งถัดไป 2
BTFSS f,b 1. ทดสอบวาบิต b ของ f เปน 1 หรือไม ถาเปน 1
จะทําคําสั่งถัดไป
2. แตถาไมเปน 1 ก็จะขามคําสั่งถัดไป 2
3. กลุมคําสัง่ แบบคาคงที่

คําสั่งตอไปนี้ จะเปนคําสั่งประมวลผลขอมูลกับคาคงที่ โดยจะมองวา k คือคาคงที่ (Constant) ซึ่งจะมี


ขนาด 8บิต และ 11 บิต ซึ่งคาคงทีน่ ี้อาจจะเปนคาตัวเลข หรือคาของตําแหนง (Address) ก็ได คําสั่งในกลุมนี้คือ

Mnemonic Operand การทํางาน จํานวนไซเคิล ผลกับแฟล็ก


s
ADDLW k บวกคาของ W ดวย k แลวเก็บใน W 1 C,DC,Z
ANDLW k ทําการ AND บิตระหวาง W กับ k แลวเก็บ 1 Z
ผลลัพธของการทํางานในเรจิสเตอร W
CALL k เรียกใชโปรแกรมยอย โดยคา k เปนคาตําแหนง 2
ของโปรแกรมยอย
CLRWDT เคลียรคาของ Watchdog Timer 1 TO/, PD/
GOTO k กระโดดไปทํางานที่ตาํ แหนง k 2
IORLW k ทํา Inclusive OR ระหวาง k กับ W แลวเก็บ 1 Z
ผลลัพธลงในเรจิสเตอร W
MOVLW k นําคา k ไปเก็บในเรจิสเตอร W 1
RETFIE กลับจากการทําโปรแกรมยอยที่ตอบสนองการทํา 2
การขัดจังหวะ (Return from interrupt)
RETLW k กลับจากโปรแกรมยอยมาทีโ่ ปรแกรมหลัก โดย 2
นําคา k ไปเก็บในเรจิสเตอร W
RETURN กลับจากโปรแกรมยอยมาทีโ่ ปรแกรมหลัก 2
(Return from subroutine)
SLEEP เรียกใชงานโหมดประหยัดพลังงาน (standby) 1 TO/, PD/
SUBLW k ลบ k ดวยคาที่เก็บในเรจิสเตอร W แลวเก็บ 1 C,DC,Z
ผลลัพธลงในเรจิสเตอร W
XORLW k ทํา Exclusive OR ระหวาง k กับ W แลวเก็บ 1 Z
ผลลัพธลงในเรจิสเตอร W

ตอนนี้เราไดทาํ ความรูจักกับคําสั่งตางๆของ PIC16F877 กันไปแลว บทความในตอนหนา ผมจะกลาวถึง


พอรตของ PIC วาแตละพอรตนั้นสามารถทําอะไรไดบาง และเราจะควบคุมการทํางานของพอรตนั้นๆ อยางไร
สวนรายละเอียดของคําสั่งในบทความนี้ ผมจะคอยๆ เพิ่มรายละเอียดของแตละคําสั่งในครั้งถัดๆไป ดังนั้น
บทความนี้จะสมบูรณแบบขึ้นเรื่อยๆ ดวยรายของคําสัง่ ทีผ่ มจะเพิม่ เขาไปในบทความถัดๆ ไป

สาเหตุที่ผมไมแยกเปนบทความของแตละคําสั่งเพราะวา ผมตองการสรางเอกสารที่เปนเอกสารอางอิง
ของคําสั่ง พอเราตองการทราบรายละเอียดของคําสั่งใด เราก็คอยคลิกเขาไปอาน แตอยางไรก็ดี การที่ขอมูลตางๆ
นั้นจะครบทุกคําสั่ง ก็จะใชระยะเวลาสักระยะหนึง่ (รอเอาหนอยนะครับ)

สวนบทความเรื่องคําสั่งและหนาที่ของคําสั่งก็จบลงเทานี้กอนนะครับ คราวหนาเรามาอานกันเรื่องของ
พอรตกันตอครับ สวัสดีครับผม

You might also like