A. PC是一个特殊功能寄存器 ,那它是如何控制单片机执行程序的详细说明一下!~ 我是初学者~ 谢谢!
PC是指程序代码指针,是一个指向程序代码的地址。单片机内部的ALU工作,每次都按PC中的地址到代码段取出需要执行的指令,然后执行,PC的值会自动加1,即自动跳向下一条指令。
因此改变PC的值,就可以控制单片机执行程序的走向,但PC的值是不允许用户通过指令赋值的,但可以利用中断等时PC需要入栈、返回需要出栈的操作通过堆栈来改变,从而改变程序的走向,在uC/OS-II中就是这么实现任务切换的。
B. MCS-51单片机在响应中断过程中,PC如何变化
响应中断时,PC先将断点地址(就是执行完该语句的下一条语句的首字节地址)压入堆栈(先入低字节,再入高字节),然后将对应的中断入口地址装入PC,接下来就是执行中断服务子程序。中断结束后再从堆栈中弹出两字节的断口地址装入PC;返回到前面的断点处。
T0的中断入口地址是0x000B,这就是响应中断后的PC值。
(2)单片机pc入栈扩展阅读:
中断响应是硬件对中断请求作出响应的过程,包括识别中断源,保留现场,引出中断处理程序等过程。
① CPU在当前指令执行结束时,响应中断,进入中断的响应周期;
② 发出二个中断回答信号INTA完成一个中断响应周期;
③ 进行断点及标志保存
如:将段地址(CS),偏移地址(IP)标志FR以及压入堆栈。
④ 读取中断类型号,找到中断源;
⑤ 装入中断服务程序的入口地址(CS,IP)
C. 单片机堆栈指令
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,其他不变
MOV 31H,#0FFH ;31H:0ffH,DPL:10H,SP:61H,其他不变
D. 关于单片机在调用子程序时,进行了怎样的堆栈操作
“断点的PC值入栈,还有哪些东西呢?”
取决于子程序的类型和编程方式。有些特殊类型的子程序是需要入栈的,若采用高级语言编程则编译器会自动添加相应的入栈出栈语句。
“有人说临时变量不入栈,那CPU从子程序运行退回断点时,临时变量的值是如何恢复的呢?”
呵呵,为何要恢复?调用子程序的时候会从局部变量块中新分配空间的,如同你后半部分所说。
E. 简述51单片机堆栈进栈和出栈操作规则
1.堆栈用于响应中断或调用子程序时保护断点地址,也可通过栈操作指令(push
和pop保护和恢复现场)其中入栈时先SP+1再将内容压入当前SP所指示的堆栈单元
中,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中,再将
SP减1.
2.中断允许寄存器的功能是控制CPU对中断的开放和屏蔽以及每个中断源是否允许
中断结构包括EA(CPU中断总允许位),ES(串行口中断允许位)ET1(定时器1中
断允许位)EX1(外部中断1中断允许位)ET0(定时器0中断允许位)EX0(外部中
断0中断允许位)
3.T机=12/fosc=12/(6*E6)=2us
X=2*E13-T/T机=8192-200/2=8092=1F9CH=1111 1100 1110 0B
因为TL1的高3位未用, 修正后X=1111 1100 0001 1100B=FC1CH
4.LJMP为长转移指令,可转向64KB程序存储器的任一单元;SJMP为相对转移指令
,偏移范围-128~+127共259字节;AJMP为绝对转移指令,转移目的在指令后一个
F. 51单片机中断后 PC指针进栈需要占用时间吗
要,但这个是“中断”本身完成的事情(不是中断后),更不是在中断程序的一部分