跪求大神,51定时器控制一个led灯,1秒亮,1秒灭的程序,哪里出错啦,坐等回复
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,对阿,当时忘记考虑机器周期啦,谢谢提醒