ลงทะเบียนธนาคารและการจัดสรรหน่วยความจำกองในไมโครคอนโทรลเลอร์ 8051

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





คอลเลกชันของรีจิสเตอร์วัตถุประสงค์ทั่วไป (R0-R7) เรียกว่ารีจิสเตอร์แบงค์ซึ่งรับข้อมูลหนึ่งไบต์ ทะเบียนธนาคารเป็นส่วนหนึ่งของ หน่วยความจำ RAM ในตัว ไมโครคอนโทรลเลอร์และใช้ในการจัดเก็บคำสั่งของโปรแกรม ไมโครคอนโทรลเลอร์แต่ละตัวประกอบด้วยธนาคารหน่วยความจำต่างๆและทะเบียนธนาคารแต่ละแห่งประกอบด้วยที่อยู่ที่ไม่ซ้ำกันสำหรับการระบุตำแหน่งที่จัดเก็บ

ลงทะเบียนธนาคารใน 8051

ลงทะเบียนธนาคารใน 8051

ลงทะเบียนธนาคารใน 8051



ไมโครคอนโทรลเลอร์ 8051 ประกอบด้วยธนาคารลงทะเบียนสี่แห่งเช่น Bank0, Bank1, Bank2, Bank3 ซึ่งเลือกโดย PSW (Program Status Word) register รีจิสเตอร์แบงค์เหล่านี้มีอยู่ในหน่วยความจำ RAM ภายในของไมโครคอนโทรลเลอร์ 8051 และใช้เพื่อประมวลผลข้อมูลเมื่อมีการตั้งโปรแกรมไมโครคอนโทรลเลอร์


การเปลี่ยนทะเบียนธนาคาร



โดยค่าเริ่มต้นไมโครคอนโทรลเลอร์ 8051 จะเปิดใช้งานด้วย register bank 0 และโดยใช้ Program Status Word (PSW) เราสามารถเปลี่ยนไปใช้ธนาคารอื่นได้ PSW สองบิตใช้สำหรับการสลับระหว่างธนาคารที่ลงทะเบียน สองบิตนี้เข้าถึงได้โดยคำสั่งบิตแอดเดรส SETB และ CLR

ขึ้นอยู่กับชุดค่าผสมที่เป็นไปได้ของ RS1 และ RS0 ของ PSW ธนาคารทะเบียนจะเปลี่ยนไปตามนั้นเช่นหาก RS1 และ RS0 เป็น 0 ระบบจะเลือกธนาคาร 0 ในทำนองเดียวกัน Bank1, 2 & 3 จะถูกเลือกตามค่าของ RS1 และ RS0

การจัดสรรหน่วยความจำแบบกองซ้อนในไมโครคอนโทรลเลอร์ 8051

สแต็กเป็นพื้นที่ของหน่วยความจำเข้าถึงโดยสุ่ม (RAM) ที่จัดสรรเพื่อเก็บพารามิเตอร์ทั้งหมดของตัวแปรไว้ชั่วคราว สแต็กยังรับผิดชอบในการเตือนลำดับที่เรียกใช้ฟังก์ชันเพื่อให้สามารถส่งคืนได้อย่างถูกต้อง เมื่อใดก็ตามที่เรียกใช้ฟังก์ชันพารามิเตอร์และตัวแปรโลคัลที่เกี่ยวข้องจะถูกเพิ่มลงในสแต็ก (PUSH) เมื่อฟังก์ชันส่งกลับพารามิเตอร์และตัวแปรจะถูกลบ (“ POP”) ออกจากสแต็ก นี่คือสาเหตุที่ขนาดสแต็กของโปรแกรมเปลี่ยนไปเรื่อย ๆ ในขณะที่โปรแกรมกำลังทำงาน


รีจิสเตอร์ที่ใช้ในการเข้าถึงสแต็กเรียกว่าสแต็กพอยเตอร์รีจิสเตอร์ ตัวชี้สแต็กคือรีจิสเตอร์ขนาดเล็กที่ใช้ชี้ไปที่สแตก เมื่อเราดันบางสิ่งเข้าไปในหน่วยความจำสแต็กตัวชี้สแต็กจะเพิ่มขึ้น

การจัดสรรหน่วยความจำแบบกองซ้อนในไมโครคอนโทรลเลอร์ 8051

การจัดสรรหน่วยความจำแบบกองซ้อนในไมโครคอนโทรลเลอร์ 8051

ตัวอย่าง

เมื่อไมโครคอนโทรลเลอร์ 8051 เปิดเครื่องตัวชี้สแต็กจะมีค่าเป็น 07 ตามค่าเริ่มต้นดังแสดงในรูปด้านบน หากเราดำเนินการ 'PUSH' ที่อยู่ตัวชี้สแต็กจะเพิ่มขึ้นและเลื่อนไปยังรีจิสเตอร์อื่น เพื่อหลีกเลี่ยงปัญหานี้ก่อนเริ่มโปรแกรมเราต้องกำหนดตำแหน่งที่อยู่อื่นให้กับตัวชี้สแต็ก

การดำเนินการผลักดัน

'PUSH' ใช้สำหรับการรับค่าจากรีจิสเตอร์ใด ๆ และจัดเก็บในที่อยู่เริ่มต้นของตัวชี้สแต็กเช่น 00h โดยใช้การดำเนินการ 'PUSH' และสำหรับ 'PUSH' ถัดไปจะเพิ่มขึ้น +1 และเก็บค่าไว้ในที่อยู่ถัดไปของตัวชี้สแต็กนั่นคือ 01 ชม.

PUSH การทำงานของ Stack

PUSH การทำงานของ Stack

การดำเนินการ PUSH หมายถึง (เข้าก่อนออกก่อน)

ตัวอย่าง: WAP ในภาษาแอสเซมบลีสำหรับการดำเนินการ PUSH

0000 ชม
MOV 08h, # 21h
MOV 09h, # 56h
ผลัก 00h
ผลัก 01h
สิ้นสุด

การทำงานของ POP

ใช้สำหรับวางค่าจากที่อยู่สูงสุดของตัวชี้สแต็กไปยังที่อยู่ของรีจิสเตอร์อื่น ๆ หากเราใช้ 'POP' นี้อีกครั้งค่าจะลดลง 1 และค่าที่เก็บไว้ในรีจิสเตอร์ใด ๆ จะได้รับเป็น 'POP'

การดำเนินการ POP ในกอง

การดำเนินการ POP ในกอง

การดำเนินการ POP หมายถึง 'Last in First out'

000H
MOV 00H, # 12H
MOV 01H, # 32H
POP 1FH
ป๊อป 0EH
สิ้นสุด

รีจิสเตอร์ของไมโครคอนโทรลเลอร์ 8051

หากเราดำเนินการใด ๆ ไม่ว่าจะเป็นการบวกหรือลบการดำเนินการเหล่านี้จะไม่สามารถดำเนินการได้โดยตรงในหน่วยความจำดังนั้นจึงดำเนินการโดยใช้รีจิสเตอร์ มีหลายประเภท ลงทะเบียนในไมโครคอนโทรลเลอร์ 8051 .

การลงทะเบียนเหล่านี้แบ่งออกเป็นสองประเภทตามการดำเนินการ:

•การลงทะเบียนวัตถุประสงค์ทั่วไป

•ลงทะเบียนฟังก์ชันพิเศษ

การลงทะเบียนวัตถุประสงค์ทั่วไป

ดังที่เราได้กล่าวไปแล้วในบทความนี้ว่ามีการลงทะเบียนธนาคารที่แตกต่างกันสี่รายการโดยแต่ละธนาคารมีการลงทะเบียน 8 บิตที่ระบุแอดเดรสได้ 8 รายการและสามารถเข้าถึงทะเบียนธนาคารได้ครั้งละหนึ่งรายการเท่านั้น แต่ด้วยการเปลี่ยนหมายเลขทะเบียนธนาคารในทะเบียนธงเราสามารถเข้าถึงทะเบียนธนาคารอื่น ๆ ซึ่งได้กล่าวไว้ก่อนหน้านี้ในเอกสารฉบับนี้พร้อมกับ ขัดจังหวะแนวคิดใน 8051 .

รีจิสเตอร์ฟังก์ชันพิเศษ

ฟังก์ชั่นพิเศษลงทะเบียนรวมถึง Accumulator, Register B, Data pointer, PCON, PSW ฯลฯ ได้รับการออกแบบมาเพื่อวัตถุประสงค์ที่กำหนดไว้ล่วงหน้าในระหว่างการผลิตโดยมีที่อยู่ 80H ถึง FFH และไม่สามารถใช้พื้นที่นี้เพื่อวัตถุประสงค์ในการจัดเก็บข้อมูลหรือโปรแกรมได้ การลงทะเบียนเหล่านี้สามารถดำเนินการได้โดยใช้ที่อยู่บิตและรีจิสเตอร์ที่อยู่แบบไบต์

ประเภทของการลงทะเบียนฟังก์ชันพิเศษ

8051 ประกอบด้วยการลงทะเบียนฟังก์ชันพิเศษที่เกี่ยวข้องกับอินพุต / เอาต์พุตสี่รายการซึ่งมีสาย I / O ทั้งหมด 32 เส้น ฟังก์ชันพิเศษลงทะเบียนควบคุมค่าที่อ่านจากบรรทัด I / O และฟังก์ชันพิเศษรีจิสเตอร์ที่ควบคุมการทำงานของ 8051 การลงทะเบียนฟังก์ชันพิเศษเสริมไม่ได้เชื่อมต่อโดยตรงกับ 8051 แต่ในความเป็นจริงหากไม่มีการลงทะเบียนเหล่านี้ - 8051 ไม่สามารถทำงานได้อย่างถูกต้อง ชุดทะเบียน 8051 มีคำอธิบายด้านล่าง

ลงทะเบียนชุดไมโครคอนโทรลเลอร์ 8051

การตั้งค่าคงที่คงที่ในรีจิสเตอร์เรียกว่าชุดรีจิสเตอร์ ค่าถูกกำหนดในรีจิสเตอร์โดยใช้ชุดคำสั่ง 8051 เป็นไปตามคำแนะนำของ CISC ด้วยสถาปัตยกรรม 'Harvard' CISC ย่อมาจากการคำนวณชุดคำสั่งที่ซับซ้อน . คำแนะนำประเภทต่างๆในไมโครคอนโทรลเลอร์ 8051 ประกอบด้วย:

  1. คำแนะนำทางคณิตศาสตร์
  2. คำแนะนำตามเงื่อนไข
  3. คำแนะนำในการโทรและกระโดด
  4. คำแนะนำแบบวนซ้ำ
  5. คำแนะนำเชิงตรรกะ
  6. คำแนะนำ Bullion

1. คำแนะนำทางคณิตศาสตร์

คำสั่งเลขคณิตดำเนินการพื้นฐานหลายอย่างเช่น:

  • ส่วนที่เพิ่มเข้าไป
  • การลบ
  • การคูณ
  • แผนก
คำแนะนำเลขคณิตในไมโครคอนโทรลเลอร์ 8051

คำแนะนำเลขคณิตในไมโครคอนโทรลเลอร์ 8051

ตัวอย่าง:

ก. ส่วนที่เพิ่มเข้าไป:

องค์กร 0000h
MOV R0, # 03H // ย้ายค่า 3 คือรีจิสเตอร์ R0 //
MOV A, # 05H // ย้ายค่า 5 ในตัวสะสม A //
เพิ่ม A, 00H // ค่าตัวสะสม ‘5’ ด้วย 0 และเก็บไว้ในตัวสะสม //
สิ้นสุด

ข. การลบ:

องค์กร 0000h
MOV R0, # 03H // ย้ายค่า 3 คือรีจิสเตอร์ R0 //
MOV A, # 05H // ย้ายค่า 5 ในตัวสะสม A //
SUBB A, 03H // A = 5-3 ค่าสุดท้ายคือ 2 ที่เก็บไว้ใน Accumulator A //
สิ้นสุด

ค. การคูณ:

องค์กร 0000h
MOV R0, # 03H // ย้ายค่า 3 คือรีจิสเตอร์ R0 //
MOV A, # 05H // ย้ายค่า 5 ในตัวสะสม A //
MUL A, 03H // A = 5 * 3 ค่าสุดท้ายคือ 15 เก็บไว้ใน Accumulator A //
สิ้นสุด

D. กอง:

องค์กร 0000h
MOV R0, # 03H // ย้ายค่า 3 คือรีจิสเตอร์ R0 //
MOV A, # 15H // ย้ายค่า 5 ในตัวสะสม A //
DIV A, 03H // A = 15/3 ค่าสุดท้ายคือ 5 เก็บไว้ใน Accumulator A //
สิ้นสุด

2. คำแนะนำตามเงื่อนไข

CPU สามารถดำเนินการตามคำสั่งตามเงื่อนไขโดยการตรวจสอบสถานะบิตเดียวหรือสถานะไบต์เรียกว่าคำสั่งเงื่อนไขเช่น:

เพื่อตรวจสอบสถานะบิตเดียวในการลงทะเบียนบิตแอดเดรส

JB- กระโดดถ้าด้านล่าง

JNB- กระโดดถ้าไม่อยู่เหนือ

เพื่อตรวจสอบสถานะบิตพกพา

JC- กระโดดถ้าถือธง

JNC- กระโดดหากไม่มีการพกพา

เพื่อตรวจสอบสถานะตัวสะสมทั้ง 0 หรือ 1

JZ- กระโดดถ้าธงเป็นศูนย์

JNZ- กระโดดถ้าไม่ใช่ศูนย์

ทั้งหมดนี้เกี่ยวกับชุดรีจิสเตอร์ในไมโครคอนโทรลเลอร์ 8051 และการจัดสรรหน่วยความจำสแตก เราหวังว่าบทความนี้อาจให้ข้อมูลเชิงลึกที่สำคัญเกี่ยวกับหัวข้อนี้พร้อมกับโปรแกรมที่น่าสนใจที่มาพร้อมกับแต่ละหัวข้อ นอกจากนี้คุณยังสามารถเขียนถึงเราเพื่อขอความช่วยเหลือได้ การเข้ารหัสไมโครคอนโทรลเลอร์ และเกี่ยวกับไฟล์ โครงการล่าสุดเกี่ยวกับไมโครคอนโทรลเลอร์ .