找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2970|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机1分钟定时怎么操作?

[复制链接]
跳转到指定楼层
楼主
ID:377930 发表于 2018-11-3 01:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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++;
}

我只会一秒钟定时.请大家帮我一下,谢谢.


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:419979 发表于 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

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:213173 发表于 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;
                }
        }
}
回复

使用道具 举报

地板
ID:308437 发表于 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;
}
}

然后主循环扫描这个标志位即可
回复

使用道具 举报

5#
ID:198762 发表于 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++; }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表