51 단편기 확장에 대한 지식점
1. 단편기의 키워드at_:변수의 저장 주소를 정의합니다.
2.이 프로그램은 무슨 뜻입니까?
- #define XBYTE((char*)0x20000L)
- 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
- /*--------------------------------------------------------------------------
- ABSACC.H
-
- Direct access to 8051, extended 8051 and Philips 80C51MX memory areas.
- Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
- All rights reserved.
- --------------------------------------------------------------------------*/
-
- #ifndef __ABSACC_H__
- #define __ABSACC_H__
-
- #define CBYTE ((unsigned char volatile code *) 0)
- #define DBYTE ((unsigned char volatile data *) 0)
- #define PBYTE ((unsigned char volatile pdata *) 0)
- #define XBYTE ((unsigned char volatile xdata *) 0)
-
- #define CWORD ((unsigned int volatile code *) 0)
- #define DWORD ((unsigned int volatile data *) 0)
- #define PWORD ((unsigned int volatile pdata *) 0)
- #define XWORD ((unsigned int volatile xdata *) 0)
-
-
- #ifdef __CX51__
- #define FVAR(object, addr) (*((object volatile far *) (addr)))
- #define FARRAY(object, base) ((object volatile far *) (base))
- #define FCVAR(object, addr) (*((object const far *) (addr)))
- #define FCARRAY(object, base) ((object const far *) (base))
- #else
- #define FVAR(object, addr) (*((object volatile far *) ((addr)+0x10000L)))
- #define FCVAR(object, addr) (*((object const far *) ((addr)+0x810000L)))
- #define FARRAY(object, base) ((object volatile far *) ((base)+0x10000L))
- #define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
- #endif
-
- #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. 외부 램을 구동하는 절차
- /**************************************************************************
- * : 51 RAM
- * : RAM, RAM , P1 8 LED
- * :WSF-51DB
- * MCU :AT89S52-24PU
- * :12MHZ
- * :
- * : , 。
- **************************************************************************/
- #include<reg52.h>
- #include <ABSACC.h>// :XBYTE[]
- sbit oe=P2^7;// RAM 74HC573
- unsigned char code ramdata[100]= // 100
- {
- 0,1,2,3,4,5,6,7,8,9,
- 10,11,12,13,14,15,16,17,18,19,
- 20,21,22,23,24,25,26,27,28,29,
- 30,31,32,33,34,35,36,37,38,39,
- 40,41,42,43,44,45,46,47,48,49,
- 50,51,52,53,54,55,56,57,58,59,
- 60,61,62,63,64,65,66,67,68,69,
- 70,71,72,73,74,75,76,77,78,79,
- 80,81,82,83,84,85,86,87,88,89,
- 90,91,92,93,94,95,96,97,98,99
- };
- // ms :
- void Delayms(unsigned int t)
- {
- unsigned int i,j;
- for(i=t;i>0;i--)
- for(j=120;j>0;j--);
- }
-
- // :
- int main(void)
- {
- unsigned char i;
- oe=0;// RAM
- for(i=0;i<100;i++)
- XBYTE[300+i]=ramdata[i];
- // 100 RAM, :300
- while(1)
- {
- for(i=0;i<100;i++)
- {
- P1=XBYTE[300+i];// RAM , P1 8 LED
- Delayms(500);
- }
- }
- return 0;
- }
-
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 출력 포인터 변수 주소(16진수)텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.