51 단편기 확장에 대한 지식점

요즈음 프로젝트를 하면서 외부 램으로 확장을 해서 땀이 납니다. 많은 기본 지식을 할 줄 모릅니다. 지금은 할 줄 모르는 것을 적어서 필기를 하고 여러분과 공유하며 지식을 배워서 제품을 개발할 수 있습니다.
1. 단편기의 키워드at_:변수의 저장 주소를 정의합니다.
2.이 프로그램은 무슨 뜻입니까?

  
  
  
  
  1. #define XBYTE((char*)0x20000L) 
  2. XBYTE[0x8000]=0x41; 

define XBYTE(char*)0x20000L)는 XBYTE가 주소 0x0000L를 가리키는 문자형 바늘(또는 수조) 변수 XBYTE[0x8000]=0x41이라고 정의했다.배열 XBYTE의 0x8000번째 변수에 0x41 값을 지정합니다.주소 0x8000L의 메모리 유닛 값이 0x41입니다.이것은 당신이 외부 데이터 버스를 가진 51칩을 사용하고 있다는 것을 설명한다. 외부 메모리의 대부분은 램이다. 램의 용량은 적어도 0x8000(32k) 바이트가 있다. - 램의 용량은 64k 바이트일 수 있다.L은 long을 나타내며 0x20000L은 긴 정수임을 나타냅니다.일반적으로 8비트 단편기는 51과 같고 정수는 16비트 2진법으로 표시하며 장정수는 32비트 2진법으로.0x20000L 중 2는 메모리 유형 xdata이지 주소의 일부분이 아니다.
3.51 단편기 스토리지 유형:
데이터 ---> 주소 지정 가능한 슬라이스 내 램 bdata---> 위치 추적 가능한 슬라이스 내 램 idata---> 주소 지정 가능한 슬라이스 내 램에 접근할 수 있습니다. 모든 내부 램 pdata---> 페이지 지정 슬라이스 외 램(MOVX @R0)(256 BYTE/페이지) x 데이터 ---> 주소 지정 가능한 슬라이스 외 램(64k 주소 범위)code---> 프로그램 저장소(64k 주소 범위), MOVC @DPTR 대응
4.absacc.h

  
  
  
  
  1. /*-------------------------------------------------------------------------- 
  2. ABSACC.H 
  3.  
  4. Direct access to 8051, extended 8051 and Philips 80C51MX memory areas. 
  5. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. 
  6. All rights reserved. 
  7. --------------------------------------------------------------------------*/ 
  8.  
  9. #ifndef __ABSACC_H__ 
  10. #define __ABSACC_H__ 
  11.  
  12. #define CBYTE ((unsigned char volatile code  *) 0) 
  13. #define DBYTE ((unsigned char volatile data  *) 0) 
  14. #define PBYTE ((unsigned char volatile pdata *) 0) 
  15. #define XBYTE ((unsigned char volatile xdata *) 0) 
  16.  
  17. #define CWORD ((unsigned int volatile code  *) 0) 
  18. #define DWORD ((unsigned int volatile data  *) 0) 
  19. #define PWORD ((unsigned int volatile pdata *) 0) 
  20. #define XWORD ((unsigned int volatile xdata *) 0) 
  21.  
  22.  
  23. #ifdef __CX51__ 
  24. #define FVAR(object, addr)   (*((object volatile far *) (addr))) 
  25. #define FARRAY(object, base) ((object volatile far *) (base)) 
  26. #define FCVAR(object, addr)   (*((object const far *) (addr))) 
  27. #define FCARRAY(object, base) ((object const far *) (base)) 
  28. #else 
  29. #define FVAR(object, addr)    (*((object volatile far *) ((addr)+0x10000L))) 
  30. #define FCVAR(object, addr)   (*((object const far *) ((addr)+0x810000L))) 
  31. #define FARRAY(object, base)  ((object volatile far *) ((base)+0x10000L)) 
  32. #define FCARRAY(object, base) ((object const far *) ((base)+0x810000L)) 
  33. #endif 
  34.  
  35. #endif 

 
예를 들어 rval=CBYTE[0x0002];프로그램 레지스터를 가리키는 0002h 주소 rval=XWORD[0x0002];외부 RAM을 가리키는 0004h 주소//WORD는 한 글자, 두 바이트이기 때문에 0004h이다
#define COM8255 XBYTE[0X060FF]//뒤에 COM8255가 나타나면 단편기 포트 P0과 P2가 0X060FF 절대 물리 주소(주소는 82C55 명령 레지스터를 가리킨다) #define PA8255 XBYTE[0X000F]//뒤에 PA8255가 나타나면단일 포트 P0과 P2가 0X000FF의 절대 물리 주소(주소가 82C55를 가리키는 A조 포트 레지스터) #define PB8255 XBYTE[0X020FF]//뒤에 PB8255가 나타나면 단일 포트 P0과 P2가 0X020FF의 절대 물리 주소(주소가 82C55를 가리키는 B조 포트 레지스터) #define PC8255 XBYTE[0X040FF]//뒤에 PC8255가 나타나면단일 컴퓨터 포트 P0과 P2가 0X040FF의 절대 물리 주소를 출력합니다(82C55의 C 그룹 포트 레지스터를 가리키는 주소).
4. 외부 램을 구동하는 절차

  
  
  
  
  1. /************************************************************************** 
  2. * : 51 RAM  
  3. * :  RAM, RAM , P1 8 LED 
  4. * :WSF-51DB  
  5. * MCU :AT89S52-24PU 
  6. * :12MHZ 
  7. * :   
  8. * : , 。 
  9. **************************************************************************/ 
  10. #include<reg52.h> 
  11. #include <ABSACC.h>// :XBYTE[] 
  12. sbit oe=P2^7;// RAM 74HC573  
  13. unsigned char code ramdata[100]= // 100  
  14.      0,1,2,3,4,5,6,7,8,9, 
  15.         10,11,12,13,14,15,16,17,18,19, 
  16.         20,21,22,23,24,25,26,27,28,29, 
  17.         30,31,32,33,34,35,36,37,38,39, 
  18.         40,41,42,43,44,45,46,47,48,49, 
  19.         50,51,52,53,54,55,56,57,58,59, 
  20.         60,61,62,63,64,65,66,67,68,69, 
  21.         70,71,72,73,74,75,76,77,78,79, 
  22.         80,81,82,83,84,85,86,87,88,89, 
  23.         90,91,92,93,94,95,96,97,98,99 
  24. }; 
  25. // ms : 
  26. void Delayms(unsigned int t) 
  27.           unsigned int i,j; 
  28.           for(i=t;i>0;i--) 
  29.                    for(j=120;j>0;j--); 
  30.   
  31. // : 
  32. int main(void) 
  33.          unsigned char i; 
  34.          oe=0;// RAM  
  35.          for(i=0;i<100;i++) 
  36.                      XBYTE[300+i]=ramdata[i]; 
  37. // 100 RAM, :300 
  38.          while(1) 
  39.          { 
  40.                 for(i=0;i<100;i++) 
  41.                 { 
  42.                        P1=XBYTE[300+i];// RAM , P1 8 LED 
  43.                        Delayms(500); 
  44.                 } 
  45.           } 
  46.           return 0; 
  47.   

좋은 웹페이지 즐겨찾기