如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程。。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编程实现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; //置为低电平,输出正脉冲结束

参考技术A 100K的方波对51来说要求太高了,尽量不要用,这个程序如果频率不对,对
“TH0=0XF6;//初始值246”这句里的0xf6调整下,向上增加数值会提高精度。
/**************************
MCU:S52
crystal:24M
****************************/
#include<reg52.h>
sbit output=P1^0;//P1.0脚输出100K
void timer0_init()

TMOD=0X02;//定时器0方式2
TH0=0XF6;//初始值246
ET0=1;//开中断
EA=1;//开总中断
TR0=1;//开定时器0

void main()

timer0_init();
while(1);

void timer_isvof()interrupt 1

output=!output;//中断翻转

另外,虚机团上产品团购,超级便宜

关于使用STM32单片机完成脉冲计数功能的问题

如题,想需要使用STM32单片机完成脉冲计数功能,被计数的脉冲是每隔50ms左右发送一组脉冲群,我需要记录这组脉冲群的频率和脉宽,脉冲群计数结束后隔50ms左右后再重新对下一组脉冲群进行计数。最好有个例程供参考,谢谢!

interrupt 外部中断ISR()

定时器打开
T++;

interrupt 定时器中断()

关定时器;
time = 读取定时器值;
定时器初始化归零;

time 就是脉冲宽度;T就是脉冲数
具体实现就将我的汉字版翻译成你的C就行
参考技术A 用定时器计数,用中断就好,例程里有自己参考一下就好了。

以上是关于如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程。。。的主要内容,如果未能解决你的问题,请参考以下文章

单片机编程怎么使用C语言实现每隔一段时间执行一个函数???给我程序!!!急……急……

51单片机ALE引脚的控制(摘录)

51单片机实现频率测量控制实验

4.10 51单片机-使用计数器测量NE555脉冲频率

4.10 51单片机-使用计数器测量NE555脉冲频率

51单片机延时函数计算问题以及如何准确延时