标题: 单片机定时器0:小灯一隔一秒闪烁程序错误 [打印本页]

作者: hanliu    时间: 2020-12-16 20:19
标题: 单片机定时器0:小灯一隔一秒闪烁程序错误
大佬们,在线求助
今天刚学的定时器,我实在是不知道哪错了_

#include<reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P1^0;

u16 num;

void dingshi0()
{               
        TMOD=0X01;//选择定时器0 工作方式1
        TH0=(65536-50000)/256; //50ms
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;//开启定时器
}
void main()
{
        while(1)
        {
                dingshi0();
        }
}
void ding0() interrupt 1
{
        num++;//计数、时间
        TH0=(65536-50000)/256;//50ms
        TL0=(65536-50000)%256;
        if(num==20)//1s
        {
                num=0;
                led=~led;        
        }                        
}
作者: 47okey    时间: 2020-12-16 22:50
定时器0初始化应该放在while(1)外面,你这样是不断初始化,不能计时了。
作者: hanliu    时间: 2020-12-16 23:25
47okey 发表于 2020-12-16 22:50
定时器0初始化应该放在while(1)外面,你这样是不断初始化,不能计时了。

感想大佬(^O^),
我懂了
作者: jiahz2019    时间: 2020-12-17 08:23
试下这样行不行
#include<reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P1^0;

u16 num;

void dingshi0()
{               
        TMOD=0X01;//选择定时器0 工作方式1
        TH0=(65536-50000)/256; //50ms
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;//开启定时器
}
void main()
{
         void dingshi0() ;
         while(1)
        {
               if(num==20)//1s
        {
                num=0;
                led=~led;        
        }   
        }
}
void ding0() interrupt 1
{
        num++;//计数、时间
        TH0=(65536-50000)/256;//50ms
        TL0=(65536-50000)%256;                           
}

作者: fj51hei    时间: 2020-12-17 09:43
编译下不就知道!
作者: hanliu    时间: 2020-12-17 21:19
jiahz2019 发表于 2020-12-17 08:23
试下这样行不行
#include
typedef unsigned int u16;

我刚才试了下,这样也可以




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1