Electoday 2025

ไมโครคอนโทรลเลอร์ => Other MCUs => Topic started by: S.poolpong93 on December 06, 2016, 05:53:22 PM

Title: สงสัยเรืองการใช้งาน รีจิสเตอร์แบงค์ 8051
Post by: S.poolpong93 on December 06, 2016, 05:53:22 PM
อย่างตัวอย่างเช่น

void serial_isr() interrupt 4 using 1 {
//----
}


using 1 คือใช้ รีจิสเตอร์แบงค์ 1  ผมไม่เข้าใจว่า เราเอา รีจิสเตอร์แบงค์ ไว้เก็บค่าอะไร
ควรใช้ตอนไหนบ้าง
เพราะเห็นบางที ก็ไม่มีการประกาศใช้ตัวนี้

ขอบคุณมากครับ
Title: Re: สงสัยเรืองการใช้งาน รีจิสเตอร์แบงค์ 8051
Post by: software on December 06, 2016, 06:27:18 PM
ปกติจะใช้ register bank 0 (R0-R7) เมื่อมีการ interrupt ถ้าไม่เปลี่ยน bank เวลาใช้ R0-R7 จะไปทับ register ใน  mode ปกติ การเลือก bank1 ก็เท่ากับใช้ R0-R7 ได้โดยไท่กระทบ normal mode คล้ายกับการ push register 8ตัวโดยการ switch bank เนื่องจาก MCS51 มี RAM ค่อนข้างน้อย(128 byte for AT89c2051,AT89c4051) การใช้switch bank จึงช่วยประหยัด stack ด้วย
Title: Re: สงสัยเรืองการใช้งาน รีจิสเตอร์แบงค์ 8051
Post by: S.poolpong93 on December 07, 2016, 10:36:13 AM
Quote from: software on December 06, 2016, 06:27:18 PM
ปกติจะใช้ register bank 0 (R0-R7) เมื่อมีการ interrupt ถ้าไม่เปลี่ยน bank เวลาใช้ R0-R7 จะไปทับ register ใน  mode ปกติ การเลือก bank1 ก็เท่ากับใช้ R0-R7 ได้โดยไท่กระทบ normal mode คล้ายกับการ push register 8ตัวโดยการ switch bank เนื่องจาก MCS51 มี RAM ค่อนข้างน้อย(128 byte for AT89c2051,AT89c4051) การใช้switch bank จึงช่วยประหยัด stack ด้วย

ขอบคุณมากครับ
แบบนี้ เรามี register bank 4 ตัว (0-3) เราวสามารถเลือกใช้ได้ตามใจเลยไหมครับ
เช่น มี 2 interrupt  เป็น timer 0 กับ serial
ผมใช้เป็น timer0 using 0 กับ serial using 2 แบบนี้ได้เลยใช่ไหมครับ
Title: Re: สงสัยเรืองการใช้งาน รีจิสเตอร์แบงค์ 8051
Post by: software on December 07, 2016, 06:04:52 PM
โดยหลัการทำได้ แต่ในภาษา C มีข้อกำหนดอื่นหรือไม่ต้องตรวจสอบ ปกติผมใช้ ASM สามารถเลือกได้อิสระครับ