51单片机使用T0和T1外部脉冲计数,C语言如何编程?

使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎... 使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎么用C语言编程? 展开
 我来答
tattackor
推荐于2017-10-11 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:1057万
展开全部

1、使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。
用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转。


2、例程:

#include<reg51.h> 
sbit k1 = ?; //自己定义
sbit k2 = ?
sbit k3 = ?
sbit k4 = ?
sbit DIAN1 = ?
sbit DIAN2 = ?
sbit DIAN3 = ?
sbit DIAN4 = ?
sbit SEN1 = ? 
sbit SEN2 = ?
void delay(unsigned int x)
{
 unsigned int m, n; 
 for(m = x; m > 0; m--) for(n = 115; n > 0; n--);
}
void main(void)

 TMOD = 0x55;
 IE = 0x8a;
 while(1) {
 if (!k1) {
 delay(10);
 if (!k1) {
 while(!k1);
 TH0 = (65536 - 1700) / 256;
 TL0 = (65536 - 1700) % 256;
 SEN1 = 0;
 DIAN1 = 0; DIAN2 = 1;
 SEN1 = 1; 
 TR0 = 1;
 }
 }
 if (!k2) {
 delay(10);
 if (!k2) {
 while(!k2);
 TH0 = (65536 - 1700) / 256;
 TL0 = (65536 - 1700) % 256;
 SEN1 = 0;
 DIAN1 = 1; DIAN2 = 0;
 SEN1 = 1; 
 TR0 = 1;
 }
 }
 if (!k3) {
 delay(10);
 if (!k3) {
 while(!k3);
 TH1 = (65536 - 1700) / 256;
 TL1 = (65536 - 1700) % 256;
 SEN2 = 0;
 DIAN3 = 0; DIAN4 = 1;
 SEN2 = 1; 
 TR1 = 1;
 }
 }
 if (!k4) {
 delay(10);
 if (!k4) {
 while(!k4);
 TH1 = (65536 - 1700) / 256;
 TL1 = (65536 - 1700) % 256;
 SEN2 = 0;
 DIAN3 = 1; DIAN4 = 0;
 SEN2 = 1; 
 TR1 = 1;
 }
 }
 }
}
niu9807
2013-10-28 · TA获得超过1819个赞
知道小有建树答主
回答量:1802
采纳率:52%
帮助的人:494万
展开全部
严重同意楼上意见,用中断来做脉冲计数,安全可靠,不会丢失脉冲。四个按键的处理可以放在程序前面,读取状态后,调用相应的启动,停止之类的子程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

推荐于2017-10-12 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.2万
采纳率:86%
帮助的人:8809万
展开全部
使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。

用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎么用C语言编程?

--编程前,要先设计出来电路。
追问
电路图是按照上面图片中的电路!T0控制电机1,T1控制电机2,T0和T1通过光电传感器测量脉冲,到1700个脉冲电机停止。
追答
#include 

sbit k1 = ?; //楼主自己定义吧

sbit k2 = ?
sbit k3 = ?
sbit k4 = ?

sbit DIAN1 = ?
sbit DIAN2 = ?
sbit DIAN3 = ?
sbit DIAN4 = ?

sbit SEN1 = ?
sbit SEN2 = ?

void delay(unsigned int x)
{
unsigned int m, n;
for(m = x; m > 0; m--) for(n = 115; n > 0; n--);
}
void main(void)
{
TMOD = 0x55;
IE = 0x8a;
while(1) {
if (!k1) {
delay(10);
if (!k1) {
while(!k1);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 0; DIAN2 = 1;
SEN1 = 1;
TR0 = 1;
}
}
if (!k2) {
delay(10);
if (!k2) {
while(!k2);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 1; DIAN2 = 0;
SEN1 = 1;
TR0 = 1;
}
}
if (!k3) {
delay(10);
if (!k3) {
while(!k3);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 0; DIAN4 = 1;
SEN2 = 1;
TR1 = 1;
}
}
if (!k4) {
delay(10);
if (!k4) {
while(!k4);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 1; DIAN4 = 0;
SEN2 = 1;
TR1 = 1;
}
}
}
}

字数超出最大允许值,请删减!

还有两个中断函数。
但是,百度不让写了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲜型超t
2013-10-30
知道答主
回答量:2
采纳率:0%
帮助的人:3055
展开全部
网上有很多啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式