MCS-51 延时程序

MCS-51 延时程序

软件延时

该代码为Keil实际调试分析后所得出结论, 因计时仍为粗略计时,故采用软件定时时应当采用毫秒级定时并且输入变量X值不应过大,防止出现较大误差

1 for 语句实现(常用)

//@12MHz STC-Y1指令集
void delay1ms(uint x)//该函数声明占4个机器周期
{
    uint i,j;//该语句不占时间
    for(i = 0;i<x:i++)//执行一次10机器周期
  		for(j = 0;j<121;j++);
}

2 while 语句

//@12MHz STC-Y1指令集
void delay1ms(uint x)
{
    x *= 110;//大约2个机器周期 未调试
    while(x--);//每次执行9个机器周期 --> 9us
}

硬件延时

定时器(精确)

  1. STC-ISP

    提供定时器计算程序, 使用只需要调整参数即可

    void Timer0Init(void)		//100微秒@12.000MHz
    {
    	TMOD &= 0xF0;		//设置定时器模式
    	TMOD |= 0x01;		//设置定时器模式
    	TL0 = 0x9C;		//设置定时初值
    	TH0 = 0xFF;		//设置定时初值
    	TF0 = 0;		//清除TF0标志
    	TR0 = 1;		//定时器0开始计时
    }
    
    void delay1ms(uint x)//若采用该方式应采用毫秒级,防止出现较大误差
    {
        for(i = 0;i<10*x;i++)
        {
    		while (!TF0)
             TF0 = 0;
        }
    }
    
  2. 定时器用法

    • TCON(可位控)

      TF1TR1TF0TR0
      T1溢出自动置1, 响应中断后自动置零置1T1开始定时同TF1同TR1
    • TMOD(高四位 不可位控)

      GATEC/T’M1M0
      0 --> TR1使能T1 1–> TR1+外部中断使能T1定时/计数控制定时器工作模式同M1
    • IE(中断控制)

      EAET1EX1ET0EX0
      1 --> 开总中断1 --> 开启T11 --> 开启INT11 --> 开启T01 --> 开启INT0
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值