标题:
51单片机1分钟定时怎么操作?
[打印本页]
作者:
hz87813430
时间:
2018-11-3 01:28
标题:
51单片机1分钟定时怎么操作?
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit JDQ=P2^0;
uchar num;
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
if(num==20)
{
num=0;
JDQ=~JDQ;
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
}
我只会一秒钟定时.请大家帮我一下,谢谢.
作者:
Super122
时间:
2018-11-3 01:34
51单片机 的时钟一般是12MHz,采用16位定时器,最大计数次数为65535,那么就是65535us=65ms, 那就可以设置寄存器初始使每50ms产生一次中断.20次即为一秒
50 ms =50000 us.
THX = (65535-50000) /256;
TLX = (65535-50000) %256;
X为定时号 0.1
作者:
wulin
时间:
2018-11-3 07:47
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit JDQ=P2^0;
uchar Cnt50ms=0,Cnt1s=0,Cnt1min=0;//50毫秒、秒、分时间变量
//uchar num;
void main()
{
TMOD=0x01;
// TL0 = 0xB0;//50毫秒@12.000MHz
// TH0 = 0x3C;
TH0 = 0x4C;//50毫秒@11.0592MHz
TL0 = 0x00;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(Cnt1min==1)
{
Cnt1min=0;
JDQ=~JDQ;
}
}
}
void T0_time() interrupt 1
{
TH0 = 0x4C;
TL0 = 0x00;
Cnt50ms++;
if(Cnt50ms==20)
{
Cnt50ms=0;
Cnt1s++;
if(Cnt1s==60)
{
Cnt1s=0;
Cnt1min=1;
}
}
}
作者:
yousunny
时间:
2018-11-3 08:54
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
//假设你中断是20mS一次,那一分钟就是来累计60000ms
if(num>3000)
{
flag=1;
}
}
然后主循环扫描这个标志位即可
作者:
云淡风轻25
时间:
2018-11-3 11:03
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit JDQ=P2^0; uchar num,num2; void main() { TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; num2=0; while(1) if(num==20) { num=0; JDQ=~JDQ; num2++;if(num2==60) { num2=0; } } } void T0_time() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++; }
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1