导航:首页 > 操作系统 > 51单片机脉冲计数程序

51单片机脉冲计数程序

发布时间:2023-01-08 09:30:50

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

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


2、例程:

#include<reg51.h>
sbitk1=?;//自己定义
sbitk2=?
sbitk3=?
sbitk4=?
sbitDIAN1=?
sbitDIAN2=?
sbitDIAN3=?
sbitDIAN4=?
sbitSEN1=?
sbitSEN2=?
voiddelay(unsignedintx)
{
unsignedintm,n;
for(m=x;m>0;m--)for(n=115;n>0;n--);
}
voidmain(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;
}
}
}
}

2. 51单片机的计数器程序

你得在P3.5引脚外部加计数脉冲信号呀,T1才能计数的。就用你的程序,仿真的结果如下图,并用数码管显示了TL1=1的状态了。

3. 51单片机c语言脉冲计数并显示程序

TMOD=0x05;
TH0=0;TL0=0;
TR0=1;
while(1)
{
a=TH0*256+TL0;
display(a);
}

4. 51单片机:利用计数器T1(P3.5)记录脉冲个数,每计满100个脉冲,使n++,然后重新计数 用c51程序怎么写

1,初始化T1为计数器模式,可以用8位自动重装,这儿设计到初值的计算,没计数100次中断一次
2,写中断服务程序,里面直接n++

5. 51单片机脉冲计数

你好!

那就用外部中断来检测吧,速度快精度高

void outside() interrupt 0
{
T0count++;
}
然后将计数,通过液晶显示出来就可

6. 用C51单片机统计脉冲次数

举例解答如下:
利用定时器T1,对外部脉冲(P3.5引脚输入)计数,
每输入200次脉冲产生一次中断,累加器+1,
选用T1,计数器模式,方式2(自动重装初值8位计数器),
TMOD
=0110
0000B
=60H
计数初值
=2^8
-200
=256
-200
=56d
=38H,
汇编程序如下:
;
;
主程序:
MAIN:
CLR
A
;
;
累加器清零
MOV
TMOD,
#60H
;
;置T1计数模式、方式2
MOV
TL1,
#38H
;
;
写入计数初值
MOV
TH1,
#38H
;
;
写入留待自动重装的初值
SETB
TR1
;
;
启动T1计数
SETB
ET1
;
;
允许T1中断
SETB
EB
;
;
CPU开中断
SJMP
$
;
;
等待一轮对外部脉冲计数溢出中断
;
;
以下是T1中断处理子程序:
T1_INT:
INC
A
;
;
累加器加1
RETI
;
;
中断返回

7. 51单片机如何用计数器检测脉冲信号(高低电平),程序怎么做!没有思路!

可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断。进入计数服务中断程序。

如果有脉冲信号,经过电容微分后,在下降沿会产生一个向下的尖端脉冲,电阻R2是作为一个偏置,当有向下的尖端脉冲来后,反相端的电压会低于同向端的电压。

从而比较器输出高电平,这个电路图要注意的两个参数是,1,比较器的选择,你可以选LM339,要加上拉电阻。

(7)51单片机脉冲计数程序扩展阅读:

通向输入端的那两个电阻是用来产生一个参考电压的,电容用来微分你的PWM波,你可以用示波器在反向输入端观察微分信号。

主程序中可根据不同运行状态调用部分子函数。需要开机按键设置时,优先执行按键程序,其它需要设置以后才能运行的子函数暂时不调用,减少单片机被占用过多。

设置后,不需要按键了,就不调用按键程序了。如果需要随时按键都要反应,可以把按键接到外部中断上,以中断方式响应按键,不受其他子函数影响。

8. 求51单片机1秒钟脉冲计数C语言程序

单片机的系统时间为晶振频率的12分之一,如果晶振是12兆赫兹,那么单片机最小系统时间就是1us,所以可以用_nop_();指令达到精确延时,这条语句执行1次系统时间,具体的网络下就行了。

至于你说的1s,时间比较长,不适合用定时器,那么可以用嵌套循环语句,for、while、do while,要注意循环时使用不同的变量类型,所消耗的时间也不同。网络下proteus,这个是能将keil生成的c工程文件进行软件仿真的一个软件,和multisim一样很简单,里面有示波器,用示波器看仿真时间,自己用循环和_nop_()指令凑1秒出来就行了

9. 求大神帮忙写个51单片机的接收脉冲程序。

用计数器T1的中断控制蜂鸣器发出1KHz音频
#include<reg51.h> // 包含51单片机寄存器定义的头文件
sbit sound=P3^7; //将sound位定义为P3.7引脚
/**************************************************************
函数功能:主函数
**************************************************************/
void main(void)
{
EA=1; //开总中断
ET1=1; //定时器T1中断允许
TMOD=0x10; //TMOD=0001 000B,使用定时器T1的模式1
TH1=(65536-921)/256; //定时器T1的高8位赋初值
TL1=(65536-921)%256; //定时器T1的高8位赋初值
TR1=1; //启动定时器T1
while(1)//无限循环等待中断
;
}
/**************************************************************
函数功能:定时器T1的中断服务程序
**************************************************************/
void Time1(void) interrupt 3 using 0 //“interrupt”声明函数为中断服务函数
{
sound=~sound;
TH1=(65536-921)/256; //定时器T1的高8位重新赋初值
TL1=(65536-921)%256; //定时器T1的高8位重新赋初值
}
改改 就成了你的

阅读全文

与51单片机脉冲计数程序相关的资料

热点内容
mifi热点共享文件夹 浏览:447
java图片转二进制 浏览:490
汽车加密封条保温吗 浏览:564
安卓平板怎么接hdmi信号 浏览:867
压缩气体的能量 浏览:836
北京市软件u盘加密 浏览:681
php循环curl 浏览:319
安卓手机如何把桌面软件放大 浏览:547
数据库文件夹无法删除 浏览:410
加密货币交易所成交量作假 浏览:337
打开应用加密时都有声音 浏览:121
能打开java文件 浏览:786
志愿服务器怎么使用 浏览:135
房贷解压预约怎么操作 浏览:200
苹果下载app内购买怎么弄 浏览:223
单片机按键的原理 浏览:423
安卓如何打开设置中的悬浮窗 浏览:603
择吉日用什么app 浏览:339
安卓转苹果王者什么时间完成 浏览:816
linux文本编码格式 浏览:666