Electoday 4.0

สงสัยเรืองการใช้งาน รีจิสเตอร์แบงค์ 8051

อย่างตัวอย่างเช่น
Code: [Select]
void serial_isr() interrupt 4 using 1 {
//----
}

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

ขอบคุณมากครับ

ปกติจะใช้ 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 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 แบบนี้ได้เลยใช่ไหมครับ

โดยหลัการทำได้ แต่ในภาษา C มีข้อกำหนดอื่นหรือไม่ต้องตรวจสอบ ปกติผมใช้ ASM สามารถเลือกได้อิสระครับ