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