本篇文章给大家谈谈 DPTR是什么寄存器 它的作用是什么 它由哪几个寄存器组成 ,以及 51 单片机中 DPH 和 DPL 对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
在805l中,DPTR分别由DPH和DPL组成,因此对DPTR的选取实际上是对特殊功能寄存器DPH0、DPLO和DPHl、DPLl的选取。基于以上的设计思路,笔者分别在涉及DPTR操作的3个模块中进行了相应的修改。本设计所选用MCS8051核由VHDL语言设计
DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令:MOVX A, @DPTR MOVX @DPTR, A 在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问
DPTR是16位数据指针寄存器,它由两个8位特殊功能寄存器DPL(数据指针低8位)和DPH(数据指针高8位)组成,DPTR用于保存16位地址,作间址寄存器用,可寻址外部数据
【答案】:数据指针DPTR是一个16位的特殊功能寄存器。由两个8位寄存器DPH、DPL组成,DPH是DPTR高8位,DPL是DPTR低8位,既可合并作为一个16位寄存器,又可分开按8位寄存器单独操作。相对于地址指针,DPTR称为数据指针。但实
数据指针DPTR是16位的专用寄存器,它由两个8位的寄存器DPH(高8位)和DPL(低8位)组成。专门用来寄存片外RAM及扩展I/O口进行数据存取时的地址。编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用(即高位
DPTR是什么寄存器 它的作用是什么 它由哪几个寄存器组成 34.设片内RAM中(7CH)=50H,执行下列程序后填人执行结果。MOV A, 7CH;把7C单元中的数送到A,也就是把50H这个数送到A MOV RO, A;A中的数再送R0 MOV A, #0;A清0 MOV @RO, A;A中的0送到R0所指的
org 0000h ;表示下一条指令的地址是0000h ljmp 0030h ;跳转到30h处的指令 org 0030h cword:mov a,#0c5h ;cword:人为定义的标号,mov a,#0c5h :把0c5h放入a寄存器里 mov dptr,#0030h ;把30h
帮忙解释一下单片机编程中的 每一个指令的意思和控制过程高级语言,汇编语言,机器语言 2.0000h是PC复位后地址,后面三个分别是外部中断0,定时器中断0,外部中断1,定时器中断1,串行口中断的入口地址 3。是允许访问
setb tr1;开启t1 loop: jnb tf0,$; 表示测试tf0的值,如果不为1(为0)则程序继续执行本条指令($表示当前位置),如果为1则顺序执行下一条指令。 这里就是说当定时器T0溢出时进入下面的指令 clr tf0 ;清零tf0
帮忙解释一下单片机编程中的 每一个指令的意思和控制过程、急用、谢谢 单片机中一个程序的运行过程分为取指令,分析指令和执行指令几个步骤。取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,
首先,了解硬件接口以及功能,以便于配置IO端口;第二,根据硬件设计以及功能需要,编写单片机程序;第三,编译程序,把程序烧写到单片机中,或者链接debug调试器,在线对单片机进行仿真;第四,在线仿真可以支持单步调试和断点调试
MAIN:MOV 51H,#66H ;51H单元赋值66H MOV 50H,#77H ;50H单元赋值77H MOV 21H,#88H ;21H单元赋值88H MOV 20H,#99H ;20H单元赋值99H MOV R0,#50H ;寄存器R0赋值50H MOV R1,#20H ;
1:针对需要开发的设备构建原理图,可以用AD09,PROTEUS 软件 2:针对需要实现的功能编程,使用KEIL编写调试(51,AVR单片机)3:程序编好测试,测试包括功能测试,老化测试,可靠性测试等 单片机编程就是简单的嵌入式软件开发
请帮解释一下单片机程序各步骤 (1)首先该问题是针对51单片机的问题;(2)单片机弹出堆栈是先取内容,在调整指针,即:(sp)=》DPH、DPL、A,sp-1=>sp执行三次。(3)执行步骤为:(42H)->DPH, 42h-1->sp;(41H)->DPL, 41h-1->sp;(
113组寄存器18H~1FH RS1=PSW.4RS0=PSW.3 常见错误有三种:1、为中断函数指定了第0组寄存器 C程序:voidint0()interrupt0using0 编译后的汇编如下:PUSHACC PUSHB PUSHDPH PUSHDPL PUSHPSW MOVPSW,#0x00 。。。因为
单片中的DPH是数据指针DPTR(80C51中一个功能比较特殊的寄存器)的高八位字节寄存器,DPL是数据指针DPTR(80C51中一个功能比较特殊的寄存器)的低八位字节寄存器。DPTR是某些单片机中一个16位的特殊功能寄存器, DPH是其高位字
复位后为0000H(16位)数据指针(DPTR) 数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。 DPTR主要是用来保存16位地址,当对64kB外部数据存
DPH和DPL是DPTR寄存器的高八位和低八位。DPTR是16位寄存器。DPH/DPL可以单独作为8位寄存器使用。
51 微控制器中 DPH 和 DPL DPH和DPL是DPTR暂存器的高八位和低八位。DPTR是16位暂存器。DPH/DPL可以单独作为8位暂存器使用。51微控制器中断程式设计 开中断以后,在中断服务子程式中设定一个中断次数计数器,统计达到
51 单片机中 DPH 和 DPL 单片机堆栈操作指令如下:PUSH direct(堆栈指令)其作用是先将栈指针SP的内容加1,然后将直接寻址单元中的数压入到sP所指的单元中。若数据已入栈,则SP指向最后堆人数据所在的存储单元(即指向栈顶)。POP direct(出栈指令
2、堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。3、内部RAM低128单元。对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。4、
单片机:入栈时,指令是:PUSH dir,其中的源操作数是《直接寻址》,目的是《间接寻址》。出栈时,指令是:POP dir,其中的源操作数是《间接寻址》,目的是《直接寻址》。这里使用的间址寄存器是 SP。--- 入栈时:源
8051单片机在复位后,堆栈的底部就在07H,压栈时,将向08H方向增长。如果需要改变默认值,可以在初始化阶段使用如下指令:MOV SP, #6FH即可将堆栈的底部设置在6FH。
PUSH 30H ;61H中的值变为24H,SP:61H,其他不变 PUSH 31H ;62H中的值变为10H,SP:62H,其他不变 POP DPL ;DPL:10H,SP:61H,其他不变 POP DPH ;DPH:24H,SP:60H,其他不变 MOV 30H,#00H ;30H:00H,其
单片机里sp是堆栈指针。堆栈指针SP英文全称为stackpointer,是单片机控制器的组成部件之一,与时控制逻辑电路、指令寄存器译码器、地址指针DPTR、程序计数器等部件共同组成CPU的神经中枢。堆栈指针在单片机里的作用是随时跟踪栈顶地
单片机堆栈指令 寄存器间接寻址范围总结:
1、外部RAM 64KB。对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为:@DPTR。
例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。
外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。
例如MOVX A,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。
2、堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。
3、内部RAM低128单元。对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。
4、内部RAM的高128单元也可以访问。但是注意不能用间接寻址的方式去访问特殊功能寄存器,虽然SFR与内部高128字节RAM地址相同,但是当一个指令访问高于7HF的内部位置时,CPU是根据寻址方式来区分是访问高128字节的内部RAM数据还是访问SFR.MCS-51单片机汇编语言中,没有SP这条指令,只有针对SP操作的指令。51单片机中SP是堆栈指针寄存器,存放着当前堆栈地址。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。
除了初始化堆栈时直接给SP赋值,SP显式存在,其它的对SP有影响的指令,对SP的操作都是隐式的,就是说SP并不出现在指令操作数当中。
例如:
MOV SP,#80H ;初始堆栈指针,(SP)=80H
LCALL XXXX;调用XXXX处的子程序,下一条指令PC值压栈,(SP)=(SP)+2
NOP;子程序返回时,RET指令从堆栈中弹出PC值,所以会返回到这里,(SP)=(SP)-2
PUSH ACC;累加器A的内容压栈保存,(SP)=(SP)+1
POP B;堆栈内保存的累加器A的内容弹出到B寄存器中,(SP)=(SP)-1
使用PUSH、POP指令使用堆栈,要注意进出栈的匹配,否则将引起不可预期的后果。
另外
如果把30H赋给了SP,称为设置栈底。以后:
PUSH ACC ,就把ACC的内容存放到31H单元;
PUSH PSW ,就把PSW的内容存放到32H单元;
PUSH B ,就把B的内容存放到33H单元。
……
弹出时,要用POP指令。
利用堆栈,就不用管具体的内容存放在什么单元了,SP会自动管理。单片中的DPH是数据指针DPTR(80C51中一个功能比较特殊的寄存器)的高八位字节寄存器,DPL是数据指针DPTR(80C51中一个功能比较特殊的寄存器)的低八位字节寄存器。
DPTR是某些单片机中一个16位的特殊功能寄存器, DPH是其高位字节寄存器,DPL是其低位字节寄存器,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。
扩展资料:
DPH和DPL的地址分别为83H、82H,由DPH和DPL组成的寄存器主要功能是存放16位地址,作为片外RAM寻址用的地址寄存器(间接寻址),称数据指针,也可以将外部RAM中地址的内容传送到内部RAM的地址所指向的内容中。
在执行指令时,P2口将输出DPH中的高八位地址,P0口会分时输出DPL中的低八位地址,地址锁存器会对ALE的信号进行锁存,因此,当单机片中的指令以16位DPTR为间址寄存器来读片外RAM时,可以寻址整个64KB的片外空间。
参考资料来源:百度百科-DPH
参考资料来源:百度百科-DPL
参考资料来源:百度百科-dptr
POP是出栈的意思...
是将栈中的数据给DPH,DPL
由于栈是先进后出..
所以先将高位弹出,再将低位弹出..
感觉这个很像是51单片机的汇编...;由于没有电路,只能猜一下,大概是个智能传感器,通过MAX1240模拟量入口测量某个数据,转换成数字量(2字节)后通过单片机串口以9600波特发送出去。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:CLR C
MOV SP;#60H;设置堆栈
MOV SCON,#50H;串口方式1,允许接收
MOV PCON,#80H;SMOD=1
MOV TCON,#0
MOV TMOD,#26H;T1定时方式2,T0计数方式2
MOV TL1,#0FAH;波特率9600
MOV TH1,#0FAH
SETB TR1
SETB EA
CLR TI
MAX1240:MOV A,#00H;MAX1240是12位串行接口ADC,8脚。
MOV R7,#08H;8位
CLR P1.0;应该是接了MAX1240的/CS
CLR P1.1;应该是接了MAX1240的SCLK
NOP
JNB P1.2,$;应该是接了MAX1240的DOUT,此时等待接收数据
SETB P1.0
MSB: CLR P1.0;以下程序段MSB开始接收第一个字节保存在R3
NOP
SETB P1.0
MOV C,P1.2
MOV P1.3,C
RLC A
DJNZ R7,MSB
MOV R3,A
MOV R7,#08H
MOV A,#00H
LSB: CLR P1.0;以下程序段LSB开始接收第二个字节保存在R2
NOP
SETB P1.0
MOV C,P1.2
RLC A
DJNZ R7,LSB
MOV R2,A
NOP
SETB P1.1
MOV 41H,R3;收到的测量模拟量转换值转存到41H,40H
MOV 40H,R2
LOOP: MOV A,41H;两字节数据41H40H通过串口发送出去
MOV SBUF,A
ACALL WAIT
ACALL Delay
MOV A,40H;这句你没有,似乎是少写了
MOV SBUF,A
ACALL WAIT
AJMP MAX1240
WAIT: JNB T1,$
CLR T1
RET#include //包含51单片机头文件
//共阳极数码管0-9数组编码
unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管位选数组编码,这里有8位数码管(既8个数码管)
unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//下面是变量申明
unsigned char mode=0;
unsigned int temp;
float dianya;
unsigned int dianya1;
//下面是51单片机端口位申明
sbit START=P1^5;
sbit EOC=P1^6;
sbit OE=P1^7;
sbit a=P1^0;
sbit b=P1^1;
sbit c=P1^2;
sbit key=P1^3;
//一个延时函数
void delay(unsigned int z)
{
while(z--);
}
//按键扫描函数
void key_scan()
{
if(key==0) //当key按下时,key既端口P1^3
{
delay(10); //延时
if(key==0) //在检测端口P1^3是否为低
{
/********************************************
到这里你发现你程序有问题
********************************************/
}
}
switch (mode) //这里也有问题,如果mode只为0,变量a b c清0,可以用if语句
{
case 0 : a=0;b=0;c=0;break;
}
}
void main() //主函数
{
unsigned char aa[4],i;
while(1)
{
key_scan();
P2=wei[0]; // 选中第一个数码管
P0=seg[mode]; //第一个数码管显示存在变量mode里的数
/*******************************************
下面部分应该为从AD检测一个电压
*******************************************/
START=1; //P1^5 置1
delay(10); //延时
START=0; //P1^5 置0
while(EOC==0); //如果P1^6为0,一直循环等待
OE=1; //P1^7置1
temp=P3; //把P3端口上8位数赋值给变量temp
dianya=(5.0/255)*temp; //8位AD值转换成电压显示值
dianya1=dianya*10;
aa[2]=dianya1/10; //把转换后的值除10
aa[3]=dianya1%10; //把转换后的值求模
for(i=2;i<4;i++)
{
P2=wei[i]; //数码管2,3分别位选
if(i==2)
P0=seg[aa[i]]&0x7f; //显示转换后的电压值aa[2]并加上点 (除10的值)
else P0=seg[aa[i]]; //显标转换后的电压值aa[3](求模值)
delay(1);
}
}
}void delay(DelayTime)//延时子程序
{ unsigned int i;
for(;DelayTime>0;DelayTime--)//当你调用函数时括号中的数是此外循环的次数.每循环一次减1.直到Delay Time 为0.
{
for(i=0;i<250;i++);//外循环每执行一次,此内循环才执行250次.
}
}
//如果你的Delay Time =X. 那么你的整个函数延时X*250机器周期.既然你还没学汇编,我就不用专业术语给你解释了,用好理解的方法帮你简单解释下,如果有必要我们再讨论
org 0000h ;表示下一条指令的地址是0000h
ljmp 0030h ;跳转到30h处的指令
org 0030h
cword:mov a,#0c5h ;cword:人为定义的标号,mov a,#0c5h :把0c5h放入a寄存器里
mov dptr,#0030h ;把30h放入dptr寄存器中
movx @dptr,a ;@表示存储器地址,地址数为@后的寄存器中的内容(30h),即把a中的内容放如地址数为30h的存储区
mov r0,#20h
mov @r0,a
mov r0,a
push acc ;把a寄存器压入堆栈
anl a,#1fh ;a和1fh做“和”运算
movc a,@a+dptr
inc dptr ;dptr做+1处理
movx @dptr,a
mov b,a
pop acc ;弹出a
cword1:sjmp cword1 ;跳到sword1处,即做自循环
end ;结束
注:
mov:访问片内RAM
movx:访问片外RAM
movc:访问ROM
RAM:数据存储区
ROM: 程序存储区
mov a,#0c5h 与 mov a,0c5h 是不同的,前者是将0c5h放入a;后者是将RAM地址数为0c5h处的数据放入a。
mov r0,a 与 mov @r0,a 是不同的,前者将a的内容放入r0寄存器;后者将a的内容放入数据存储区某处,其地址为r0的内容。
这段指令把数据挪来挪去,貌似没具体的意图,结果不重要
希望对你有帮助,不明白的我们可以再讨论关于 DPTR是什么寄存器 它的作用是什么 它由哪几个寄存器组成 和 51 单片机中 DPH 和 DPL 的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。