微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 跪求大神,51定时器控制一个led灯,1秒亮,1秒灭的程序,哪里出错啦,坐等回复

跪求大神,51定时器控制一个led灯,1秒亮,1秒灭的程序,哪里出错啦,坐等回复

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
unsigned char  tt ;
sbit D1=P2^0;
void InitTimer();
void main()
{   
     InitTimer();
     while(1)
         {
          if(tt==20)
           {       
                tt=0;
            D1=1;
           }
                 D1=0;
       
          }
                               
}
void InitTimer()
{
    TMOD = 0x01;
    TH0 = 0x3c;
    TL0 = 0xb0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void Timer() interrupt 1
{
   TH0 = 0x3c;
    TL0 = 0xb0;
        tt++;
}

#include <reg51.h>
unsigned char  tt ;
sbit D1=P2^0;
void InitTimer();
void main()
{   
     InitTimer();
     while(1)
         {
          if(tt==20)
           {        
                tt=0;
            D1=~D1;
           }
               
        
          }
                                
}
void InitTimer()
{
    TMOD = 0x01;
    TH0 = 0x3c;
    TL0 = 0xb0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void Timer() interrupt 1
{
   TH0 = 0x3c;
    TL0 = 0xb0;
        tt++;
}
只需改动
while(1)
         {
          if(tt==20)
           {        
                tt=0;
            D1=1;
           }
                 D1=0;
        
          }中D1=~D1;
试想一下程序中只有当tt=20时候才有高电平,那么tt=0~19的时间段D1为低电平,灭亮比为19:1,根本就看不见;
另外这样写代码,效率不高!

弄了几天啦,一直没有发现问题吖

#include <reg51.h>
unsigned char  tt ;
sbit D1=P2^0;
void InitTimer();
void main()
{   
     InitTimer();
     while(1);           
}
void display()
{
  static unsigned char tt;
  tt++;
  if(tt=20)
  {
  D1=~D1;
  tt=0;
  }
}
void InitTimer()
{
    TMOD = 0x01;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void Timer() interrupt 1
{
   TH0 = 0x3c;
    TL0 = 0xb0;
   
    display();
}
}

我想问下tt的初始值是多少

#include <reg51.h>
sbit D1=P2^0;
void InitTimer();
void main()
{   
     InitTimer();
     while(1);           
}
void display()
{
  static unsigned char tt;
  tt++;
  if(tt==20)
  {
  D1=~D1;
  tt=0;
  }
}
void InitTimer()
{
    TMOD = 0x01;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void Timer() interrupt 1
{
   TH0 = 0x3c;
   TL0 = 0xb0;
   
   display();
}
调试通过了!你那个
while(1)
         {
          if(tt==20)
           {        
                tt=0;
            D1=1;
           }
                 D1=0;
        
          }
程序在中间一直循环,跳不出来的,

while 有问题,还有你的晶振是多少初值给对了吗?while就是存在楼上说的问题,你的程序不是1s 亮1s灭……嘿嘿,没事初学都易犯这个错,多想想怎么编吧

问题应该是D1=~D1,这样就行了,你那样,低电平时间和高电平时间同吗?

tt=0      

我 下载去看看然后再想想,大神阿,跪谢吖

晶振是11.0592Mhz,对阿,当时忘记考虑机器周期啦,谢谢提醒

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

网站地图

Top