ข้ามไปที่เนื้อหาหลัก

รวมชุดคำสั่ง Assembly ของ AVR

บทความนี้ได้รวบรวมชุดคำสั่งภาษา assembly ของไมโคคอนโทรลเลอร์ตระกูล AVR และสรุปการใช้งานเป็นภาษาไทยอย่างง่ายหากมีข้อผิดพลาด ขออภัยด้วยครับ
ชุดคำสั่งทางคณิตศาสตร์และลอจิก
add Rd, Rr   :   Rd + Rr เก็บผลลัพธ์ไว้ใน Rd
adc Rd, Rr   :   Rd + Rr + Carry flag  เก็บผลลัพธ์ไว้ใน Rd
mul Rd, Rr   :   Rd x Rr ได้ผลลัพธ์เป็น 16 bit เก็บไว้ใน R0, R1
sub Rd, Rr   :   Rd - Rr เก็บผลลัพธ์ไว้ใน Rd
sbc Rd, Rr   :   Rd - Rr - Carry flag  เก็บผลลัพธ์ไว้ใน Rd
and Rd, Rr   :   Rd and Rr แบบ bit ต่อ bit
or Rd, Rr   :   Rd or Rr แบบ bit ต่อ bit
eor Rd, Rr   :    Rd exclusive or Rr แบบ bit ต่อ bit
com Rd   :   complement (กลับบิต) Rd
neg Rd   :   2'complement (ติดลบ) Rd
inc Rd   :   Rd++
dec Rd   :   Rd--
clr Rd   :   เคลียร์ bit Rd เป็น 0
ชุดคำสั่งเคลื่อนย้ายข้อมูล
mov Rd, Rr   :   copy ข้อมูลขนาด 1 byte จาก Rr ไว้ใน Rd
movw Rd, Rr   :   copy ข้อมูลขนาด 2 bytes จาก Rr, Rr+1 ไว้ใน Rd, Rd+1
ldi   Rd, k   :   โหลดค่าใส่ register , k มีค่า 0 - 255
ld Rd, X   :   อ่านค่าตำแหน่งที่ X ชี้อยู่เก็บไว้ใน Rd
ld Rd, Y   :   อ่านค่าตำแหน่งที่ Y ชี้อยู่เก็บไว้ใน Rd
ld Rd, Z   :   อ่านค่าตำแหน่งที่ Z ชี้อยู่เก็บไว้ใน Rd
ld Rd, -X   :   อ่านค่าตำแหน่งที่ X-1 ชี้อยู่เก็บไว้ใน Rd
ld Rd, -Y   :   อ่านค่าตำแหน่งที่ Y-1 ชี้อยู่เก็บไว้ใน Rd
ld Rd, -Z   :   อ่านค่าตำแหน่งที่ Z-1 ชี้อยู่เก็บไว้ใน Rd
ld Rd, X+   :   อ่านค่าตำแหน่งที่ X ชี้อยู่เก็บไว้ใน Rd จากนั้น X เลื่อนไป 1 ตำแหน่ง
ld Rd, Y+   :   อ่านค่าตำแหน่งที่ Y ชี้อยู่เก็บไว้ใน Rd จากนั้น Y เลื่อนไป 1 ตำแหน่ง 
ld Rd, Z+   :   อ่านค่าตำแหน่งที่ Z ชี้อยู่เก็บไว้ใน Rd จากนั้น Z เลื่อนไป 1 ตำแหน่ง
st X, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ X ชี้อยู่
st Y, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Y ชี้อยู่
st Z, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Z ชี้อยู่
st -X, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ X-1 ชี้อยู่
st -Y, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Y-1 ชี้อยู่
st -Z, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Z-1 ชี้อยู่
st X+, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ X ชี้อยู่จากนั้น X เลื่อนไป 1 ตำแหน่ง
st Y+, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Y ชี้อยู่จากนั้น Y เลื่อนไป 1 ตำแหน่ง
st Z+, Rd   :   เขียนข้อมูลจาก Rd ลงไปใน SRAM ตำแหน่งที่ Z ชี้อยู่จากนั้น Z เลื่อนไป 1 ตำแหน่ง
lpm   :   อ่านค่าจาก SRAM ตำแหน่งที่ Z ชี้อยู่เก็บไว้ใน R0
in  Rd, A   :   อ่านค่าจาก Input Address A ไปเก็บใน Rd (Input Address เช่น PINB, PINC, PIND)
out A, Rr   :   ส่งค่าข้อมูลจาก Rr ไปยัง Output Address A (Output Address เช่น PORTB, PORTC, PORTD)
push Rr   :   เก็บค่า Rr ไว้ใน Stack
pop Rd   :   นำค่าบนสุดของ Stack มาเก็บไว้ใน Rd
ชุดคำสั่งควบคุมการทำงานของ CPU
nop   :   No Operand คือไม่ทำอะไรเลย 1 clk
sleep   :   เข้าสู่โหมดประหยัดพลังงาน
wdr   :   รีเซ็ต watch dog timer
ชุดคำสั่งควบคุมการทำงานของโปรแกรม
call   SUB_ROUTINE   : เรียกใช้ sub-rutine ที่ประกาศไว้
ret   :   กลับไปทำงานโปรแกรมจากตำแหน่งที่เรียกใช้ sub-rutine จะใช้ใน sub-rutine
rjmp ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้ กระโดดได้ไม่เกิน +- 2K ตำแหน่งจากตำแหน่งปัจจุบัน
jmp ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้ กระโดดได้ทั่วทุกตำแหน่งของหน่วยความจำ
cp Rd, Rr   :   เปรียบเทียบ Rd และ Rr ใช้คู่กับ Branch
brlt ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบ Rd < Rr แบบคิดเครื่องหมาย
brlo ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบ Rd < Rr แบบไม่คิดเครื่องหมาย
brge ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบ Rd >= Rr
brcs ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก carry flag เท่ากับ 1
brcc ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก carry flag เท่ากับ 0
brhs ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก half carry flag เท่ากับ 1
brhc ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก half carry flag เท่ากับ 0
brvs ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก overflow flag เท่ากับ 1
brvc ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หาก overflow flag เท่ากับ 0
cpi Rd, k   :   เปรียบเทียบ Rd กับ k ใช้คู่กับ Branch โดย k เป็นค่าคงที่ เช่น 1, 2, 3
breq ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบเท่ากัน
brne ROUTINE   :   กระโดดไปทำงานตำแหน่งที่ประกาศไว้หากผลการเปรียบเทียบไม่เท่ากัน
ชุดคำสั่งจัดการข้อมูลระดับ bit
lsl Rd   :   ชิพบิตไปทางซ้าย 1 ครั้ง เก็บบิตซ้ายสุดไว้ที่ carry flag
lsr Rd   :    ชิพบิตไปทางขวา 1 ครั้ง เก็บบิตขวาสุดไว้ที่ carry flag
rol Rd   :    ชิพบิตไปทางซ้าย 1 ครั้ง เก็บบิตซ้ายสุดไว้ที่ carry flag แทนที่บิตขวาสุดด้วย carry flag ที่เก็บจากบิตซ้ายสุด
ror Rd   :   ชิพบิตไปทางขวา 1 ครั้ง เก็บบิตขวาสุดไว้ที่ carry flag แทนที่บิตซ้ายสุดด้วย carry flag ที่เก็บจากบิตขวาสุด
asr Rd   :    ชิพบิตไปทางขวา 1 ครั้ง เก็บบิตขวาสุดไว้ที่ carry flag บิตซ้ายสุดคงค่าเดิม
swap Rd   :   สลับ 4 bits ล่างกับ 4 bits บนของ Rd
sec   :   เซ็ทค่า carry flag เท่ากับ 1
clc   :   เซ็ทค่า carry flag เท่ากับ 0
sen   :   เซ็ทค่า negative flag เท่ากับ 1
cln   :   เซ็ทค่า negative flag เท่ากับ 0
sez   :   เซ็ทค่า zero flag เท่ากับ 1
clz   :   เซ็ทค่า zero flag เท่ากับ 0
sev   :   เซ็ทค่า overflow flag เท่ากับ 1
clv   :   เซ็ทค่า overflow flag เท่ากับ 0
seh   :   เซ็ทค่า half carry flag เท่ากับ 1
clh   :   เซ็ทค่า half carry flag เท่ากับ 0
สามารถศึกษาเพิ่มเติมได้ที่ : http://academy.cba.mit.edu/classes/embedded_programming/doc1022.pdf

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

รู้จักกับการออกแบบอินโฟกราฟิกส์ infographics design

      infographics คือการออกแบบโดยการใช้ภาพนิ่ง, ภาพเคลื่อนไหวหรือสัญลักษณ์แทนข้อความหรือข้อมูลต่างๆ ที่ต้องการจะสื่อความหมายถึงข้อความหรือข้อมูลนั้นโดยภาพนิ่ง, ภาพเคลื่อนไหวหรือสัญลักษณ์ที่ใช้แทนจะมีรูปแบบที่ผู้อ่านสามารถเข้าใจได้อย่างรวดเร็วและชัดเจน โดยไม่ต้องมีผู้นำเสนอมาช่วยขยายความอีก       infographics มาจากคำว่า information + graphics การนำเสนอข้อมูลแบบ infographics จะนำเสนอข้อมูลที่เข้าใจยาก ข้อมูลที่ตัวอักษรเยอะๆ ในรูปแบบสร้างสรรค์เข้าใจได้ง่าย เช่น ภาพ ลายเส้น แผนภูมิ แผนที่ ฯลฯ สามารถสื่อข้อมูลนั้นออกมาได้อย่างชัดเจน มีองค์ประกอบที่สำคัญ        ตัวอย่างการนำเสนอข้อมูลแบบ infographics http://www.alychidesigns.com/30-templates-and-vector-kits-to-design-your-own-infographic กระบวกการออกแบบดีไซน์ infographics โดย Hyperakt's Josh Smith  1. รวบรวมข้อมูล รวบรวมข้อมูลทุกอย่างเกี่ยวกับสิ่งที่จะนำเสนอโดยข้อมูลที่ดีควรเป็นข้อมูลดิบจากต้นฉบับและควรเก็บรวบรวมลิ้งค์ข้อมูลไว้ด้วย 2. การอ่านข้อมูลทั้งหมด การออกแบบอินโฟกราฟิกต้องมีทักษะในการจัดการข้อมูลและต้องแน่ใจว่าข้

Python: Chat bot &Text to Speech ภาษาไทย ด้วย gTTS

วันนี้จะมาแนะนำทุกๆ คนเกี่ยวกับ การเขียนโปรแกรมง่าย ๆ เพื่อให้คอมพิวเตอร์อ่านออกเสียงตามที่เราได้พิมพ์ให้ โดย ใช้ library คือ gTTS และ play sound จะมีวิธีการเขียนอย่างไร มาดูกันเลย เริ่มจากติดตั้ง package gTTS และ play sound ก่อน                                                                          pip install gTTS                                                                                pip install playsound                                                                                                                                                                               จากนั้น เรามาเริ่มเขียนโปรแกรมกันเลย โดยการทำงานของโปรแกรมนี้คือ โปรแกรมจะรับค่าข้อความจากผู้ใช้ จากนั้น เรียกใช้ library gTTS โดยส่งข้อมูลคือ ข้อความ และ ภาษา สำหรับการแปลงข้อความเป็นเสียงผ่าน google translate API แล้วจากนั้นจึงทำการ save ข้อมูลลงไปยัง file ชื่อ "sound.mp3" ต่อมาไฟล์จะถูกเล่นโดย playsound เป็นเสียงให้เราได้ยินกัน และในบรรทัดสุดท้ายเป็นการลบไฟล์ที่บัน