วันเสาร์ที่ 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(){

}

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