您现在的位置: 主页 > MCU > 单片机技术应用 > 定时工作方式2实现1s定时 -
本文所属标签:
为本文创立个标签吧:

定时工作方式2实现1s定时 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]定时器的几种工作方式中,除0和前面的1类似都需要初始化计数值,然后开始计数,计数溢出后,需要再次控制计数的初值,但工作模式2不同于此,工作方式2将THx和TLx分开处理,将初值存放在THx中,计数时只处理TLx的8位,

定时器的几种工作方式中,除0和前面的1类似都需要初始化计数值,然后开始计数,计数溢出后,需要再次控制计数的初值,但工作模式2不同于此,工作方式2将THx和TLx分开处理,将初值存放在THx中,计数时只处理TLx的8位,所以计数最大值为2^8=256,方式2的另一个特点是,当计数溢出后,不需要控制初值,而是会自动将THx中的值做为计数初值重新开始计数。用工作方式2,实现1s延时程序如下:

本文引用地址: http://www.21ic.com/app/mcu/201808/782976.htm


查询方式



#include


sbit LED = P0^2;

unsigned int vT = 0;


void main()

{

LED = 0; // 初始亮灯

TMOD = 0x02; // 工作模式2 最大计数值256

TH0 = 0x06; // 从6开始 256-6=250 * 1us = 0.25ms

TL0 = 0x06;

TR0 = 1; // 启动定时器0

while(1)

{

if (TF0 == 1) // 如果定时器计数溢出

{

TF0 = 0;

vT++;

if (vT == 4000) // 0.25ms * 4000 = 1000ms = 1s

{

LED = !LED;

vT = 0;

}

}

}

}


中断方式


#include


sbit LED = P0^2;

unsigned int vT = 0;


void main()

{

LED = 0; // 初始亮

TMOD = 0x02; // 模式2

TH0 = 0x06; // 256-6=250 * 1us = 0.25ms

TL0 = 0x06;

ET0 = 1; // 定时器0中断开启

EA = 1; // 总中断开

TR0 = 1; // 定时器0开启

while(1);

}


void MyInterrupt(void) interrupt 1 // 中断服务程序

{

vT++;

if (vT == 4000) // 4000*0.25ms=1000ms=1s

{

LED = !LED;

vT = 0;

}

}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > 定时工作方式2实现1s定时 -
 

"定时工作方式2实现1s定时 -"的相关文章

网站地图

围观()