微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于51单片机定时器的提问!

关于51单片机定时器的提问!

时间:10-02 整理:3721RD 点击:
求哪位能给解决一下,先谢谢了!
怎样实现单片机的任意时间定时?(就是需要单片机开始计时,它才计时)

首先是怎么单片机如何确定开始计时的问题,是什么中断方式来做?比如,按键,实时时钟,串口等等外设模块,得到这个信号后就方便了,在中断服务程序里直接启动定时器也行,置位一个标志位跳到主程序去处理也行

定时器工作有三个条件:1.初始值2.开启总中断3,打开定时器中断  你只要打开和关断条件3即可

通过设置定时器th1和th0的值设置初始值,同时打开中断,当中断产生时,定时器开始计时并且到达时间产生中断进行下一步骤

51单片机有两个定时器   每个定时器又有四种模式    你要自己自己选择模式
列如   定时器0  模式1  TMOD=0X01; TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;意思是打开定时器0的工作模式1   定时50ms溢出   

设置 中断总开关EA  或者定时器0或1的中断允许

需要用的时候开启定时器中断(别忘了定时器赋初值),不用的时候定时器关闭中断即可。

那是不是只要定时器初值设置好,需要时直接给TR置1就可以了呢。还是需要在特定情况下TR置1才有效

那是不是只要定时器初值设置好,需要时直接给TR置1就可以了呢。还是需要在特定情况下TR置1才有效

先设置定时器模式    再赋初值  再打开定时器     需要中断再打开中断

TR0=1   是打开定时器0    一打开就开始计时

能给看一下我这个程序哪错了么?它老是不能计时,debug显示不进入中断
#include <reg52.h>
# include <intrins.h>
# define uint unsigned int
# define uchar unsigned char
uint tt=0;
void timerdy ()
{
  tt=0;
  P0=0xfe;
  TMOD=0X01;
  TH0=0X4C;
  TL0=0X00;
  IE=0X82;
  
}
void delay(uint a)
{
  uint b,c;
  for(b=0;b<=a;b++)
    for(c=0;c<=110;c++);
}
void main ()
{
  timerdy();
  while(1)
  {
  P0=_crol_(P0,1);
  delay(1000);
  if(P0==0xef)
  {
    TR0=1;
        P1=0x00;
  }
        if(tt==40)
        {
          tt=0;
          P1=0xf0;
          TR0=0;
        }
   
   }
}
void timer() interrupt 1 using 2
{
  TH0=0X4C;
  TL0=0X00;
  tt++;
}

看看 学习学习!

1、打开总中断2,、打开定时器中断,3,给高八位、低八位赋初始值

总中断跟定时器中断没打开

即EA=1;ETO=1;  这样打开应该就不会错啦

IE就是统一设置的EA和ET0啊

我知道    你试试单独设置一下

少个EA=1总中断服务打开

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top