微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于单片机的N多问题

关于单片机的N多问题

时间:11-25 来源:互联网 点击:

,串列传输速率是首先应该考虑的一项。该寄存器是一个16位的寄存器,分为低8位(LSB)和高8位(MSB)寄存器。

另外单片机访问的是串列传输速率除数锁存器LSB/MSB。一般常用的工作频率是1。8432MHz。这个频率除以16就是串列传输速率的时钟频率,用于控制发送和接收资料的速度。

下面给出串列传输速率除数锁存器值的计算公式:

串列传输速率除数锁存器值=工作频率/(16×期望串列传输速率)=1843200/(16×期望串列传输速率)

l 接收缓冲寄存器和发送保持寄存器(transmit and receive holding register)

读操作单片机访问接收缓冲寄存器(RHR),写操作单片机访问发送保持寄存器(THR)。

l 中断允许寄存器(interrupt enable register)

l FIFO控制寄存器(FIFO control register)

资料发送和接收模式的选择。常用的两种模式:FIFO和DMA。其中DMA又有两种模式DMA的模式0、DMA的模式1可供选择。

95. 我使用的单片机是AT89C51,试过用弹出指令强行返回中断的方法,确实能够返回主程序,具体做法是:首先将堆栈中的地址弹出,然后压入主程序中新的地址,最后执行RETI指令就可以返回到该地址了。如果弹出指令执行完后直接用跳转指令而不通过RETI指令也能返回到主程序,但下次中断来时将不能再次响应。请问是从被嵌套的高优先级中断程序中怎样返回主程序,是不是还必须得通过最低级中断才能返回。要是直接返回的话,是否下次中断还能够正常响应?

答:对于51系列的单片机而言,当中端响应发生时,会将相应的优先级有效触发器职位;当退出中断时,执行RETI,单片机又自动将优先级有效触发器清0。因此,如果直接使用跳转指令从中断子程序出来的话,单片机没有清0优先级有效触发器,下一次中断发生时就不能响应了。

如果要从高优先级中断程序返回主程序的话,必须执行两条RETI指令,才可以清除高/低优先级有效触发器。具体的程序可以是:

MOV DPTR, #LABLE1

POP ACC ;将高优先级子程序返回地址出栈

POP ACC

PUSH DPL ;将LABLE1地址入栈

PUSH DPH

RETI

LABLE1:

POP ACC ;将低优先级子程序返回地址出栈

POP ACC

MOV DPTR, #LABEL2

PUSH DPL ;将LABLE2,即需要返回的主程序地址入栈

PUSH DPH

RETI

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top