设置单片机片内存储器存储区首地址为40H,片外存储区首地址为1000H,存取数据字节个数16个,将片内首地址40H的存储区内容设置为00H~0FH共16个字节,依次读取片内首地址为40H单元内容,将这些内容依次传送到片外数据存储器1000H为首地址的存储区中保存,再将保存在片外数据区数据依次取出送P1口。
汇编语言:
ORG 0000H;设置起始地址
DADDR EQU 40H;片内数据区首地址
XADDR EQU 1000H;片外数据区首地址
COUNT EQU 10H;数据大小,共16个字节
MAIN: MOV SP,#60H;重置堆栈指针
MOV R0,#DADDR;设置片内数据区首地址
MOV R2,#COUNT;设置传输数据区大小,为16个字节
INIT: MOV A,#01H
LOOP1: MOV @R0,A
INC A
INC R0
DJNZ R2,LOOP1
DXMOV: MOV R0,#DADDR;设置片内数据区首地址
MOV DPTR,#XADDR;设置片外数据区首地址
MOV R2,#COUNT
LOOP2: MOV A,@R0
MOVX @DPTR,A
INC RO
INC DPTR
DJNZ R2,LOOP2
LOOP3: MOV DPTR,#XADDR
LOOP4: MOVX A,@DPTR
MOV P1,A
INC DPTR
DJNZ R2,LOOP4
END
C语言:
#include <reg52.h>
void main()
{
unsigned char idata *p=0x40;
unsigned char xdata *q=0x1000;
unsigned int i;
//从40H单元开始先进行初始化
for(i=1;i<=16;i++)
*(p++)=i;
p=0x40;
//进行数据的传送
for(i=1;i<=16;i++)
*(q++)=*(p++);
//再次传入到P1口中
while(1)
{
q=0x1000;
for(i=0;i<16;i++)
P1=*(q++);
}
}