51单片机50ms定时

来源:百度知道 编辑:UC知道 时间:2024/05/14 14:37:17
51单片机50ms定时,必须用查询方式,我中断用惯了,突然脑子短路,查询不知道怎么用了,希望50ms到,就把全局变量pp加1,谢谢大家

12MHz 的晶振,那么一个周期就是 1 us,所以需要计数 50ms / 1us = 50000,可以选择定时器工作方式 1。

由上述计算:
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;

方式一,所以:
TMOD = 0x10;

运行 TR1 = 1,所以:
TCON = 0x40;

允许中断 ET1 = 1,EA = 1,所以:
IE = 0x88;

综合可以编写如下程序(汇编我不会,不知道你要的是汇编还是C):

#include <reg52.h>

void timer1_int() interrupt 3
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
}

void timer1_init()
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;

TMOD = 0x10;
IE = 0x88;
TCON = 0x40;
}

void main()
{
timer1_init();

while(1);
}

//==================
unsigned int pp1 //定义全局变量
unsigned int count=50000; //计数值,50MS
#define TH_M1 (65536-count)/256;//赋值
#define TL_M1 (65536-count)%256;
//===============
mian() <