设MCS-51单片机的晶振频率为12MHZ,试编写10ms的延时程序(要求误差不超过0.003ms)。

设MCS-51单片机的晶振频率为12MHZ,试编写10ms的延时程序(要求误差不超过0.003ms)。,第1张

C语言程序:

#include

void main (void)

{

TMOD = 0x10

TH1 = (-50000>>8)

TL1 = -50000

TCON = 0x40

IE = 0x88

while(1)

}

void T1_int (void) interrupt 3

{

TH1 = (-50000>>8)

TL1 = -50000

}

汇编程序如下:

ORG    0000H

AJMP    MAIN

ORG    001BH

AJMP    T1INT

ORG    0100H

MAIN: 

MOV    TMOD, #10H

MOV    TH1, #HIGH(-50000)

MOV    TL1, #LOW(-50000)

MOV    TCON, #40H

MOV    IE, #88H

AJMP    $

T1INT:

PUSH    ACC

MOV TH1, #HIGH(-50000)

MOV TL1, #LOW(-50000)

POP    ACC

RETI

扩展资料:

Keil C51程序设计中几种精确延时方法

延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时另一种是软件延时,这种方法主要采用循环体进行。

使用定时器/计数器实现精确延时

单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。

本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句。

执行时占用了4个机器周期如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。

这个可以用几种办法:

1、直接用软件延时,如用以下的DELAY()延时子程序,如要延时5ms,直接调用DELAY(5)就好了,但这种是纯软件的延时。

//======延时(n)ms,在4MHz晶振下!!!

void DELAY(uint n)

{ uint j

uchar k

for (j=0j<nj++)

for (k=246k>0k--) NOP()

}

2、用定时器延时,要通过计算延时的时间来确定延时的常数(分频比和定时器初值)。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11137476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存