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

使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎么用C语言编程?

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;
 }
 }
 }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-28
严重同意楼上意见,用中断来做脉冲计数,安全可靠,不会丢失脉冲。四个按键的处理可以放在程序前面,读取状态后,调用相应的启动,停止之类的子程序。
第2个回答  推荐于2017-10-12
使用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;
}
}
}
}

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

还有两个中断函数。
但是,百度不让写了。

本回答被提问者和网友采纳
第3个回答  2013-10-30
网上有很多啊