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

Started by S.poolpong93, December 06, 2016, 05:53:22 PM

Previous topic - Next topic

S.poolpong93

อย่างตัวอย่างเช่น

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


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

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

software

ปกติจะใช้ 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 ด้วย

S.poolpong93

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


software

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