登录站点

用户名

密码

51单片机学习札记总结(二)

已有 972 次阅读  2009-09-27 13:34   标签单片机  札记  学习 

十四.一个正确的8051程序,在系统已开机RESET后,一定会加入一小段延迟的时间,让系统的硬件县就绪后,

才正式开始处理主程序所要进行的动作。另外别忘了,一定要把堆栈顶的位置已开。

如:    ORG  0000H

STAR:  MOV   R1,#00H

$   :   DJMZ  R1,$

        MOV SP,#60H

        …………

十五.准备一块面包版来做实验,你不需要每次都用新的板子焊接,而用面包板将会变得容易许多

十六.关于中断与定时器/计数器

有人说,学会写中断程序,才算是对程序及微机有了充分的了解。的确如此,中断才是CPU的精髓。

根据8051手册上的说法,CPU会在极其周期的S5P2阶段(原文为Sampled,但翻译成独处似乎更恰当)读入中断标志位,并在下一个机器周期中检查。

故在以下几种情况下系统是不会对中断要求信号有反应的:

(1 )有限同获更高全县的中断在执行时

(2)目前的机器周期不是该指令的最后一个周期。如系统在执行MUL AB指令(需要花四个周期)时,中断信号必须出现在第四个极其周期上才算有效

也就意味着,中断信号必须持续足够长的时间,以便CPU有时间去反应。

(3)正在执行的指令为RETI或者是关于中断设置IE或IP的指令时,对正好出现的中断信号不反应。

关于Timer

在8051英文手册指出,最高可接受的外部信号输入频率是系统震荡频率的1/24,约为500KHZ左右,也就是说,若外部的输入频率超过500KHZ时,

可能会造成Couner值得错误。这种错误可能会使Counter上的值比正确值还少。8051是在每个机器周期的S5P2阶段检查 T0和T1的状态,若此时的状态为高电位,

而下一个机器周期的S5P2阶段为低电位时,内部的Counter值自动加1,所以输入的尾部信号不论其周期比(Duty cycle )为多少,其中较短的状态必须保持一个

机器中期以上的时间,才得以让内部的8051计数器动作。

设置定时/计数器初值的另类方法:

当Timer被设置成模式0工作时,计数器的宽度只有13位宽,其中THx占8位,TLx仅占5个位,所以真正要存入的计数值应该是:

THx=#(8192-计数值)除32取其与数值

TLx=#(8192-计数值)除32取其商数值

设置一个计数器的值看来很不方便,但在8051的汇编语言中,可借用反汇编程序总的假指令,自动做这些计算。以下就是这种最为方便的写法:

MOV TL0,#(8192-计数值).MOD.32

MOV TH0,#(8192-计数值)/32 

Timer在其余的工作模式下也可以有类似的写法,只将相应的值改了即可(如8192改为65536,32改为256)。

中断或计数器通常为下降沿触发而非上升沿触发,是上升沿不如下降沿稳定,下降沿的毛刺少。

上一篇: 用VHDL/VerilogHD语言开发PLD/FPGA的完整流程 下一篇: 单片机软件复位的几种方式

分享 举报