61单片机定时器查询和定时的区别
作者:互联网
在使用定时器的过程中,避免不了使用定时器定时或者查询的情况
但定时器用于定时中断和查询,其实是有实际的区别的
下面直接把分享下我之前代码
定时器查询是通过判断标志位的方式
#include<reg51.h>
#define uint unsigned int //宏定义
sbit led1=P2^0; //定义led1
uint num;
void timer0_init(void); //引用定时器子函数void main()
{
led1 = 0;
num = 0;
timer0_init();
while(1)
{
if(TF0 == 1) //检测是否溢出
{
TF0 = 0; //软件清零
TH0 = (65536-50000)/256; //重新赋值
TL0 = (65536-50000)%256;
num++; //累加器
}
if(num>=140) //学号最后一位为数字7,50ms循环140次,时间为7s
{
num = 0;
led1 = ~led1; //led1取反
}
}
}
void timer0_init(void) //初始化定时器0
{
EA = 0; //关闭全局中断
ET0 = 0; //关闭定时器0中断
TMOD = 0x01; //定时器工作模式1,16位定时器计数模式
TH0 = (65536-50000)/256; //设置16位定时器的高8位,定时50ms
TL0 = (65536-50000)%256; //设置16位定时器的低8位
TR0 = 1; //打开定时器0}
定时器用于中断情况
void Timer0Init()
{
TMOD|=0x01; //选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872
TL0=(65536-45872)%256;
ET0=1;//打开定时器0中断允许
TR0=1;//打开定时器0
EA=1;//打开总中断
}void Timer0() interrupt 1
{
static u16 i; //定义局部变量i
TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872
TL0=(65536-45872)%256;
i++; //每一个机器周期i自增1
if(i==120) //当i记到120,即6秒的时候重新赋值为0
{
i=0;
num++; //每6秒时间变量num加1
if(num==60) //当num记到60时重新赋值为0
{
num=0;
}
}
}
标签:led1,定时器,61,void,单片机,num,65536,256 来源: https://blog.csdn.net/qq_41944420/article/details/120760999