网站建设捌金手指下拉十九,盐城做网站,wordpress 文章分享代码,宁波seo网络推广服务商单片机——定时器 宗旨#xff1a;技术的学习是有限的#xff0c;分享的精神是无限的。 1、定时器和计数器
时钟周期#xff1a;单片机时序中的最小单位#xff0c;集体计算的放法就是时钟源分之一
机器周期#xff1a;单片机完成一个操作的最短时间#xff0c;12个时钟…单片机——定时器 宗旨技术的学习是有限的分享的精神是无限的。 1、定时器和计数器
时钟周期单片机时序中的最小单位集体计算的放法就是时钟源分之一
机器周期单片机完成一个操作的最短时间12个时钟周期
定时器打开定时器后定时器“存储寄存器”的值经过一个机器周期自动加1也就是说机器周期是定时器的计数周期。 2、定时器的寄存器 TMOD —— 工作模式选择寄存器——常用模式1和模式2.
TCON —— 控制寄存器TRn定时器开关
TH/TL —— 定时计数器 3、定时器应用
第一步设置特殊功能寄存器 TMOD配置好工作模式。第二步设置计数寄存器TH0和TL0的初值。第三步设置TCON通过TR0置 1来让定时器开始计数。第四步判断TCON 寄存器的TF0 位监测定时器溢出情况。
写程序之前我们要先来学会计算如何用定时器定时时间。我们的晶振是 11.0592M时钟周期就是 1/11059200机器周期是12/11059200时器定时值最大也就是 71ms 左右。
65536-N*12/11.0592M time ---计算出N转换成十六进制
1ms的例子 TMOD 0X01; TH0 0XFC; TL0 0X67; TR0 1; #includereg52.htypedef unsigned char uchar;sbit LED P0^0;int main(void)
{uchar cnt 0; //定义一个计数变量记录T0溢出次数TMOD 0x01; //设置T0为模式1TH0 0xFC; //为T0赋初值0xB800TL0 0x67;TR0 1; //启动T0while (1){if (1 TF0) //判断T0是否溢出{TF0 0; //T0溢出后清零中断标志TH0 0xFC; //并重新赋初值TL0 0x67;cnt; //计数值自加1if (cnt 1000) //判断T0溢出是否达到50次{cnt 0; //达到50次后计数值清零LED ~LED; //LED取反0--1、1--0}}}return 0;
} 4、数码管 共阴与共阳数码管 ——8个LED灯
位选——控制选择多个数码管中的哪一个
段选——选择数码管显示的值 // 秒定时器
#includereg52.htypedef unsigned int uint;
typedef unsigned char uchar;uchar code count[]
{0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};int main(void)
{uchar cnt 0; //记录T0中断次数uchar sec 0; //记录经过的秒数TMOD 0x01; //设置T0为模式1TH0 0xFC; //为T0赋初值0xB800TL0 0x67;TR0 1; //启动T0while (1){if (TF0 1) //判断T0是否溢出{TF0 0; //T0溢出后清零中断标志TH0 0xFC; //并重新赋初值TL0 0x67;cnt; //计数值自加1if (cnt 1000) //判断T0溢出是否达到1000次{cnt 0; //达到1000次后计数值清零P0 count[sec]; //当前秒数对应的真值表中的值送到P0口sec; //秒数记录自加1if (sec 16) //当秒数超过0x0F(15)后重新从0开始{sec 0;}}}}return 0;
}