www.990kj.comSTC89C52工作寄存器区事后高分悬赏不懂的乱刷的我

发布日期:2019-11-20 17:48   来源:未知   

  STC89C52工作寄存器区,事后高分悬赏,不懂的乱刷的我会举报,要是都不能解答,答案靠谱的我也选择满意

  STC89C52工作寄存器区,事后高分悬赏,不懂的乱刷的我会举报,要是都不能解答,答案靠谱的我也选择满意

  请问下C51是怎么分配工作寄存器区的,网上大部分都说0号寄存器区给了main函数,其余的是可以供给中断函数调用的,可是我的程序3个中断函数,1个是计时器,用了1号寄存器区,另外2个是...

  请问下C51是怎么分配工作寄存器区的,网上大部分都说0号寄存器区给了main函数,其余的是可以供给中断函数调用的,可是我的程序3个中断函数,1个是计时器,用了1号寄存器区,另外2个是外中断,分别用了2号、3号寄存器区,结果程序上芯片后就出错,计时器没事,一旦用了外中断立马出错,而且一旦我把2个外中断都去掉指定寄存器区设置而改用默认堆栈,立马就好了,为什么啊?重新整理下,我使用3个中断,计时器using 1,另外2个外中断用了using 2和using 3,www.990kj.com,结果运行中外中断出错。想一起探讨C51的同志也可以发消息给我大家一起学习,求高手回答&讨论,谢谢啊~~~

  可选中1个或多个下面的关键词,香港挂牌天书点亮手工制作技能 居民走向再就业道路!搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  0号工作寄存器区其实C51已经分配给了main函数使用,保存了main函数的工作状态寄存器,而中间调用的函数比如Delay或者其它函数调用了using 1的通用寄存器组,也就是说C51编译器自己管理了,如果使用using 0 using 1将导致工作寄存器组被重写,中断函数返回后使用了中断函数的工作状态寄存器,结果就是死机,对于栈,其实C51对于与人交互的程序反应速度已经够了,入栈出栈对人机交互没有影响,而对于要求速度较高的应用,如示波、清丰注塑加工优质商家本港台现场直播,私服电机控制,可以选用STM32或者其他ARM内核的MCU,毕竟51单片机的内核对于数据的处理现在的数据已经不够了,8位的字处理能力以及内存管理能力只能应付简单的外设需求。而ARM内核的微控制器内存寻址能力大大提高(32位),此外ARM的内核外围设计由制造商自己定制,集成了硬件中断处理能力(不再是软件查找中断向量表而是硬件选择电路)另外还包含了DMA控制器,能够做到一边替换内存的同时内存其它地方的程序正常执行,所以对于C51的编程,无需担心中断响应速度,直接交付给堆栈压栈出栈就行了。

  展开全部C语言是高级语言,并不用编程者关心存储器,编译系统自然会管理的。

  如果,非要强行对存储器方面的硬件进行管理,编译系统,却未必会认真的听从命令。

  keil 软件,可以看到C程序的汇编语言以及机器码,看懂了这些,问题就没了。更多追问追答追问亲,如果不用using语句,那么就不会去调用空闲工作寄存器组,而用堆栈来保护当前现场然后重用当前工作寄存器,这样会使得8051单片机有限的RAM空间更加吃紧,我就是想问C51的编译方式main函数到底会用掉几个工作寄存器组,要是用汇编我就不这么纠结直接用了啊。。。。。追答由 KEIL 编译系统来管理存储器空间,比编程者自己管理,肯定要合理的多。

  KEIL 编译软件,会协调使用工作寄存器、位寻址空间和寄存器间接寻址空间。

  如果要想自己管理存储空间,使用C语言来编程就是南辕北辙。追问我刚才勉强算是看了一点汇编,确实使用工作寄存器会抢占8个字节的低地址RAM,但是使用了工作寄存器来为当前中断服务可以在中断函数调用时少进行好几次堆栈操作(保护、恢复主函数现场),在我浏览的C51转汇编中,RAM的低地址00H-1FH申明了4个工作寄存器,然后是正常的RAM,堆栈距离工作寄存器有一段距离(中间是几个不痛不痒的数组,顶多LED出乱码不会死机),应该不是堆栈的过限导致的程序状态错误,那么错误的根源到底是哪里?追答对硬件、汇编尚不很了解,就使用 using 2 和 using 3 来干扰编译软件,这就是错误的根源。