วันเสาร์ที่ 1 พฤศจิกายน พ.ศ. 2557

ชนิดของแรมMCS51ถ้าแรมไม่พอให้ประกาศidata




ชนิดของแรม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(){

}

ไม่มีความคิดเห็น: