单片机C语言编程
我现在有两个程序,一个是温度测量的,一个是步进电机的,他们的主程序段中都使用了定时器,他们的定时器初值不同,但是我现在需要写个用温度控制步进电机的程序,怎么将两个程序融合...
我现在有两个程序,一个是温度测量的,一个是步进电机的,他们的主程序段中都使用了定时器,他们的定时器初值不同,但是我现在需要写个用温度控制步进电机的程序,怎么将两个程序融合到一起比较合适
现在的问题是一个定时器用于18b20测温,一个用于步进电机的转动,可是我还需要一个定时器来控制数码管的显示,怎么搞?支个招。。。 展开
现在的问题是一个定时器用于18b20测温,一个用于步进电机的转动,可是我还需要一个定时器来控制数码管的显示,怎么搞?支个招。。。 展开
10个回答
展开全部
使用两个定时器或一个定时器中使用两个计数都能满足你的要求。
建议使用一个定时器和一个计数器即可,如计数器为i,则
if(i%测温定时==0)
温度测量();
if(i%步进电机定时==0)
步进电机控制();
注:此时要求两个控制模块的定时步长是一致,比如都是1ms
建议使用一个定时器和一个计数器即可,如计数器为i,则
if(i%测温定时==0)
温度测量();
if(i%步进电机定时==0)
步进电机控制();
注:此时要求两个控制模块的定时步长是一致,比如都是1ms
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数码管显示程序放在18b20的那个定时器或电机的那个定时器么
像下面的程序一样,数码管显示,已经该时间时相应的数码管闪烁都用了同一个定时器
要是C51系列的单片机你程序发来看能不能给你整合下我邮箱105865094@qq.com
void timer0(void)interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
temp++;
if(key.index1)//被选择的时间闪烁
{
shan++;
if(shan==30) flag&=~(1<<(key.index1+1));
if(shan==60){flag=flag|(1<<(key.index1+1));shan=0;}
}
if(temp==10)
{
temp=0;
tmiao++;
if(press)tmiao--;
if(tmiao==10)
{
tmiao=0;
miao++;
if(miao==60)
{
fen++;miao=0;
if(fen==60)
{
shi++;fen=0;
if(shi==100)shi=0;
}
}
}
}
P3=tmiao;
switch(tt)
{
case 0:if(flag_miao){dis_shuma(5,miao%10);}tt=1;break;
case 1:if(flag_miao){dis_shuma(4,miao/10);}tt=2;break;
case 2:if(flag_fen){dis_shuma(3,fen%10);}tt=3;break;
case 3:if(flag_fen){dis_shuma(2,fen/10);}tt=4;break;
case 4:if(flag_shi){dis_shuma(1,shi%10);}tt=5;break;
case 5:if(flag_shi){dis_shuma(0,shi/10);}tt=0;break;
default:break;
}
}
像下面的程序一样,数码管显示,已经该时间时相应的数码管闪烁都用了同一个定时器
要是C51系列的单片机你程序发来看能不能给你整合下我邮箱105865094@qq.com
void timer0(void)interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
temp++;
if(key.index1)//被选择的时间闪烁
{
shan++;
if(shan==30) flag&=~(1<<(key.index1+1));
if(shan==60){flag=flag|(1<<(key.index1+1));shan=0;}
}
if(temp==10)
{
temp=0;
tmiao++;
if(press)tmiao--;
if(tmiao==10)
{
tmiao=0;
miao++;
if(miao==60)
{
fen++;miao=0;
if(fen==60)
{
shi++;fen=0;
if(shi==100)shi=0;
}
}
}
}
P3=tmiao;
switch(tt)
{
case 0:if(flag_miao){dis_shuma(5,miao%10);}tt=1;break;
case 1:if(flag_miao){dis_shuma(4,miao/10);}tt=2;break;
case 2:if(flag_fen){dis_shuma(3,fen%10);}tt=3;break;
case 3:if(flag_fen){dis_shuma(2,fen/10);}tt=4;break;
case 4:if(flag_shi){dis_shuma(1,shi%10);}tt=5;break;
case 5:if(flag_shi){dis_shuma(0,shi/10);}tt=0;break;
default:break;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的方法:52有三个定时器,多个定时器2
还有一种方法是定时器复用,减小定时器初值,设两个不同变量自加,分别控制测温和数码管的显示
还有一种方法是定时器复用,减小定时器初值,设两个不同变量自加,分别控制测温和数码管的显示
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用同一个定时器, 加两个时间计数器来计数, 当计数满足要求时控制温度或者步进电机.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问你的单片机还需要与其它设备(如,上位机)进行串行通信吗?如果不需要选用52系列的单片机就可以满足了(T0、T1、T2三个定时器)。
或者DS18B20不用定时器(不用串口),用普通I/O(如,P1.0)口编程,控制DS18B20、读取数据,可以省出1个定时器,用51系列单片机可以满足。我经常这样用的。
或者DS18B20不用定时器(不用串口),用普通I/O(如,P1.0)口编程,控制DS18B20、读取数据,可以省出1个定时器,用51系列单片机可以满足。我经常这样用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询