⑴ 单片机中的程序计数器PC是16位的寻址范围是64KB怎么来的呀不太明白!
根据二进制编码、译码的原理,n根导线可以译成2^n个地址号,单片机中的程序计数器PC是16位,也就是16根地址线,可以译成2^16=65536个地址号,也成为16根地址线的最大寻址范围。
单片机中用于存放下一条指令所在单元的地址的就是程序计数器,其作用是保证程序(在操作系统中理解为进程)能够连续地执行下去,又称为指令计数器。
每当一个指令被获取,程序计数器的存储地址就加1,指向顺序中的下一条指令,计算机重启或复位后,程序计数器通常恢复到0。
(1)单片机读十六位地址指令扩展阅读
51单片机程序计数器中特殊功能单元:
1)0000H:8051单片机复位后,程序从0000H开始执行指令;
2)0003H:外部中断0入口;
3)000BH:定时器0溢出中断入口;
4)0013H:外部中断1入口;
5)001BH:定时器1溢出中断入口;
6)0023H:串行口中断入口。
⑵ mcs-51单片机的数据指针DPTR是一个16位的专用地址指针寄存器,主要用来做什么
如果是用c语言编程,可以不必注意这些问题,因为编程软件会自动帮你分配,也不容易出错!!
数据指针DPTR是80C51中一个功能比较特殊的寄存器。从结构DPTR是一个16位的特殊功能寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。主要功能是存放16位地址,作为片外RAM寻址用的地址寄存器(间接寻址),故称数据指针。
访问片外数据存储器的指令为:
MOVX A,@DPTR 读
MOVX @DPTR,A 写
DPTR的另一个作用是变址寻址,访问程序存储器,做查表指令:如:
以dptr为基址寄存器,将dptr的内容与累加器a的内容相加得到变址地址
movc a, @a+dptr ; (a)<-----((a)+(dptr))
⑶ AVR单片机SPI配置寄存器,地址和数据都是16位的,能写进但读出来不正确,求读寄存器C语言程序
没听说过AVR单片机的地址和数据都是16位的,只知道AVR单片机哈佛结构指令长度是16位的。AVR单片机虽然有16位的寄存器,但AVR单片机还是8位机,不知你使用的AVR单片机的具体型号,或许是我孤陋寡问了。你所提到的SPI数据接收问题与上述问题无关,而与你对SPI特殊功能寄存器的配置以及相关程序有关,如果你将AVR单片机的SPI配置为主机,那么:
unsigned char i;//定义一个变量
SPCR = 0x53;//配置AVR SPI为主机,CLK为fosc/128
SPDR = 0;//清0 SPI数据寄存器,同时启动SPI接收,不一定要清0,写入任意数据都可以
while(!(SPSR & 0x80));//等待数据由从机向主机移位结束
i = SPDR;//读取数据
这样写你可能不一定明白,为什么接收数据反要向SPDR写入数据呢,但SPI主机就是这样工作 的,更多的信息请参考数据手册。
以上例程芯片型号:AVR Atmega169
编译环境:ICCAVR
⑷ 急问!msc-51系列单片机程序地址指针为16位是什么意思 新手求教!!
51单片机外部RAM的地址空间为64K,地址总线为16位,访问外接RAM可执行如下4条指令:
MOVX A,@DPTR
MOVX @DPTR,A
MOVX A,@RI
MOVX @RI,A
其中DPTR为16位地址寄存器,地址高8位存于DPH,地址低8位存于DPL;Ri(I=0,1)是8位寄存器,作为地址指针时仅存低8位地址。
MCS-51执行上述指令时分为两个阶段:首先,是从外接程序存储器中取出指令代码,并进行分析。然后,执行对外接RAM的数据读/写操作。在这两个阶段,P0口、P1口上的地址选通是有区别的。
执行“MOVX A,@DPTR”和“MOVX @DPTR,A”指令时,在读指令代码阶段,由程序计数器(PC)提供A0~A15,低8位地址稳定后,在单片机地址锁存信号ALE作用下,P0.X口开始读入MOVX指令代码。在对缺燃外接RAM读写阶段,其过程与前述相同伏态虚,只不过低8位地址不是来自程序计数器的低8位PCL,而是来自地址寄存器的高8位 DPH;高8位地址不是来自程序计数器的高8位PCH,而是来自地址寄存器的高8位PCH。当DPL稳定后,由地址锁存器锁存,P0.X口上出现的是读/ 写外接RAM的数据信息。
执行“MOVX A,@Ri”和“MOVX @RI,A”指令时,取指阶段舆“movx a, @ dptr”和“movx @ dptr, a”过程完全相同。但在执行对外部RAM的读/写阶段,低8位地址来自Ri;高8位地址来自闭知P2口锁存器(P2 SFR)。
⑸ 单片机中怎样看地址是8位还是16位
查看单片机地址是8位还是16位,只能用指令实现:
16位的单片机地址,向DPTR里边传送数据,不论NUM有多小,肯定是16位的数据传送,如下:
MOV DPTR, #NUM
8位的单片机地址,向DPTR里边传送数据,则肯定是8位的数据传送,如下:
MOV DPH, #NUM,
或:
MOV DPL, #NUM,
对大于8位而小于等于16位的数据进行加法运算,16位处理器可以一次完成,8位的则要拆分成多步来运算,即使二者的运算速度相同,处理16位数据8位处理器也会比16位处理器慢多了。
8位单片机,典型的是51系列的,再高级点用AVR、pic的,功能方面,似乎都不会很复杂,一般可能是控制类的多一下。一般不跑嵌入式OS。
16位的单片机,16位的单片机比较尴尬,高不成低不就,要求低一点,8位MCU就够,高级点不如用32位MCU。
32位的,就高级点了,一般能跑嵌入式OS,例如ucos2,ucos3,uclinux等等,能做更多复杂的功能。用OS和不用OS的话,编程的思路差异比较大。功能一般有面向控制的,也有简单消费类电子的。
⑹ 【单片机 ,汇编】最基本的语法,求解释。关于16进制。
帮你解答:
ORG
0000H中的0000H是单片机的起始地址,即单片机开始执行指令的第一条指令的地址。
第一条指令
是LJMP
START
为一条转移指令,转到用户主程序开始的地方,即START处。
因为单片机地址是16位的二进制地址,用十六进制表示即是4位十六进制数
如0000H
和0100H
这里H表示十六进制数
0100H地址是用户主程序开始处
即START处。
MOV
SP,#70H;指令表示将立即数70H传送给SP寄存器,因为寄存器是只能装8位的二进制数,
用十六进制表示
即为2位的十六进制数
如70H
还有什么问题
都可以问
如果满意
就请给俺加分吧。哈哈