51单片机 用一个定时器实现两个功能
来自: 更新日期:早些时候
关于51单片机使用两个定时器进行控制的问题~
//定时器中断 10mS中断一次
void timer0_isr(void) interrupt 1
{
if(flag == 0)
{
//这里是第一件事情
flag = 1;//在主程序处理完第一件事,将此标记清除
}
if (++ucCount == 100) //累加100次达到1秒
{
ucCount = 0; //复位计数
ioLED = !ioLED; //这是第二件事情,实现LED闪烁
}
}
实现两个什么功能?
51单片机 用一个定时器实现两个功能视频
相关评论:
D1=0,D1=1,这俩应该放到If里面
TF0=0;//关闭定时器0
TF1=1;打开定时器1
D1=0;//LED灭
while(1)
{
if(aa==20)
{
aa=0;
D1=1;//LED亮,持续亮两秒,
TF1=0;
TF0=1;
}
if(bb==40)
{
bb=0;
D1=0;//LED灭一秒
TF0=0;
TF1=1;
}
}
并且在程序开始处开启定时器1(也就是先执行的定时器),但是要注意,你现在是两个定时器同时工作,应该在if中关闭当前的定时器,并打开另一个定时器
可以的! 但需要初始化! 例如一个定时器用于串口的波特率产生,另外一个则可以用作计数器!
void init_uart() void
{
TMOD = 0x20; //定时器T1使用工作方式2
TH1 = 253; // 设置初值
TL1 = 253;
TR1 = 1; // 开始计时
SCON = 0x50; //工作方式1,波特率9600bps,允许接收
ES = 1;
EA = 1; // 打开所有中断
TI = 0;
RI = 0;
}
//定时器中断 10mS中断一次
void timer0_isr(void) interrupt 1
{
if(flag == 0)
{
//这里是第一件事情
flag = 1;//在主程序处理完第一件事,将此标记清除
}
if (++ucCount == 100) //累加100次达到1秒
{
ucCount = 0; //复位计数
ioLED = !ioLED; //这是第二件事情,实现LED闪烁
}
}
实现两个什么功能?
51单片机 用一个定时器实现两个功能视频
相关评论: