1. 51单片机能否实现光电编码器的脉冲采集任务光电编码器转一圈是5000个脉冲。
51的处理能力应该不够,外加计数器不知道能不能行,我用16位飞思卡尔xs128单片机做的,将光电编码器接在计数器上,普通IO口不行
2. 用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
;
;
中断返回
3. 求大神帮忙写个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位重新赋初值
}
改改 就成了你的
4. 51单片机怎么产生外部脉冲
用外部中断,按一次加一,不能用外部中断控制计数器,这样不是加一,而是启动定时器,会加很多一。。。
5. 如何编程实现51单片机每隔 t 时间发出一个脉冲求C语言详细编程。。。
给你个基本框架,根据你的具体要求再修改吧。使用定时1中断实现,精度比较高。
#include <reg52.h>
#define PERIODH (65536l-10000l)/0X100 //设10ms中断1次TH1初值
#define PERIODL (65536l-10000l)%0X100 //设10ms中断1次TL1初值
sbit P1_1 = 0x91; //假设从P1.1输出脉冲
unsigned int iCount; //延时间隔时间变量
unsigned int iPulseCount; //脉冲脉宽时间变量
void timer1() interrupt 3 using 1
{//定时器每0.01秒一次中断
TH1 = PERIODH;
TL1 = PERIODL;
if(iCount)
{//计数未到0,计数器-1
iCount--;
}
if(iPulseCount)
{//计数未到0,计数器-1
iPulseCount--;
}
}
main()
{
TMOD = 0X10;//方式1
EA = 1;//总中断允许
ET1 = 1;//定时器1中断允许
TR1 = 1;//启动定时器1
P1_1 = 0; //脉冲输出端口,假设输出正脉冲,预置为低电平
while(1)
{
iCount = 200;//每间隔200*10ms = 2秒一个脉冲,t值变化改此处
while(iCount);//等待2秒中
P1_1 = 1; //置为高电平,输出正脉冲
iPulseCount = 10;//每间隔10*10ms = 100ms一个脉冲,脉宽变化改此处
while(iPulseCount);//高电平保持100ms
P1_1 = 0; //置为低电平,输出正脉冲结束
}
}
6. 如何用51系列单片机发射脉冲
51单片机本身就有两个自带的可编程定时器/计数器T1,T2有四种工作方式,只要写入控制字和设置记数初值,就可以输出不同频率的脉冲.51单片机的为6M
HZ,所以存入的值可以计算的为0F0H,选用方式1,控制字
MOV
TMOD,#01H
;选用方式1
MOV
TL0,#0F0H
;装入初值
SETB
TR0
;启动
SETB
ET0
;允许中断
SETB
EA
;CUP开放中断
7. 51单片机如何用计数器检测脉冲信号(高低电平),程序怎么做!没有思路!
可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断。进入计数服务中断程序。
如果有脉冲信号,经过电容微分后,在下降沿会产生一个向下的尖端脉冲,电阻R2是作为一个偏置,当有向下的尖端脉冲来后,反相端的电压会低于同向端的电压。
从而比较器输出高电平,这个电路图要注意的两个参数是,1,比较器的选择,你可以选LM339,要加上拉电阻。
(7)51单片机脉冲任务扩展阅读:
通向输入端的那两个电阻是用来产生一个参考电压的,电容用来微分你的PWM波,你可以用示波器在反向输入端观察微分信号。
主程序中可根据不同运行状态调用部分子函数。需要开机按键设置时,优先执行按键程序,其它需要设置以后才能运行的子函数暂时不调用,减少单片机被占用过多。
设置后,不需要按键了,就不调用按键程序了。如果需要随时按键都要反应,可以把按键接到外部中断上,以中断方式响应按键,不受其他子函数影响。
8. 51单片机处理接收的脉冲
核心的思想就是在一个时间段内计算脉冲的数量。可以用外部中断,有下降沿的时候找个标记位标记一下。程序外通过扫描标记位,对脉冲进行计数。
对脉冲计数的时候可以根据脉冲宽度进行一下过滤。脉冲的计数周期也需要根据脉冲输出特性进行调整。
9. 51单片机keil4中,怎么查看脉冲信号
1、首先打开51单片机进入到keil4中。
2、其次点击设置进入,然后找到多功能。
3、最后即可查看脉冲信号。