ชนิดของแรมMCS51ถ้าแรมไม่พอให้ประกาศidata
bdata data idata
25/3/2557 SONGCHAI PRAPATRUNGSEE
bdata data idata
ROM=READ ONLY MEMORY หน่วยความจำถาวรแม้ไม่มี
ไฟเลี้ยงความจำก็ยังคงอยู่
RAM=RANDOM ACCESS MEMORY ถ้าไม่มีไฟเลี้ยง
ข้อมูลจะหายไป
RAMของไมโครคอนโทรลเลอร์จะมีการเข้าถึง
ด้วยสัญญลักษณ์ที่อยู่(ADDRESS
SYMBOL)
เช่น bdata, data, idata, code, xdata
เบอร์ใดมีRAMเกิน 128 BYTE
ก็จะสามารถใช้ idata ได้
ถ้ามีRAM 128 BYTEก็จะไม่สามารถใช้ idata ได้
BANK0 มี 8BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง 0H-07H
คือRAMที่ใช้งานโดยรีจิสเตอร์ R0 – R7
แต่ต้องกำหนดค่าในรีจิสเตอร์PSW
(PROGRAM
STATUS WORD)
ที่บิทRS0และบิทRS1เพื่อเลือกBANK
BANK1 มี 8BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง 08H-0FH
คือRAMที่ใช้งานโดยรีจิสเตอร์ R0 – R7
แต่ต้องกำหนดค่าในรีจิสเตอร์PSW
(PROGRAM
STATUS WORD)
ที่บิทRS0และบิทRS1เพื่อเลือกBANK
BANK2 มี 8BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง 10H-17H
คือRAMที่ใช้งานโดยรีจิสเตอร์ R0 – R7
แต่ต้องกำหนดค่าในรีจิสเตอร์PSW
(PROGRAM
STATUS WORD)
ที่บิทRS0และบิทRS1เพื่อเลือกBANK
BANK3 มี 8BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง 18H-1FH
คือRAMที่ใช้งานโดยรีจิสเตอร์ R0 – R7
แต่ต้องกำหนดค่าในรีจิสเตอร์PSW
(PROGRAM
STATUS WORD)
ที่บิทRS0และบิทRS1เพื่อเลือกBANK
BIT ADDRESSABLE SEGMENT สามารถเข้าถึงได้โดยตรง
ในระดับบิท
มี 16BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง 20H-2FH
GENERAL RAM ใช้งานทั่วไป
มี 80BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง 30H-7FH
ถ้าไมโครคอนโทรลเลอร์ที่มีRAMเกิน 128BYTEก็จะมี idata
เช่น AT89C52
idata คือRAMที่เข้าถึงได้โดยอ้อมเท่านั้น มี 128BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง 80H-FFH
“bdata” หมายถึง BIT
ADDRESSABLE SEGMENT
เป็น RAM ที่เข้าถึงได้โดยตรงในระด้บ
BIT มี 16 BYTE
แอดเดรส(ADDRESS)อยู่ในช่วง
20H-2FH
เวลาประกาศ RAM เป็นแบบ
bdata ก็จะหมายถึง RAM ส่วนนี้
bdata ไม่ต้องประกาศนำหน้าชนิดตัวแปร bit
ก็ได้
เพราะการประกาศ bit ก็จะหมายถึงเป็นการจองแรมส่วนนี้
เช่น
“ bdata bit ” หรือ “ bit
” หรือ “ bdata unsigned char ”
“data” หมายถึงRAMทั้ง 128BYTE คือ
BANK0-BANK3,
BIT ADDRESSABLE SEGMENT,
GENERAL RAM ADDRESS
แอดเดรส(ADDRESS)อยู่ในช่วง 00H-7FH
การประกาศ RAM แบบ data
ไม่ต้องเขียนคำว่า
data นำหน้าชนิดตัวแปรก็ได้
ถ้าไม่ประกาศก็จะเป็น
data โดยอัตโนมัติ
“idata” เป็น RAM ที่เข้าถึงได้โดยอ้อมเท่านั้น
ในกรณีที่ไมโครคอนโทรลเลอร์มีแรมเกิน 128 BYTE เช่น
AT89C52 มีแรม 256BYTE หมายความว่าแรมอีก128BYTE
ที่มีแอดเดรสอยู่ในช่วง
80H – FFH เป็นแรมในส่วน
ของ
idata ให้ประกาศเป็นขั้นตอนสุดท้าย
RAM โดยอ้อมจะเข้าถึง
RAM ช้ากว่า RAM โดยตรง
“code” หมายถึง ROM
เขียนคำว่า
code
นำหน้าชนิดตัวแปร
เป็นการประกาศตัวแปร
แบบบันทึกไว้ใน ROM
เพื่อประหยัด
RAM
ใช้ในการประกาศตัวแปร
แบบค่าคงที่
“ sfr ” คือ SPECIAL FUNCTION
REGISTERS
เป็น RAM ที่เข้าถึงได้โดยตรง
โดยการประกาศว่า “ sfr ”
ส่วนนี้จะเป็นการประกาศโดยคอมไพล์เลอร์เอง
RAM ถ้าเป็นAT89C51 มีแรม 128BYTE
RAM ถ้าเป็นAT89C52 มีแรม 256BYTE
#include <REGX52.H>
/* bdata=ADDRESS 20H-2FH=16BYTE
data=ADDRESS 00H-7FH=128BYTE
idata=ADDRESS 80H-FFH=128BYTE */
//bdata unsigned char z1,z2,z3,z4,z5,
//z6,z7,z8,z9,z10,z11,z12,z13,z14,z15,z16;
//bit a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,
//a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,
//a3,b3,c3,d3,e3,f3,g3,h3,i3,j3,
//a4,b4,c4,d4,e4,f4,g4,h4,i4,j4,
//a5,b5,c5,d5,e5,f5,g5,h5,i5,j5,
//a6,b6,c6,d6,e6,f6,g6,h6,i6,j6,
//a7,b7,c7,d7,e7,f7,g7,h7,i7,j7,
//a8,b8,c8,d8,e8,f8,g8,h8,i8,j8,
//a9,b9,c9,d9,e9,f9,g9,h9,i9,j9,
//a10,b10,c10,d10,e10,f10,g10,h10,i10,j10,
//a11,b11,c11,d11,e11,f11,g11,h11,i11,j11,
//a12,b12,c12,d12,e12,f12,g12,h12,i12,j12,
//a13,b13,c13,d13,e13,f13,g13,h13;
////bit i13
;
data unsigned
char k1,l1,m1,n1,o1,p1,q1,u1,s1,t1,
k2,l2,m2,n2,o2,p2,q2,u2,s2,t2,
k3,l3,m3,n3,o3,p3,q3,u3,v3,t3,
k4,l4,m4,n4,o4,p4,q4,u4,s4,t4,
k5,l5,m5,n5,o5,p5,q5,u5,s5,t5 ,
k6,l6,m6,n6,o6,p6,q6,u6,s6,t6,
k7,l7,m7,n7,o7,p7,q7,u7,s7,t7,
k8,l8,m8,n8,o8,p8,q8,u8,s8,t8,
k9,l9,m9,n9,o9,p9,q9,u9,s9,t9,
k10,l10,m10,n10,o10,p10,q10,u10,s10,t10,
k11,l11,m11,n11,o11,p11,q11,u11,s11,t11,
k12,l12,m12,n12,o12,p12,q12,u12,s12 ;
//data
unsigned char t12 ;
idata unsigned
char A1,B1,C1,D1,E1,FF1,G1,H1,I1,J1,
A2,B2,C2,D2,E2,FF2,G2,H2,I2,J2,
A3,B3,C3,D3,E3,FF3,G3,H3,I3,J3,
A4,B4,C4,D4,E4,FF4,G4,H4,I4,J4,
A5,B5,C5,D5,E5,FF5,G5,H5,I5,J5,
A6,B6,C6,D6,E6,FF6,G6,H6,I6,J6,
A7,B7,C7,D7,E7,FF7,G7,H7,I7,J7,
A8,B8,C8,D8,E8,FF8,G8,H8,I8,J8,
A9,B9,C9,D9,E9,FF9,G9,H9,I9,J9,
A10,B10,C10,D10,E10,FF10,G10,H10,I10,J10,
A11,B11,C11,D11,E11,FF11,G11,H11,I11,J11,
A12,B12,C12,D12,E12,FF12,G12,H12,I12,
A13,B13,C13,D13,E13,FF13,G13,H13,I13;
//idata unsigned char J12;
void main(){
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น