单片机 关于程序计数器(PC)与指令寄存器(IR)/ROM/RAM之间的工作关系和PC与CPU时序的关系
可能表述不准确。我现在刚学单片机,用汇编语言编程倒是会了一点点,但总感觉似懂非懂。最好从电子学数字电路的角度详细表述一下,谢谢啦。比如以下指令:MOVA,40HMOVR0...
可能表述不准确。我现在刚学单片机,用汇编语言编程倒是会了一点点,但总感觉似懂非懂。最好从电子学数字电路的角度详细表述一下,谢谢啦。
比如以下指令:
MOV A,40H
MOV R0,A
好了再追加50分哈,要不没人回答就浪费了
在线等 展开
比如以下指令:
MOV A,40H
MOV R0,A
好了再追加50分哈,要不没人回答就浪费了
在线等 展开
展开全部
第一个问题:
程序计数器(PC)与指令寄存器(IR)/ROM/RAM之间的工作关系:
首先是ROM/RAM,
以MCS-51为例,程序存储器(ROM)内部地址为0000H~0FFFH,共4KB;外部可扩展1000H~FFFFH,共60KB;单片机内数据存储器(RAM)的为245字节,分为低128字节数据存储,00H~7FH;高128字节(80H~FFH)特殊功能寄存器,
其次程序计数器(PC)
PC是一个16位专用寄存器,可寻址的范围是0000H~FFFFH(当使用外部扩展程序存储器后)共64KB,用于存放CPU下一条要执行的指令地址。在顺序执行程序中,当PC内容送到地址总线后会自动加1,指向下一条将要运行的指令。
第二个问题:
关于时序的问题只需要一张时序图就可以解决你的问题,
你可以找一张单片机时序图帮助理解,由于我还不能上传图片所以只能这样解释:
1个机器周期=6个状态周期=12个时钟周期;
所谓时钟周期就是晶振所产生的高低电平,如6MHz,12MHz等,
然后对机器周期分频,12个机器周期产生一个机器周期,也是高低电平,每一个机器周期会有两个ALE信号,然后每一个ALE信号就可以进行一步汇编指令的执行。
时序如上,再来看如如何执行的,每条指令的执行都包括取指和和执行,
第一个指令:
MOV A,40H,它是双字节单周期执行指令,首先是在第一个ALE信号上升沿到来读操作码MOV A,在第二个ALE信号上升沿到来读第二个字节40H
第二个指令:
MOV R0,A ,它是单字节单周期执行指令,首先是在第一个ALE信号上升沿到来读操作码,由于它是单字节所以在第二个ALE信号上升沿到来时为空操作,不需要读数,
希望我的答案会对你有帮助,如果还有疑问我们继续联系。
程序计数器(PC)与指令寄存器(IR)/ROM/RAM之间的工作关系:
首先是ROM/RAM,
以MCS-51为例,程序存储器(ROM)内部地址为0000H~0FFFH,共4KB;外部可扩展1000H~FFFFH,共60KB;单片机内数据存储器(RAM)的为245字节,分为低128字节数据存储,00H~7FH;高128字节(80H~FFH)特殊功能寄存器,
其次程序计数器(PC)
PC是一个16位专用寄存器,可寻址的范围是0000H~FFFFH(当使用外部扩展程序存储器后)共64KB,用于存放CPU下一条要执行的指令地址。在顺序执行程序中,当PC内容送到地址总线后会自动加1,指向下一条将要运行的指令。
第二个问题:
关于时序的问题只需要一张时序图就可以解决你的问题,
你可以找一张单片机时序图帮助理解,由于我还不能上传图片所以只能这样解释:
1个机器周期=6个状态周期=12个时钟周期;
所谓时钟周期就是晶振所产生的高低电平,如6MHz,12MHz等,
然后对机器周期分频,12个机器周期产生一个机器周期,也是高低电平,每一个机器周期会有两个ALE信号,然后每一个ALE信号就可以进行一步汇编指令的执行。
时序如上,再来看如如何执行的,每条指令的执行都包括取指和和执行,
第一个指令:
MOV A,40H,它是双字节单周期执行指令,首先是在第一个ALE信号上升沿到来读操作码MOV A,在第二个ALE信号上升沿到来读第二个字节40H
第二个指令:
MOV R0,A ,它是单字节单周期执行指令,首先是在第一个ALE信号上升沿到来读操作码,由于它是单字节所以在第二个ALE信号上升沿到来时为空操作,不需要读数,
希望我的答案会对你有帮助,如果还有疑问我们继续联系。
展开全部
首先,要明白程序是由一条条指令组成的,那么单片机到底要执行那一条,总得有人指引吧?所以程序计数器(PC)就是这个人了,它指明了下一条要执行的指令存放的位置(地址).
ROM:(不能随时修改,掉电数据不丢失)
是专门用来存放程序和一些固定数据的存贮器,它写好之后就不能改变的了,只能读取.
RAM:(可以随时修改,但是掉电后数据会丢失)
是单片机运算单元ALU经常光顾的地方,ALU算出的结果随时变化,需要临时存放,RAM是最佳的地方.
(IR):
单片机里面有一个指令译码器,只要你提供指令,它就能作出相应的功能.所以设了一个专门的寄存器来存放从ROM中读取的指令,供译码器译码.
在时钟的驱动下,CPU内的时序控制器会花若干个时钟信号,根据PC所指地址从ROM中读取指令到IR,指令译码器会根椐IR中的指令做出相应的操作,
令PC指向下一个指令存放地址.
ROM:(不能随时修改,掉电数据不丢失)
是专门用来存放程序和一些固定数据的存贮器,它写好之后就不能改变的了,只能读取.
RAM:(可以随时修改,但是掉电后数据会丢失)
是单片机运算单元ALU经常光顾的地方,ALU算出的结果随时变化,需要临时存放,RAM是最佳的地方.
(IR):
单片机里面有一个指令译码器,只要你提供指令,它就能作出相应的功能.所以设了一个专门的寄存器来存放从ROM中读取的指令,供译码器译码.
在时钟的驱动下,CPU内的时序控制器会花若干个时钟信号,根据PC所指地址从ROM中读取指令到IR,指令译码器会根椐IR中的指令做出相应的操作,
令PC指向下一个指令存放地址.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.以8051来说明一下,RAM在 00H--FFH , MOV A,40H 就是说将RAM 中排在40H这个位置里面存放的数据转存入特殊功能寄存器A中,MOV RO,A 这条指令也是将存放在A中的数据存进RO中!
2.其实A和R0的位置也是在RAM中00H---255H之间,A只是E0H这个位置的另一个名字而已,R0要根据RS1和RS0来确定它的位置!
3,ROM就存放程序的,就好像一排房间,从0排到65536个房间,一上电程序就是根据PC指针数值而指向以这个数值排列值置的房间,一般PC指针都是加一,即指向下一个房间,直到遇到转移指令,就会跳到转移指令给出的标志位置(可以这样理解,一直顺序执行,检到很10个房间时,里面的人叫PC直接去检第20个房间)!就是这样理解的,
2.其实A和R0的位置也是在RAM中00H---255H之间,A只是E0H这个位置的另一个名字而已,R0要根据RS1和RS0来确定它的位置!
3,ROM就存放程序的,就好像一排房间,从0排到65536个房间,一上电程序就是根据PC指针数值而指向以这个数值排列值置的房间,一般PC指针都是加一,即指向下一个房间,直到遇到转移指令,就会跳到转移指令给出的标志位置(可以这样理解,一直顺序执行,检到很10个房间时,里面的人叫PC直接去检第20个房间)!就是这样理解的,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
40H在这里是指存储单元的地址,将第40H号地址中存储的数传送到寄存器A当中。如果直接想赋值的话前面加'#'
即MOV A,#40H
MOV R0,A指令就简单多了,直接是将A中的数传给R0就是了
这是跟计算机汇编不同的地方,计算机汇编个人感觉还要烦一点,还是单片机汇编方便
即MOV A,#40H
MOV R0,A指令就简单多了,直接是将A中的数传给R0就是了
这是跟计算机汇编不同的地方,计算机汇编个人感觉还要烦一点,还是单片机汇编方便
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询