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
}
硬件延时
定时器(精确)
-
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; } }
-
定时器用法
-
TCON(可位控)
TF1 TR1 TF0 TR0 T1溢出自动置1, 响应中断后自动置零 置1T1开始定时 同TF1 同TR1 -
TMOD(高四位 不可位控)
GATE C/T’ M1 M0 0 --> TR1使能T1 1–> TR1+外部中断使能T1 定时/计数 控制定时器工作模式 同M1 -
IE(中断控制)
EA ET1 EX1 ET0 EX0 1 --> 开总中断 1 --> 开启T1 1 --> 开启INT1 1 --> 开启T0 1 --> 开启INT0
-