求高手指点单片机定时器问题
时间:10-02
整理:3721RD
点击:
本人现在正在学习单片机,在学习定时器时遇到点问题,求高手指点。
下面是我写的一个程序,定时器0控制LED2每一秒闪一次,定时器1控制LED1前5秒灭,后10秒亮,预期效果应该是LED2闪第五次时LED1开始闪第一次,可为什么实验时LED2闪第三次LED1就开始闪了啊?求高手指点,多多感谢。
#include<reg52.h>
#define uint unsigned int
sbit led1=P1^3;
sbit led2=P1^7;
uint num=0,num1=0;
void main()
{
TMOD=0x11;
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1);
}
void T0_time() interrupt 1
{
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
num++;
if(num==20)
{ num=0;
led2=~led2;
}
}
void T1_time() interrupt 3
{
TH1=(65636-50000)/256;
TL1=(65636-50000)%256;
num1++;
if(num1>300)
num1=0;
if(num1<100)
led1=1;
else
led1=0;
}
下面是我写的一个程序,定时器0控制LED2每一秒闪一次,定时器1控制LED1前5秒灭,后10秒亮,预期效果应该是LED2闪第五次时LED1开始闪第一次,可为什么实验时LED2闪第三次LED1就开始闪了啊?求高手指点,多多感谢。
#include<reg52.h>
#define uint unsigned int
sbit led1=P1^3;
sbit led2=P1^7;
uint num=0,num1=0;
void main()
{
TMOD=0x11;
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1);
}
void T0_time() interrupt 1
{
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
num++;
if(num==20)
{ num=0;
led2=~led2;
}
}
void T1_time() interrupt 3
{
TH1=(65636-50000)/256;
TL1=(65636-50000)%256;
num1++;
if(num1>300)
num1=0;
if(num1<100)
led1=1;
else
led1=0;
}
童鞋啊 你的led2=~led2 不是一秒闪一次 是每隔2秒闪一次 所以才会在第三次亮时 已经是5秒了。
童鞋啊 你的led=~led 是没两秒闪一次 不是一秒闪一次
童鞋啊 你的led=~led 是没两秒闪一次 不是一秒闪一次
啊啊啊。对对对,是这样,谢谢你的指点,谢谢。