问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-05-05 05:55

我来回答

4个回答

热心网友 时间:2023-10-11 20:29

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

热心网友 时间:2023-10-11 20:29

严重同意楼上意见,用中断来做脉冲计数,安全可靠,不会丢失脉冲。四个按键的处理可以放在程序前面,读取状态后,调用相应的启动,停止之类的子程序。

热心网友 时间:2023-10-11 20:29

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

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

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

热心网友 时间:2023-10-11 20:30

网上有很多啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
提升学历选自考好还是成考好 成考和自考的文凭哪个好 2024年成人自考和成人高考哪个更好 家用净水器滤芯类型有哪些 家用净水器什么滤芯好 请问在VB中如何调用多线程? 交强险理赔后第二年上涨吗? 交强险出一次险第二年保费多出多少? 全家人都爱吃的家常菜目录 丽台Quadro P5000专业图形显卡-购买最佳价格 纪念迈克尔杰克逊,因为他唱歌太好听,太伟大了 用C语言给51单片机编程时,怎样用P0口输出地址和数据? 用一句话来纪念迈克尔·杰克逊 打篮球时怎样算二运 纪念迈克尔杰克逊的文章要非常好的适合演讲文 急!!! 迈克尔杰克逊纪念日 高手帮我总结一下关于迈克尔杰克逊所有的重要日子和纪念日。我要在学校点歌! 打篮球为什么不能两次运球? 51单片机最简单的C语言编程求教 迈克尔 杰克逊的纪念日是那天 陨落的巨星,纪念迈克尔杰克逊文章 迈克尔杰克逊逝世一周年要怎样纪念? 迈克尔杰克逊的纪念馆 钓鲫鱼用什么饵最好 谁能帮我做一个图片,上面写上“落后就要挨打”素材您选就好了,用来激励自己的 怎样在公交车上连上网 b12公交车wifi密码是什么? 公交车上网怎么样连接 公交车网络怎么连接 常州公交车免费无线网怎么用 纪念迈克尔杰克逊有什么歌 落后就要挨打的历史探析 c语言编程需要哪些基础知识,详细的。如何自己设计五一单片机程序? 打篮球时犯规的几个动作中有个叫“两次运球”,俗称“二次”。请问具体怎样运球就叫“两次运球”? 从童年不幸到万人敬仰再到口诛笔伐,迈克尔杰克逊的一生称得上传奇吗... 迈克尔杰克逊到底葬在哪?? 求51单片机C语言编程 求纪念迈克尔·杰克逊的一篇文章,不论在哪找的。 菜鸟学 51单片机C语言编程,串口通信 悼念迈克尔杰克逊 2015年,谁还记得迈克尔杰克逊?还有多少人深深地爱着他? 关于51单片机C语言编程问题? 各种纪念迈克尔杰克逊的书 请教高手有关51单片机 C语言编程 哪里有迈克尔杰克逊的纪念品 打篮球这种情况算是二次运球吗? 悼念MJ的长诗 用C语言编程控制51单片机实现如下功能 怎么学习51单片机c语言 编程?看懂c语言 自己的身份证被别人的实名了?